openapi: 3.0.1
info:
  title: Carriyo Plug & Play API
  description: |-
    **This spec describes a contract that carriers implement, not a Carriyo-hosted service.**

    The Plug & Play (PnP) integration model lets a carrier go live with Carriyo without Carriyo writing a bespoke connector. The carrier exposes a small set of HTTP endpoints that follow this specification; Carriyo points its routing engine at the carrier's base URL and calls those endpoints whenever a shipment, manifest, label, or tracking lookup is needed.

    ## Direction of every operation

    | Operation | Hosted by | Called by | Direction |
    |---|---|---|---|
    | `create-shipment`, `cancel`, `request-label`, `batch-tracking`, `schedule-collection`, `manifest` | **Carrier** | **Carriyo** | Carriyo → carrier |
    | `status-update-webhook` | **Carriyo** | **Carrier** | Carrier → Carriyo (the only reversed flow) |

    Every operation tagged **Shipments** or **Manifest** is something the carrier implements. Carriyo authenticates itself when it calls those endpoints using the credentials the carrier issued during onboarding.

    The single **Status update webhook** operation is hosted by Carriyo. The carrier calls it whenever a shipment status changes. Authentication for that call goes the other way: Carriyo issues an API key during onboarding, and the carrier includes it in the request.

    ## What's required vs optional

    | Operation | Required for Plug & Play? |
    |---|---|
    | `create-shipment` | Required |
    | `cancel` | Required |
    | `request-label` | Required (or include labels inline in the `create-shipment` response) |
    | `batch-tracking` | Required (acts as the fallback when status webhooks are missed) |
    | `status-update-webhook` push | Strongly recommended; real-time tracking depends on it |
    | `schedule-collection` | Optional; implement only if the carrier supports scheduled pickups |
    | `manifest` | Optional; implement only if the carrier supports manifesting |

    ## Authentication

    A carrier picks **one** of the two security schemes when registering with Carriyo:

    - **API key** (`x-api-key` header): the simplest option. The carrier issues a static key, and Carriyo sends it on every request.
    - **OAuth 2.0 client credentials**: Carriyo obtains an access token from the carrier's token endpoint and uses it as a bearer token. Tokens are cached until expiry.

    For the **status update webhook** (the reversed direction), Carriyo issues an API key during carrier onboarding. The carrier must include it as `x-api-key` on every callback to Carriyo.

    ## Retry, idempotency, and ordering

    Carriyo retries failed calls with exponential backoff:

    - **`create-shipment`**: Carriyo may retry the same request after a network failure or 5xx response. **Make this endpoint idempotent on the merchant's shipment reference** (`references.partner_shipment_reference`): if a shipment with that reference already exists, return the same `tracking_number` instead of creating a duplicate.
    - **`cancel`**: same idempotency expectation. Cancelling an already-cancelled shipment should return `200 OK`, not `400`.
    - **`request-label`**, **`batch-tracking`**: safe to retry; treat as read-only.
    - **`schedule-collection`**, **`manifest`**: Carriyo retries on 5xx; design for repeat calls with the same payload.

    For the **status update webhook**, the carrier should:

    - Treat a `200` or `204` response as confirmed receipt.
    - On `4xx`, do not retry the event; it indicates a malformed payload.
    - On `5xx` or network error, retry with backoff; Carriyo dedupes by `(carrier, tracking_number, event_timestamp, status_code)`.
    - Include the exact `event_timestamp` from the carrier system, not the time of the callback.

    ## Testing

    The `servers` block uses a templated URL: replace `carrier_host` with the host you're testing against. While developing your implementation you can point Carriyo at a sandbox URL.

    ## Onboarding

    To register a Plug & Play carrier, contact Carriyo Support ([support@carriyo.com](mailto:support@carriyo.com)). The onboarding flow covers: confirming which endpoints you've implemented, exchanging credentials in both directions (your auth for Carriyo → carrier calls, plus Carriyo's API key for your status callbacks), and running an integration test on the demo environment.
  contact:
    name: Carriyo Support
    url: https://help.carriyo.com
    email: support@carriyo.com
  version: '1.0'
servers:
  - url: https://{carrier_host}
    description: The carrier's API base URL, provided to Carriyo during onboarding. Replace `carrier_host` with your service host. The status-update-webhook operation overrides this with the Carriyo-hosted URL.
    variables:
      carrier_host:
        default: carrier-api.example.com
        description: The host (and optional base path) where you implement the Plug & Play endpoints, for example `api.your-carrier.com` or `carrier-name.com/carriyo/v1`.
security:
  - api-key: []
  - OAuth2: []
