> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ctrl-hub.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Get v3waste submissions

> Retrieve waste submissions (records of Digital Waste Tracking API calls) for the given organisation.



## OpenAPI

````yaml /api-reference/openapi.yaml get /v3/waste-submissions
openapi: 3.1.0
info:
  contact:
    email: support@ctrl-hub.com
    name: Ctrl Hub
    url: https://www.ctrl-hub.com
  description: >
    Ctrl Hub is the all-in-one platform for high-risk industries like utilities,
    construction, infrastructure, and renewables. We help teams manage
    everything from risk assessments and HAVS exposure to vehicle and equipment
    checks, with a guaranteed minimum of 200% ROI.
  license:
    name: MIT License
    url: https://opensource.org/licenses/MIT
  summary: An API for managing your compliance and risk posture
  termsOfService: https://www.ctrl-hub.com/terms-conditions
  title: Ctrl Hub
  version: 1.0.0
servers:
  - description: Production
    url: https://api.ctrl-hub.com
  - description: Staging
    url: https://api.ctrl-hub.dev
  - description: Development
    url: https://api.ctrl-hub.run
security: []
tags:
  - description: |
      Actions are follow-ups assigned to users and teams, produced manually or
      by domain producers such as the data-capture workflow runner.
    name: Actions
  - description: |
      Audit events are the events that are logged by the system.
    name: Audit Events
  - description: |
      View the platform's health and availability.
    name: Status
  - description: >
      User-owned dashboards composed of cards on a fixed-slot bento layout.
      Cards come from a per-domain registry; the API stores their config as
      opaque JSON.
    name: Dashboards
  - description: >
      A record of documents the platform generated and handed over, retained as
      evidence of what

      was issued. `subject_type` says what kind of records an export covers, and
      it is what decides

      how the request is authorised: there is no export permission of its own,
      so if you can see the

      records you can export them.
    name: Exports
  - description: >
      Scheduled delivery of a saved query's results, as a CSV attachment or a
      summary email. Every run is retained with the file it sent, so what a
      recipient received stays retrievable. A report runs as the person who
      created it, under their own access.
    name: Reports
  - description: |
      Manage appointments for work to be carried out with your customers
    name: Customer Appointments
  - description: |
      Manage interactions you have with your customers
    name: Customer Interactions
  - description: |
      Manage accounts for your customers
    name: Customer Accounts and Contacts
  - description: |
      Qualifications are the skills and knowledge that an organisation requires.
    name: Qualifications
  - description: |
      Workflows allow you to automate your processes.
    name: Workflows
  - description: |
      Manage documents
    name: Documents
  - description: |
      Manage documents
    name: Folders
  - description: |
      Manage documents
    name: Document Reviews
  - description: |
      Manage feature configurations for an organisation.
    name: Feature Configurations
  - description: |
      Equipment are the physical assets that an organisation manages.
    name: Equipment
  - description: |
      The central cost register: time-versioned rate codes for material, labour,
      contractor and miscellaneous spend, used to cost work against the job
      hierarchy.
    name: Costs
  - description: >
      Locations are places an organisation manages, optionally classified by a
      location type.
    name: Locations
  - description: |
      Manage your forms and their schemas
    name: Forms, Schemas and Categories
  - description: |
      Create and view form submissions
    name: Submissions
  - description: |
      View the roles available in the system.
    name: IAM Roles
  - description: >
      IAM role groups can be assigned to principals to manage authorisation
      centrally.
    name: IAM Role Groups
  - description: |
      Manage service accounts which can access the API programmatically.
    name: Service Accounts
  - description: |
      Manage bridges between organisations.
    name: Bridges
  - description: |
      Manage settings for an organisation.
    name: Settings
  - description: |
      Manage teams within an organisation.
    name: Teams
  - description: |
      Manage job roles within an organisation.
    name: Job Roles
  - description: |
      Manage users and accounts.
    name: Users
  - description: |
      Invite and manage invitations to organisations.
    name: Invitations
  - description: >
      IAM grants are the asignment of roles or permissions to principals to
      manage resource access.
    name: IAM Grants
  - description: |
      View the permissions available in the system.
    name: IAM Permissions
  - description: |
      SSO providers are the identity providers for an organisation.
    name: SSO Providers
  - description: |
      Whoami returns information about the currently authenticated principal.
    name: Whoami
  - description: |
      Manage your images
    name: Images
  - description: >
      AI agent personas that synthesise data into role-specific intelligent
      briefings.
    name: Agents
  - description: |
      Briefings generated by AI agents, including reasoning traces.
    name: Briefings
  - description: >
      Organisations are the center point for most resources in the platform.
      Most other endpoints are subresources of an organisation.
    name: Organisations
  - description: |
      Permits managements, integrated with street manager.
    name: Permits
  - description: |
      Projects manage your work and governance.
    name: Projects
  - description: >
      Import templates allow users to save and reuse their CSV importer
      configuration as named templates.
    name: Import Templates
  - description: |
      Properties are the physical locations.
    name: Properties
  - description: |
      Search across schemes, work orders, and operations.
    name: Search
  - description: |
      Provides the API specification in JSON and YAML formats
    name: Specifications
  - description: |
      Streets are the physical roads.
    name: Streets
  - description: |
      Integration with street manager
    name: Street Manager
  - description: |
      Vehicles are the physical vehicles that an organisation manages.
    name: Vehicles
  - description: >
      Scheme contracts (also known as regions) group schemes allocated from the
      network to a contractor.
    name: Scheme Contracts
  - description: >
      Scheme shares allow you to share your schemes with other organisations
      across bridges.
    name: Scheme Shares
  - description: |
      Schemes are large programmes of work
    name: Schemes
  - description: |
      Work orders the component parts of a scheme.
    name: Work Orders
  - description: |
      Operations are the work to be carried out within work orders.
    name: Operations
