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

# Update a delivery



## OpenAPI

````yaml /openapi.json patch /deliveries/{id}
openapi: 3.1.0
info:
  title: Cula Tracking API
  version: 0.3.10
servers:
  - url: https://api.demo.cula.earth/tracking/v1
security: []
tags:
  - name: Organisations
    description: ''
  - name: Sites
    description: ''
  - name: Machines
    description: ''
  - name: Machine Variables
    description: ''
  - name: Machine Data Imports
    description: ''
  - name: Delivery Configs
    description: ''
  - name: Deliveries
    description: ''
  - name: Material Sourcing Configs
    description: ''
  - name: Material Sourcings
    description: ''
  - name: Material Conversion Configs
    description: ''
  - name: Material Conversions
    description: ''
  - name: Material Utilization Configs
    description: ''
  - name: Material Utilizations
    description: ''
  - name: Material Batches
    description: ''
  - name: Material Pools
    description: ''
  - name: Material Containers
    description: ''
  - name: Sinks
    description: ''
  - name: Documents
    description: ''
  - name: Webhooks
    description: ''
paths:
  /deliveries/{id}:
    patch:
      tags:
        - Deliveries
      summary: Update a delivery
      parameters:
        - name: Cula-Organisation-Id
          in: header
          description: >-
            ID of the organisation the request operates on behalf of (e.g.
            `org_...`). Must be an organisation the API client has access to.
          required: true
          schema:
            type: string
            example: org_01k83mfmhgchya944v86ryvhpq
        - name: id
          required: true
          in: path
          schema:
            type: string
            example: dlv_01k204p7hghzdtwjb3n48s5fs5
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchDeliveryRequest'
      responses:
        '200':
          description: The updated delivery.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeliveryResponse'
        '400':
          description: Invalid request payload or parameters.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                code: bad_request
                message: The field limit must not be greater than 100.
        '401':
          description: Missing or invalid access token.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                code: unauthorized
                message: Invalid or expired token
        '404':
          description: Resource not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                code: not_found
                message: >-
                  Resource with ID xyz_01k56g7aec6dt5zrtamc72vw446 could not be
                  found.
        '409':
          description: Conflicting resource state.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                code: conflict
                message: >-
                  There exists already an object with external ID MY-CUSTOM-ID
                  within this organisation.
        '500':
          description: Unexpected server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                code: internal_server_error
                message: Internal server error.
        '501':
          description: The request uses a feature the API does not support yet.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - AccessToken: []