paths:
  /shipments/manifest:
    post:
      tags:
        - Manifest
      summary: Create manifest
      description: |-
        **You implement this endpoint** (optional). Carriyo calls it to generate a manifest for a batch of shipments sharing a pickup location and date.


        This is an optional endpoint for the carrier. If manifesting is not supported by the carrier, then the implementation of this endpoint can be skipped.


        Carriyo employs the manifest endpoint to facilitate generation of manifests for designated shipments. The shipments included in the manifest will share a common pickup location and a scheduled pickup date.


        In the request, Carriyo includes essential manifest details, encompassing:

        - Shipment tracking numbers

        - Scheduled date and time slot

        - Pickup Location


        In response to this request, the carrier will provide a unique pickup identifier for the manifest.
      operationId: manifest
      security:
        - api-key: []
        - OAuth2: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/manifest-request'
        description: ''
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/scheduled-collection-response'
        '400':
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/problem'
  /shipments:
    post:
      tags:
        - Shipments
      summary: Create shipment
      description: |-
        **You implement this endpoint.** Carriyo calls it to book a new shipment with your carrier service.


        Carriyo will use the create shipment endpoint to book a new shipment with the carrier, by providing all the essential information such as:

        - Merchant's Order and Shipment reference

        - Pickup details - name, contact information and address

        - Dropoff details - name, contact information and address

        - Item details

        - Parcel details

        - Any custom information needed by the carrier, such as account number, service type etc


        The carrier will respond with a unique tracking number and optionally provide the PDF and ZPL labels in the response, either encoded as hexadecimal or as download URLs.


        While both binary and URL options are supported, we recommend sending the labels directly in the response as binary hexadecimal data for optimal integration.
      operationId: create-shipment
      security:
        - api-key: []
        - OAuth2: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/create-shipment-request'
            examples:
              Create Shipment With Parcel:
                value:
                  entity_type: FORWARD
                  tenant: CARRIYO-TENANT-ID
                  merchant: CARRIYO-MERCHANT-ID
                  references:
                    partner_order_reference: order-reference-1
                    partner_shipment_reference: shipment-reference-1
                  payment:
                    payment_mode: PRE_PAID
                    pending_amount: 0
                    total_amount: 100
                    currency: USD
                  collection:
                    scheduled_from: '2019-08-24T14:15:22Z'
                    scheduled_to: '2019-08-24T14:15:22Z'
                  delivery:
                    scheduled_from: '2019-08-24T14:15:22Z'
                    scheduled_to: '2019-08-24T14:15:22Z'
                  pickup:
                    contact_name: Warehouse Manager
                    contact_phone: '+16175551212'
                    contact_email: ops@test.com
                    address1: Grand Central Warehouse
                    city: DUBAI
                    city_name_en: Dubai
                    state: Dubai
                    coords:
                      - 41.40338
                      - 41.40338
                    postcode: E1 6AN
                    country: AE
                    what3words: ///daring.lion.race
                    po_box: string
                  dropoff:
                    contact_name: Jo Bloggs
                    contact_phone: '0561111234'
                    contact_email: jo@test.com
                    address1: 1, 10th Floor, Tower One
                    address2: Dubai Marina
                    city: DUBAI
                    city_name_en: Dubai
                    coords:
                      - 41.40338
                      - 41.40338
                    postcode: E1 6AN
                    country: AE
                    type: residential
                    notes: Leave the parcel next to the bin
                    what3words: ///daring.lion.race
                    po_box: string
                  items:
                    - description: Most Adorable Sneakers
                      quantity: 1
                      price:
                        amount: 80
                        currency: USD
                      weight:
                        value: 1
                        unit: kg
                      sku: '10001'
                    - description: Absolutely Lovely Hat
                      quantity: 1
                      price:
                        amount: 20
                        currency: USD
                      cost:
                        amount: 20
                        currency: USD
                      weight:
                        value: 0.5
                        unit: kg
                      sku: '10002'
                  parcels:
                    - partner_parcel_reference: parcel-123
                      weight:
                        value: 1
                        unit: kg
                      dimension:
                        width: 20
                        height: 40
                        depth: 40
                        unit: cm
                    - partner_parcel_reference: parcel-124
                      weight:
                        value: 0.5
                        unit: kg
                      dimension:
                        width: 30
                        height: 50
                        depth: 50
                        unit: cm
                  customs:
                    declared_value:
                      amount: 100
                      currency: USD
                  carrier_custom_attributes:
                    carrier_account_number: <carrier account number>
                    service_type: same_day
                  order_date: '2021-01-01T10:00:00.999Z'
              Create Shipment With Freight:
                value:
                  entity_type: FORWARD
                  tenant: CARRIYO-TENANT-ID
                  merchant: CARRIYO-MERCHANT-ID
                  references:
                    partner_order_reference: order-reference-1
                    partner_shipment_reference: shipment-reference-1
                  payment:
                    payment_mode: PRE_PAID
                    pending_amount: 0
                    total_amount: 100
                    currency: USD
                  collection:
                    scheduled_from: '2019-08-24T14:15:22Z'
                    scheduled_to: '2019-08-24T14:15:22Z'
                  delivery:
                    scheduled_from: '2019-08-24T14:15:22Z'
                    scheduled_to: '2019-08-24T14:15:22Z'
                  pickup:
                    contact_name: Warehouse Manager
                    contact_phone: '+16175551212'
                    contact_email: ops@test.com
                    address1: Grand Central Warehouse
                    city: DUBAI
                    city_name_en: Dubai
                    state: Dubai
                    coords:
                      - 41.40338
                      - 41.40338
                    postcode: E1 6AN
                    country: AE
                    what3words: ///daring.lion.race
                    po_box: string
                  dropoff:
                    contact_name: Jo Bloggs
                    contact_phone: '0561111234'
                    contact_email: jo@test.com
                    address1: 1, 10th Floor, Tower One
                    address2: Dubai Marina
                    city: DUBAI
                    city_name_en: Dubai
                    coords:
                      - 41.40338
                      - 41.40338
                    postcode: E1 6AN
                    country: AE
                    type: residential
                    notes: Leave the parcel next to the bin
                    what3words: ///daring.lion.race
                    po_box: string
                  items:
                    - description: Most Adorable Sneakers
                      quantity: 1
                      price:
                        amount: 80
                        currency: USD
                      weight:
                        value: 1
                        unit: kg
                      sku: '10001'
                    - description: Absolutely Lovely Hat
                      quantity: 1
                      price:
                        amount: 20
                        currency: USD
                      cost:
                        amount: 20
                        currency: USD
                      weight:
                        value: 0.5
                        unit: kg
                      sku: '10002'
                  parcels:
                    - partner_parcel_reference: parcel-123
                      weight:
                        value: 1
                        unit: kg
                      dimension:
                        width: 20
                        height: 40
                        depth: 40
                        unit: cm
                    - partner_parcel_reference: parcel-124
                      weight:
                        value: 0.5
                        unit: kg
                      dimension:
                        width: 30
                        height: 50
                        depth: 50
                        unit: cm
                  carrier_custom_attributes:
                    carrier_account_number: <carrier account number>
                    service_type: same_day
                  order_date: '2021-01-01T10:00:00.999Z'
        description: ''
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                anyOf:
                  - $ref: '#/components/schemas/create-shipment-response'
                  - $ref: '#/components/schemas/create-shipment-response-with-label-url'
        '400':
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/problem'
  /shipments/history:
    post:
      tags:
        - Shipments
      summary: Shipment tracking
      description: |-
        **You implement this endpoint.** Carriyo calls it to retrieve the full history of status events for a batch of shipments, typically as a fallback when real-time status webhooks have been missed.


        Ensuring that Carriyo maintains the most up-to-date shipment status is of paramount importance, benefiting both the merchant and their end customers.


        Carriyo uses the batch tracking endpoint to retrieve the full history of status events for the specified shipments. The endpoint serves as a fallback for real-time status updates, particularly for shipments suspected of falling out of sync with the carrier's data.


        To maximise efficiency, Carriyo will pass a list of tracking numbers to track multiple shipments (up to 20) in a single API call.
      operationId: batch-tracking
      security:
        - api-key: []
        - OAuth2: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/batch-tracking-request'
        description: ''
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/batch-tracking-response'
              examples:
                Status only:
                  value:
                    tracking_info:
                      - tracking_number: new-shipment-1
                        status_events:
                          - carriyo_status_code: failed_delivery_attempt
                            carriyo_reason_code: refused_by_customer
                            carrier_status_code: CUSTOMER-REFUSAL
                            carrier_status_description: Customer refused to accept delivery
                            status_update_date: '2023-05-24T14:15:05.222Z'
                Status with events:
                  value:
                    tracking_info:
                      - tracking_number: new-shipment-1
                        status_events:
                          - carriyo_status_code: failed_delivery_attempt
                            carriyo_reason_code: refused_by_customer
                            carrier_status_code: CUSTOMER-REFUSAL
                            carrier_status_description: Customer refused to accept delivery
                            status_update_date: '2023-05-24T14:15:05.222Z'
                        events:
                          - event_type: DELIVERY_SCHEDULE
                            event_date: '2026-04-15T10:30:00'
                            delivery_schedule:
                              schedule_date: '2026-04-16'
        '400':
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/problem'
  /shipments/{tracking-number}/schedule-collection:
    parameters:
      - name: tracking-number
        in: path
        description: Tracking number. Must be an exact match.
        required: true
        schema:
          type: string
    post:
      tags:
        - Shipments
      summary: Schedule collection
      description: |-
        **You implement this endpoint** (optional). Carriyo calls it to schedule a pickup for a shipment.


        This operation is optional. If your carrier service doesn't support collection scheduling, you can skip implementing it.


        Carriyo employs the schedule collection endpoint to facilitate carrier pick-up arrangements for a designated shipment.


        In the request, Carriyo includes essential collection details, encompassing:


        - Shipment tracking number

        - Scheduled date and time slot


        In response to this request, the carrier will provide unique pickup identifier.


        The carrier will respond with a unique pickup id.
      operationId: schedule-collection
      security:
        - api-key: []
        - OAuth2: []
      parameters:
        - name: tracking-number
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/scheduled-collection-request'
        description: ''
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/scheduled-collection-response'
        '400':
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/problem'
  /shipments/{tracking-number}/label:
    parameters:
      - name: tracking-number
        in: path
        description: Tracking number. Must be an exact match.
        required: true
        schema:
          type: string
    get:
      tags:
        - Shipments
      summary: Fetch label
      description: |-
        **You implement this endpoint.** Carriyo calls it to fetch the shipping label by tracking number, for when labels were not returned inline in the `create-shipment` response.


        Carriyo utilises this endpoint to obtain a shipment label by providing the tracking number. This is useful when the carrier fails to supply the label information alongside the create shipment response.


        The response is expected to contain supported labels, which may be in PDF and/or ZPL format. These labels can be provided either as hexadecimal-encoded data or as URLs to download the label.


        While both binary and URL options are supported, we recommend sending the labels directly in the response as binary hexadecimal data for optimal integration.
      operationId: request-label
      security:
        - api-key: []
        - OAuth2: []
      parameters:
        - name: tracking-number
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                anyOf:
                  - $ref: '#/components/schemas/label-response'
                  - $ref: '#/components/schemas/label-response-url'
        '400':
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/problem'
  /shipments/{tracking-number}/cancel:
    parameters:
      - name: tracking-number
        in: path
        description: Tracking number. Must be an exact match.
        required: true
        schema:
          type: string
    post:
      tags:
        - Shipments
      summary: Shipment cancellation
      description: |-
        **You implement this endpoint.** Carriyo calls it to cancel a previously-booked shipment.


        Carriyo will use the cancel endpoint to cancel a specific shipment that has not yet been shipped.


        Carriyo will use the carrier's unique tracking number to cancel the shipment.
      operationId: cancel
      security:
        - api-key: []
        - OAuth2: []
      parameters:
        - name: tracking-number
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
        '400':
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/problem'
  /{carrier}/update-status:
    post:
      tags:
        - Status update webhook
      summary: Status update webhook
      description: |-
        **Carriyo hosts this endpoint. Your system calls it** whenever a shipment status changes.


        The Carriyo webhook endpoint acts as the primary link for carriers to transmit real-time status updates to Carriyo.


        The carrier's system will call the endpoint for each status update as and when they happen. It is important for the carrier to include the exact date and time of the event for Carriyo to uniquely identify each update.


        This feature guarantees that Carriyo and its users consistently receive current and precise details regarding the shipment's progress and location.
      operationId: status-update-webhook
      security:
        - api-key: []
      parameters:
        - name: carrier
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/callback-request'
        description: ''
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/callback-response'
        '400':
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/callback-problem'
      servers:
        - url: https://api.carriyo.com
          description: Production Carriyo webhook host.
        - url: https://demo-api.carriyo.com
          description: Demo / sandbox Carriyo webhook host. Use this while integrating.
