> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://api-docs.zippd.com/llms.txt.
> For full documentation content, see https://api-docs.zippd.com/llms-full.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://api-docs.zippd.com/_mcp/server.

# Place an Order

POST https://sandbox-api.deliveryapp.com/api/v1/orders-non-dedicated
Content-Type: application/json

Reference: https://api-docs.zippd.com/orders-non-dedicated/post-customer-requests

## OpenAPI Specification

```yaml
openapi: 3.1.0
info:
  title: collection
  version: 1.0.0
paths:
  /orders-non-dedicated:
    post:
      operationId: post-customer-requests
      summary: Place an Order
      tags:
        - subpackage_ordersNonDedicated
      parameters:
        - name: Authorization
          in: header
          description: ''
          required: true
          schema:
            type: string
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeliveryRequest'
        '422':
          description: Invalid data was sent with the request
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Post-customer-requestsRequestUnprocessableEntityError
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                internal_ref:
                  type:
                    - string
                    - 'null'
                  description: An order reference provided by your systems.
                product_code:
                  type:
                    - string
                    - 'null'
                  description: A product reference provided by your account manager.
                additional_notes:
                  type:
                    - string
                    - 'null'
                  description: >-
                    Additional information that will be seen by the delivery
                    driver during order fulfilment.
                payment_method:
                  $ref: >-
                    #/components/schemas/OrdersNonDedicatedPostRequestBodyContentApplicationJsonSchemaPaymentMethod
                  description: >-
                    Select the method the API should use to process payment for
                    this order.
                order_locations:
                  type: array
                  items:
                    $ref: >-
                      #/components/schemas/OrdersNonDedicatedPostRequestBodyContentApplicationJsonSchemaOrderLocationsItems
                  description: >-
                    These are the pickup and drop-off locations for your
                    delivery: the first object being pickup, the second is
                    drop-off. Both are required.
                items:
                  type: array
                  items:
                    $ref: >-
                      #/components/schemas/OrdersNonDedicatedPostRequestBodyContentApplicationJsonSchemaItemsItems
                branding:
                  $ref: >-
                    #/components/schemas/OrdersNonDedicatedPostRequestBodyContentApplicationJsonSchemaBranding
                  description: >-
                    Provide basic branding details. If provided, these will be
                    displayed on our delivery tracking screens.
              required:
                - product_code
                - payment_method
                - order_locations
servers:
  - url: https://sandbox-api.deliveryapp.com/api/v1
components:
  schemas:
    OrdersNonDedicatedPostRequestBodyContentApplicationJsonSchemaPaymentMethod:
      type: string
      enum:
        - da-credit
        - gocardless
      description: Select the method the API should use to process payment for this order.
      title: >-
        OrdersNonDedicatedPostRequestBodyContentApplicationJsonSchemaPaymentMethod
    OrdersNonDedicatedPostRequestBodyContentApplicationJsonSchemaOrderLocationsItemsAddress:
      type: object
      properties:
        id:
          type:
            - integer
            - 'null'
          description: >-
            The ID of an existing address that is already saved to your account.
            Not required if a full address will be provided via the other fields
            in this object.
        address_line_1:
          type: string
          description: >-
            The first line of the location's address. __This field is required
            if__ `id` is either `null` or not provided with the object.
        address_line_2:
          type:
            - string
            - 'null'
          description: The second line of the location's address.
        city:
          type: string
          description: >-
            The city of the location's address. __This field is required if__
            `id` is either `null` or not provided with the object.
        postcode:
          type: string
          description: >-
            The postal code of the location's address. __This field is required
            if__ `id` is either `null` or not provided with the object.
        latitude:
          type:
            - number
            - 'null'
          format: double
          description: >-
            The latitude coordinate of the location's address. If this field is
            not provided, our system will geolocate the coordinates using the
            other address details.
        longitude:
          type:
            - number
            - 'null'
          format: double
          description: >-
            The longitude coordinate of the location's address. If this field is
            not provided, our system will geolocate the coordinates using the
            other address details.
        contact_name:
          type:
            - string
            - 'null'
          description: >-
            A contact name for the location.  __This field is required if__ `id`
            is either `null` or not provided with the object.
        phone_number:
          type: string
          description: >-
            A contact number for this location that may be used by the delivery
            driver.
        email:
          type: string
          format: email
          description: >-
            A contact email for the recipient. This may be used to provide
            delivery tracking updates to the recipient.
        company:
          type:
            - string
            - 'null'
          description: The name of the company at this location.
      required:
        - phone_number
        - email
      title: >-
        OrdersNonDedicatedPostRequestBodyContentApplicationJsonSchemaOrderLocationsItemsAddress
    OrdersNonDedicatedPostRequestBodyContentApplicationJsonSchemaOrderLocationsItems:
      type: object
      properties:
        is_collection:
          type: boolean
          description: >-
            Set to `true` if the object is a location that the driver will
            pickup from, `false` if you want the driver to drop-off at the
            location.
        address:
          $ref: >-
            #/components/schemas/OrdersNonDedicatedPostRequestBodyContentApplicationJsonSchemaOrderLocationsItemsAddress
      required:
        - is_collection
        - address
      title: >-
        OrdersNonDedicatedPostRequestBodyContentApplicationJsonSchemaOrderLocationsItems
    OrdersNonDedicatedPostRequestBodyContentApplicationJsonSchemaItemsItemsDimension:
      type: object
      properties:
        depth:
          type: integer
          description: The depth of the item in centimetres.
        width:
          type: integer
          description: The width of the item in centimetres.
        height:
          type: integer
          description: The height of the item in centimetres.
      required:
        - depth
        - width
        - height
      description: >-
        An object providing the dimensions of the item. All measurements are in
        centimetres.
      title: >-
        OrdersNonDedicatedPostRequestBodyContentApplicationJsonSchemaItemsItemsDimension
    OrdersNonDedicatedPostRequestBodyContentApplicationJsonSchemaItemsItemsWeight:
      type: object
      properties:
        max:
          type: integer
          description: >-
            The maximum weight of the item. If you have the exact weight
            available, provide it to both `min` and `max`.
        min:
          type: integer
          description: >-
            The minimum weight of the item. If you have the exact weight
            available, provide it to both `min` and `max`.
      required:
        - max
        - min
      description: An object outlining the weight of the item.
      title: >-
        OrdersNonDedicatedPostRequestBodyContentApplicationJsonSchemaItemsItemsWeight
    OrdersNonDedicatedPostRequestBodyContentApplicationJsonSchemaItemsItems:
      type: object
      properties:
        item_id:
          type:
            - string
            - 'null'
          format: uuid
        title:
          type:
            - string
            - 'null'
          description: A title for the item. Shown to users that manage the Zippd account.
        description:
          type:
            - string
            - 'null'
          description: A description of the item.
        dimension:
          $ref: >-
            #/components/schemas/OrdersNonDedicatedPostRequestBodyContentApplicationJsonSchemaItemsItemsDimension
          description: >-
            An object providing the dimensions of the item. All measurements are
            in centimetres.
        weight:
          $ref: >-
            #/components/schemas/OrdersNonDedicatedPostRequestBodyContentApplicationJsonSchemaItemsItemsWeight
          description: An object outlining the weight of the item.
        quantity:
          type: integer
          default: 1
          description: >-
            The quantity of this particular item that is to be delivered. This
            field __does not__ accept a `null` value.
      required:
        - dimension
        - weight
      title: OrdersNonDedicatedPostRequestBodyContentApplicationJsonSchemaItemsItems
    OrdersNonDedicatedPostRequestBodyContentApplicationJsonSchemaBranding:
      type: object
      properties:
        name:
          type: string
          description: The name of the sending party.
        logo:
          type: string
          format: uri
          description: >-
            An absolute URL to an appropriate logo image. Invalid URLs or
            insecure (non-https) URLs will be rejected.
      description: >-
        Provide basic branding details. If provided, these will be displayed on
        our delivery tracking screens.
      title: OrdersNonDedicatedPostRequestBodyContentApplicationJsonSchemaBranding
    DeliveryRequestType:
      type: string
      enum:
        - request
      description: The order type.
      title: DeliveryRequestType
    DeliveryRequestStatus:
      type: string
      enum:
        - accepted
        - started
        - awaiting
        - in-progress
        - completed
        - canceled
        - expired
        - expecting
      description: The current status of the order.
      title: DeliveryRequestStatus
    DeliveryRequestSubStatus:
      type: string
      enum:
        - on-my-way
        - arrived-on-site
        - on-way-to-drop-off
      description: >-
        The current sub-status of the order. The va `sub_status` will always be
        relative to the value of the `status` field.
      title: DeliveryRequestSubStatus
    OrderLocationAddress:
      type: object
      properties:
        address_line_1:
          type: string
          description: The first line of the location's address.
        address_line_2:
          type:
            - string
            - 'null'
          description: The second line of the location's address.
        city:
          type: string
          description: The city of the location's address.
        postcode:
          type: string
          description: The postal code of the location's address.
        latitude:
          type: number
          format: double
          description: The latitude coordinate of the location's address.
        longitude:
          type: number
          format: double
          description: The longitude coordinate of the location's address.
      title: OrderLocationAddress
    OrderLocationContactDetails:
      type: object
      properties:
        contact_name:
          type: string
          description: A contact name for the location.
        phone_number:
          type: string
          description: >-
            A contact number for this location that may be used by the delivery
            driver.
        email:
          type:
            - string
            - 'null'
          description: A contact email for this location.
        company_name:
          type:
            - string
            - 'null'
          description: The name of the company at this location.
      title: OrderLocationContactDetails
    OrderLocationInstruction:
      type: string
      enum:
        - address
        - safe-place
      description: A key that determines how the delivery should be flfilled.
      title: OrderLocationInstruction
    Barcode:
      type: object
      properties:
        code:
          type: string
          description: >-
            The code representation of the barcode. Barcode codes will always be
            20 characters in length.
        code_formatted:
          type: string
          description: The human-readable code representation of the barcode.
        order_location_id:
          type: integer
          description: The ID of the location that this barcode is linked to.
        pickup_latitude:
          type:
            - number
            - 'null'
          format: double
          description: >-
            The latitude coordinate of the location where this barcode was
            recorded as picked up by the delivery driver.
        pickup_longitude:
          type:
            - number
            - 'null'
          format: double
          description: >-
            The longitude coordinate of the location where this barcode was
            recorded as picked up by the delivery driver.
        pickup_datetime:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            The date/time at which the delivery driver recorded the barcode's
            pickup.
        drop_off_latitude:
          type:
            - number
            - 'null'
          format: double
          description: >-
            The latitude coordinate of the location where this barcode was
            recorded as dropped off by the delivery driver.
        drop_off_longitude:
          type:
            - number
            - 'null'
          format: double
          description: >-
            The longitude coordinate of the location where this barcode was
            recorded as dropped off by the delivery driver.
        drop_off_datetime:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            The date/time at which the delivery driver recorded the barcode's
            drop off.
        undeliverable:
          type:
            - boolean
            - 'null'
          description: >-
            Whether or not the parcel was successfully delivered. This will be
            `null` if delivery has not been attempted yet.
        undeliverable_reason:
          type:
            - string
            - 'null'
          description: A short description of why the parcel could not be delivered.
        printable_label_url:
          type: string
          description: An absolute URL to a PDF with the package label for this barcode.
        created_at:
          type: string
          format: date-time
          description: The date/time at which the barcode was generated by the API.
        updated_at:
          type: string
          format: date-time
          description: The date/time at which the barcode was last updated.
      description: Details about a barcode (parcel) delivery status.
      title: Barcode
    ProofOfDeliveryCoordinates:
      type: object
      properties:
        latitude:
          type: number
          format: double
          description: >-
            The latitude coordinate of the final location where the delivery was
            fulfilled.
        longitude:
          type: number
          format: double
          description: >-
            The longitude coordinate of the final location where the delivery
            was fulfilled.
      description: The coordinates of the final location where the delivery was fulfilled.
      title: ProofOfDeliveryCoordinates
    ProofOfDelivery:
      type: object
      properties:
        photo:
          type: string
          description: An absolute URL to the photo the driver took as proof of delivery.
        signature:
          type: string
          description: >-
            An absolute URL to the recipient's signature taken after delivery
            was fulfilled.
        signer_name:
          type: string
          description: The name of the delivery recipient.
        coordinates:
          oneOf:
            - $ref: '#/components/schemas/ProofOfDeliveryCoordinates'
            - type: 'null'
          description: >-
            The coordinates of the final location where the delivery was
            fulfilled.
      description: Data from the proof of delivery collected by the delivery driver.
      title: ProofOfDelivery
    OrderLocation:
      type: object
      properties:
        id:
          type: integer
        delivery_id:
          type:
            - integer
            - 'null'
          description: The ID of the delivery resource attributed to this location.
        time_from:
          type: string
          format: time
          description: >-
            The earliest time at which the driver should arrive at this
            location. Format 'H:i:s'.
        time_to:
          type: string
          format: time
          description: >-
            The latest time at which the driver should arrive at this location.
            Format 'H:i:s'.
        tracking_code:
          type:
            - string
            - 'null'
          description: The unique tracking code of the delivery for this location.
        web_tracking_url:
          type:
            - string
            - 'null'
          description: >-
            An absolute URL to a public web page that displays tracking
            information and options for the related delivery.
        address:
          $ref: '#/components/schemas/OrderLocationAddress'
        contact_details:
          $ref: '#/components/schemas/OrderLocationContactDetails'
        driver_arriving_time:
          type:
            - string
            - 'null'
          format: date-time
          description: The date/time at which the delivery driver arrived at the location.
        driver_leaving_time:
          type:
            - string
            - 'null'
          format: date-time
          description: The date/time at which the delivery driver left the location.
        requires_handballing:
          type: boolean
          description: >-
            Whether or not the delivery requires the driver to assist with
            loading/unloading items. This is only appropriate for `delivery`
            order types. Other order types will always be `false`.
        total_items:
          type: integer
          description: >-
            The total number of items (parcels) being delivered to this
            location.
        instruction:
          oneOf:
            - $ref: '#/components/schemas/OrderLocationInstruction'
            - type: 'null'
          description: A key that determines how the delivery should be flfilled.
        instruction_details:
          type:
            - string
            - 'null'
          description: >-
            Details relevant to the instruction. For example, for `safe-place`,
            you would provide the details of the safe place; for `address`, you
            might include a gate code for the driver.
        what3words:
          type:
            - string
            - 'null'
          description: The What3Words ID of the location's address.
        client_system_delivery_id:
          type:
            - string
            - 'null'
          description: An identifier for the client system that manages this delivery.
        barcodes:
          type: array
          items:
            $ref: '#/components/schemas/Barcode'
          description: >-
            A list of barcodes (parcels) that are to be delivered to this
            location.
        printable_label_url:
          type:
            - string
            - 'null'
          description: An absolute URL to a PDF with all package labels for this location.
        proof_of_delivery:
          $ref: '#/components/schemas/ProofOfDelivery'
      description: The data of a location that has been added as a point to an order.
      title: OrderLocation
    DeliveryRequest:
      type: object
      properties:
        id:
          type: string
          format: uuid
          description: The ID of the order.
        code:
          type: string
          description: >-
            Zippd's short ID code for the order. Unique, and always starts with
            two letter, e.g. "DA", "RE" etc.
        type:
          $ref: '#/components/schemas/DeliveryRequestType'
          description: The order type.
        fulfilment_date:
          type: string
          format: date
          description: The date on which the order will be fulfilled by the driver.
        internal_ref:
          type:
            - string
            - 'null'
          description: An order reference provided by your systems.
        status:
          $ref: '#/components/schemas/DeliveryRequestStatus'
          description: The current status of the order.
        sub_status:
          oneOf:
            - $ref: '#/components/schemas/DeliveryRequestSubStatus'
            - type: 'null'
          description: >-
            The current sub-status of the order. The va `sub_status` will always
            be relative to the value of the `status` field.
        total_items:
          type: integer
          description: >-
            The total number of items (or parcels) attributed to this delivery
            request.
        started_at:
          type:
            - string
            - 'null'
          format: date-time
          description: Date/time when the delivery driver began fulfilling the delivery.
        completed_at:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            Date/time when the delivery driver completed fulfilling the
            delivery.
        canceled_at:
          type:
            - string
            - 'null'
          format: date-time
          description: Date/time when the delivery was cancelled.
        additional_notes:
          type: string
          description: >-
            Additional information that will be seen by the delivery driver
            before and during order fulfilment.
        cost_of_goods:
          type: integer
          description: >-
            The total cost of goods being delivered. This will be in lowest unit
            of currency, e.g. in pence for GBP.
        locations:
          type: array
          items:
            $ref: '#/components/schemas/OrderLocation'
          description: >-
            All locations relating to this order's deliveries. The first item is
            always the location where the driver will pickup the parcels to be
            delivered.
        barcodes:
          type: array
          items:
            $ref: '#/components/schemas/Barcode'
          description: >-
            A list of barcodes (parcels) that are to be delivered on with this
            order.
        printable_label_url:
          type:
            - string
            - 'null'
          description: An absolute URL to a PDF with all package labels for this order.
      description: >-
        The details of a delivery request placed by a user that sends items
        using the platform.
      title: DeliveryRequest
    OrdersNonDedicatedPostResponsesContentApplicationJsonSchemaErrors:
      type: object
      properties:
        field_key_1:
          type: array
          items:
            type: string
        field_key_2:
          type: array
          items:
            type: string
      description: >-
        A list of errors. Each item will represent a single field and contain a
        simple array of error messages.
      title: OrdersNonDedicatedPostResponsesContentApplicationJsonSchemaErrors
    Post-customer-requestsRequestUnprocessableEntityError:
      type: object
      properties:
        message:
          type: string
          description: An overview of the error response.
        errors:
          $ref: >-
            #/components/schemas/OrdersNonDedicatedPostResponsesContentApplicationJsonSchemaErrors
          description: >-
            A list of errors. Each item will represent a single field and
            contain a simple array of error messages.
      title: Post-customer-requestsRequestUnprocessableEntityError
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: ''

```

