---
search:
  tags:
    - Draft Orders
    - POST
seo:
  description: >-
    Prices an order without placing it, returning the resolved options, pricing,
    and availability… Reference for the POST /draft-orders endpoint in the Sibi
    API.
sidebar:
  label: Create draft order
  badge: POST
title: Create draft order
type: openapi-operation
---
Prices an order without placing it, returning the resolved options, pricing, and availability for the request.

The body has the same shape as `POST /orders`, so a caller can preview an order and then place the identical body. Three fields behave differently here. `paymentMethodId` is optional: omit it to draft against the default payment method of the caller and read the alternatives from `availablePaymentMethods` in the response. `idempotencyKey` and `warrantyOrderPaymentMethodId` are accepted so the bodies stay interchangeable, but they only take effect at placement and are ignored here.

The response resolves every default the order would get — the distribution center, fulfillment method, delivery date, and payment method — and lists the alternatives available for each, alongside per-line availability, selected and available options, addons, and warranties, plus the subtotal, tax, fees, discounts, and total.

Validation runs exactly as it does for `POST /orders`: failures return 400 with one of the codes listed on that operation.

`POST /draft-orders`

**Request body** (`application/json`)

- `supplier` (string) — The supplier to order from, identified by its slug. Required unless the deprecated \`seller\` is sent.
- `seller` (string) — Deprecated: use \`supplier\` instead. Ignored when \`supplier\` is also sent.
- `address` (OrderAddress, required) — The address must correspond to a valid property in the system. If the address is not valid, the request fails with an error.
- `lineItems` (OrderLineItemInput[], required) — The products to order. At least one line item must be specified, and at most 100.
- `contactInfo` (OrderContactInfo, required) — Contact information for the customer receiving the order.
- `fulfillmentMethodId` (string) — Fulfillment method id for the order. If not provided, defaults to standard delivery.
- `fulfillmentMethodType` (string) — Fulfillment method type for the order. Defaults to 'DELIVERY' when both are available.
- `deliveryAddress` (object)
- `shipToOfficePropertyId` (string) — Removed. Use \`deliveryAddress\`. Sending it fails with a 400.
- `requestedDeliveryDate` (string) — The date the customer wants the order delivered. If not provided, defaults to the earliest available. If the provided date is not available, the request fails with an error.
- `poNumber` (string) — A reference number of the caller's choosing. It does not need to be a number.
- `specialInstructions` (string) — Free-form instructions for fulfillment.
- `distributionCenterId` (string) — If omitted the order is placed in the closest distribution center.
- `paymentMethodId` (string) — The payment method to price the draft against. If omitted, the caller's default payment method is used. The response reports the resolved \`paymentMethodId\` and lists every alternative in \`availablePaymentMethods\`, so a caller can draft without one to discover which payment methods are available.
- `idempotencyKey` (string) — A unique identifier for the order. If the same order is submitted multiple times within 5 minutes with the same idempotency key, the API returns the existing order and does not create a new one.
- `subscribers` (object[]) — An optional list of subscribers to receive updates about the order in addition to the user account that placed the order. Pass an empty list to opt out of status notifications.
- `warrantyOrderPaymentMethodId` (string) — If provided, this payment method is used for the warranty sub-order instead of the parent order's \`paymentMethodId\`. Must be one of the warranty-order payment methods available to this caller.

Request body example:

```json
{
  "supplier": "ge",
  "seller": "ge",
  "address": {
    "line1": "1630 W Guadalupe Rd",
    "line2": "Ste 101",
    "city": "Gilbert",
    "stateOrProvince": "AZ",
    "postalCode": "85233",
    "country": "USA"
  },
  "lineItems": [
    {
      "sku": "GDF510PSRSS",
      "quantity": 1,
      "unitOfMeasure": "Each",
      "options": [
        {
          "key": "ppg-paint-color",
          "value": "PPG1105-3"
        }
      ],
      "addonIds": [
        "string"
      ],
      "addonTitles": [
        "string"
      ],
      "warrantySku": "string",
      "applyWarrantyCoverage": true
    }
  ],
  "contactInfo": {
    "firstName": "John",
    "lastName": "Doe",
    "email": "john.doe@example.com",
    "phone": "1234567890"
  },
  "fulfillmentMethodId": "sibi-sibi-default-delivery",
  "fulfillmentMethodType": "DELIVERY",
  "deliveryAddress": {
    "line1": "1630 W Guadalupe Rd",
    "line2": "Ste 101",
    "city": "Gilbert",
    "stateOrProvince": "AZ",
    "postalCode": "85233",
    "country": "USA"
  },
  "shipToOfficePropertyId": "string",
  "requestedDeliveryDate": "2026-09-01",
  "poNumber": "PO-123456",
  "specialInstructions": "The lock code is 1234",
  "distributionCenterId": "string",
  "paymentMethodId": "MANUFACTURER_CREDIT",
  "idempotencyKey": "string",
  "subscribers": [
    {
      "email": "updates@example.com"
    }
  ],
  "warrantyOrderPaymentMethodId": "string"
}
```

**Responses**

- `201` — The draft order was created.
- `400` — Bad request - Invalid input data. See the POST /orders operation description for the possible error codes.
- `401` — Unauthorized - Missing or invalid authentication
- `403` — Forbidden - the token was minted for the other environment, is not a Public REST API token, or does not carry the scope this operation requires
- `500` — Internal server error

Response example, 201:

```json
{
  "id": "string",
  "createdAt": "2026-08-31T00:00:00.000Z",
  "supplier": "ge",
  "address": {
    "line1": "1630 W Guadalupe Rd",
    "line2": "Ste 101",
    "city": "Gilbert",
    "stateOrProvince": "AZ",
    "postalCode": "85233",
    "country": "USA"
  },
  "contactInfo": {
    "firstName": "string",
    "lastName": "string",
    "email": "string",
    "phone": "string"
  },
  "poNumber": "string",
  "specialInstructions": "string",
  "lineItems": [
    {
      "sku": "string",
      "name": "string",
      "subtitle": "string",
      "imageUrl": "string",
      "quantity": 0,
      "unitOfMeasure": "Each",
      "quantityPerBaseUnit": 23.77,
      "baseUnitOfMeasure": "sq ft",
      "priceCents": 0,
      "availabilityStatus": "IN_STOCK",
      "options": [
        {
          "key": "ppg-paint-color",
          "value": "PPG1105-3",
          "name": "Delicate White",
          "hex": "#F0EFEA"
        }
      ],
      "attributes": [
        {
          "name": "sheen",
          "value": "Satin"
        }
      ],
      "addons": [
        {
          "id": "string",
          "title": "Haul Away",
          "priceCents": 0
        }
      ],
      "availableAddons": [
        {
          "id": "string",
          "title": "Haul Away",
          "priceCents": 0
        }
      ],
      "availableWarranties": [
        {
          "sku": "string",
          "name": "string",
          "description": "string",
          "manufacturer": "string",
          "priceCents": 0
        }
      ],
      "selectedWarranty": {
        "sku": "string",
        "name": "string",
        "description": "string",
        "manufacturer": "string",
        "priceCents": 0
      }
    }
  ],
  "distributionCenter": {
    "id": "ge-dc-lax",
    "name": "string",
    "storeNumber": "string",
    "phone": "6233885100",
    "address": {
      "line1": "1630 W Guadalupe Rd",
      "line2": "Ste 101",
      "city": "Gilbert",
      "stateOrProvince": "AZ",
      "postalCode": "85233",
      "country": "USA"
    }
  },
  "fulfillmentMethod": {
    "id": "sibi-sibi-default-delivery",
    "title": "Standard Delivery",
    "description": "string",
    "type": "DELIVERY",
    "availableDates": [
      "string"
    ]
  },
  "availableFulfillmentMethods": [
    {
      "id": "sibi-sibi-default-delivery",
      "title": "Standard Delivery",
      "description": "string",
      "type": "DELIVERY",
      "availableDates": [
        "string"
      ]
    }
  ],
  "requestedDeliveryDate": "2026-09-01",
  "paymentMethodId": "string",
  "availablePaymentMethods": [
    {
      "id": "MANUFACTURER_CREDIT",
      "type": "MANUFACTURER_CREDIT",
      "description": "On account",
      "last4": "string"
    }
  ],
  "pricing": {
    "subtotalCents": 0,
    "taxCents": 0,
    "totalPriceCents": 0,
    "fees": [
      {
        "name": "string",
        "amountCents": 0
      }
    ],
    "discounts": [
      {
        "name": "string",
        "amountCents": 0
      }
    ]
  },
  "subscribers": [
    {
      "email": "string"
    }
  ]
}
```

Response example, 400 · validationError:

```json
{
  "code": "VALIDATION_ERROR",
  "message": "Invalid input parameters"
}
```

Response example, 400 · invalidSupplier:

```json
{
  "code": "INVALID_SUPPLIER",
  "message": "Unknown supplier \"acme\""
}
```

Response example, 401:

```json
{
  "code": "UNAUTHORIZED",
  "message": "Missing or invalid authentication token"
}
```

Response example, 403 · environmentMismatch:

```json
{
  "code": "TOKEN_ENVIRONMENT_MISMATCH",
  "message": "A test token was used against the production API. Test tokens only work against the Sibi test environment; use a production token here."
}
```

Response example, 403 · restTokenRequired:

```json
{
  "code": "REST_TOKEN_REQUIRED",
  "message": "This endpoint only accepts Public REST API tokens. Create one at https://developer.sibipro.com."
}
```

Response example, 403 · insufficientScope:

```json
{
  "code": "INSUFFICIENT_SCOPE",
  "message": "The presented token is missing the `create:draft-orders` scope, which this endpoint requires. Create a token with the scopes you need at https://developer.sibipro.com."
}
```
