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

# Create order

Create an Order for products. Currently you can create an Order for products that share the same manufacturer.

*Tip: We provide a [URL configurable Checkout UI](/checkout-links) to make using these capabilities a breeze. We recommend using that for most use cases. If you need more control over the experience, we recommend you use the Order review and Order placement capabilities directly.*

# OrderingMutation.createOrder()

The response includes the orderId and a URL to view the order on the SIBI web app.

See [`OrderingQuery.reviewOrder()`](/graphql/ordering/review-order) for a dry-run version of this mutation that can be used to validate the input and discover available parameter values.

## Types

```graphql theme={null}
type OrderingMutation {
  createOrder(input: OrderingCreateOrderInput!): OrderingCreateOrderResponse!
}
```

* [`input: OrderingCreateOrderInput`](#orderingcreateorderinput)
* [`response: OrderingCreateOrderResponse`](#orderingcreateorderresponse)

## `OrderingCreateOrderInput`

```graphql theme={null}
input OrderingCreateOrderInput {
  manufacturer: String!
  address: OrderingAddressInput!
  products: [OrderingOrderProductInput!]!
  contactInfo: OrderingCustomerContactInfoInput!
  fulfillmentMethodId: String
  fulfillmentMethodType: OrderingFulfillmentMethodType
  shipToOfficePropertyId: String
  requestedDeliveryDate: String
  poNumber: String
  specialInstructions: String
  distributionCenterId: String
  paymentMethodId: String!
  subscribers: [OrderingOrderSubscriberInput!]
  idempotencyKey: String
  warrantyOrderPaymentMethodId: String
}
```

### `manufacturer`

`string` - The manufacturer of the products to order. Examples: `'GE'`, `'MSI'`.

***

### `address`

[`OrderingAddressInput`](/graphql/ordering/ordering-address) - The address should correspond to a valid property in the system. If there is no matching property and the address is valid, a new property will be created. If the address is not valid, the mutation will fail with an error.

***

### `products`

[`OrderingOrderProductInput[]`](/graphql/ordering/ordering-order-product-input) - At least one product must be specified

***

### `contactInfo`

[`OrderingCustomerContactInfoInput`](/graphql/ordering/ordering-customer-contact-info-input)

***

### `fulfillmentMethodId`

`string | null` - The ID of a specific fulfillment method to use. Pass the `id` from one of the `availableFulfillmentMethods` returned by [`reviewOrder`](/graphql/ordering/review-order). Cannot be provided together with `fulfillmentMethodType`.

When not provided, the API will automatically select a fulfillment method using this logic:

1. If the distributor has a configured default for the resolved type, that default is used.
2. Otherwise, the first available method for the resolved type is used.

We recommend calling [`reviewOrder`](/graphql/ordering/review-order) first to discover `availableFulfillmentMethods`, then passing the desired `id` explicitly.

***

### `fulfillmentMethodType`

[`OrderingFulfillmentMethodType`](/graphql/ordering/review-order#orderingfulfillmentmethod) `| null` - The type of fulfillment method to use. Defaults to `DELIVERY` if neither `fulfillmentMethodId` nor `fulfillmentMethodType` is provided. Cannot be provided together with `fulfillmentMethodId`.

***

### `shipToOfficePropertyId`

`string | null` - The property ID of the office to ship the order to. Only valid when `fulfillmentMethodId` is `'ship-to-office'`. If provided with a different fulfillment method, the mutation will fail with an error. Required when `fulfillmentMethodId` is `'ship-to-office'`.

***

### `requestedDeliveryDate`

`string | null` - The date the customer wants the order delivered. If not provided, defaults to the earliest available. If the provided date is not available, the mutation will fail with an error.

***

### `poNumber`

`string | null` - Can be anything you want. It doesn't even need to be a number.

***

### `specialInstructions`

`string | null` - E.g. the lock code is 1234

***

### `distributionCenterId`

`string | null` - If omitted the order will be placed in the closest distribution center.

***

### `paymentMethodId`

`string` - Note that unlike in `OrderingReviewOrderInput`, the paymentMethodId is required here.

***

### `subscribers`

`OrderingOrderSubscriberInput[]` - An array of subscribers that will receive updates about the order. If the email is not formatted correctly, the mutation will fail with an error. If at least one subscriber is provided, then only email addresses specified in the subscribers will receive automatic email updates when the order status is updated. If no subscribers are provided, then the platform will send email updates to the user account that placed the order as well as the email addresses specified in the contactInfo field, but only if it doesn't match the email address of the primary resident at the property the order is placed for.

***

## `OrderingOrderSubscriber`

```graphql theme={null}
type OrderingOrderSubscriberInput {
  email: String!
}
```

***

### `idempotencyKey`

`string | null` - A unique identifier for this request. If the same idempotency key is used for two identical order requests, the second request will return the order created by the first request instead of creating a duplicate order. If the first request failed, the second request will make another attempt. If the requests have different inputs, both orders will be processed normally.

***

### `warrantyOrderPaymentMethodId`

`string | null` - If provided, this payment method is used for the extended-warranty sub-order instead of the parent order's `paymentMethodId`. Must be one of the [`warranties.availablePaymentMethods`](/graphql/ordering/ordering-review-order-warranties#availablepaymentmethods) returned by [`reviewOrder`](/graphql/ordering/review-order). Ignored when no warranty coverage is applied to the order.

***

## `OrderingCreateOrderResponse`

```graphql theme={null}
type OrderingCreateOrderResponse {
  orderId: String!
  orderInSibiStoreUrl: String!
  warrantyOrderId: String
  warrantyOrderInSibiStoreUrl: String
}
```

***

### `orderId`

`string` - Internal SIBI order identifier.

***

### `orderInSibiStoreUrl`

`string` - URL to the order in the SIBI web app.

***

### `warrantyOrderId`

`string | null` - Internal SIBI order identifier for the extended-warranty sub-order. Present only when the request included a warranty selection and the warranty sub-order was created successfully.

***

### `warrantyOrderInSibiStoreUrl`

`string | null` - URL to the extended-warranty sub-order in the SIBI web app. Present only when the request included a warranty selection and the warranty sub-order was created successfully.