components:
  schemas:
    batch-tracking-request:
      title: Batch Tracking Request
      type: object
      required:
        - tracking_numbers
      properties:
        tracking_numbers:
          type: array
          items:
            type: string
    batch-tracking-response:
      title: Batch Tracking Response
      type: object
      properties:
        tracking_info:
          type: array
          items:
            $ref: '#/components/schemas/tracking-info'
      x-examples:
        Status only:
          tracking_info:
            - tracking_number: new-shipment-1
              status_events:
                - carriyo_status_code: failed_delivery_attempt
                  carriyo_reason_code: refused_by_customer
                  carrier_status_code: CUSTOMER-REFUSAL
                  carrier_status_description: Customer refused to accept delivery
                  status_update_date: '2023-05-24T14:15:05.222Z'
        Status with events:
          tracking_info:
            - tracking_number: new-shipment-1
              status_events:
                - carriyo_status_code: failed_delivery_attempt
                  carriyo_reason_code: refused_by_customer
                  carrier_status_code: CUSTOMER-REFUSAL
                  carrier_status_description: Customer refused to accept delivery
                  status_update_date: '2023-05-24T14:15:05.222Z'
              events:
                - event_type: DELIVERY_SCHEDULE
                  event_date: '2026-04-15T10:30:00'
                  delivery_schedule:
                    schedule_date: '2026-04-16'
    callback-request:
      title: Callback Tracking Request
      type: object
      required:
        - tracking_number
        - status_update_date
        - carriyo_status_code
      properties:
        tracking_number:
          type: string
          example: new-shipment-1
          description: Unique identifier assigned by the carrier to track the shipment.
        status_update_date:
          type: string
          format: date-time
          example: '2023-05-24T12:15:05.000Z'
          description: 'Date in ISO 8601 format. Example: 2020-09-03T17:07:05.000Z'
        carriyo_status_code:
          type: string
          example: failed_delivery_attempt
          description: Internal Carriyo status code.
        carriyo_reason_code:
          type: string
          example: refused_by_customer
          description: Internal Carriyo reason code.
        carrier_status_code:
          type: string
          example: CUSTOMER-REFUSAL
          description: Status code received from the carrier's tracking system
        carrier_status_description:
          type: string
          example: Customer refused to accept delivery
          description: Description of the shipment status as provided by the carrier.
        status_location:
          type: string
          example: Dubai
          description: Description of the location associated with the latest shipment status update.
        status_coordinates:
          type: string
          description: GPS coordinates associated with the latest shipment status update.
          example: 25.18589831,55.2485668
        proof_of_delivery_url:
          type: string
          description: Direct URL to the Proof of Delivery (POD) document in PDF format.
          example: https://example.com
        proof_of_delivery_encoded:
          type: string
          description: Proof of Delivery (POD) document content encoded in Base64 format.
          example: ''
        driver_name:
          type: string
          example: John
          description: Name of the driver handling the delivery.
        driver_phone:
          type: string
          description: Contact phone number of the driver handling the delivery.
        recipient_name:
          type: string
          example: John
          description: Full name of the shipment recipient.
    callback-response:
      type: object
      properties:
        request:
          $ref: '#/components/schemas/callback-request'
        tracking_info:
          $ref: '#/components/schemas/callback-tracking-info'
    callback-problem:
      type: object
      properties:
        request:
          $ref: '#/components/schemas/callback-request'
        error_message:
          type: string
    collection-request:
      title: Collection Request
      type: object
      description: |-
        Provide the `scheduled_from` and `scheduled_to` to choose the scheduled date along with
        start and end time.


        Example:

        "collection": {
          "scheduled_from": "2022-01-01'T'10:00:00.000Z",
          "scheduled_to": "2022-01-01'T'12:00:00.000Z"
        }
      properties:
        scheduled_from:
          type: string
          format: date-time
          description: 'Date in ISO 8601 format. Example: 2020-09-03T17:07:05.000Z'
        scheduled_to:
          type: string
          format: date-time
          description: 'Date in ISO 8601 format. Example: 2020-09-03T17:07:05.000Z'
    create-shipment-request:
      title: Shipment Request
      type: object
      properties:
        entity_type:
          type: string
          default: FORWARD
          enum:
            - FORWARD
            - REVERSE
        merchant:
          type: string
          description: Merchant ID
          example: CARRIYO_MERCHANT_ID
        tenant:
          type: string
          description: Tenant ID
          example: CARRIYO_TENANT_ID
        references:
          $ref: '#/components/schemas/references-request'
        payment:
          $ref: '#/components/schemas/payment-request'
        collection:
          $ref: '#/components/schemas/collection-request'
        delivery:
          $ref: '#/components/schemas/delivery-request'
        pickup:
          description: A free-form address for pickup.
          anyOf:
            - $ref: '#/components/schemas/location-request'
        dropoff:
          description: A free-form address for dropoff.
          anyOf:
            - $ref: '#/components/schemas/location-request'
        customs:
          type: object
          description: Customs declaration details such as total declared value.
          properties:
            declared_value:
              type: object
              description: |-
                The total value of the shipment (optional) to declare for customs. This value is
                computed from individual item price if this is not passed.
              properties:
                amount:
                  minimum: 0
                  type: number
                currency:
                  type: string
                  description: The three-letter currency code (ISO 4217) for the amount. e.g., USD
        items:
          type: array
          items:
            $ref: '#/components/schemas/item-request'
        parcels:
          type: array
          description: List of parcels in a B2C shipment.
          items:
            $ref: '#/components/schemas/parcel-request'
        freight:
          type: object
          description: List of packages of type pallet or carton in a B2B shipment.
          properties:
            packages:
              type: array
              items:
                $ref: '#/components/schemas/package-object'
        carrier_custom_attributes:
          $ref: '#/components/schemas/carrier-custom-attributes'
        order_date:
          type: string
          description: 'Date in ISO 8601 format. Example: 2020-09-03T17:07:05.000Z'
          format: date-time
          example: '2022-01-01T09:00:00.000Z'
      required:
        - references
        - payment
        - pickup
        - dropoff
        - items
    create-shipment-response:
      type: object
      properties:
        tracking_number:
          description: Shipment tracking number
          type: string
          minLength: 4
          example: 1234567890
        pdf_label_encoded:
          description: Base64 string
          type: string
          example: |-
            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ZHNbMSAwIFIgNyAwIFJdL1R5cGUvUGFnZXMvQ291bnQgMi9JVFhUKDIuMS43KT4+CmVuZG9iagoxNCAwIG9iago8PC9UeXBlL0NhdGFsb2cvUGFnZXMgNiAwIFI+PgplbmRvYmoKMTUgMCBvYmoKPDwvTW9kRGF0ZShEOjIwMjMwNTA4MDk1MTE4WikvQ3JlYXRpb25EYXRlKEQ6MjAyMzA1MDgwOTUxMThaKS9Qcm9kdWNlcihpVGV4dCAyLjEuNyBieSAxVDNYVCk+PgplbmRvYmoKeHJlZgowIDE2CjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwNDkyMCAwMDAwMCBuIAowMDAwMDAwMDE1IDAwMDAwIG4gCjAwMDAwMDAzMTMgMDAwMDAgbiAKMDAwMDAwMDEzMiAwMDAwMCBuIAowMDAwMDAwMjI1IDAwMDAwIG4gCjAwMDAwMTM0ODcgMDAwMDAgbiAKMDAwMDAxMzMyNSAwMDAwMCBuIAowMDAwMDA1MDgyIDAwMDAwIG4gCjAwMDAwMDk5MDggMDAwMDAgbiAKMDAwMDAwNTE5OSAwMDAwMCBuIAowMDAwMDA1MjkzIDAwMDAwIG4gCjAwMDAwMDY1MzYgMDAwMDAgbiAKMDAwMDAwNTM4MiAwMDAwMCBuIAowMDAwMDEzNTU2IDAwMDAwIG4gCjAwMDAwMTM2MDIgMDAwMDAgbiAKdHJhaWxlcgo8PC9JbmZvIDE1IDAgUi9JRCBbPDY3MzgwMjMxM2ViZTFmN2YzNjc0MDcxOWE1MjVlMTNiPjwxNmUzMzg2YWQyMGU1YTAyNDZhN2Y2ZWE5ODJjZTllMD5dL1Jvb3QgMTQgMCBSL1NpemUgMTY+PgpzdGFydHhyZWYKMTM3MTMKJSVFT0YK
        tracking_url:
          description: The tracking url provided by the carrier
          type: string
          example: https://www.plugnplay.com/1234567890/tracking
    create-shipment-response-with-label-url:
      type: object
      properties:
        tracking_number:
          description: Shipment tracking number
          type: string
          minLength: 4
          example: 1234567890
        pdf_label_url:
          description: The url of PDF label provided by the carrier
          type: string
          example: https://www.plugnplay.com/label/1234567890.pdf
        tracking_url:
          description: The tracking url provided by the carrier
          type: string
          example: https://www.plugnplay.com/1234567890/tracking
    delivery-request:
      title: Delivery
      type: object
      properties:
        scheduled_from:
          type: string
          description: 'Date in ISO 8601 format. Example: 2020-09-03T17:07:05.000Z'
          format: date-time
        scheduled_to:
          type: string
          description: 'Date in ISO 8601 format. Example: 2020-09-03T17:07:05.000Z'
          format: date-time
      description: |-
        The delivery options chosen for the shipment, including the delivery type and schedule.


        Provide the `scheduled_from` and `scheduled_to` to choose the scheduled date along with
        start and end time.


        Example:

        "collection": {
          "scheduled_from": "2022-01-01'T'10:00:00.000Z",
          "scheduled_to": "2022-01-01'T'12:00:00.000Z"
        }
    dimension:
      title: Dimension
      type: object
      properties:
        width:
          type: number
          example: 10
        height:
          type: number
          example: 11
        depth:
          type: number
          example: 12
        unit:
          type: string
          enum:
            - CM
          description: Default dimension unit is cm if not provided.
    item-request:
      title: Item
      required:
        - description
        - price
        - quantity
        - sku
      type: object
      properties:
        sku:
          type: string
          description: SKU ID of the item
          example: 12345
        description:
          type: string
          description: Description of the item
          example: Item 1
        quantity:
          minimum: 1
          type: integer
          example: 2
        price:
          type: object
          description: The unit price of the item
          required:
            - amount
            - currency
          properties:
            amount:
              minimum: 0
              type: number
              example: 22
            currency:
              type: string
              example: AED
        cost:
          type: object
          description: The unit cost of the item
          required:
            - amount
            - currency
          properties:
            amount:
              minimum: 0
              type: number
            currency:
              type: string
        weight:
          type: object
          description: The weight of the item
          properties:
            value:
              type: number
              example: 1
            unit:
              type: string
              enum:
                - KG
        origin_country:
          type: string
          description: Country of origin of the item. Usually required for cross-border shipping.
        hs_code:
          type: string
          description: HS Code of the item. Usually required for cross-border shipping.
        dangerous_goods:
          type: boolean
          description: |-
            If the item is classified as dangerous goods. Usually required for cross-border
            shipping.
        notes:
          type: string
          description: Additional information about the item
    label-response:
      title: Label Response Encoded
      type: object
      properties:
        pdf_label_encoded:
          description: Base64 string
          type: string
          example: |-
            JVBERi0xLjQKJeLjz9MKMiAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDUxPj5zdHJlYW0KeJwr5HIK4TJQMDEy0jM2UwhJ4XIN4QrkKlQwVDAAQgiZnKugH5FmqOCSrxDIBQD7vApKCmVuZHN0cmVhbQplbmRvYmoKNCAwIG9iago8PC9TdWJ0eXBlL1R5cGUxL1R5cGUvRm9udC9CYXNlRm9udC9IZWx2ZXRpY2EtQm9sZC9FbmNvZGluZy9XaW5BbnNpRW5jb2Rpbmc+PgplbmRvYmoKNSAwIG9iago8PC9TdWJ0eXBlL1R5cGUxL1R5cGUvRm9udC9CYXNlRm9udC9IZWx2ZXRpY2EvRW5jb2RpbmcvV2luQW5zaUVuY29kaW5nPj4KZW5kb2JqCjMgMCBvYmoKPDwvU3VidHlwZS9Gb3JtL0ZpbHRlci9GbGF0ZURlY29kZS9UeXBlL1hPYmplY3QvTWF0cml4WzEgMCAwIDEgMCAwXS9Gb3JtVHlwZSAxL1Jlc291cmNlczw8L1Byb2NTZXRbL1BERi9UZXh0L0ltYWdlQi9JbWFnZUMvSW1hZ2VJXS9Gb250PDwvRjEgNCAwIFIvRjIgNSAwIFI+Pj4+L0JCb3hbMCAwIDI5Ny42NCA0MjIuMzZdL0xlbmd0aCA0Mzc3Pj5zdHJlYW0KeJytm8tyHbcRhvfnKWbpSzga3AGtQpqyREWyFJIq2RVnQZPHEp2hGFNUXHr79AVAN46OXXKVo1SFf/h/PRigATRmhr9ulslbO7s43cCPy7RubElz9PrHalg3bzevN+82ZvptY6enYP9lY5bp+eZf/16mq82vm2UOMRYHv17o1/jv9DFeYTFzNnCFFpD1ujmrrrs3m6PzzYNvzRTmmKbzn+Ei+P+bKc3FT6642ZnpHJo4GxMhwvnl5otv725vpodfnv8CQUA/Oof/dTHNWS7EEq/zh+FDmW2p4V0MmcKf347BzZzgzvxsAwB+dg4uwypS1HVjwhyKyDNoBbS7iL3p5rDZzkvQBAeE/va+hzdmNhK9KgnezE1XQ4vd/Xp03JJnm1Q/seYBsZmu1H9Zdf0ltDUF9UvW9Zcuz9mqX7JW/V/m5HX/2zk7SAeyQf8fwACUHBINwKPvX54+OjubXr84fXb8+uT4kR4NimcnN8cwxPNzxIBu9rkOaDGeB9Qu1h0s4WDJ0/OPx0+eTYcvTyYzL9OD6avHz86my+3d/fXP19urab34abt+NWYW/JuXxRWLyWrgxgrMC4OXv9mYYucUm167bmle7U2+3WCD8Z/kvUk4WupOjE+zBcbTHVLX5GXhO3n98vtPGoexrIFBDpOHYDxGS6L+NR6DQ05AruD0E00pUzWpDMrNKZFaDCnIjEthLf8WsguaB9mVCyjDvzMYDr1m9oG0sfRbDLTgnSBoQ1NozTi1q153tLUwMzMFKhnSaZm5RQtdxZnZGmp9pN/ZdufWxtl2dbnTLyt0v13inDBRIHspYeG2TKHYxmMzDIxY1Boy1zRNiroiBxLOkXJ8sYoa/m3m3y5zgY6CFhS+e0hK9CZKFNBwJ6g8XGShWYJkiE1hTyXObdLYU3HOmSYPtMxC5vt+Q9ZCsvqmLndulzrAJezSGg06wIV5UQ68GnZh19j3Wa6OOWx9weWzjtUNeXJQY+nivCTpduvdnAe90B1Ap8ZMGtbJpHXCfUf8IcxG6dYGyE+5Dx8pf6Td0Itae0jNNN6HKbTAYU+aWKfN0vVKvedxJKA5NLurneUQobUC19OoxmqpY5dxuqz6iqSHGHEOtDRDk4tteiWtBqjbq6bOyAtfBlsGEWLhMeOGoszqrpq56iFAmxYx0yLQew807d+tTc1fNcVIkOp6RJqn9YVcl+4d/c6PfYG7SumZgu1Y8AfJrGBxAimd5rSTGIFWW2nGoFFZvijMVRsWmrKgAq0smNjccZZ/i2ldp1agxVKmVoR7z7qLyhy8ut3hujj1+tYFS7Na8GE1g8FyJeIayluX9zCzccE//vDTxfX0/GJdp7P727vt3p1wfziDU/QvC5eTbKwxQ2fthHt8d/vh3dX07Xp7e/cnojpce2rUEjnqxdXV3fb9+8l+fpyUcShaHNhmqI7bvr+fDu+2F5NZzJ+I5XHvqjVh8tymBf8zHb86Ojz5/EiQEFh0cnWzBM9j8Oq7k/NHx9Ph6eHR9Oj5yenh+aOzPTEpuXSBYyKOAAatPeZjWrhg+ub23f3F5f3D6euSDOyO9N+9MWF10zEj1b+6ynY5wG6CQV/cXb+5fvfwkzBQoVjctPbESQVncr1hWwwHOv7+aG9bYIXf02fYBG7KEjNaIMLT2+lovX3z5v3nx4F1ovwVcTwtthTHhozFKsT5x/W7N1dwBvlm++7+bju9WC8+Xkzv4cft/d+mw/9t333YTvsy7neuATuVadfIi+WMO/pwvV7BdSb7N55Vk8MfLu4n/yciwwJWUzlDAlHgw7vp9OK3i5+u94xsxi3y0zBQVNSlJGRjrZoRpyc/HB4/+fxIWI/5NiyWs/fs8NXxCc2Hk8PPSVooHvDshjuDab3Wjg5tJuyJE7DE2hMnQNFR53tYUuG7w4kUooH/WLe/vxe/L5grWP9yo+BsxRPgPS61f7+H5Wi+vL3ZEw36t+RPTkdwV1jZ8XSChShy005fPXmxp8MtFagqBmxPGAPqD8otM9fT0NnhAYQ4eHz+el9LdqNYXvglzhczYp+ejNTx0UC5VowcH5tuJ8ZFfvysExH6c52GVFvTSB8cHp/sPQz18R6HO0Ghjx0CuVwnm7PO8ROF8+ubfXvhbggoY1MeQuBDCc6844uPe/MElwwJQQd7rCtSTTkfTOIAp9ufp+9uH06YJwdXt5cH0LWfHdFbLNo576Kzvk8GWKGmh9PR9uLD/cfp5H57s2/t81R5qCMol5hYfMWazTCGtZ0vL7cPzt7+9356vb1+8/Z+3/6QsJt0vFxb6WiZwlG0vBjhKfw/bz6jSRYf6CTVJJgTiwuZF8uX19vLTwdwT0tshFOsaoifuavMAzPm0h880YBjp4EYfALGbIfOaXKtEgYVm7tWc5dvN9Ak7NpO01lPaJJCk1nTVGN22vLxuNEshSazouEIXoKiA3ay0CS7nc2ajnhIEzph9S40SaHJrGk4DluhHdX1nWYpNJkVDdsHHGOFtnT07TTJbmezpgMf3hsd6elEp0kKTWZN06FQ6IxnW6FJCk1mTRd6xNJoT+twp1kKTWZFw7z2UdEOdwShSXY7mzXtcc8TehxvP443mzWdMOM7HRY6EzWapdBkVjSfs4Smo73QJLudzZqmp19CBzw5Ck1SaDJrOs6q00LBzVpgkgKjV7GwwCzqrmG98CpPWXY7mzXt6bFYpwMtWp0mKTSZNQ2Lu+qzqAdgrVJoMms6z0lfu9Dzuk6TFJrMik4LP3uqdHJYr3WaZbezWdMenyUIHWiv7TRJocms6YRPEYTO+NBOaJJCk1nTsMypEcuGTvaNZik0mRWdLRZuQjsqVTpNstvZrOlxvKHiyfraJIXeHe88jnemZ55CkxR6d7zhhJ/UfRc/7EMsu53NmtZDBDQsggpGJew4fMDCIpcVC0ugumuWQpNZ0wUP/bIDLvRgTrZA1sKTXe+BC734UAFgGbQ6AGnZBtk/RNDjhBHy7HQAlIofhxF5evYoPD7G1TUAaxWB/DoCWK3VEaCA0wFQCs/ugXdjEWLG0a9aRXC7dQgWKkMLhgxgqfgwbJLI56EUMXyIkQCsVYS8U40YLFeCjuCH/alqicD+IUIYShKDVYfXEeJQlFT/ECENZYmBysMObSCtIqSdysTYnVzA9xG6DaxVhE9yAcqXmHWEMNQnVUsE9g8R4lCiGKxC9JRirSLEnSoFX1TpMsX4ZahTqlYR8k6lYrCU0XMKqxE9qVirwtjsVCsGyxmjIwR+kdIjkFYR3E7FYrwePYxQhpqlahVhHF2IEJahbDHBDnVL1RIhLDuViwluKF1M8EPtUrWK4HaqFzwu644MeahfqlYBwljBGKxwdE6DLjqnWasAZaeKMVGPHUSIemTWpiVCHMcWI3h8jqciBDxxqQikVQTyDxEivj9TEfJQz1StIpB/iFDUGQMipEVtmGvTKkIZDiF4VnNDWWOwctFjyVod19xOZWOw9NE5jdWLzmnWKgL5hwh5KG9MXob6pmoVIe9UOCabocQxWMXo0WQtEdivIvRXFxB6eNAN4457e6RL1kdxqfBTr9eHPxydPHs2mWVyGTJ88WU4Y8M6mKDdkAj4lsZxmUZqrao4fOa0VmdTcKRyVGA0kqvJRpJqXnYqMuKr2k4mKuYbSaqT5BQSViusvioJZ6XFd5JV87JTkZFWiEYW7MJOkuokOYUMfI6tJKw8WP5XklXzslORDt8gdjLQ/G4kqU6SU5H0Fr6RcL4JppOsOklOIaOZoyL9XARE0ZzsU5wMJeSRtJNEh/Qo0iuQxiRLj0gqxKpTaBQu0U8d9HQCaiCp5mWnIjPneSXp7WonSXWSnELmhYr4SsLMwvqjkqyal52K9Pj2qJORjo6NJNVJcgpZFpkRUJ07neWsmpedigy0FzUy0nrYSFKdJKciM60ZlcQa3sgEqbKz5BUWC3SrYU/1eodJNns1azrpaYLFe3aKJil0GmcKluZF0fjVi+RglUKTWdFQZjur6KjnS5WdZrOmk54yVDErmqXQaZw3xqoLY2GryKDy3tjhmlASq662Wc+eKoVEr2Id7Rgdhjq0KJhlh9msaa8nEVW1WdFBT6Nq1nSmArTRUI9GmQ9VCk1mRcOinJKirZ5NVXaazZqOekLRB1pR0SSFjuOcwhIxKBpWbjWrquw0mzXtqOjtdBomFkuhyaxoWLK9Gm5Ye4OiWXaazZq2VKp2OshUWZsUmsyaTnRw73SmWqnTJIUms6KToUN8oxO9pes0y06zWdOengh3Og4zi6XQZFY0LsUC4zItLKmOklOTblaDhQuzIlEJiU5NRtmOEE0y1dYmBY56t0I6y1TkzxKtmlsshc56ouJLBfr+T+gkk2VtstNs1nSWyYRfL1l60lDpKoXOeqq9hd87mUw39MVViIqOejpUs6ZhUdR0kcmyNik0mRWN3+bJcFl8RqJolp1ms6bppZbQUe9aVQpNZk3TB1WdhsVe7VpVCk1mRVun55aFBd9qmmSn2azpqHct/PIyWEWTFDqOuxZ+7JcU7ayeW1V2ms2a5gNOp5PUm2uTQpNZ00XNL/ykT2UaKUHLML/wDWlWpNdbV5WdJa9mE36gIXCR6bI2KTCZFV0fGTQ60EvkTrPsNJs17fFTSaHzMLtYCk1mTfPDpkZHfubSaJZCk1nRULerIxp9E6jmB8tOs1nTRabTDX3tZxXNUuiiJxvQsKQ7TTu9c1XZaTYL/bsH1mLwIUGmrw/4vGpz4VfAP35hn/345dnhw9NXTx6fv/7aZ/rEZc+Zlc/L9BYyVLGywOe0UzuwVkHnVVjzOhWwfu0YqWplo3D0pW7nCt5j50g1joydg2yGxaNxeKrsGIlqZJtQ9F6lUVCHwERsGKvG8QuYxsHZM0or4XQJO1PnSFUrG4Wjj8UaF+mTgMaxahwZO8d1RufoiW7n+PkuW2v10rmI76wal+jTzsaxahwZOwfVQZExT/SUqXP8zImtbBQOv0xtWKbSqmGsGoa+TkGREIJg9CVwx0hVKxs7V+hNZOMKfY/fOFbVykbhrM7oEiVT16oaZ4echn3cSm/iK5ckDa2ykVmlOL98WYpCk2Tr2mR1V6+w+P2Y9Coez1SWVtlY9irW60Q1/M29sCQ764dcxbOYkWHBNxFB3S7LxrJXsVYnurFJgUkoO2Q5Hp+MEco5na9VNpa9ig14ahU2SQavTXaWvIotkuB8UlpUg1l2tqj0x3OSxy+ehU24SAtLsrHsFTbQ44/Owra4qB5m2Vj2KtZLutczksoolp31ajLww3K1ONMpRmUFy86WYX2mh9gqK3DhUG1m2Vj2KjYPsyBZtUqz6mQe50CKkvRI0vcMgvLnDZVlr7C48igWDjMpC8uysexVrJekRzZIWq9NdtarGYFnBCPLNJ4wvCT32mRj2avYgId5YeMwE1h2lryKLfhAo7F4GFGrd5WdJW9n8c8ulqTYgqWWsCTbhs9eYfk7187CL4rcb5WNZa9inZ4JeHKIQbH8sUtj3TAT8KCglnP8AyyFkupkHtZzPDNEo8gotcfaZGPZq9giic8nAi/rTZWdLWpWvKU/FVIrOv11khohlo1lr7D81Kez/D6ws/X1YGXrAyNhvaQ+sllnc5Wd9WpeYFUtCySW3KoAqbKBwWkq6AIES3evephlB8NQg+BnizqPcWkRlFQj2anIPGQx1Nle9S/LzuYxi7EsEpRr7o7WiryiZO3k79bfsC7AeLr+EbhLOYVafj/98cvp6TH+1VFcwL1A0sRo8KPqJf3Bn2Tit4Jhson+opdPZ77rtWtLn5itzd7kvg+QYfDT+I2twSMdnmX5T2oOaL/nj6mfv3w2/H3qP+Hf/wFF6z+4CmVuZHN0cmVhbQplbmRvYmoKMSAwIG9iago8PC9Db250ZW50cyAyIDAgUi9UeXBlL1BhZ2UvUmVzb3VyY2VzPDwvUHJvY1NldFsvUERGL1RleHQvSW1hZ2VCL0ltYWdlQy9JbWFnZUldL1hPYmplY3Q8PC9YZjEgMyAwIFI+Pj4+L1BhcmVudCA2IDAgUi9NZWRpYUJveFswIDAgMjk3LjY0IDQyMi4zNl0+PgplbmRvYmoKOCAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDUxPj5zdHJlYW0KeJwr5HIK4TJQMDEy0jM2UwhJ4XIN4QrkKlQwVDAAQgiZnKugH5FmqOCSrxDIBQD7vApKCmVuZHN0cmVhbQplbmRvYmoKMTAgMCBvYmoKPDwvU3VidHlwZS9UeXBlMS9UeXBlL0ZvbnQvQmFzZUZvbnQvSGVsdmV0aWNhLUJvbGQvRW5jb2RpbmcvV2luQW5zaUVuY29kaW5nPj4KZW5kb2JqCjExIDAgb2JqCjw8L1N1YnR5cGUvVHlwZTEvVHlwZS9Gb250L0Jhc2VGb250L0hlbHZldGljYS9FbmNvZGluZy9XaW5BbnNpRW5jb2Rpbmc+PgplbmRvYmoKMTMgMCBvYmoKPDwvQ29sb3JTcGFjZS9EZXZpY2VHcmF5L1N1YnR5cGUvSW1hZ2UvSGVpZ2h0IDkyL0ZpbHRlci9GbGF0ZURlY29kZS9UeXBlL1hPYmplY3QvV2lkdGggMzYxL0xlbmd0aCA5OTgvQml0c1BlckNvbXBvbmVudCA4Pj5zdHJlYW0KeJzt3aFXKkEUBvAJBAOBQCAYJhAIBAKBQNhgIBAIBgJhA4FAIBgIhD2HQCAQCATCBgOBQCAQDBMMBIKBYDBsMBgMBoPBwFtc3jvz1IMIu/vN7MzvL7j3O5zjvbsXJMRVadWMbIpoQbM3H57W7HpgmeUCPUNXFFGLzWevzu3Mtpo1I5NEFxclqy9B8x7vmN3vmKUCjaELlZ2zN2jOi8OmY6tRNdL6g36MQ3P+j7O6sXtt8yJP0eVLI3FU0PwH/YFNRlb90qAJdC9CS58aNOfdWS3s7pVp5M7RbYnH8DFo3vM9mwwts1KkcXSLYrgMKGjOm7Oc213V96JG8EHz1N2LrHCD5ii2F41hQfMU2Ium6Iw/i+pexNDB7hOlvchBh3kg6feiV3SCvyflXhRDp3YiafYiik7KP2LvRQV0PMEQby8qoyMJnCB7kYnOIVTAvaiD7h0l7L1ogG5YBGHsRTa6ScEEthcxdGfi8ncvWqPbkcPpe9ETugXpHLkXocuW2+F7UQpdamT8sBdl0fVF0jd7UVDHBtrOdi8aJlTbwFEoIS10DUpw/1J20TWo4JXoDTwUDvnu3F/zHXODXqKLUMGMyHNsILWxG/Q7uggVWITE0TUooRmpYwOBVfUGHg4jlHN/bZMmpI6uQQlJ5Lm/StzpboSuQQXbDVy4c/8oWhF9bBCKGzfoB3QRKrDdoF/QRaigJ/+5vxzaegMPh0lIHl2DEi4IKaFrUEJOHxuEgxLSRtegBHe666NrUMGzPjYIx73ewMOxPTaYPqKrUMDEOydNZoxa07Jnt46E376XwvDLrfQZLZZNa3DN1vr7Fj6y9n4T4DxrmK2uPV86+vLjRPUfvnTxT5walbo1mrCHZ3TNUqocGjSP5i7Mds++WTno8uVRPCZoTiJtVBvWeMoc/VB7L3pi0JwYLZTMTt9maz0ufhXQL+OkvHFxfuu8oTsUw1swOfO8cXF4ze5VHhed4IPmbcfFq669UG9cXIYbNCdBjUtvXFTir+gcFjSP5r1x8c5B5xEYG53xZ0lvXJyxiD10sdDB7uGOi2WzM4jGuNhCp3mgVNaotWQeF2voBH8vTosVb1yU6aGLgY7tNOc5d1zs2YuV8ONiBh2Vb7bjYsMaTQUdF0X8ndTT0XzJbPeFGhfRkQQumTGqTXdcBL+je0TnEKYzb1yEvKNbo5tH+RgXP97RhTMuMnTDAtiOi3VrOAl0XBRuAwfbvqPzxkWfg+6jOxNXIr0bF315R9dBtyOF2G5cZHdHP3Qx0T1I58iTrhK6bpn95qQrjy42Kn466aLoAiPo25OuyP4zO0H8Pena7St/ALz+85UKZW5kc3RyZWFtCmVuZG9iagoxMiAwIG9iago8PC9Db2xvclNwYWNlWy9JbmRleGVkWy9DYWxSR0I8PC9HYW1tYVsyLjIgMi4yIDIuMl0vV2hpdGVQb2ludFswLjk1MDQzIDEgMS4wOV0vTWF0cml4WzAuNDEyMzkgMC4yMTI2NCAwLjAxOTMzIDAuMzU3NTggMC43MTUxNyAwLjExOTE5IDAuMTgwNDUgMC4wNzIxOCAwLjk1MDRdPj5dIDgwKAAAAOzs7AAAAAAAAMfHxwAAAAAAAAAAAAAAAKOjowAAAFdXVwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPX19YKCggAAAAAAAAAAAAAAANHR0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD09PQAAALGxsQAAAP///wAAAAAAANra2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8fHwAAAAAAAJOTkwAAAAAAAAAAAG5ubgAAAAAAALy8vAAAAOPj4wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACldL0ludGVudC9QZXJjZXB0dWFsL1N1YnR5cGUvSW1hZ2UvSGVpZ2h0IDkyL0ZpbHRlci9GbGF0ZURlY29kZS9UeXBlL1hPYmplY3QvV2lkdGggMzYxL1NNYXNrIDEzIDAgUi9MZW5ndGggMjc5OS9CaXRzUGVyQ29tcG9uZW50IDg+PnN0cmVhbQp4nO1dCXvTOBCNwZQac2w4bI6EJRSjBEy4cTCsmuDlcrn+/69ZzYwux24pbRI5yb7vA1xbdqyn0ejNjFI6HYGHr88OPlzq/I9lo18i/rkw/HJtOv5xt3vO9RttKB6U87gzOXO/P714dnDjheuX2yTs1Ii2cfXZsP/2+njvbvex6xddd0yOJNrCv5Phwcfp80eD9/8b+klwXJ4rmOz87F95N/72qev69dcGuyci2jb0y8N7t6bnfw26u6770mq8Py3RFv6e7Dzov/prPLj9xnW32ofBAom2cfPl8N7+dPzwa/ep6y62A7+WRLSFz5Mn3/uvtj0uer58om1sb1w0XS3RFrYsLvrojGgbWxAXHbjmeB6bGhcNXRN7FDYpLjp2BO4Yax8X3XHN4J9jLeOix65ZOyXWJi7qumZqcWh3XHTXNT3LQfvioh+uKVk6WhIXjV3zsFI4jIuuu+67K6w6LrrmusNtwCrion79Y0MWcJ6svrutwNLiooYIPB0hiiBbfT/bhMXGRRfqHyCJHo2iXJ7Jgl6apixcZTfbhdPHRf/UHyooDnjgR+LfGE/kkWQ+tanmfDV9bBtOGBc1PEkwChwmhbBp8B45cOwVaOOG6QC8CzqXLODb6mSOHxddarhbMIjEheJAOI9E2HMBzAO1qW7FgHhW0nlG58KAMbalhv6buOhD/Q4uCKQj4ax7ZelLwyamtUn30M7hiEmiQ+ncIyaaZ4zzrfXpDXFRw2YDQzRDCxYGPZOXIm27OAoeOXFGriZUnhxdCqcjL019Fi+9Z+0FxEX7u40ReCyIoiMkOpQuG5AazvGYXEkPG2Qe2HKScTB1XxFNa6i8JRTKhW2jQxdx0Ov6WaaZ8eGIK5ddIrnaSYMbEX8SPMvJZ4fqtpEgnAdwqkDa9ZMRPj4vYPG2CBexUr6qnzVEF2DAgfYkVYsW9gsNfDwrfvY0oRnoQzhIaIwyNU4zLdCzUpl85FMMusmx6J1OYwTuK0ecoOpgFtGe5aNhOHLkDBskWnUj89iMW7fq81lANm58S26agnPZPI8+6TRt99c0ge8VNMaGrcwik6uFMkDbRqYS84RUtqkTjYYd4cQpOGeRse9SOhf0JzxK4zLO+SZ49KEg+kn9tKQj7JFODg27ueWuOUq/GSg8pDWvehhfti/sJxuVMtIeihOzAf2EzqVXllIzSr0I4T9bY8Lvdxo3G3hGLhTyZ/LZWSRJAMQ4CuAwiCPbwxRyTjA7wCl1yImjA3/75qRsSswmdG9usi6W8llDfBRE/10/beTwjNQBMB4nSe7Z8YqMUnqopv2qRUu/ewjRMF6+njicHspoDCFE0v6FlyGPmTgVeZZfakAWMxa32OKnnc7ThtMJzxmb+SxXXfONWeW6FTOLGDLDzSjEipaetXaWZP7pDJNVJAp9ziFfBfNG0i4YzdGDS81Inw5K5wieZc7Lz9T7ty0ivXjczQaB9CaeJQhmkghPEl1GWt4VyjWnVaKrOqPQ/ik0TWERiPB6qmx47iF16MdK5wJvFKhrrXA4j46/3b+eLVIWh6k9GICZ9DVJT6+eqekxABhJiyidIYOKHmY3hSHycZw8K+FyNNHi84qk5L4kGl9Ieiw4joIj7l0NBqfZ7h8z8uBZIW0JD0YeWrg07bklLKi4bLiY6IQVNU2gRYLH2uV7RlI2Q42rFII0U+gS02trSbmYAsYsW7Vved/pnD/9UzLOyGaynl5E5aU5oitrYzJS8SQzTUmcozrUyvC3gsMMLAAe4albIBLQ45QqU6e8Y7q6St2LRW/3T6jipdatbE4rMEsdqggloFSrbMpxkGDCh3pQqkQ3kNPT+ggg6Ix9yyEpFQnP9mwNKcYgphdQw7Q0Sxfq7tZynkzIep5n/1zxtpLohMSKoV1qD18RHY7s6BKkZpr2mF2nx8VQeeIEBi5XNwPrMmmO84RGGpZtBuInSirTTFp66i94BYUIfKXb/StqTzlsD43YROCsVK6V2lbDeJX/QygrJnlHZTUfFtVEXYRRLGhagUthWtpwctkzrR4BOjyyF98FFI12Oqve7p9ZL6wsicJEGazLEkJWJToydyWi12kqlaE5i0q/oDthcVWOGRrNSM+IJtwQLRVlWplmaOnC+UUmWqgUjeCTTpJj/CmIvvznty0IYg1F2kPsNrNLCDJEImcwH11KJLwikblH2oORffboHxgwCJ960qWkqNDVHKkRXV92q0WjkqJmGgaeH9uh9wXR/x638RKRhbA5KgVeezK6BPZlpw8heh4JTQE0yoCTFMf1D40chy6X2l8SnUXqDsXuyMow0JtVi0bUROrRiHxdmuKGgSNzjFfauN1fvnCe4kpVmtzTocjpFiQ6r3pwUovC0YRo0IboiFNyMrHNuLrsAuaKRtIAyKSpsZwPvhKjSdDgW96txXZ/QXl+ZIORB9dREsLKWqjZHmPSJcWhYrhGyn0UZkEF92KIxsAV9Ix+dK1oRBIROaWJVhDtoRoRz1awCuNO59OpeXAPdKDgolMgFhdOzrEIJz12jOzAhB+Z4gIucGXFjHXORD25XjTiqMtRsxDRapjo81B91i36W6ezt0QCVgUmTTjNrIVthnZHKkNrmIxIFNd6PM/JcC31KFpHaWQRXS8awQN7qhBnE52ja8qixrzM7Q3Z7o87MP24EonG6CVkhIhqkOJOKyNLsNSjWna1SdaLRqJJQElgruselPGJwHeAVG1YFbudzrtFd9otTCY6Q1NLTV4RfC3XEbgh2hI1M6vEr67NFY1Q52N6hukkPF2HuCep60OEUHdvF9XF1iGDqm7MemCeqhAhI/NKOtAiupaPrReNULYEMAmYWhxlC1gm/aaVsCxvNm822ESEZOmxZ0XgEuCYfcbisIHoetEohRMwW3KKYa3qs2ck9hxerjwCbwkCv2eUgc5voHfwUkF6rtmqFY0KNGCwXL07S82HwASzc4DNBgdXl9WbdUEuEyeRKfkYu64VjchTgCT00MItosHOi8aPuEfbSV/cGJy9OO3fPzNZw2/fLwiUOImZn6aepZ3rRSOZck2V3LbzkdFhlaD92l7pc92vP8bTa1+GFxq+b7E9sPIdc0WjTBpwroi23fohkgM3GxyBNx8G49ev+t+fTBp2fmwRKkUjrjyFN9KSPFVbYkfzKSmF87/50oXG0+7g4fnprXvDyzdX0rf2ImMz+e2pEVGu8iq9+j5Dg4fHJdpG9/a38bsr/Z876/J7a5aEMMfvAqq9KelRRH89CdEWdt8PHj2ffjwYTtqQ1HaFBPbbw07jUNUma1jg154fd+/uja+/7Q8vbLNcPKzKtaTfjHOJ5OL3M5PPq+1nW/F5OTzbILm4/2X4cpvl4mT5RNsAufjXq/6D7ZOLT1ZLtIXd7uAXycWtWEW/OyPaRvcTycVnmysX+645nscLkov3hxuWdJm6JvYICLn4Y3z92mbIxdeu2TwmLn0YnH29znLxrGsG/xxPu18fklxcp6TLwDVtp8Ob20IuXuk/2Gm9XLzhmqqFAeTi8+mtg5bKxTb+ntTTo/tpb/zubavkomtKlo4XNwaPLgq56LhGd9U1D6vEOZKLTmp0F1x33hVQLmKNbjVycei6wy0AyMXz0/17S5WLrYvAHQNqdCQXF0z0W9c9ay9230u5uJAa3XXX3VkLPJZycfjsxEmXses+rB1OuKVrz/V7rzP+ZEvXJ9cvuyn43ZauDfi/p1qHxi1dG/uf2bUEakuXjFf+A43a8PYKZW5kc3RyZWFtCmVuZG9iago5IDAgb2JqCjw8L1N1YnR5cGUvRm9ybS9GaWx0ZXIvRmxhdGVEZWNvZGUvVHlwZS9YT2JqZWN0L01hdHJpeFsxIDAgMCAxIDAgMF0vRm9ybVR5cGUgMS9SZXNvdXJjZXM8PC9Qcm9jU2V0Wy9QREYvVGV4dC9JbWFnZUIvSW1hZ2VDL0ltYWdlSV0vRm9udDw8L0YxIDEwIDAgUi9GMiAxMSAwIFI+Pi9YT2JqZWN0PDwvaW1nMSAxMiAwIFIvaW1nMCAxMyAwIFI+Pj4+L0JCb3hbMCAwIDI4MC42MyA0MjIuMzZdL0xlbmd0aCAzMTQ5Pj5zdHJlYW0KeJytWltXGzkSfvev0NMeMjt0dJc6T2swSchCwmBYJmcyDx3TIZ6xMbHNzObfb5Wu1eDMIbuLc0782fWVpFLdpPaXEWdaykZZtoS3nC1G0vPGKvo2CSxGn0dXo9uRYH+OJHsD4r+NBGeno19+5ex69CXwOVvfjA4uRs9fCuYaJdjFJyDg54LJxoMyoRtr2AUM1wjppGcXs9HeD1fj9wfHJyds8u7wh2cXv4Eu+PjoIqtSgfNIFW+QH1R5zUVQ9Xa1ZdsV+9izbrvtZp/7a4R33ez37qZn++x1dxs+OVzdr+f9+tFg8huDcdM4UwZrw1iSS7XPzT737PTr5PUJG58dM9Fw9py9OpmyWb/ezj/NYQaL7mO/oEMFWzWcq1aixYTyTQuGFjj0ciRa2Tib8aJgrhOO4hl+HuFk8VWNj2aWdBVCt41HHS7Zfx8211sdFnJ19vOj2aEyCSY2BizdNgJdRAI7WN402qGHgGuACoJVo9qMA/IBiTYg2KPgAC2bVa6O38qGS0AKvUbiyvE7sH0QFY02ARodvhQBcBd40mSEoh4VJLx4gKVs0WVwFNCjeBPnYwQylWgkYosTwS9lXriUtpEFzR6YZQHml9w2TgXrCo2GgvFEG5XjFkkBO2YpbhsnMg4oAOkCUCrM0YUVZaqK3/r4rcQVCNe0OA/R+GBSwOgngCFuEWkREK4BiMZmhIZyIbgjRkPZxvsQVAK4Uje6rEdK8FWd0ezBasP6FczEZ22wfmUaTiRwNLRgwWh7X0dHF5bgoa3OW7UMMt6QrVQW3xSrS60aP8A8rgDcLUDdKEegwyxWpY3BNwXnGUhHVqFtcJ46a4++UrEW6OeDVYjWNAaDs22MSyHDC14E22mMQ984GWI7ySdMdZR5wJfSkr3iae84Tq/qyHgwD9iYNugwTSszXgRMNoiIBxzMkfJ/nBqosG3YtDxVxJ6sLIsnPFCR48L6kASKBQFbTWZV5QMOOhxvWrorSaZYI+O0epRXemgNaU3UkROZ5ZjOq28ZiCdPsWvcA+cwEGWCTGOAEck0qAfEY8xyjBb062g2G79Cr06RZXTDDYksaxvjqX1aTHl1rYNBMfIgE1nbKijKPBRlfJ2/wroey0O1Vy4X01wjYKhhiQhVRrUWx46VTgkXCsT08/zurl+zFzvqpcYofKzGW0xKuWCKWOgn9x+7OTvtFgs23a7W/XeoE5hA/m/qnMHEG9RJoY17qO7VenUPjcLLxWq1q0f4hlYMCJ+1mjZq7a6v1/1mw+R36NFYirIeHTubi36zZeN13zHBxdN1GY8eFA3ndBs7F45/bHJ5MD7+Dk0yfB5aB6GgUAZVl2+PL44mbHw+PmBHp8fn44uj6Q6dprHDdkRjllCtxoYhrtQaHbf1cHULrdt2l7OF8Nihx4dMHfRYcPhosb+3TkBZD/+G/Y3SoXKW4EiYBEfI2o9tABUA6lq0pnA+muC8n/XzPx6Gh4AM8ueoxayrFJRTzMIRaYNdFHYBmNYLnIbUBW1BEc+4EEyLNY0wokLI5VCtk3oJNuVtUV9gVZ/FE66EqJ4wikPIncbAHinYgmsrYiv5ZsUOFqubm81Ov9qpRpri7f+bHl70gKfH4Pvn/PbmerVkh/3tdt2zd4vua8c28Lbf/sjGf/S39z3bHUw7h4BmomahVsRgOrifL65hHCZ/jAmDKXzTbZn+Ds0w+exY0KZGxxqv2Xn3Z/dxvuNMZLAIP9YDWV6mcIfDhZIk3M+P348nr5+sSrYuBFvcl6xqOr6cHIdoPx5/R3wqqKQuTUsIo/7bOAeXszbFucADWQpzYwX8SbXL4t/SJVQ5ikJd1XFOG6wj/9hCrm1mq+Uga5BKK9sQWyV/JEzyhwgdwMNjpHS+8Xl7IIfGfHd++frdjm15pAKaEmEGOqxvVYyX8dH+5OeD/dOj90/RJHQwClXluLQ2bfE+zGj/1cXVU1RJKKWQLaqqvQZpIc1KF9JoNVPEgx5kmGajlaCO6hwM3rq4wrP16vp+tmWTftvNF5vHXvNNbbL6sWhdtPkvZ7+yo5/Pzo+mU3b17vxkcnU8OWIf9rT/8OzJmqF707lOK2ja4jy7r1AK0iyfUF2jKh063qRKmrgTL88vXrDWemlda57SP0RdMhzPUpEyKdjwfuJgvlhgopr26z/ms/4Fm1xc7swH6FQ0Hzg8O+K2WJcTbCvjcl/23fYeGhz2PKvdgBnTW3a4uu53GHRXj5HGUGWzhPIqzf1+Owe1f2MX3b/h/8vbu25+/WFvMv0u1QZ8vsyeR83j++1q2W37azaZ38y33YIdL7sbsNGHvbM3Q+08nKgNjfqI/8KdNV5O4HWBy25i8sjYUi+hKv2Fpzy8QYvauMhVV3to6lMH8om9Xb1gmLf2r1ezfc7VUxUKzF25a/XaxqI26WeLbg12+Ve3gBr5Cara4T0kx+XmBeYAKCfjo8mTh4DuXdk8hBSipH8wwAt20Hf326/seNsvN0OLw0ZhuSwWT5hY/OFm+wYKlXCq4Xk87mWsEzh/huti0893W3Z1swVHvXx3+uEZ+O5kvqSf7KpJPpipDqXCuVTY0KzFdKxEG3cXbwF/v9kRW48i1hg80dEZc5Ub2LM5dJa7POPhVKQVZCJ7omRgAckPRKsBI0YD4sUbTB+iAsjLUWxtElxkiJd0iKJsQp9H4PiQ7CvX41mvciPM3ChbueGap3Dhc4ihwk0wc6Ns4UqFUpVrsWmq3AiTdJKtXIcrr9xwkVa5EWZulK3cFo/1hauIoVS1UpIqLKXwcF9ZYETCCyjJJsnKtNiSVabDu8BKjTBzo2zlgvUpt0WPq9wIMzfKFq4Glyb21QrPjoWbYJJOspWrMXNXrgn+VrgRZm6UrVyLdyOV67CAVW6EmRtlC9dAK0WsDKfUlqw3wSSdZCtX42Vv5Vq8jarcCDM3ylauw4vsyvWNo9wIMzfKVm7bOMKFoNTENRLM3ChbuFAhtSVcqDmecCNM0km2cmFWhNriJVilRpipQbQw4ahINsgJvMQqzASTcBStTNgBwlR40K7MCDMziFYm2VboHC2JugQzj+4pNKKWLNKFm/ZKjDATo2zheomtT+F6RcJ+kWGSTrKVG67MK9eR4F9kmLlRtnJ9Q8LOt9jnV2qEmeobGnUtnsELE0s5YSaYhKNoZcL8CVPj3UFlRpiZQbQyHUkLkP05x9vImv4TzmRHswbkfx4etBC6xLMToUecS0ASJ/zwjIjwNTYXhB9x4Udxwjck2pAf7nQIP+LCNzQakd+SiAN+fGRS+QkXfksjEvh4vDaUb/DWhfAjzvwkTvi20ZLyHT6FIPyICz+KE354ikH47aACZ1z4UbzyJR8UYYEP6yg/4cxP4oQvSUQiX+F1A+FHXPiSRizy7aAYC0lbD0kajyRYmdCx0YIslCSpYlFw5idxwleDsgwH+EFdzrjw1bAyC2UGpVlA6fYDvqXFOYsTvhuU5/AcmFou4cJ3wwottBiUaLwIkSQ3ZlyaPjGs0gKKuLSUbxvq+BEWtqFhjGw3KNT4RJpW6owL3w1rtTBiUKyFCQ9rSMcaceYnccJXjRjwzaBiZ1z4UZzwPckzyG8HVTvjwvc0DQHf8kHhFlCcaeXOOPOTOOFrkmeQb/BxHOFHXPiapiHk024Z+X5QxDMu/EE3jfyWFnKBj+UoPeFCbwe1HA84hh43nB4U9IzLoSGKE74ZlHXh7KCuZ1z4ZljZhXMky+CRBS9I6Zkl4sJ3NAkBH46wtLwLH54YEn7EmZ/ECd/QEi+8HdT4jAvdDKq8gPaBui60BJ4aL+HCdoNKL6Dye2q7VuFJsdITLocuTtMQ8vWw4MeHxYQfceHrYcX/9K2bGTAyeiz+6CPfzFid7qvyT4IEx6c7hnHdDi7qvzD0UDhZoiot8VkmFE7slPHXFJbNluz5fHkj2GTFfsKTMNRhr8lJOOLBVYLQjy7TsJsod5HOm/Qro27Zsw9781t22N2Fa6OTfrvt15udl4cPFeOFlHqg2nAfVU/nN7fhRu0JiiSsAXMEVWS9itcdk27bM5jkZNKcnjbv4e/hfRZ0oUpVi0Q4eOyz43YRGmhefggl0gXdyXzW3256draAQTds9YndhasLBhbapIuunQ8F/eOfWjleHgkqJ9N9ypsJh/KCjzG0tVZopbh7wlPGePOncXXxxgycKJp5n93hD8IEzlWwfarrJ3j9B19BGzMKZW5kc3RyZWFtCmVuZG9iago3IDAgb2JqCjw8L0NvbnRlbnRzIDggMCBSL1R5cGUvUGFnZS9SZXNvdXJjZXM8PC9Qcm9jU2V0Wy9QREYvVGV4dC9JbWFnZUIvSW1hZ2VDL0ltYWdlSV0vWE9iamVjdDw8L1hmMSA5IDAgUj4+Pj4vUGFyZW50IDYgMCBSL01lZGlhQm94WzAgMCAyODAuNjMgNDIyLjM2XT4+CmVuZG9iago2IDAgb2JqCjw8L0tpZHNbMSAwIFIgNyAwIFJdL1R5cGUvUGFnZXMvQ291bnQgMi9JVFhUKDIuMS43KT4+CmVuZG9iagoxNCAwIG9iago8PC9UeXBlL0NhdGFsb2cvUGFnZXMgNiAwIFI+PgplbmRvYmoKMTUgMCBvYmoKPDwvTW9kRGF0ZShEOjIwMjMwNTA4MDk1MTE4WikvQ3JlYXRpb25EYXRlKEQ6MjAyMzA1MDgwOTUxMThaKS9Qcm9kdWNlcihpVGV4dCAyLjEuNyBieSAxVDNYVCk+PgplbmRvYmoKeHJlZgowIDE2CjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwNDkyMCAwMDAwMCBuIAowMDAwMDAwMDE1IDAwMDAwIG4gCjAwMDAwMDAzMTMgMDAwMDAgbiAKMDAwMDAwMDEzMiAwMDAwMCBuIAowMDAwMDAwMjI1IDAwMDAwIG4gCjAwMDAwMTM0ODcgMDAwMDAgbiAKMDAwMDAxMzMyNSAwMDAwMCBuIAowMDAwMDA1MDgyIDAwMDAwIG4gCjAwMDAwMDk5MDggMDAwMDAgbiAKMDAwMDAwNTE5OSAwMDAwMCBuIAowMDAwMDA1MjkzIDAwMDAwIG4gCjAwMDAwMDY1MzYgMDAwMDAgbiAKMDAwMDAwNTM4MiAwMDAwMCBuIAowMDAwMDEzNTU2IDAwMDAwIG4gCjAwMDAwMTM2MDIgMDAwMDAgbiAKdHJhaWxlcgo8PC9JbmZvIDE1IDAgUi9JRCBbPDY3MzgwMjMxM2ViZTFmN2YzNjc0MDcxOWE1MjVlMTNiPjwxNmUzMzg2YWQyMGU1YTAyNDZhN2Y2ZWE5ODJjZTllMD5dL1Jvb3QgMTQgMCBSL1NpemUgMTY+PgpzdGFydHhyZWYKMTM3MTMKJSVFT0YK
    label-response-url:
      title: Label Response With URL
      type: object
      properties:
        pdf_label_url:
          description: The url of PDF label provided by the carrier
          type: string
          example: https://www.plugnplay.com/label/1234567890.pdf
    location-request:
      title: Location Object
      type: object
      properties:
        contact_name:
          type: string
          description: Name of the contact person or business
          example: Jo Bloggs
        contact_phone:
          type: string
          description: Primary phone number for contact in E164 Format with country code.  e.g., +16175551212
          format: E164 Format (with +<country-code-prefix>)
          example: '+16175551212'
        alternate_phone:
          type: string
          description: Alternate phone number for contact in E164 Format with country code.  e.g., +16175551210
          format: E164 Format (with +<country-code-prefix>)
          example: '+16175551210'
        contact_email:
          type: string
          description: Email address for contact
          format: RFC 5322
          example: jo.bloggs@gmail.com
        location_code:
          type: string
          description: Code of merchant's location created in Carriyo
          example: ABC12
        carrier_location_id:
          type: string
          description: Carrier location id that represents merchant's location
          example: 118
        address1:
          type: string
          description: Address Line 1 (e.g., street, PO Box, or company name).
          example: 1 Financial Centre Road
        address2:
          type: string
          description: Address Line 2 (e.g., apartment, floor, unit, or building).
          example: Downtown Views, Apartment 101
        area:
          type: string
          description: |-
            District, suburb or neighbourhood, represented by the Carriyo Area Code if known. If
            not, it's a free text.
          example: DOWNTOWN-DUBAI
        city:
          type: string
          description: |-
            City, town, or village, represented by the Carriyo City Code if known. If not, it's a
            free text.
          example: DUBAI
        city_name_en:
          type: string
          description: |-
            City, town, or village, represented by the Carriyo City Name if known. If not, it's a
            free text.
          example: Dubai
        state:
          type: string
          description: |-
            State, county, province, or region, represented by the Carriyo State Code if known. If
            not, it's a free text.
          example: DUBAI
        state_name_en:
          type: string
          description: |-
            State, county, province, or region, represented by the Carriyo State Name if known. If
            not, it's a free text.
          example: Dubai
        postcode:
          type: string
          description: ZIP or postal code
          example: E1 6AN
        country:
          type: string
          description: Two-letter country code (ISO 3166-1 alpha-2).
          example: AE
          format: Two-letter ISO country code
        coords:
          type: array
          description: |-
            Latitude and longitude (decimal degrees) of the address as an array. e.g., [25.19741,
            55.27442]
          items:
            type: number
            example: 41.40338
        type:
          type: string
          description: Type of address. i.e. business or residential
          enum:
            - residential
            - business
        notes:
          type: string
          description: |-
            Any additional notes e.g., "Leave the parcel next to the bin" or "Collect the parcel
            from the neighbour"
          example: Leave the parcel next to the bin
        po_box:
          type: string
          description: Box number if the address is a PO Box
        personal_id:
          $ref: '#/components/schemas/personal_id'
        address_codes:
          $ref: '#/components/schemas/address-codes'
    parcel-request:
      title: Parcel Request
      type: object
      description: A reference number for the parcel that is passed to the carrier when creating the shipment
      properties:
        partner_parcel_reference:
          type: string
          description: A reference number to identify the parcel
          example: parcel-reference-1
        description:
          type: string
          description: A description for the parcel
          example: Parcel 1
        weight:
          $ref: '#/components/schemas/weight'
        dimension:
          $ref: '#/components/schemas/dimension'
        parcel_items:
          type: array
          items:
            $ref: '#/components/schemas/parcel-item'
    parcel-item:
      title: Parcel Item
      type: object
      properties:
        sku:
          type: string
          example: 12345
        quantity:
          type: integer
          example: 10
    freight-request:
      title: Freight request
      type: object
      description: List of packages of type pallet or carton in a B2B shipment.
      properties:
        packages:
          type: array
          items:
            $ref: '#/components/schemas/package-object'
    package-object:
      title: Package object
      type: object
      description: List of packages of type pallet or carton in a shipment.
      properties:
        package_reference:
          type: string
          description: A reference number to identify the package
        type:
          enum:
            - pallet
            - carton
        weight:
          $ref: '#/components/schemas/weight'
        dimension:
          $ref: '#/components/schemas/dimension'
        parent:
          type: string
          description: A reference number to identify the parent package
    payment-request:
      title: Payment Request
      type: object
      description: |-
        Payment details including the total value of the shipment and any pending Cash on Delivery
        amount.
      properties:
        payment_mode:
          type: string
          enum:
            - PRE_PAID
            - CASH_ON_DELIVERY
          description: |-
            Payment mode of the shipment can be `PRE_PAID` or `CASH_ON_DELIVERY`. It defaults to
            `PRE_PAID` for reverse shipment or if no input is provided.


            `PRE_PAID` is the only valid value for reverse shipments.
        pending_amount:
          minimum: 0
          type: number
          format: double
          description: |-
            Outstanding amount payable on delivery of the shipment. It defaults to 0 for reverse
            shipment or if no input is provided.
        total_amount:
          minimum: 0
          type: number
          format: double
          description: Total value of the shipment
          example: 100
        currency:
          type: string
          description: The currency for the total and pending amount
          example: AED
      required:
        - total_amount
        - currency
    references-request:
      title: References Request
      type: object
      description: |-
        References for a shipment, provided by the merchant.


        The `partner_order_reference` is mandatory but not required to be unique. It is usually the
        customer facing order number.


        The `partner_shipment_reference` must be unique for every shipment. It is mandatory, but is
        copied from `partner_order_reference` if it is not provided.


        If a single order has multiple shipments, then they will share the `partner_order_reference`
        but have unique `partner_shipment_reference`.
      properties:
        partner_order_reference:
          type: string
          description: Order reference provided by the merchant
          example: order-reference-1
        partner_shipment_reference:
          type: string
          description: Unique shipment reference provided by the merchant
          example: shipment-reference-1
      required:
        - partner_order_reference
        - partner_shipment_reference
    carrier-custom-attributes:
      title: Carrier Custom Attributes
      type: object
      description: |-
        Custom attributes in the form of a map:
        ```
        {"attribute1" : "value1", "attribute2" : "value2"}
        ```
    scheduled-collection-request:
      title: Collection Request
      type: object
      description: |-
        Provide the `scheduled_from` and `scheduled_to` to choose the scheduled date along with
        start and end time.


        Example:

        "collection": {
          "scheduled_from": "2022-01-01'T'10:00:00.000Z",
          "scheduled_to": "2022-01-01'T'12:00:00.000Z"
        }
      properties:
        scheduled_from:
          type: string
          format: date-time
          description: 'Date in ISO 8601 format. Example: 2020-09-03T17:07:05.000Z'
        scheduled_to:
          type: string
          format: date-time
          description: 'Date in ISO 8601 format. Example: 2020-09-03T17:07:05.000Z'
      required:
        - scheduled_from
        - scheduled_to
    manifest-request:
      title: Manifest Request
      type: object
      description: |-
        Provide the `scheduled_from` and `scheduled_to` to choose the scheduled date along with
        start and end time.


        Example:

        "collection": {
          "scheduled_from": "2022-01-01'T'10:00:00.000Z",
          "scheduled_to": "2022-01-01'T'12:00:00.000Z"
        }
      properties:
        scheduled_from:
          type: string
          format: date-time
          description: 'Date in ISO 8601 format. Example: 2020-09-03T17:07:05.000Z'
        scheduled_to:
          type: string
          format: date-time
          description: 'Date in ISO 8601 format. Example: 2020-09-03T17:07:05.000Z'
        tracking_numbers:
          type: array
          items:
            type: string
      required:
        - scheduled_from
        - scheduled_to
        - tracking_numbers
    scheduled-collection-response:
      title: Scheduled Collection Response
      type: object
      properties:
        pickup_id:
          type: string
          minLength: 4
          example: pickup-id-1
    status-event:
      title: Status Event
      type: object
      properties:
        carriyo_status_code:
          type: string
          example: failed_delivery_attempt
        carriyo_reason_code:
          type: string
          example: refused_by_customer
        carrier_status_code:
          type: string
          example: CUSTOMER-REFUSAL
        carrier_status_description:
          type: string
          example: Customer refused to accept delivery
        status_update_date:
          type: string
          format: date-time
          example: '2023-05-24T14:15:05.222Z'
    tracking-info:
      title: Tracking Info
      type: object
      properties:
        tracking_number:
          type: string
          example: new-shipment-1
        status_events:
          type: array
          items:
            $ref: '#/components/schemas/status-event'
        events:
          type: array
          description: |-
            Optional list of carrier events (non-status updates).

            Currently supported event types:
            - DELIVERY_SCHEDULE

            In the future, other event types (non-status updates) may be sent here.
          items:
            $ref: '#/components/schemas/plugnplay-event'
    plugnplay-event:
      title: Plug n Play Event
      type: object
      properties:
        event_type:
          type: string
          example: DELIVERY_SCHEDULE
          description: |-
            Event type. Currently supported: DELIVERY_SCHEDULE.

            In the future, other non-status update event types may be sent here.
        event_date:
          type: string
          example: '2026-04-15T10:30:00'
          description: Event date/time in the format yyyy-MM-dd'T'HH:mm:ss
        delivery_schedule:
          $ref: '#/components/schemas/delivery-schedule-payload'
    delivery-schedule-payload:
      title: Delivery Schedule Payload
      type: object
      properties:
        schedule_date:
          type: string
          example: '2026-04-16'
          description: Scheduled delivery date in the format yyyy-MM-dd
    callback-tracking-info:
      title: Callback Tracking Info
      type: object
      properties:
        shipment_id:
          type: string
          example: shipment-1
        status:
          type: string
          example: SUCCESS
        tracking_number:
          type: string
          example: new-shipment-1
        status_events:
          type: array
          items:
            $ref: '#/components/schemas/callback-status-event'
    callback-status-event:
      title: Callback Status Event
      type: object
      properties:
        status:
          type: string
          example: failed_delivery_attempt
        carrier_status:
          type: string
          example: CUSTOMER-REFUSAL
        carrier_status_description:
          type: string
          example: Customer refused to accept delivery
        update_date:
          type: string
          format: date-time
          example: '2023-05-24T12:15:05.000Z'
        status_update_date:
          type: number
          example: '2023-05-24T14:15:07.222Z'
        update_status_location:
          type: string
          example: Dubai
    weight:
      title: Weight
      type: object
      properties:
        value:
          type: number
          example: 1
        unit:
          type: string
          enum:
            - KG
    personal_id:
      title: Personal ID
      type: object
      description: ID of the person to whom the shipment is addressed
      properties:
        id:
          type: string
          description: ID number
          example: U123457896
        type:
          type: string
          description: ID type
          example: Passport
    address-codes:
      title: Address Codes
      type: array
      items:
        $ref: '#/components/schemas/address-code'
    address-code:
      title: Address Code
      type: object
      description: |-
        Location-specific address identifier used in certain countries or systems to enhance
        delivery precision
      properties:
        type:
          type: string
          enum:
            - WHAT_3_WORDS
            - EMIRATES_MAKANI_CODE
            - KUWAIT_PACI_CODE
            - SAUDI_SHORT_CODE
          description: Type of address code
        value:
          type: string
          description: The actual value of the address code corresponding to the selected type
    problem:
      description: Error response
      type: object
      properties:
        errors:
          type: array
          items:
            type: string
            example: Validation error occurred. Reason { ... }
  securitySchemes:
    api-key:
      type: apiKey
      name: x-api-key
      in: header
      description: API key the **carrier** issues to Carriyo during onboarding, sent on every Carriyo → carrier request. For the `status-update-webhook` operation (carrier → Carriyo direction), the same scheme is used but the key is issued by Carriyo to the carrier, as clarified in the operation description.
    OAuth2:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://{carrier_host}/oauth/token
          scopes: {}
      description: OAuth 2.0 client-credentials grant. The carrier hosts the token endpoint; Carriyo exchanges its registered client credentials for an access token and uses it as a Bearer token on every Carriyo → carrier request. Tokens are cached until expiry.
tags:
  - name: Shipments
    description: 'Shipment-related endpoints the carrier hosts and Carriyo calls: create, cancel, fetch label, batch tracking, schedule collection. Carriyo authenticates with the credentials issued during onboarding.'
  - name: Manifest
    description: Optional carrier-hosted endpoint Carriyo calls to generate a manifest (hand off a batch of shipments at a scheduled pickup). Skip this endpoint if your carrier does not support manifesting.
  - name: Status update webhook
    description: Hosted by Carriyo. The carrier calls this endpoint to push real-time shipment status updates. The carrier authenticates with the API key Carriyo issues during onboarding. This is the only operation in this spec where the carrier is the client.