components:
  schemas:
    PatchDeliveryRequest:
      type: object
      properties:
        status:
          type: string
          enum:
            - finished
          description: >-
            Target lifecycle status: `finished` finishes a draft delivery.
            Finished deliveries cannot be changed back to `draft`.
          example: finished
        occurred_at:
          type: string
          format: date-time
          example: '2026-01-15T08:00:00Z'
          description: >-
            When the delivery took place: an ISO 8601 date-time with an explicit
            UTC offset (`Z` or `±hh:mm`). Requires the delivery to be a draft.
        legs:
          minItems: 1
          maxItems: 1
          description: >-
            The transport legs of the delivery, in full and in travel order —
            reconciled by leg `id`: a named leg is updated in place, an entry
            without `id` adds a leg, and a leg absent from the array is removed.
            Requires the delivery to be a draft.
          type: array
          items:
            $ref: '#/components/schemas/PatchDeliveryLegInput'
        external_id:
          type: string
          example: MY-CUSTOM-ID
          description: >-
            A optional custom ID that can be set to an internal ID from your
            system. This ID must be unique within all objects of the
            organisation you operate in. You can later use this external ID to
            reference and query this object. Be aware that you can update this
            ID later. If you need an immutable ID, use the object ID returned
            when creating the object. Pass null to remove it.
          nullable: true
          maxLength: 100
          minLength: 1
          pattern: ^[A-Za-z0-9\-_]+$
        data_points:
          maxItems: 100
          description: >-
            Values for data points of the delivery configuration. Partial: only
            the listed data points change. Requires the delivery to be a draft.
          type: array
          items:
            $ref: '#/components/schemas/DataPointInput'
        payload_containers:
          type: array
          items:
            oneOf:
              - $ref: '#/components/schemas/PatchContainerInput'
                title: Existing Container
              - $ref: '#/components/schemas/NewContainerInput'
                title: New Container
          maxItems: 100
          description: >-
            The payload containers of the delivery. Only applicable to
            non-unified configs: the full array replaces the payload — an item
            with `id` keeps the container and updates the listed data points, an
            item with `config_id` creates it, and a container absent from the
            array is removed. Requires the delivery to be a draft.
    DeliveryResponse:
      type: object
      properties:
        id:
          type: string
          example: dlv_01k204p7hghzdtwjb3n48s5fs5
          description: The ID of the delivery.
        config_id:
          type: string
          example: dlvc_01kkygy9cxxqhhr93aw74aycbr
          description: The ID of the delivery config the delivery was created from.
        config_version_id:
          type: string
          example: dlvcv_01kkw6g3ayad6f092rbkbjcaxq
          description: >-
            The ID of the exact delivery config version the delivery was created
            from.
        external_id:
          type: string
          nullable: true
          example: MY-CUSTOM-ID
          description: Optional external ID of the delivery.
        display_id:
          type: string
          example: D-148
          description: >-
            Human-readable, server-generated identifier scoped to the issuing
            site.
        status:
          description: >-
            Lifecycle status. `draft` deliveries are still being prepared and
            may be missing data point values, payload or leg sites; `finished`
            deliveries are complete.
          example: finished
          allOf:
            - $ref: '#/components/schemas/DeliveryStatus'
        site:
          description: The site that issued the delivery (owns its config).
          allOf:
            - $ref: '#/components/schemas/SiteRef'
        legs:
          description: The transport legs of the delivery, in order.
          type: array
          items:
            $ref: '#/components/schemas/DeliveryLeg'
        occurred_at:
          type: string
          format: date-time
          example: '2026-01-15T08:00:00Z'
          description: When the delivery took place.
        created_at:
          type: string
          format: date-time
          example: '2026-01-15T08:00:00Z'
          description: When the delivery was recorded in Cula.
        data_points:
          type: array
          items:
            oneOf:
              - $ref: '#/components/schemas/ShortTextDataPoint'
                title: short_text
              - $ref: '#/components/schemas/LongTextDataPoint'
                title: long_text
              - $ref: '#/components/schemas/MultiTextDataPoint'
                title: multi_text
              - $ref: '#/components/schemas/NumberDataPoint'
                title: number
              - $ref: '#/components/schemas/PercentageDataPoint'
                title: percentage
              - $ref: '#/components/schemas/AmountDataPoint'
                title: amount
              - $ref: '#/components/schemas/TimestampDataPoint'
                title: timestamp
              - $ref: '#/components/schemas/DurationDataPoint'
                title: duration
              - $ref: '#/components/schemas/BooleanDataPoint'
                title: boolean
              - $ref: '#/components/schemas/MaterialDataPoint'
                title: material
              - $ref: '#/components/schemas/MaterialBatchIdDataPoint'
                title: material_batch
              - $ref: '#/components/schemas/ContainerTypeDataPoint'
                title: container_type
              - $ref: '#/components/schemas/MaterialPoolDataPoint'
                title: material_pool
            discriminator:
              propertyName: type
              mapping:
                short_text:
                  $ref: '#/components/schemas/ShortTextDataPoint'
                long_text:
                  $ref: '#/components/schemas/LongTextDataPoint'
                multi_text:
                  $ref: '#/components/schemas/MultiTextDataPoint'
                number:
                  $ref: '#/components/schemas/NumberDataPoint'
                percentage:
                  $ref: '#/components/schemas/PercentageDataPoint'
                amount:
                  $ref: '#/components/schemas/AmountDataPoint'
                timestamp:
                  $ref: '#/components/schemas/TimestampDataPoint'
                duration:
                  $ref: '#/components/schemas/DurationDataPoint'
                boolean:
                  $ref: '#/components/schemas/BooleanDataPoint'
                material:
                  $ref: '#/components/schemas/MaterialDataPoint'
                material_batch:
                  $ref: '#/components/schemas/MaterialBatchIdDataPoint'
                container_type:
                  $ref: '#/components/schemas/ContainerTypeDataPoint'
                material_pool:
                  $ref: '#/components/schemas/MaterialPoolDataPoint'
          description: Data points set on the delivery itself.
        payload_containers:
          description: The material containers carried by the delivery.
          type: array
          items:
            $ref: '#/components/schemas/Container'
        payload:
          deprecated: true
          description: Use `payload_containers` instead.
          type: array
          items:
            $ref: '#/components/schemas/DeliveryPayloadContainer'
      required:
        - id
        - config_id
        - config_version_id
        - external_id
        - display_id
        - status
        - site
        - legs
        - occurred_at
        - created_at
        - data_points
        - payload_containers
        - payload
    Error:
      type: object
      properties:
        code:
          type: string
          example: bad_request
        message:
          type: string
          example: The field limit must not be greater than 100.
      required:
        - code
        - message
    PatchDeliveryLegInput:
      type: object
      properties:
        sender_site:
          description: >-
            The site this leg ships from — reference it either by its ID or by
            its external ID, but not both. Required for `finished` deliveries.
          oneOf:
            - $ref: '#/components/schemas/SiteRefInput'
            - $ref: '#/components/schemas/SiteExternalIdReference'
        receiver_site:
          description: >-
            The site this leg ships to — reference it either by its ID or by its
            external ID, but not both. Required for `finished` deliveries.
          oneOf:
            - $ref: '#/components/schemas/SiteRefInput'
            - $ref: '#/components/schemas/SiteExternalIdReference'
        id:
          type: string
          example: dll_01kjjkhkr6azkf10qx8te8ztv6
          description: >-
            The leg to update — it keeps its identity and settings. Omitted to
            add a new leg; a leg absent from the array is removed.
      description: One leg of the itinerary to state.
    DataPointInput:
      type: object
      properties:
        config_id:
          type: string
          example: dptc_01jxdp05c8r7dp4xf89pxcw28q
          description: The ID of the data point config to submit a value for.
        value:
          oneOf:
            - type: string
            - type: number
            - type: boolean
            - type: array
              items:
                type: string
            - type: object
              required:
                - value
                - unit
              properties:
                value:
                  type: number
                unit:
                  type: string
          description: >-
            The value to submit. Must match the value format of the data point
            config's `type` and satisfy the config's `validation` rules and
            `options` (if any).
        input_value:
          oneOf:
            - type: string
            - type: number
            - type: boolean
            - type: array
              items:
                type: string
            - type: object
              required:
                - value
                - unit
              properties:
                value:
                  type: number
                unit:
                  type: string
          deprecated: true
          description: '@deprecated Use `value` instead.'
      description: A value to submit for a data point.
      required:
        - config_id
        - value
    PatchContainerInput:
      type: object
      properties:
        id:
          type: string
          example: mcn_01kqz4g5cjzvwsnnps6q7183q3
        data_points:
          maxItems: 100
          description: >-
            Values for the container's data points. Partial: only the listed
            data points change.
          type: array
          items:
            $ref: '#/components/schemas/DataPointInput'
      description: >-
        References an existing payload container by its ID, optionally updating
        the listed data points.
      required:
        - id
    NewContainerInput:
      type: object
      properties:
        config_id:
          type: string
          example: mcnc_01k102qfrwthwk6dsggr9y8evn
          description: The ID of the container config to base the container on.
        data_points:
          maxItems: 100
          description: >-
            Values for the container's data points, validated against the
            container config's data point configs.
          type: array
          items:
            $ref: '#/components/schemas/DataPointInput'
      description: >-
        Describes a new container to create, based on one of the container
        configs the flow's config lists.
      required:
        - config_id
    DeliveryStatus:
      type: string
      enum:
        - draft
        - finished
    SiteRef:
      type: object
      properties:
        id:
          type: string
          example: ste_01k8g7aec6dt5zrtamc72ww446
          description: The ID of the site.
        external_id:
          type: string
          nullable: true
          example: SITE-EXT-0001
          description: Optional external ID of the site.
      description: Reference to a site.
      required:
        - id
        - external_id
    DeliveryLeg:
      type: object
      properties:
        id:
          type: string
          example: dll_01kjjkhkr6azkf10qx8te8ztv6
          description: The ID of the delivery leg.
        sender_site:
          nullable: true
          description: >-
            The site this leg ships from. `null` while a draft is missing its
            sender.
          type: object
          allOf:
            - $ref: '#/components/schemas/SiteRef'
        receiver_site:
          nullable: true
          description: >-
            The site this leg ships to. `null` while a draft is missing its
            receiver.
          type: object
          allOf:
            - $ref: '#/components/schemas/SiteRef'
      description: One transport leg of a delivery.
      required:
        - id
        - sender_site
        - receiver_site
    ShortTextDataPoint:
      type: object
      properties:
        config_id:
          type: string
          example: dptc_01jxdp05c8r7dp4xf89pxcw28q
          description: The ID of the data point config this value belongs to.
        config_version_id:
          type: string
          example: dptcv_01kfxe6xgmw15gsf204jwj90g5
          description: >-
            The ID of the data point config version the value was recorded
            against.
        name:
          type: string
          example: Weight gross
          description: The human-readable name of the data point as it appears in the UI.
        type:
          type: string
          enum:
            - short_text
          description: The type of the data point. Determines the format of its values.
        value:
          type: string
          nullable: true
          description: >-
            The value of the data point. For derived data points this is the
            computed result.
        input_value:
          type: string
          nullable: true
          deprecated: true
          description: '@deprecated Use `value` instead. The value as it was submitted.'
        result_value:
          type: string
          nullable: true
          deprecated: true
          description: >-
            @deprecated Use `value` instead. The effective value of the data
            point, mirroring `value`.
      description: Data point holding a single line of text.
      required:
        - config_id
        - config_version_id
        - name
        - type
        - value
        - input_value
        - result_value
    LongTextDataPoint:
      type: object
      properties:
        config_id:
          type: string
          example: dptc_01jxdp05c8r7dp4xf89pxcw28q
          description: The ID of the data point config this value belongs to.
        config_version_id:
          type: string
          example: dptcv_01kfxe6xgmw15gsf204jwj90g5
          description: >-
            The ID of the data point config version the value was recorded
            against.
        name:
          type: string
          example: Weight gross
          description: The human-readable name of the data point as it appears in the UI.
        type:
          type: string
          enum:
            - long_text
          description: The type of the data point. Determines the format of its values.
        value:
          type: string
          nullable: true
          description: >-
            The value of the data point. For derived data points this is the
            computed result.
        input_value:
          type: string
          nullable: true
          deprecated: true
          description: '@deprecated Use `value` instead. The value as it was submitted.'
        result_value:
          type: string
          nullable: true
          deprecated: true
          description: >-
            @deprecated Use `value` instead. The effective value of the data
            point, mirroring `value`.
      description: Data point holding multiple lines of text.
      required:
        - config_id
        - config_version_id
        - name
        - type
        - value
        - input_value
        - result_value
    MultiTextDataPoint:
      type: object
      properties:
        config_id:
          type: string
          example: dptc_01jxdp05c8r7dp4xf89pxcw28q
          description: The ID of the data point config this value belongs to.
        config_version_id:
          type: string
          example: dptcv_01kfxe6xgmw15gsf204jwj90g5
          description: >-
            The ID of the data point config version the value was recorded
            against.
        name:
          type: string
          example: Weight gross
          description: The human-readable name of the data point as it appears in the UI.
        type:
          type: string
          enum:
            - multi_text
          description: The type of the data point. Determines the format of its values.
        value:
          nullable: true
          description: >-
            The value of the data point. For derived data points this is the
            computed result.
          type: array
          items:
            type: string
        input_value:
          nullable: true
          deprecated: true
          description: '@deprecated Use `value` instead. The value as it was submitted.'
          type: array
          items:
            type: string
        result_value:
          nullable: true
          deprecated: true
          description: >-
            @deprecated Use `value` instead. The effective value of the data
            point, mirroring `value`.
          type: array
          items:
            type: string
      description: Data point holding multiple text items.
      required:
        - config_id
        - config_version_id
        - name
        - type
        - value
        - input_value
        - result_value
    NumberDataPoint:
      type: object
      properties:
        config_id:
          type: string
          example: dptc_01jxdp05c8r7dp4xf89pxcw28q
          description: The ID of the data point config this value belongs to.
        config_version_id:
          type: string
          example: dptcv_01kfxe6xgmw15gsf204jwj90g5
          description: >-
            The ID of the data point config version the value was recorded
            against.
        name:
          type: string
          example: Weight gross
          description: The human-readable name of the data point as it appears in the UI.
        type:
          type: string
          enum:
            - number
          description: The type of the data point. Determines the format of its values.
        value:
          type: number
          nullable: true
          description: >-
            The value of the data point. For derived data points this is the
            computed result.
        input_value:
          type: number
          nullable: true
          deprecated: true
          description: '@deprecated Use `value` instead. The value as it was submitted.'
        result_value:
          type: number
          nullable: true
          deprecated: true
          description: >-
            @deprecated Use `value` instead. The effective value of the data
            point, mirroring `value`.
      description: Data point holding a number.
      required:
        - config_id
        - config_version_id
        - name
        - type
        - value
        - input_value
        - result_value
    PercentageDataPoint:
      type: object
      properties:
        config_id:
          type: string
          example: dptc_01jxdp05c8r7dp4xf89pxcw28q
          description: The ID of the data point config this value belongs to.
        config_version_id:
          type: string
          example: dptcv_01kfxe6xgmw15gsf204jwj90g5
          description: >-
            The ID of the data point config version the value was recorded
            against.
        name:
          type: string
          example: Weight gross
          description: The human-readable name of the data point as it appears in the UI.
        type:
          type: string
          enum:
            - percentage
          description: The type of the data point. Determines the format of its values.
        value:
          type: number
          nullable: true
          description: >-
            The value of the data point. For derived data points this is the
            computed result.
        input_value:
          type: number
          nullable: true
          deprecated: true
          description: '@deprecated Use `value` instead. The value as it was submitted.'
        result_value:
          type: number
          nullable: true
          deprecated: true
          description: >-
            @deprecated Use `value` instead. The effective value of the data
            point, mirroring `value`.
      description: Data point holding a percentage (0..1 scale).
      required:
        - config_id
        - config_version_id
        - name
        - type
        - value
        - input_value
        - result_value
    AmountDataPoint:
      type: object
      properties:
        config_id:
          type: string
          example: dptc_01jxdp05c8r7dp4xf89pxcw28q
          description: The ID of the data point config this value belongs to.
        config_version_id:
          type: string
          example: dptcv_01kfxe6xgmw15gsf204jwj90g5
          description: >-
            The ID of the data point config version the value was recorded
            against.
        name:
          type: string
          example: Weight gross
          description: The human-readable name of the data point as it appears in the UI.
        type:
          type: string
          enum:
            - amount
          description: The type of the data point. Determines the format of its values.
        value:
          nullable: true
          description: >-
            The value of the data point. For derived data points this is the
            computed result.
          type: object
          allOf:
            - $ref: '#/components/schemas/AmountValue'
        input_value:
          nullable: true
          deprecated: true
          description: '@deprecated Use `value` instead. The value as it was submitted.'
          type: object
          allOf:
            - $ref: '#/components/schemas/AmountValue'
        result_value:
          nullable: true
          deprecated: true
          description: >-
            @deprecated Use `value` instead. The effective value of the data
            point, mirroring `value`.
          type: object
          allOf:
            - $ref: '#/components/schemas/AmountValue'
      description: Data point holding an amount, i.e. a combination of a value and a unit.
      required:
        - config_id
        - config_version_id
        - name
        - type
        - value
        - input_value
        - result_value
    TimestampDataPoint:
      type: object
      properties:
        config_id:
          type: string
          example: dptc_01jxdp05c8r7dp4xf89pxcw28q
          description: The ID of the data point config this value belongs to.
        config_version_id:
          type: string
          example: dptcv_01kfxe6xgmw15gsf204jwj90g5
          description: >-
            The ID of the data point config version the value was recorded
            against.
        name:
          type: string
          example: Weight gross
          description: The human-readable name of the data point as it appears in the UI.
        type:
          type: string
          enum:
            - timestamp
          description: The type of the data point. Determines the format of its values.
        value:
          type: string
          format: date-time
          nullable: true
          description: >-
            The value of the data point. For derived data points this is the
            computed result.
        input_value:
          type: string
          format: date-time
          nullable: true
          deprecated: true
          description: '@deprecated Use `value` instead. The value as it was submitted.'
        result_value:
          type: string
          format: date-time
          nullable: true
          deprecated: true
          description: >-
            @deprecated Use `value` instead. The effective value of the data
            point, mirroring `value`.
      description: Data point holding a timestamp (ISO 8601 string).
      required:
        - config_id
        - config_version_id
        - name
        - type
        - value
        - input_value
        - result_value
    DurationDataPoint:
      type: object
      properties:
        config_id:
          type: string
          example: dptc_01jxdp05c8r7dp4xf89pxcw28q
          description: The ID of the data point config this value belongs to.
        config_version_id:
          type: string
          example: dptcv_01kfxe6xgmw15gsf204jwj90g5
          description: >-
            The ID of the data point config version the value was recorded
            against.
        name:
          type: string
          example: Weight gross
          description: The human-readable name of the data point as it appears in the UI.
        type:
          type: string
          enum:
            - duration
          description: The type of the data point. Determines the format of its values.
        value:
          type: number
          nullable: true
          description: >-
            The value of the data point. For derived data points this is the
            computed result.
        input_value:
          type: number
          nullable: true
          deprecated: true
          description: '@deprecated Use `value` instead. The value as it was submitted.'
        result_value:
          type: number
          nullable: true
          deprecated: true
          description: >-
            @deprecated Use `value` instead. The effective value of the data
            point, mirroring `value`.
      description: Data point holding a duration in milliseconds.
      required:
        - config_id
        - config_version_id
        - name
        - type
        - value
        - input_value
        - result_value
    BooleanDataPoint:
      type: object
      properties:
        config_id:
          type: string
          example: dptc_01jxdp05c8r7dp4xf89pxcw28q
          description: The ID of the data point config this value belongs to.
        config_version_id:
          type: string
          example: dptcv_01kfxe6xgmw15gsf204jwj90g5
          description: >-
            The ID of the data point config version the value was recorded
            against.
        name:
          type: string
          example: Weight gross
          description: The human-readable name of the data point as it appears in the UI.
        type:
          type: string
          enum:
            - boolean
          description: The type of the data point. Determines the format of its values.
        value:
          type: boolean
          nullable: true
          description: >-
            The value of the data point. For derived data points this is the
            computed result.
        input_value:
          type: boolean
          nullable: true
          deprecated: true
          description: '@deprecated Use `value` instead. The value as it was submitted.'
        result_value:
          type: boolean
          nullable: true
          deprecated: true
          description: >-
            @deprecated Use `value` instead. The effective value of the data
            point, mirroring `value`.
      description: Data point holding a boolean value.
      required:
        - config_id
        - config_version_id
        - name
        - type
        - value
        - input_value
        - result_value
    MaterialDataPoint:
      type: object
      properties:
        config_id:
          type: string
          example: dptc_01jxdp05c8r7dp4xf89pxcw28q
          description: The ID of the data point config this value belongs to.
        config_version_id:
          type: string
          example: dptcv_01kfxe6xgmw15gsf204jwj90g5
          description: >-
            The ID of the data point config version the value was recorded
            against.
        name:
          type: string
          example: Weight gross
          description: The human-readable name of the data point as it appears in the UI.
        type:
          type: string
          enum:
            - material
          description: The type of the data point. Determines the format of its values.
        value:
          type: string
          nullable: true
          example: mat_01kh0fwkq4x8p5ea34dr6e4v2e
          description: >-
            The value of the data point. For derived data points this is the
            computed result.
        input_value:
          type: string
          nullable: true
          example: mat_01kh0fwkq4x8p5ea34dr6e4v2e
          deprecated: true
          description: '@deprecated Use `value` instead. The value as it was submitted.'
        result_value:
          type: string
          nullable: true
          example: mat_01kh0fwkq4x8p5ea34dr6e4v2e
          deprecated: true
          description: >-
            @deprecated Use `value` instead. The effective value of the data
            point, mirroring `value`.
      description: Data point holding a material, referenced by its ID.
      required:
        - config_id
        - config_version_id
        - name
        - type
        - value
        - input_value
        - result_value
    MaterialBatchIdDataPoint:
      type: object
      properties:
        config_id:
          type: string
          example: dptc_01jxdp05c8r7dp4xf89pxcw28q
          description: The ID of the data point config this value belongs to.
        config_version_id:
          type: string
          example: dptcv_01kfxe6xgmw15gsf204jwj90g5
          description: >-
            The ID of the data point config version the value was recorded
            against.
        name:
          type: string
          example: Weight gross
          description: The human-readable name of the data point as it appears in the UI.
        type:
          type: string
          enum:
            - material_batch
          description: The type of the data point. Determines the format of its values.
        value:
          type: string
          nullable: true
          example: mbt_01kjpyrpv5ffa8d2kqmgcqf2r6
          description: >-
            The value of the data point. For derived data points this is the
            computed result.
        input_value:
          type: string
          nullable: true
          example: mbt_01kjpyrpv5ffa8d2kqmgcqf2r6
          deprecated: true
          description: '@deprecated Use `value` instead. The value as it was submitted.'
        result_value:
          type: string
          nullable: true
          example: mbt_01kjpyrpv5ffa8d2kqmgcqf2r6
          deprecated: true
          description: >-
            @deprecated Use `value` instead. The effective value of the data
            point, mirroring `value`.
      description: Data point holding a material batch, referenced by its ID.
      required:
        - config_id
        - config_version_id
        - name
        - type
        - value
        - input_value
        - result_value
    ContainerTypeDataPoint:
      type: object
      properties:
        config_id:
          type: string
          example: dptc_01jxdp05c8r7dp4xf89pxcw28q
          description: The ID of the data point config this value belongs to.
        config_version_id:
          type: string
          example: dptcv_01kfxe6xgmw15gsf204jwj90g5
          description: >-
            The ID of the data point config version the value was recorded
            against.
        name:
          type: string
          example: Weight gross
          description: The human-readable name of the data point as it appears in the UI.
        type:
          type: string
          enum:
            - container_type
          description: The type of the data point. Determines the format of its values.
        value:
          type: string
          nullable: true
          example: mct_01k0fs1vdzgjsvm3s7kqm362qr
          description: >-
            The value of the data point. For derived data points this is the
            computed result.
        input_value:
          type: string
          nullable: true
          example: mct_01k0fs1vdzgjsvm3s7kqm362qr
          deprecated: true
          description: '@deprecated Use `value` instead. The value as it was submitted.'
        result_value:
          type: string
          nullable: true
          example: mct_01k0fs1vdzgjsvm3s7kqm362qr
          deprecated: true
          description: >-
            @deprecated Use `value` instead. The effective value of the data
            point, mirroring `value`.
      description: Data point holding a container type, referenced by its ID.
      required:
        - config_id
        - config_version_id
        - name
        - type
        - value
        - input_value
        - result_value
    MaterialPoolDataPoint:
      type: object
      properties:
        config_id:
          type: string
          example: dptc_01jxdp05c8r7dp4xf89pxcw28q
          description: The ID of the data point config this value belongs to.
        config_version_id:
          type: string
          example: dptcv_01kfxe6xgmw15gsf204jwj90g5
          description: >-
            The ID of the data point config version the value was recorded
            against.
        name:
          type: string
          example: Weight gross
          description: The human-readable name of the data point as it appears in the UI.
        type:
          type: string
          enum:
            - material_pool
          description: The type of the data point. Determines the format of its values.
        value:
          type: string
          nullable: true
          example: mpl_01k2xytkbr0pxazkxbj4j5gr0y
          description: >-
            The value of the data point. For derived data points this is the
            computed result.
        input_value:
          type: string
          nullable: true
          example: mpl_01k2xytkbr0pxazkxbj4j5gr0y
          deprecated: true
          description: '@deprecated Use `value` instead. The value as it was submitted.'
        result_value:
          type: string
          nullable: true
          example: mpl_01k2xytkbr0pxazkxbj4j5gr0y
          deprecated: true
          description: >-
            @deprecated Use `value` instead. The effective value of the data
            point, mirroring `value`.
      description: Data point holding a material pool, referenced by its ID.
      required:
        - config_id
        - config_version_id
        - name
        - type
        - value
        - input_value
        - result_value
    Container:
      type: object
      properties:
        id:
          type: string
          example: mcn_01kqz4g5cjzvwsnnps6q7183q3
        config_id:
          type: string
          example: mcnc_01k102qfrwthwk6dsggr9y8evn
          description: The ID of the container config the container is based on.
        config_version_id:
          type: string
          example: mcncv_01kxs8mt2y4711mz04rqs14t0a
          description: >-
            The ID of the container config version the container was created
            against.
        status:
          example: available
          description: >-
            Whether the container is available as an input to further flows,
            consumed by one, or deactivated.
          allOf:
            - $ref: '#/components/schemas/ContainerStatus'
        data_points:
          type: array
          items:
            oneOf:
              - $ref: '#/components/schemas/ShortTextDataPoint'
                title: short_text
              - $ref: '#/components/schemas/LongTextDataPoint'
                title: long_text
              - $ref: '#/components/schemas/MultiTextDataPoint'
                title: multi_text
              - $ref: '#/components/schemas/NumberDataPoint'
                title: number
              - $ref: '#/components/schemas/PercentageDataPoint'
                title: percentage
              - $ref: '#/components/schemas/AmountDataPoint'
                title: amount
              - $ref: '#/components/schemas/TimestampDataPoint'
                title: timestamp
              - $ref: '#/components/schemas/DurationDataPoint'
                title: duration
              - $ref: '#/components/schemas/BooleanDataPoint'
                title: boolean
              - $ref: '#/components/schemas/MaterialDataPoint'
                title: material
              - $ref: '#/components/schemas/MaterialBatchIdDataPoint'
                title: material_batch
              - $ref: '#/components/schemas/ContainerTypeDataPoint'
                title: container_type
              - $ref: '#/components/schemas/MaterialPoolDataPoint'
                title: material_pool
            discriminator:
              propertyName: type
              mapping:
                short_text:
                  $ref: '#/components/schemas/ShortTextDataPoint'
                long_text:
                  $ref: '#/components/schemas/LongTextDataPoint'
                multi_text:
                  $ref: '#/components/schemas/MultiTextDataPoint'
                number:
                  $ref: '#/components/schemas/NumberDataPoint'
                percentage:
                  $ref: '#/components/schemas/PercentageDataPoint'
                amount:
                  $ref: '#/components/schemas/AmountDataPoint'
                timestamp:
                  $ref: '#/components/schemas/TimestampDataPoint'
                duration:
                  $ref: '#/components/schemas/DurationDataPoint'
                boolean:
                  $ref: '#/components/schemas/BooleanDataPoint'
                material:
                  $ref: '#/components/schemas/MaterialDataPoint'
                material_batch:
                  $ref: '#/components/schemas/MaterialBatchIdDataPoint'
                container_type:
                  $ref: '#/components/schemas/ContainerTypeDataPoint'
                material_pool:
                  $ref: '#/components/schemas/MaterialPoolDataPoint'
          description: The container's data points.
      description: >-
        A material container: a tracked unit of material moving through the
        system.
      required:
        - id
        - config_id
        - config_version_id
        - status
        - data_points
    DeliveryPayloadContainer:
      type: object
      properties:
        data_points:
          type: array
          items:
            oneOf:
              - $ref: '#/components/schemas/ShortTextDataPoint'
                title: short_text
              - $ref: '#/components/schemas/LongTextDataPoint'
                title: long_text
              - $ref: '#/components/schemas/MultiTextDataPoint'
                title: multi_text
              - $ref: '#/components/schemas/NumberDataPoint'
                title: number
              - $ref: '#/components/schemas/PercentageDataPoint'
                title: percentage
              - $ref: '#/components/schemas/AmountDataPoint'
                title: amount
              - $ref: '#/components/schemas/TimestampDataPoint'
                title: timestamp
              - $ref: '#/components/schemas/DurationDataPoint'
                title: duration
              - $ref: '#/components/schemas/BooleanDataPoint'
                title: boolean
              - $ref: '#/components/schemas/MaterialDataPoint'
                title: material
              - $ref: '#/components/schemas/MaterialBatchIdDataPoint'
                title: material_batch
              - $ref: '#/components/schemas/ContainerTypeDataPoint'
                title: container_type
              - $ref: '#/components/schemas/MaterialPoolDataPoint'
                title: material_pool
            discriminator:
              propertyName: type
              mapping:
                short_text:
                  $ref: '#/components/schemas/ShortTextDataPoint'
                long_text:
                  $ref: '#/components/schemas/LongTextDataPoint'
                multi_text:
                  $ref: '#/components/schemas/MultiTextDataPoint'
                number:
                  $ref: '#/components/schemas/NumberDataPoint'
                percentage:
                  $ref: '#/components/schemas/PercentageDataPoint'
                amount:
                  $ref: '#/components/schemas/AmountDataPoint'
                timestamp:
                  $ref: '#/components/schemas/TimestampDataPoint'
                duration:
                  $ref: '#/components/schemas/DurationDataPoint'
                boolean:
                  $ref: '#/components/schemas/BooleanDataPoint'
                material:
                  $ref: '#/components/schemas/MaterialDataPoint'
                material_batch:
                  $ref: '#/components/schemas/MaterialBatchIdDataPoint'
                container_type:
                  $ref: '#/components/schemas/ContainerTypeDataPoint'
                material_pool:
                  $ref: '#/components/schemas/MaterialPoolDataPoint'
          description: Data points set on this payload container.
      description: One material container carried by a delivery.
      required:
        - data_points
    SiteRefInput:
      type: object
      properties:
        id:
          type: string
          example: ste_01k8g7aec6dt5zrtamc72ww446
          description: The ID of the site.
      description: Reference to a site.
      required:
        - id
    SiteExternalIdReference:
      type: object
      properties:
        external_id:
          type: string
          example: SITE-EXT-0001
          nullable: false
          maxLength: 100
          minLength: 1
          pattern: ^[A-Za-z0-9\-_]+$
      description: References a site by the external ID you assigned to it.
      required:
        - external_id
    AmountValue:
      type: object
      properties:
        value:
          type: number
          example: 50
        unit:
          type: string
          example: kg
          description: Unit the amount is expressed in.
      required:
        - value
        - unit
    ContainerStatus:
      type: string
      enum:
        - available
        - consumed
        - deactivated
      description: >-
        Whether the container is available as an input to further flows,
        consumed by one, or deactivated.
  securitySchemes:
    AccessToken:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://auth.demo.cula.earth/oauth2/token
          scopes: {}
      description: >-
        OAuth 2.0 client credentials. Exchange your client_id and client_secret
        for an access token scoped to the organisation that provides data
        access.

````