---
title: "Create a new unassigned stop"
method: POST
path: "/unassignedStops"
tags: ["Unassigned Stops"]
---

# Create a new unassigned stop

`POST /unassignedStops`

## Request

- Base URL: `https://api.spoke.com/public/v1`
- URL: `https://api.spoke.com/public/v1/unassignedStops`
- Auth: HTTP basic
- TypeScript: <https://skmtc.dev/spoke/apis/spoke-api/docs/unassignedStops/post.ts> (a function with typed inputs; its response is checked against the schema)

Create a new unassigned stop with the given data.

## Request body

- object: The request body for creating an unassigned stop. Address is a required field, you need to provide at least one of the fields in it. The latitude and longitude fields will override any of the other fields if they are set (and they need to be both set if any of them are). The more fields you provide the more accurate the geocoding will be. The depotId field is not required, but will default to the main depot of the team if not provided, be sure to provide it if you want to use a different depot.
  - `address` object, required: Address of the stop, at least one of the fields is required. If the latitude and longitude fields are set they will override any of the others. The addressName field is not used for geocoding and is only for display purposes.
    - `addressName` string, nullable: The name of the address. This will not be used for geocoding, and is only for the final address display purposes.
    - `addressLineOne` string, nullable: The first line of the address.
    - `addressLineTwo` string, nullable: The second line of the address.
    - `city` string, nullable: The city of the address.
    - `state` string, nullable: The state of the address.
    - `zip` string, nullable: The zip code of the address.
    - `country` string, nullable: The country of the address.
    - `latitude` number, nullable: The latitude of the address in decimal degrees.
    - `longitude` number, nullable: The longitude of the address in decimal degrees.
  - `depot` string, nullable: The Depot ID that this unassigned stop belongs to, in the format `depot/<id>`. If not provided, or null, it will default to the team's main depot.
  - `timing` object, nullable: Timing information for this stop
    - `timeWindows` object[]: Up to two ordered arrival windows for this stop. An empty array clears the windows. A single window may have one null bound; two windows must have both bounds set. Windows must not overlap or touch, and their total span must not exceed 24 hours.
      - `earliestAttemptTime` object, nullable, required: Time of day in hours and minutes. Use a 24 hour clock.
        - `hour` integer, required: Hour of the day
        - `minute` integer, required: Minute of the hour
      - `latestAttemptTime` object, nullable, required: Time of day in hours and minutes. Use a 24 hour clock.
        - `hour` integer, required: Hour of the day
        - `minute` integer, required: Minute of the hour
    - `earliestAttemptTime` object, nullable: Time of day in hours and minutes. Use a 24 hour clock.
      - `hour` integer, required: Hour of the day
      - `minute` integer, required: Minute of the hour
    - `latestAttemptTime` object, nullable: Time of day in hours and minutes. Use a 24 hour clock.
      - `hour` integer, required: Hour of the day
      - `minute` integer, required: Minute of the hour
    - `estimatedAttemptDuration` integer, nullable: Duration in seconds of the activity in this stop, only set if you want to override the default. This can be set up to 8 hours.
  - `recipient` object, nullable: Recipient information for this stop
    - `externalId` string, nullable: External ID of the recipient, as defined by the API user
    - `email` string, email, nullable: The email address of the recipient. Multiple emails are not supported.
    - `phone` string, nullable: Phone number of the recipient
    - `name` string, nullable: Name of the recipient
  - `orderInfo` object, nullable: Order information for this stop
    - `products` string[]: Products in this stop
    - `invoiceNumber` string, nullable: Invoice number
    - `sellerOrderId` string, nullable: Seller order ID
    - `sellerName` string, nullable: Seller name
    - `sellerWebsite` string, nullable: Seller website
  - `paymentOnDelivery` object, nullable: Payment on delivery (also known as "Cash on Delivery") data for this stop
    - `amount` integer, nullable: Amount *in minor units* (e.g. cents) to be collected upon delivery
    - `currency` 'AED' | 'ARS' | 'AUD' | 'BRL' | 'CAD' | 'CHF' | 'CLP' | 'CNY' | 'COP' | 'DKK' | 'EGP' | 'EUR' | 'GBP' | 'HKD' | 'HUF' | 'ILS' | 'INR' | 'JPY' | 'KRW' | 'MYR' | 'MXN' | 'NOK' | 'NZD' | 'PEN' | 'RON' | 'RUB' | 'SAR' | 'SEK' | 'SGD' | 'TRY' | 'USD' | 'UYU' | 'ZAR', nullable: Currency of the payment. Defaults to the team's currency.
  - `proofOfAttemptRequirements` object, nullable: Proof of attempt requirement settings for this stop
    - `enabled` boolean, nullable: Whether proof of attempt is required for this stop
  - `allowedDrivers` string[], nullable: Driver IDs that are allowed to be assigned to this stop. If not provided, the stop will be assigned to any available driver during optimization.
  - `activity` 'delivery' | 'pickup', nullable: Activity type
  - `optimizationOrder` 'first' | 'last' | 'default', nullable: The preferred order of this stop in the optimized route. If not provided or `"default"`, the stop will be placed in the optimal order, decided by the optimization algorithm. Otherwise it will be placed either `"first"` or `"last"`.
  - `packageCount` number, nullable: Number of packages in the stop
  - `weight` object, nullable: Weight information for this stop.
    - `amount` number, required: The weight amount for this stop.
    - `unit` 'kilogram' | 'pound' | 'metric-ton', required: The weight unit in which the amount is specified.
  - `notes` string, nullable: Notes for the stop
  - `clientId` string, nullable: Client ID of the retailer in Spoke Connect
  - `barcodes` string[]: List of barcode IDs associated with this stop
  - `customProperties` object, nullable: Key-value pairs of custom stop properties for this stop. The keys must be unique and match a custom stop property defined in your team.