externalDocs:
  description: More documentation and resources
  url: https://docs.ctrl-hub.com
paths:
  /v3/waste-submissions:
    get:
      tags:
        - Waste Submissions
      description: >-
        Retrieve waste submissions (records of Digital Waste Tracking API calls)
        for the given organisation.
      operationId: ListWasteSubmissions
      parameters:
        - $ref: '#/components/parameters/limit'
        - $ref: '#/components/parameters/offset'
        - $ref: '#/components/parameters/waste_submissions_filter'
        - $ref: '#/components/parameters/waste_submissions_include'
      responses:
        '200':
          $ref: '#/components/responses/ListWasteSubmissions'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorised'
        '500':
          $ref: '#/components/responses/InternalServerError'
      security:
        - Session: []
        - Cookie: []
        - OAuth2: []
components:
  parameters:
    limit:
      name: limit
      in: query
      description: Limit the number of resources returned by the API
      required: false
      schema:
        type: integer
        format: int64
        minimum: 1
        default: 100
    offset:
      name: offset
      in: query
      description: Offset the resources returned by the API
      required: false
      schema:
        type: integer
        format: int64
        minimum: 0
        default: 0
    waste_submissions_filter:
      name: filter
      in: query
      description: >
        Filters the response data based on the value provided.


        Available filters:


        - `eq(id,xxx)`: Filter waste submissions by ID.

        - `eq(organisation,xxx)`: Filter waste submissions by organisation ID.

        - `eq(movement,xxx)`: Filter submissions by the movement they belong to.

        - `eq(status,xxx)`: Filter by submission status. One of `pending`,
        `submitting`, `submitted`, `failed`.

        - `eq(kind,xxx)`: Filter by submission kind. One of `receive-create`,
        `receive-amend`.

        - `eq(waste_tracking_id,xxx)`: Filter by the Digital Waste Tracking
        identifier.

        - `ge(created_at,xxx)` / `le(created_at,xxx)`: Filter by when the
        submission was created.
          Use the function-style `ge`/`le` operators (not `gte`/`lte`).

        For more information on using named filters, see [the
        docs](https://docs.ctrl-hub.com/api-reference/features#filtering)
      required: false
      schema:
        type: string
        default: ''
    waste_submissions_include:
      name: include
      in: query
      description: A comma separated list of related resources to include.
      required: false
      style: form
      explode: false
      schema:
        type: array
        items:
          type: string
          enum:
            - movement
  responses:
    ListWasteSubmissions:
      description: A list of waste submission records.
      headers:
        Content-Type:
          $ref: '#/components/headers/content-type'
        Content-Length:
          $ref: '#/components/headers/content-length'
        X-Request-ID:
          $ref: '#/components/headers/x-request-id'
      content:
        application/vnd.api+json:
          schema:
            allOf:
              - type: object
                required:
                  - data
                properties:
                  data:
                    title: A list of waste submission records
                    type: array
                    items:
                      $ref: '#/components/schemas/WasteSubmission'
                  included:
                    $ref: '#/components/schemas/WasteSubmissionIncludes'
              - $ref: '#/components/schemas/DocumentMeta'
              - $ref: '#/components/schemas/JSONAPI'
    BadRequest:
      description: >
        There was an error with the request - this could be due to an invalid
        body, query parameters,

        or headers that were sent to the API.
      headers:
        Content-Type:
          $ref: '#/components/headers/content-type'
        Content-Length:
          $ref: '#/components/headers/content-length'
        X-Request-ID:
          $ref: '#/components/headers/x-request-id'
      content:
        application/vnd.api+json:
          schema:
            type: object
            properties:
              errors:
                type: array
                items:
                  $ref: '#/components/schemas/Error'
          example:
            id: 98ca4a78-b66f-4234-9719-aaf832ee6669
            status: '400'
            title: A validation error was encountered
            source:
              parameter: include
            meta:
              resource: wrong_value
    Unauthorised:
      description: Authentication failed
      headers:
        Content-Type:
          $ref: '#/components/headers/content-type'
        Content-Length:
          $ref: '#/components/headers/content-length'
        X-Request-ID:
          $ref: '#/components/headers/x-request-id'
      content:
        application/vnd.api+json:
          schema:
            type: object
            properties:
              errors:
                type: array
                items:
                  $ref: '#/components/schemas/Error'
          example:
            id: 05fc9c8d-73b9-4697-9337-57f7a567a48f
            status: '401'
            title: You are not authorised to access this resource
            detail: In order to access this resource, you need the 'admin' role.
            code: AUTH.001
    InternalServerError:
      description: There was a problem handling the request on the server side
      headers:
        Content-Type:
          $ref: '#/components/headers/content-type'
        Content-Length:
          $ref: '#/components/headers/content-length'
        X-Request-ID:
          $ref: '#/components/headers/x-request-id'
      content:
        application/vnd.api+json:
          schema:
            type: object
            properties:
              errors:
                type: array
                items:
                  $ref: '#/components/schemas/Error'
          example:
            id: fe9d9a69-f0a7-4fdc-bb2c-176027f316c5
            status: '500'
            title: Internal Server Error
            detail: An unexpected error occurred on the server.
  headers:
    content-type:
      description: The content type of the response
      schema:
        type: string
      example: application/vnd.api+json
    content-length:
      description: The length of the response body in bytes
      schema:
        type: integer
        format: int32
      example: 1234
    x-request-id:
      description: >-
        An ID that can be provided when reporting bugs to help identify the
        issue
      schema:
        type: string
      example: 8470f56af4cf25e22be08e72c70dbbdc
  schemas:
    WasteSubmission:
      type: object
      description: >-
        An immutable record of a single Digital Waste Tracking API call for a
        movement.
      required:
        - id
        - type
        - attributes
        - meta
        - relationships
      properties:
        id:
          type: string
          format: uuid
          description: The unique identifier of the waste submission.
        type:
          type: string
          const: waste-submissions
        attributes:
          $ref: '#/components/schemas/WasteSubmissionAttributes'
        meta:
          $ref: '#/components/schemas/WasteSubmissionMeta'
        relationships:
          $ref: '#/components/schemas/WasteSubmissionRelationships'
    WasteSubmissionIncludes:
      type: array
      description: >-
        Related resources that can be included when a waste submission is
        returned
      items:
        discriminator:
          propertyName: type
          mapping:
            waste-movements:
              $ref: '#/components/schemas/WasteMovement'
        oneOf:
          - $ref: '#/components/schemas/WasteMovement'
    DocumentMeta:
      type: object
      description: Document level meta about the resources on the server in list endpoints.
      required:
        - meta
      properties:
        meta:
          type: object
          required:
            - pagination
          properties:
            features:
              $ref: '#/components/schemas/Features'
            pagination:
              $ref: '#/components/schemas/Pagination'
    JSONAPI:
      type: object
      description: JSON API response object
      required:
        - jsonapi
      properties:
        jsonapi:
          type: object
          required:
            - version
          properties:
            version:
              type: string
              description: The version of the JSON API specification
              examples:
                - '1.0'
    Error:
      type: object
      description: An error response
      properties:
        id:
          description: >-
            A unique identifier for this particular occurrence of the problem.
            If you encounter this, please provide us with the error ID and we
            can investigate it on our side.
          type: string
          format: uuid
          examples:
            - 05fc9c8d-73b9-4697-9337-57f7a567a48f
        status:
          description: >-
            The status code for the error. This might not match the HTTP status
            code if there are more that one errors to return with different
            status codes.
          type: string
          examples:
            - '401'
            - '500'
        title:
          description: A human readable title for the error.
          type: string
          examples:
            - You are not authorised to access this resource
        detail:
          description: >-
            Where there is more detail that we can provide outside of the title,
            we will provide it here.
          type: string
          examples:
            - In order to access this resource, you need the 'admin' role.
        code:
          description: >-
            A unique code for the error that may help us to diagnose the issue.
            Not all errors have codes, so this is usually empty.
          type: string
          examples:
            - AUTH.001
        source:
          description: A JSON object containing additional information about the error.
          type: object
          properties:
            pointer:
              description: >-
                A JSON Pointer to the value in the request that caused the
                error.
              type: string
              examples:
                - /data/attributes/email
            parameter:
              description: >-
                A string indicating which query parameter in the request caused
                the error.
              type: string
              examples:
                - include
      required:
        - id
        - status
        - title
    WasteSubmissionAttributes:
      type: object
      description: >
        Attributes of a waste submission: the frozen Defra-shaped payload
        captured when the submission was created, plus the response the Digital
        Waste Tracking service returned. Written by the service, never by a
        client.
      required:
        - kind
        - status
        - client_reference
        - date_time_received
        - waste_items
        - carrier
        - receiver
        - receipt_address
      properties:
        kind:
          type: string
          description: Which Digital Waste Tracking call this submission represents.
          enum:
            - receive-create
            - receive-amend
        client_reference:
          type: string
          format: uuid
          description: >-
            The movement's idempotency key, sent to Defra as
            yourUniqueReference.
        date_time_received:
          type: string
          format: date-time
          description: The date and time the waste was received (frozen).
        waste_items:
          type: array
          description: The waste streams as projected for Defra (frozen).
          items:
            $ref: '#/components/schemas/WasteItem'
        carrier:
          $ref: '#/components/schemas/WasteCarrier'
        broker_dealer:
          oneOf:
            - $ref: '#/components/schemas/WasteBrokerDealer'
            - type: 'null'
          description: The broker or dealer as projected for Defra (frozen), if any.
        receiver:
          $ref: '#/components/schemas/WasteReceiver'
        receipt_address:
          $ref: '#/components/schemas/WasteReceiptAddress'
        hazardous_waste_consignment_code:
          type:
            - string
            - 'null'
          description: The hazardous waste consignment code as projected (frozen).
        reason_for_no_consignment_code:
          type:
            - string
            - 'null'
          description: The reason no consignment code was provided (frozen).
        other_references:
          type: array
          description: Additional references as projected for Defra (frozen).
          items:
            $ref: '#/components/schemas/WasteOtherReference'
        special_handling_requirements:
          type:
            - string
            - 'null'
          description: Any special handling requirements as projected (frozen).
        status:
          type: string
          description: The status of this submission.
          enum:
            - pending
            - submitting
            - submitted
            - failed
        attempt_count:
          type: integer
          description: The number of send attempts made for this submission.
        last_error:
          type:
            - string
            - 'null'
          description: The last send error, if any.
        warnings:
          type: array
          description: The validation warnings the Digital Waste Tracking service returned.
          items:
            $ref: '#/components/schemas/WasteValidationWarning'
        waste_tracking_id:
          type:
            - string
            - 'null'
          description: The Digital Waste Tracking identifier Defra assigned.
        sent_at:
          type:
            - string
            - 'null'
          format: date-time
          description: When this submission was sent to Defra.
    WasteSubmissionMeta:
      type: object
      description: Metadata for a waste submission record.
      required:
        - created_at
        - updated_at
      properties:
        created_at:
          type: string
          format: date-time
          description: The date and time the submission was created.
        updated_at:
          type: string
          format: date-time
          description: The date and time the submission was last updated.
    WasteSubmissionRelationships:
      type: object
      description: Relationships for a waste submission record.
      required:
        - organisation
        - movement
      properties:
        organisation:
          type: object
          required:
            - data
          properties:
            data:
              $ref: '#/components/schemas/OrganisationRelationship'
        movement:
          type: object
          required:
            - data
          properties:
            data:
              $ref: '#/components/schemas/WasteMovementRelationship'
    WasteMovement:
      type: object
      description: A waste movement (Phase 1 populates the receipt of waste facet).
      required:
        - id
        - type
        - attributes
        - meta
        - relationships
      properties:
        id:
          type: string
          format: uuid
          description: The unique identifier of the waste movement.
        type:
          type: string
          const: waste-movements
        attributes:
          $ref: '#/components/schemas/WasteMovementAttributes'
        meta:
          $ref: '#/components/schemas/WasteMovementMeta'
        relationships:
          $ref: '#/components/schemas/WasteMovementRelationships'
    Features:
      type: object
      description: Represents feature configurations of the API
      properties:
        include:
          type: object
          properties:
            options:
              type: array
              items:
                type: string
                examples:
                  - related.resource
    Pagination:
      type: object
      description: Represents pagination details for API responses
      required:
        - counts
        - current_page
        - offsets
        - requested
      properties:
        counts:
          type: object
          required:
            - pages
            - resources
          properties:
            pages:
              type: integer
              examples:
                - 1
            resources:
              type: integer
              examples:
                - 1
        current_page:
          type: integer
          examples:
            - 1
        offsets:
          type: object
          required:
            - next
            - previous
          properties:
            next:
              type:
                - integer
                - 'null'
              examples:
                - null
            previous:
              type:
                - integer
                - 'null'
              examples:
                - null
        requested:
          type: object
          required:
            - limit
            - offset
          properties:
            limit:
              type: integer
              examples:
                - 10
            offset:
              type: integer
              examples:
                - 0
    WasteItem:
      type: object
      description: A single waste stream received as part of a waste movement.
      required:
        - ewc_codes
        - waste_description
        - physical_form
        - number_of_containers
        - type_of_containers
        - weight
        - contains_hazardous
        - contains_pops
      properties:
        ewc_codes:
          type: array
          description: The European Waste Catalogue codes classifying this waste.
          minItems: 1
          maxItems: 5
          items:
            type: string
        waste_description:
          type: string
          description: >-
            A description of the waste, including physical characteristics and
            hazard status.
        physical_form:
          type: string
          description: The physical form of the waste.
          enum:
            - Gas
            - Liquid
            - Solid
            - Powder
            - Sludge
            - Mixed
        number_of_containers:
          type: integer
          description: The number of containers the waste arrived in.
          minimum: 0
        type_of_containers:
          type: string
          description: The type of containers the waste arrived in.
        weight:
          $ref: '#/components/schemas/WasteWeight'
        contains_hazardous:
          type: boolean
          description: Whether the waste contains hazardous material.
        hazardous:
          oneOf:
            - $ref: '#/components/schemas/WasteHazardous'
            - type: 'null'
          description: Hazardous-waste detail. Required when contains_hazardous is true.
        contains_pops:
          type: boolean
          description: Whether the waste contains persistent organic pollutants.
        pops:
          oneOf:
            - $ref: '#/components/schemas/WastePops'
            - type: 'null'
          description: POPs detail. Required when contains_pops is true.
        disposal_or_recovery_codes:
          type: array
          description: The disposal or recovery codes applied to this waste, with weights.
          items:
            $ref: '#/components/schemas/WasteDisposalOrRecoveryCode'
      allOf:
        - if:
            properties:
              contains_hazardous:
                const: true
            required:
              - contains_hazardous
          then:
            properties:
              hazardous:
                $ref: '#/components/schemas/WasteHazardous'
            required:
              - hazardous
          else:
            properties:
              hazardous:
                type: 'null'
        - if:
            properties:
              contains_pops:
                const: true
            required:
              - contains_pops
          then:
            properties:
              pops:
                $ref: '#/components/schemas/WastePops'
            required:
              - pops
          else:
            properties:
              pops:
                type: 'null'
    WasteCarrier:
      type: object
      description: The waste carrier that transported the waste to the receiving site.
      required:
        - organisation_name
        - means_of_transport
      properties:
        organisation_name:
          type: string
          description: The registered name of the carrier organisation.
        registration_number:
          type:
            - string
            - 'null'
          description: The carrier's waste carrier registration number.
        reason_for_no_registration_number:
          type:
            - string
            - 'null'
          description: The reason a registration number is not provided.
          enum:
            - ON_SITE
            - HOUSEHOLD
            - ONE_OFF
            - MARINE
            - null
        means_of_transport:
          type: string
          description: The means by which the waste was transported.
          enum:
            - Road
            - Rail
            - Air
            - Sea
            - Inland Waterway
            - Piped
            - Other
        vehicle_registration:
          type:
            - string
            - 'null'
          description: The vehicle registration. Required when means_of_transport is Road.
        address:
          oneOf:
            - $ref: '#/components/schemas/WasteAddress'
            - type: 'null'
          description: The carrier's address.
        email_address:
          type:
            - string
            - 'null'
          description: The carrier's email address.
        phone_number:
          type:
            - string
            - 'null'
          description: The carrier's phone number.
      if:
        properties:
          means_of_transport:
            const: Road
        required:
          - means_of_transport
      then:
        properties:
          vehicle_registration:
            type: string
            minLength: 1
        required:
          - vehicle_registration
    WasteBrokerDealer:
      type: object
      description: An optional broker or dealer involved in the waste movement.
      required:
        - organisation_name
      properties:
        organisation_name:
          type: string
          description: The registered name of the broker or dealer organisation.
        registration_number:
          type:
            - string
            - 'null'
          description: The broker or dealer's registration number.
        role:
          type:
            - string
            - 'null'
          description: >
            Whether this party acted as a broker or a dealer on this movement.
            Captured for internal reporting only; it is not part of the Digital
            Waste Tracking projection.
          enum:
            - broker
            - dealer
            - null
        address:
          oneOf:
            - $ref: '#/components/schemas/WasteAddress'
            - type: 'null'
          description: The broker or dealer's address.
        email_address:
          type:
            - string
            - 'null'
          description: The broker or dealer's email address.
        phone_number:
          type:
            - string
            - 'null'
          description: The broker or dealer's phone number.
    WasteReceiver:
      type: object
      description: The site receiving the waste.
      required:
        - site_name
        - authorisation_number
      properties:
        site_name:
          type: string
          description: The name of the receiving site.
        authorisation_number:
          type: string
          description: The receiving site's permit or exemption (authorisation) number.
        email_address:
          type:
            - string
            - 'null'
          description: The receiving site's contact email address.
        phone_number:
          type:
            - string
            - 'null'
          description: The receiving site's contact phone number.
    WasteReceiptAddress:
      type: object
      description: A waste receipt location address.
      required:
        - full_address
        - postcode
      properties:
        full_address:
          type: string
          minLength: 1
          pattern: \S
          description: The full address, including building and street.
        postcode:
          type: string
          minLength: 1
          pattern: \S
          description: The postcode of the receipt location.
    WasteOtherReference:
      type: object
      description: >-
        An additional reference for the waste movement (e.g. a weighbridge
        ticket).
      required:
        - label
        - reference
      properties:
        label:
          type: string
          description: A label describing the reference.
        reference:
          type: string
          description: The reference value.
    WasteValidationWarning:
      type: object
      description: >-
        A validation warning returned by the Digital Waste Tracking service for
        a movement.
      required:
        - key
        - error_type
        - message
      properties:
        key:
          type: string
          description: The field or rule the warning relates to.
        error_type:
          type: string
          description: The category of the warning.
        message:
          type: string
          description: A human-readable description of the warning.
    OrganisationRelationship:
      type: object
      description: Represents a relationship to an organisation
      required:
        - id
        - type
      properties:
        id:
          type: string
          format: uuid
          description: The unique identifier of the organisation
        type:
          type: string
          const: organisations
    WasteMovementRelationship:
      type: object
      description: Represents a relationship to a waste movement
      required:
        - id
        - type
      properties:
        id:
          type: string
          format: uuid
          description: The unique identifier of the waste movement
        type:
          type: string
          const: waste-movements
    WasteMovementAttributes:
      type: object
      description: >
        Attributes of a waste movement. The movement references its parties only
        by relationship; party identity is frozen onto a waste submission at
        projection time. Submission state (status, warnings, waste tracking id)
        lives on the waste submission, not here.
      required:
        - client_reference
        - date_time_received
        - waste_items
      properties:
        client_reference:
          type: string
          format: uuid
          description: >
            A client-generated UUID identifying this movement. Used as the
            idempotency key for retry-safe creation and sent to the Digital
            Waste Tracking service as yourUniqueReference for traceability.
        date_time_received:
          type: string
          format: date-time
          description: The date and time the waste was received.
        waste_items:
          type: array
          description: The waste streams received in this movement.
          minItems: 1
          items:
            $ref: '#/components/schemas/WasteItem'
        ewc_codes:
          type: array
          readOnly: true
          description: >-
            The union of all EWC codes across the movement's waste items.
            Derived; used for filtering.
          items:
            type: string
        means_of_transport:
          type: string
          description: >
            The means of transport used for this movement. Defaults from the
            linked carrier catalogue record at capture and may be overridden per
            movement.
        vehicle_registration:
          type:
            - string
            - 'null'
          description: The registration of the specific vehicle used for this movement.
        broker_role:
          type:
            - string
            - 'null'
          description: >
            Whether the linked broker acted as a broker or a dealer on this
            movement. Captured for our reporting; Defra models a single combined
            broker/dealer party.
          enum:
            - broker
            - dealer
            - null
        receipt_address:
          oneOf:
            - $ref: '#/components/schemas/WasteReceiptAddress'
            - type: 'null'
          description: >
            An optional per-movement override of the receipt location address.
            When omitted the receiving site's address is used at projection
            time.
        hazardous_waste_consignment_code:
          type:
            - string
            - 'null'
          description: The hazardous waste consignment code, where applicable.
        reason_for_no_consignment_code:
          type:
            - string
            - 'null'
          description: The reason no consignment code is provided.
          enum:
            - Non-Haz Waste Transfer
            - No documentation provided with Waste
            - Household Waste Recycling Centre Receipt
            - null
        other_references:
          type: array
          description: Additional references for the movement (e.g. weighbridge tickets).
          items:
            $ref: '#/components/schemas/WasteOtherReference'
        special_handling_requirements:
          type:
            - string
            - 'null'
          description: Any special handling requirements for the waste.
    WasteMovementMeta:
      type: object
      description: Metadata for a waste movement.
      required:
        - created_at
        - updated_at
      properties:
        created_at:
          type: string
          format: date-time
          description: The date and time the movement was created.
        updated_at:
          type: string
          format: date-time
          description: The date and time the movement was last updated.
    WasteMovementRelationships:
      type: object
      description: >
        Relationships for a waste movement. `broker`, `carrier` and
        `receiver_site` link the

        movement to its reusable party catalogue records so movements can be
        reported on by

        stable party identity. They are optional and additive: a movement may
        have no broker,

        and legacy movements may carry no catalogue link at all. Party identity
        is frozen onto

        a waste submission at projection time, not held inline, so the movement
        references the

        live catalogue records. `submissions` links the movement to its waste
        submissions (one

        per Defra API call); the latest submission carries the current status.
      required:
        - organisation
      properties:
        organisation:
          type: object
          required:
            - data
          properties:
            data:
              $ref: '#/components/schemas/OrganisationRelationship'
        broker:
          type: object
          properties:
            data:
              $ref: '#/components/schemas/WasteBrokerRelationship'
        carrier:
          type: object
          properties:
            data:
              $ref: '#/components/schemas/WasteCarrierRelationship'
        receiver_site:
          type: object
          properties:
            data:
              $ref: '#/components/schemas/WasteSiteRelationship'
        submissions:
          type: object
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/WasteSubmissionRelationship'
    WasteWeight:
      type: object
      description: A quantity of waste with its unit of measurement.
      required:
        - metric
        - amount
        - is_estimate
      properties:
        metric:
          type: string
          description: The unit of measurement for the weight.
          enum:
            - Grams
            - Kilograms
            - Tonnes
        amount:
          type: number
          description: The weight amount, in the given metric.
          minimum: 0
        is_estimate:
          type: boolean
          description: Whether the weight is an estimate rather than a measured value.
    WasteHazardous:
      type: object
      description: Hazardous-waste detail for a waste item.
      required:
        - source_of_components
        - components
      properties:
        source_of_components:
          type: string
          description: The source of the component information.
          enum:
            - NOT_PROVIDED
            - PROVIDED_WITH_WASTE
            - GUIDANCE
            - OWN_TESTING
        haz_codes:
          type: array
          description: The hazardous property codes that apply (e.g. HP_1).
          items:
            type: string
        components:
          type: array
          description: The hazardous components present in the waste.
          items:
            $ref: '#/components/schemas/WasteHazardousComponent'
    WastePops:
      type: object
      description: Persistent organic pollutant (POP) detail for a waste item.
      required:
        - source_of_components
      properties:
        source_of_components:
          type: string
          description: The source of the component information.
          enum:
            - NOT_PROVIDED
            - PROVIDED_WITH_WASTE
            - GUIDANCE
            - OWN_TESTING
        components:
          type: array
          description: The persistent organic pollutants present in the waste.
          items:
            $ref: '#/components/schemas/WastePopsComponent'
    WasteDisposalOrRecoveryCode:
      type: object
      description: >-
        A disposal (D) or recovery (R) code applied to a waste item, with the
        weight it accounts for.
      required:
        - code
        - weight
      properties:
        code:
          type: string
          description: The disposal or recovery code (D1 to D15, or R1 to R13).
          pattern: ^(D[1-9]|D1[0-5]|R[1-9]|R1[0-3])$
        weight:
          $ref: '#/components/schemas/WasteWeight'
    WasteAddress:
      type: object
      description: A postal address for a waste carrier or broker/dealer (may be non-UK).
      required:
        - full_address
      properties:
        full_address:
          type: string
          minLength: 1
          pattern: \S
          description: The full address, including building and street.
        postcode:
          type:
            - string
            - 'null'
          description: The postcode. May be absent for non-UK addresses.
    WasteBrokerRelationship:
      type: object
      description: Represents a relationship to a waste broker catalogue record
      required:
        - id
        - type
      properties:
        id:
          type: string
          format: uuid
          description: The unique identifier of the waste broker
        type:
          type: string
          const: waste-brokers
    WasteCarrierRelationship:
      type: object
      description: Represents a relationship to a waste carrier catalogue record
      required:
        - id
        - type
      properties:
        id:
          type: string
          format: uuid
          description: The unique identifier of the waste carrier
        type:
          type: string
          const: waste-carriers
    WasteSiteRelationship:
      type: object
      description: >-
        Represents a relationship to a waste site (the receiving site catalogue
        record)
      required:
        - id
        - type
      properties:
        id:
          type: string
          format: uuid
          description: The unique identifier of the waste site
        type:
          type: string
          const: waste-sites
    WasteSubmissionRelationship:
      type: object
      description: Represents a relationship to a waste submission
      required:
        - id
        - type
      properties:
        id:
          type: string
          format: uuid
          description: The unique identifier of the waste submission
        type:
          type: string
          const: waste-submissions
    WasteHazardousComponent:
      type: object
      description: A hazardous chemical or biological component of a waste item.
      required:
        - name
      properties:
        name:
          type: string
          description: The name of the chemical or biological component.
        concentration:
          type: number
          description: The concentration of the component, in mg/kg.
          minimum: 0
    WastePopsComponent:
      type: object
      description: A persistent organic pollutant (POP) present in a waste item.
      required:
        - name
      properties:
        name:
          type: string
          description: The name of the persistent organic pollutant.
        concentration:
          type: number
          description: The concentration of the POP, in mg/kg.
          minimum: 0
  securitySchemes:
    Session:
      description: |
        Session token for authentication.
      in: header
      name: X-Session-Token
      type: apiKey
    Cookie:
      description: |
        Cookie token for authentication.
      in: cookie
      name: ctrl_hub_session
      type: apiKey
    OAuth2:
      description: |
        OAuth2 token for authentication.
      flows:
        clientCredentials:
          scopes: {}
          tokenUrl: https://auth.ctrl-hub.com/oauth2/token
      type: oauth2

````