## SDK Code Examples

```python
import requests

url = "https://sandbox-api.deliveryapp.com/api/v1/orders-non-dedicated"

payload = {
    "product_code": "string",
    "payment_method": "da-credit",
    "order_locations": [
        {
            "is_collection": True,
            "address": {
                "phone_number": "07123456789",
                "email": "recipient@example.com"
            }
        }
    ]
}
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript
const url = 'https://sandbox-api.deliveryapp.com/api/v1/orders-non-dedicated';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"product_code":"string","payment_method":"da-credit","order_locations":[{"is_collection":true,"address":{"phone_number":"07123456789","email":"recipient@example.com"}}]}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://sandbox-api.deliveryapp.com/api/v1/orders-non-dedicated"

	payload := strings.NewReader("{\n  \"product_code\": \"string\",\n  \"payment_method\": \"da-credit\",\n  \"order_locations\": [\n    {\n      \"is_collection\": true,\n      \"address\": {\n        \"phone_number\": \"07123456789\",\n        \"email\": \"recipient@example.com\"\n      }\n    }\n  ]\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://sandbox-api.deliveryapp.com/api/v1/orders-non-dedicated")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"product_code\": \"string\",\n  \"payment_method\": \"da-credit\",\n  \"order_locations\": [\n    {\n      \"is_collection\": true,\n      \"address\": {\n        \"phone_number\": \"07123456789\",\n        \"email\": \"recipient@example.com\"\n      }\n    }\n  ]\n}"

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://sandbox-api.deliveryapp.com/api/v1/orders-non-dedicated")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"product_code\": \"string\",\n  \"payment_method\": \"da-credit\",\n  \"order_locations\": [\n    {\n      \"is_collection\": true,\n      \"address\": {\n        \"phone_number\": \"07123456789\",\n        \"email\": \"recipient@example.com\"\n      }\n    }\n  ]\n}")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://sandbox-api.deliveryapp.com/api/v1/orders-non-dedicated', [
  'body' => '{
  "product_code": "string",
  "payment_method": "da-credit",
  "order_locations": [
    {
      "is_collection": true,
      "address": {
        "phone_number": "07123456789",
        "email": "recipient@example.com"
      }
    }
  ]
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://sandbox-api.deliveryapp.com/api/v1/orders-non-dedicated");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"product_code\": \"string\",\n  \"payment_method\": \"da-credit\",\n  \"order_locations\": [\n    {\n      \"is_collection\": true,\n      \"address\": {\n        \"phone_number\": \"07123456789\",\n        \"email\": \"recipient@example.com\"\n      }\n    }\n  ]\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  "product_code": "string",
  "payment_method": "da-credit",
  "order_locations": [
    [
      "is_collection": true,
      "address": [
        "phone_number": "07123456789",
        "email": "recipient@example.com"
      ]
    ]
  ]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://sandbox-api.deliveryapp.com/api/v1/orders-non-dedicated")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```