## Response `200`

The created unassignedStop

- UnassignedStopSchema: An unassigned stop.
  - `id` string, required
  - `depot` string, required: The depot that this unassigned stop belongs to.
  - `address` object, required: The address of the stop.
    - `address` string, required: The address of the stop.
    - `addressLineOne` string, required: The first line of the address.
    - `addressLineTwo` string, required: The second line of the address.
    - `latitude` number, nullable, required: The latitude of the address in decimal degrees.
    - `longitude` number, nullable, required: The longitude of the address in decimal degrees.
    - `placeId` string, nullable, required: The identifier of the place corresponding to this stop on Google Places
    - `placeTypes` string[], required: Array of strings that is provided by the Google AutoCompleteAPI
  - `barcodes` string[], required: List of Barcode IDs associated with the stop.
  - `allowedDrivers` string[], required: The driver IDs that can be assigned to this stop.
  - `notes` string, nullable, required: Notes for the stop.
  - `packageCount` number, nullable, required: The number of packages.
  - `weight` object, nullable, required: Weight information for the stop.
    - `amount` number, required: The weight amount for this stop.
    - `unit` 'kilogram' | 'pound' | 'metric-ton', required: The weight unit in which the amount is specified (defined at team's capacity unit).
  - `orderInfo` object, required: The order information of the stop.
    - `products` string[], required: The products of the stop.
    - `invoiceNumber` string, nullable, required: Invoice number associated with the order.
    - `sellerName` string, nullable, required: Name of the seller where the order is from.
    - `sellerOrderId` string, nullable, required: Id of the seller where the order is from.
    - `sellerWebsite` string, nullable, required: Website of the seller where the order is from.
  - `recipient` object, required: The recipient of the stop.
    - `name` string, nullable, required: The name of the recipient.
    - `email` string, nullable, required: The email of the recipient.
    - `phone` string, nullable, required: The phone of the recipient.
    - `externalId` string, nullable, required: The external id of the recipient.
  - `activity` 'delivery' | 'pickup'
  - `trackingLink` string, nullable, required: The recipient tracking link.
  - `timing` object, required: The timing data of the stop.
    - `timeWindows` object[], required: Ordered arrival windows for this stop.
      - `earliestAttemptTime` TimeOfDaySchema, required: Time of day in hours and minutes. Uses a 24 hour clock.
        - `hour` integer, required: Hour of the day
        - `minute` integer, required: Minute of the hour
      - `latestAttemptTime` TimeOfDaySchema, required: Time of day in hours and minutes. Uses a 24 hour clock.
        - `hour` integer, required: Hour of the day
        - `minute` integer, required: Minute of the hour
    - `estimatedAttemptDuration` number, nullable, required: Time that the driver estimates to spend on the stop to do his job (deliver a parcel, visit a client, etc) in seconds.
    - `earliestAttemptTime` TimeOfDaySchema, required: Time of day in hours and minutes. Uses a 24 hour clock.
      - `hour` integer, required: Hour of the day
      - `minute` integer, required: Minute of the hour
    - `latestAttemptTime` TimeOfDaySchema, required: Time of day in hours and minutes. Uses a 24 hour clock.
      - `hour` integer, required: Hour of the day
      - `minute` integer, required: Minute of the hour
  - `optimizationOrder` 'first' | 'last' | 'default'
  - `paymentOnDelivery` object, nullable, required: The payment due upon delivery also known as "Cash on Delivery".
    - `amount` integer, nullable, required: The amount *in minor units* (e.g. cents) to be collected upon delivery.
    - `currency` string, required: The payment's currency in ISO 4217 standard.
  - `proofOfAttemptRequirements` object, required: The proof of attempt requirements of the stop.
    - `enabled` boolean, nullable, required: Whether the proof of attempt is enabled.This only works if the team subscription has access to proof of delivery
  - `customProperties` object, nullable, required: Custom properties of the stop, can be used to store additional information.
  - `clientId` string, nullable, required: The associated Client ID of the Spoke Connect

## Other responses

- `400`: The request has errors. Either syntactic or semantic
- `401`: Unauthorized
- `403`: The request contains fields that are not supported by your team subscription.
- `404`: The provided driver id does not exist
- `422`: The stop is unprocessable.
- `500`: An internal server error occurred
- `default`: The default error model

---

[API](https://skmtc.dev/spoke/apis/spoke-api.md) - [All operations](https://skmtc.dev/spoke/apis/spoke-api/llms.txt) - [OpenAPI document](https://skmtc.dev/spoke/apis/spoke-api/revisions/a09d9194ae1c?raw)
