---
schema_version: "1"
id: f71ade9a945b955878bc8a943568557dad3a45ffab1f2b0cc2078328ace4ae63
title: Inventory Reservation (OCI)
collection: developer
version: current
locale: en-us
portal_url: https://docs.salesforce.com/developer/current/en-us/commerce-cloud/commerce-api/references/generated-api-specs/inventory-reservation-service.md
canonical_url: https://developer.salesforce.com/docs/commerce/commerce-api/references/inventory-reservation-service
source_site: developer.salesforce.com
content_type: documentation
content_hash: 9343727e6c4221b384397b47011f0ce080f56e0269a91fc5e6ab844e243967eb
products:
  - B2C Commerce API
  - Salesforce APIs
---
Inventory Reservation (OCI)

# Inventory Reservation (OCI)

[Download API specification](https://developer.salesforce.com/static/commercecloud/commerce-api/inventory-reservation-service/reservation-oas-v1-public.yaml)

## API Overview

Inventory Reservation APIs enable you to place, manage, and fulfill reservations using Omnichannel Inventory.

Inventory Reservation APIs can be segregated into the following functional categories.

| Category | Endpoint Description |
| --- | --- |
| Reservations Management | API endpoints for creating and editing order reservation data. Reserved amounts affect the quantities that are available to order and fulfill. |

**Note**: Omnichannel Inventory uses the Tenant Group ID in place of the Organization ID. For more information, see [Base URL and Request Formation](https://developer.salesforce.com/docs/commerce/commerce-api/guide/base-url.html).

### Rate Limits

For load shedding and rate limiting information, see [Load Shedding and Rate Limiting.](https://developer.salesforce.com/docs/commerce/commerce-api/guide/throttle-rates.html)

### Authentication and Authorization

Clients calling Omnichannel Inventory can be authenticated in one of two ways.

*   Authenticate using Account Manager with your B2C Commerce credentials.
*   Authenticate using your Salesforce org credentials.

If you are using both B2C Commerce and Salesforce Order Management, you can use either authentication approach. However, we recommend choosing only one to avoid mixing approaches across your integrations.

The different authentication approaches do not impact the purpose or performance of the APIs.

Each authentication approach uses a unique set of scopes.

| Scopes for Account Manager Authentication | Scopes for Salesforce org Authentication |
| --- | --- |
| sfcc.inventory.impex-graphs | sfcc\_inventory\_impex\_graphs |
| sfcc.inventory.impex-inventory.rw | sfcc\_inventory\_impex\_inventory\_rw |
| sfcc.inventory.impex-inventory | sfcc\_inventory\_impex\_inventory |
| sfcc.inventory.availability | sfcc\_inventory\_availability |
| sfcc.inventory.availability.rw | sfcc\_inventory\_availability\_rw |
| sfcc.inventory.reservations | sfcc\_inventory\_reservations |
| sfcc.inventory.reservations.rw | sfcc\_inventory\_reservations\_rw |

Calls through the API gateway to Omnichannel Inventory must have a valid OAUTH bearer token. The tenant identifier used by Omnichannel Inventory is supplied in the header of the token.

All request and response body entities are composed in JSON.

### Use Cases

#### Reservation Management

Use these API endpoints to create and edit order reservation data. Reserved amounts affect the quantities that are available to order and fulfill.

##### Reserve Inventory

This endpoint contains data representing a client order in the body of the request. The response body contains the items Omnichannel Inventory was able to reserve, _which may be less than what was requested_.

##### Update and Cancel Reservation

This endpoint is used primarily for adding items to an existing reservation. The reservation ID is provided as part of the URL, and will be used to locate the reservation document to update. The response body will contain information regarding which items were able to be added, as well as the items that failed to be added along with the reason for the failure.

This endpoint is also used to cancel a reservation request when you have the Reservation ID that was created at the time of the reservation. This is the preferred method for cancellation, and should always be used if the Reservation ID is available. When using the Cancel Reservation endpoint with the Reservation ID, the reservation document is marked as cancelled and OCI adjusts the reservation and inventory counts based on the reservation document details.

##### Unreserve Quantity

Use this endpoint to unreserve a previously reserved amount with the quantity, SKU, and place identifier (group or location) specified in the body of the request. This endpoint is provided in case you find yourself in any situation where the Reservation ID is unavailable, or if you find it easier to provide the details to unreserve directly (SKU, and Group or Location). The net effect is the same as using the Cancel Reservation endpoint. When performing an Unreserve, the reservation counts are removed from the location or group using the details provided in the call instead of the details in the reservation document.

##### Move Reservation Quantity

Use this endpoint to move reservation quantity between a group and location, a location and a group or between 2 locations, with the quantity and place identifiers specified in the body of the request. A Reservation ID is not required for reservation moves. A reservation move between groups and/or locations is determined in an OMS and only requires that a reserved quantity is moved from one group/location to another. It doesn't need to be aware of or alter the initial reservation document.

##### Fulfill Quantity

Use this endpoint to fulfill a reservation amount at a location with the SKU, quantity, and place identifier (group or location) specified in the body of the request. Fulfilling a reservation occurs when the client ships an order and needs to ensure the reserved and on-hand amounts are correct. This is an atomic operation to ensure that all values are successfully updated.

In the case of a response that includes errors, the caller must ensure that they do NOT resubmit the entire request. Doing so will result in a EntityAlreadyExists error response. The HTTP 200 response should be parsed for the skus with errors and then each SKU handled individually to determine if resubmitting is necessary.

Provided in the table below are a few examples of conditions that may exist in the system and the responses that would be expected from the fulfill call based on those conditions.

| Condition | Request | Result |
| --- | --- | --- |
| On Hand = 0 and Reserved = 1 | requested 1 QTY to fufill | the reservation will be fulfilled with no errors |
| On hand = 1 and Reserved = 0 | requested 1 QTY to fufill | an insufficient quantity exception is thrown and OH remains the same |
| On hand = 2 and Reserved = 1 | requested 2 QTY to fufill | an insufficient quantity exception is thrown and OH remains 2, Reserved remains 1 |
| On hand = 1 and Reserved = 2 | requested 2 QTY to fufill | both reservations are fulfilled and OH is reduced to 0 |

##### The Reservation Document

*   The api consumer creates the reservation document in order to have a reference containing pertinent information associated with the reservation (Reservation ID, SKU, Qty, Location Group or Location).
    
*   The api consumer sends the reservation document to OCI as part of reservation, and to an OMS (SOM or 3rd Party) as part of the order.
    
*   The reservation document is used by OMS to know which Group/Location a reservation was placed against for routing purposes.
    
*   The reservation document is used by OCI/ECOM in the event that the reservation needs to be cancelled with the Cancel endpoint. (The unreserve endpoint can be used as well, which doesn't require the Reservation ID, but does require other pertinent reservation details such as SKU, and Group or Location)
    

#### Group Reservations

Because inventory is only available at locations, group availability reflects the aggregation of all locations in the group. It also includes reservations placed at a group that has not been allocated to a specific location.

##### General Lifecycle of a Group Reservation

*   Place the group reservation using `reservation-documents`.
*   Allocate the reservation to a location in the group using `transfers`.
*   Fulfill the reservation at the location using `fulfillments`.

##### Example flow:

Assume Group A has Location 1 and Location 2.

Given the following state of the group:

| Place | On hand | Reserved | ATO |
| --- | --- | --- | --- |
| Location 1 | 50 | 0 | 50 |
| Location 2 | 50 | 0 | 50 |
| Group A | 100 | 0 | 100 |

→ Place group reservation of 1

| Place | On hand | Reserved | ATO |
| --- | --- | --- | --- |
| Location 1 | 50 | 0 | 50 |
| Location 2 | 50 | 0 | 50 |
| Group A | 100 | 1 | 99 |

→ Allocate reservation to Location 2

| Place | On hand | Reserved | ATO |
| --- | --- | --- | --- |
| Location 1 | 50 | 0 | 50 |
| Location 2 | 50 | 1 | 49 |
| Group A | 100 | 1 | 99 |

→ Fulfill at Location 2

| Place | On hand | Reserved | ATO |
| --- | --- | --- | --- |
| Location 1 | 50 | 0 | 50 |
| Location 2 | 49 | 0 | 49 |
| Group A | 99 | 0 | 99 |

Group Reservations **DO NOT** affect a location’s reported Available to Order (ATO) quantity. Essentially, group reservations are a promise returned by the group that one or more of its locations can satisfy the requested reservation quantity. It’s possible that a reservation made against a location could fail if Omnichannel Inventory determines it would break any such existing promises.

For example, a location with a reported ATO of 3 can fail with an ‘Insufficient Quantity’ response when a reservation quantity of 3 is made against it. This scenario happens when some or all of the location’s inventory is unavailable due to a promise (group reservation) made at one of its associated groups.

Fortunately, Omnichannel Inventory exhausts all possibilities to accommodate a group reservation before resulting in failure.

As shown in the Group A example above, a group reservation is only reflected at the location level when it's allocated to one or more locations.

##### Shared Locations

When groups share locations things get a little more complex. For example, group reservations made at one group could increase the count of reservations at another if they share one or more locations.

Example Scenario:

Assume that Group A has Location 1 and Location 2 and Group B has Location 2 and Location 3.

Thus, Location 2 is **shared**.

Given the following state of the groups:

| Place | On hand | Reserved | ATO |
| --- | --- | --- | --- |
| Location 1 | 5 | 0 | 5 |
| Location 2 | 5 | 0 | 5 |
| Group A | 10 | 0 | 10 |
|  |  |  |  |
| Location 2 | 5 | 0 | 5 |
| Location 3 | 15 | 0 | 15 |
| Group B | 20 | 0 | 20 |

→ Placing a Group B reservation of 17

| Place | On hand | Reserved | ATO |
| --- | --- | --- | --- |
| Location 2 | 5 | 0 | 5 |
| Location 3 | 15 | 0 | 15 |
| Group B | 20 | 17 | 3 |

→ Will increase Group A's reservation count by 2

| Place | On hand | Reserved | ATO |
| --- | --- | --- | --- |
| Location 1 | 5 | 0 | 5 |
| Location 2 | 5 | 0 | 5 |
| Group A | 10 | 2 | 8 |

As stated previously, group reservations are a promise returned by the group that one or more of its locations can satisfy the requested reservation quantity. When determining that promise, group reservations follow a "least shared location" approach in that they first lock inventory in their locations which are least shared with other groups. Consequently, that's why, when a reservation of a quantity of 17 was made at Group B, 15 of them were locked at Location 3 first, and the remaining 2 at shared Location 2. As a result, Group A increased its reservation count by 2 to reflect the fact that those 2 are promised elsewhere.

#### Temporary Reservations

When creating reservations, the **expirationSeconds** value indicates the amount of time (in seconds) a reservation maintains a hold on its inventory before releasing it. This expiration time constitutes an approximate time because there’s typically a delay (up to 60+ seconds, under extreme load) from the specified expiration time and the actual release of inventory reflected in availability counts.

Consequently, we suggest that you use the **expirationSeconds** value as a guarantee of a reservation's eventual release of inventory, in the event the client is unable to cancel the reservation due to unforeseen technical issues. In other words, we encourage you to let the client manage the timely cancellation of reservations rather than relying on a reservation's expiration time to prevent underselling scenarios and optimize the accuracy of real-time availability counts.

### Common Response Codes

The following error codes apply to all API endpoints. See the API documentation for a complete list of the error codes and response bodies that can be expected on each endpoint.

*   401 - The OATH bearer token is not valid for the tenant or is no longer valid. The response body has the details.
*   403 - The tenant is not provisioned in the system.
*   5XX - There was a server error. The response body has the details.
*   Unknown - If an Unknown error type is returned, it indicates that an unknown internal error occurred.

### External Reference Identifier

Currently, there are a number of places where a consumer can submit an `ExternalRefId` with their request. This is to allow the consumer to submit user generated data along with their request as a link to other external systems data. For example, if I'm pulling data from an order that has an order ID, I can submit that order ID with my reservation request as the `externalRefId`. Then, if there is a problem with the reservation, there is a way to connect it with the order in the external system that generated the error or problem. This is NOT to be confused with `externalRefId` used in Salesforce Core, or any other services. The usage is exclusive to OCI and is not used anywhere else.

### Correlation-ID

In order to facilitate tracking of operations in OCI, customers must populate a header with the name Correlation-ID, which will be passed through the CDN and sent with the request to OCI. This will help trace requests as they move throughout our service. To be accepted, the correlation-id must be a valid UUIDv2, otherwise, it will be ignored.

When a web-request is passed through the CDN, the CDN's x-correlation-id header value (which comes from their ray-id) also comes into play. In this case, the correlation-id provided will be prepended to the CDN's x-correlation-id and both values will be passed through, separated by a comma.

Some services use a header X-Correlation-ID. In the case of OCI, if this header is used, it is overwritten by the CDN with a new value and the initial purpose of the header is defeated. Use the Correlation-ID instead for a consistent result.

**Version:** 1.1.23

## Servers

*   `https://{shortCode}.api.commercecloud.salesforce.com/inventory/reservation/v1`
    *   `shortCode (default shortCode)`

## Security

*   `AmOAuth2` (oauth2) AccountManager OAuth 2.0 bearer token Authentication.
    *   OAuth flow clientCredentials (tokenUrl: https://account.demandware.com/dwsso/oauth2/access\_token)
    *   Scope sfcc.inventory.reservations.rw: Inventory Reservation scope
    *   Scope sfcc\_inventory\_reservations\_rw: Inventory Reservation scope
    *   OAuth flow authorizationCode (authorizationUrl: https://account.demandware.com/dwsso/oauth2/authorize, tokenUrl: https://account.demandware.com/dwsso/oauth2/access\_token)
    *   Scope sfcc.inventory.reservations.rw: Inventory Reservation scope
    *   Scope sfcc\_inventory\_reservations\_rw: Inventory Reservation scope

## Operations

### PUT Create or update reservations for a number of location groups, locations, or both. If any of the location groups or locations provided in the request are invalid, nothing is processed.

`PUT /organizations/{organizationId}/reservation-documents/{reservationId}`

Operation ID: `createReservations`. Security: AmOAuth2 (sfcc.inventory.reservations.rw, sfcc\_inventory\_reservations\_rw).

Creates or updates a reservation document for the specified organization and reservation ID.

#### Parameters

*   `organizationId` (path, OrganizationId, required) An identifier for the organization the request is being made by
    
    _Example_
    
    ```
    f_ecom_zzxy_prd
    ```
    
*   `reservationId` (path, string, required)  
    Maximum length: 36. Pattern: ^\[0-9a-fA-F\\-\]{36}$. Example: `12345-23456-3456-4567-5678`.

#### Request body (required)

Media type: `application/json`. Schema: `PlaceReservationRequest`.

_Example: placeReservationRequestBodyLocation_ Example request body for placing a reservation by location

```
{
  "externalRefId": "7282822-9823-aaa",
  "expirationSeconds": 300,
  "allowPartialReservations": true,
  "reservationTime": "2019-07-24T21:13:00Z",
  "locations": [
    {
      "id": "warehouse5",
      "reservations": [
        {
          "sku": "sku1234",
          "quantity": 10
        }
      ]
    }
  ]
}
```

_Example: placeReservationRequestBodyLocationAllOrNothing_ Example request body for placing a reservation by location with all or nothing reservations

```
{
  "externalRefId": "7282822-9823-aaa",
  "expirationSeconds": 300,
  "allowPartialReservations": true,
  "reservationTime": "2019-07-24T21:13:00Z",
  "locations": [
    {
      "id": "warehouse5",
      "reservations": [
        {
          "sku": "sku1234",
          "quantity": 10
        }
      ],
      "allOrNothingReservations": [
        {
          "id": "a14s-4b1c-1a3cbd4",
          "reservations": [
            {
              "sku": "sku1234",
              "quantity": 10
            }
          ]
        }
      ]
    }
  ]
}
```

_Example: placeReservationRequestBodyGroups_ Example request body for placing a reservation by group

```
{
  "externalRefId": "7282822-9823-aaa",
  "expirationSeconds": 300,
  "allowPartialReservations": true,
  "reservationTime": "2019-07-24T21:13:00Z",
  "groups": [
    {
      "id": "UnitedStates",
      "reservations": [
        {
          "sku": "sku1234",
          "quantity": 10
        }
      ]
    }
  ]
}
```

_Example: placeReservationRequestBodyLocationAndGroup_ Example request body for placing a reservation by both location and group

```
{
  "externalRefId": "7282822-9823-aaa",
  "expirationSeconds": 300,
  "allowPartialReservations": true,
  "reservationTime": "2019-07-24T21:13:00Z",
  "groups": [
    {
      "id": "UnitedStates",
      "reservations": [
        {
          "sku": "sku1234",
          "quantity": 10
        }
      ]
    }
  ],
  "locations": [
    {
      "id": "warehouse5",
      "reservations": [
        {
          "sku": "sku1234",
          "quantity": 10
        }
      ]
    }
  ]
}
```

_Example: placeReservationAgainstATFBody_ Example request body for placing a reservation against ATF

```
{
  "externalRefId": "7282822-9823-aaa",
  "expirationSeconds": 300,
  "allowPartialReservations": true,
  "fulfillOnly": true,
  "reservationTime": "2019-07-24T21:13:00Z",
  "locations": [
    {
      "id": "warehouse5",
      "reservations": [
        {
          "sku": "sku1234",
          "quantity": 10
        }
      ]
    }
  ]
}
```

#### Responses

*   **200** Successfully received and processed the request. The consumer is responsible for validating the returned data to ensure that the specified quantity was reserved as requested.
    
    Headers:
    
    *   `Location` (string) URI used to retrieve the recorded reservation document.  
        Maximum length: 255. Example: `/organizations/org123/reservation-documents/2345-23456-3456-4567-5678`.
    *   `X-RateLimit-Limit` (string) The maximum number of requests permitted per minute.
    *   `X-RateLimit-Remaining` (string) The number of requests remaining in the current rate limit window.
    *   `X-RateLimit-Reset` (string) The time at which the current rate limit window resets in UTC epoch seconds.
    
    Media type: `application/json`. Schema: `PlaceReservationResponseBody`.
    
    _Example reservationNonPartialSomeItemSuccessSomeFail: same as PUT /organizations/{organizationId}/reservation-documents/{reservationId} 200 response._ Example response with some items succeeded and some failed for groups and locations
    
    _Example reservationNonPartialAllItemsFail: same as PUT /organizations/{organizationId}/reservation-documents/{reservationId} 200 response._ Example response where all items failed for groups and locations
    
    _Example: reservationSuccessExample_ Example response with successful reservation for groups and locations
    
    ```
    {
      "reservationTime": "2019-07-24T21:13:00Z",
      "expirationTime": "2019-07-24T22:13:00Z",
      "success": true,
      "groups": [
        {
          "id": "UnitedStates",
          "details": [
            {
              "sku": "sku1234",
              "quantity": 10.1
            }
          ]
        }
      ],
      "locations": [
        {
          "id": "warehouse5",
          "details": [
            {
              "sku": "sku1234",
              "quantity": 10.1
            }
          ]
        }
      ]
    }
    ```
    
    _Example: placeReservationResponseBody_ Example response with partial failure for groups and locations
    
    ```
    {
      "reservationTime": "2019-07-24T21:13:00Z",
      "expirationTime": "2019-07-24T22:13:00Z",
      "success": false,
      "groups": [
        {
          "id": "UnitedStates",
          "errors": [
            {
              "sku": "sku5678",
              "errorCode": "Unknown"
            }
          ],
          "details": [
            {
              "sku": "sku1234",
              "quantity": 10
            }
          ]
        }
      ],
      "locations": [
        {
          "id": "warehouse5",
          "errors": [
            {
              "sku": "sku5678",
              "errorCode": "Unknown"
            }
          ],
          "details": [
            {
              "sku": "sku1234",
              "quantity": 10
            }
          ]
        }
      ]
    }
    ```
    
    _Example: reservationFail_ Example response with reservation failure due to insufficient quantity
    
    ```
    {
      "reservationTime": "2019-07-24T21:13:00Z",
      "expirationTime": "2019-07-24T22:13:00Z",
      "success": false,
      "groups": [
        {
          "id": "UnitedStates",
          "errors": [
            {
              "errorCode": "InsufficientQuantity",
              "sku": "sku1234"
            }
          ]
        }
      ],
      "locations": [
        {
          "id": "warehouse5",
          "errors": [
            {
              "sku": "sku1234",
              "errorCode": "InsufficientQuantity"
            }
          ]
        }
      ]
    }
    ```
    
    _Example: reservationPartialQtySuccess_ Example response with partial quantity success for groups and locations
    
    ```
    {
      "reservationTime": "2019-07-24T21:13:00Z",
      "expirationTime": "2019-07-24T22:13:00Z",
      "success": false,
      "groups": [
        {
          "id": "UnitedStates",
          "errors": [
            {
              "sku": "sku1234",
              "errorCode": "InsufficientQuantity"
            }
          ],
          "details": [
            {
              "sku": "sku1234",
              "quantity": 10.1
            }
          ]
        }
      ],
      "locations": [
        {
          "id": "warehouse5",
          "errors": [
            {
              "sku": "sku1234",
              "errorCode": "InsufficientQuantity"
            }
          ],
          "details": [
            {
              "sku": "sku1234",
              "quantity": 10.1
            }
          ]
        }
      ]
    }
    ```
    
    _Example: reservationPartialItemSuccess_ Example response with partial item success for groups and locations
    
    ```
    {
      "reservationTime": "2019-07-24T21:13:00Z",
      "expirationTime": "2019-07-24T22:13:00Z",
      "success": true,
      "groups": [
        {
          "id": "UnitedStates",
          "errors": [
            {
              "sku": "sku1234",
              "errorCode": "InsufficientQuantity"
            }
          ],
          "details": [
            {
              "sku": "sku1234",
              "quantity": 10.1
            }
          ]
        }
      ],
      "locations": [
        {
          "id": "warehouse5",
          "errors": [
            {
              "sku": "sku1234",
              "errorCode": "InsufficientQuantity"
            }
          ],
          "details": [
            {
              "sku": "sku1234",
              "quantity": 10.1
            }
          ]
        }
      ]
    }
    ```
    
    _Example: reservationPartialNoItemSuccess_ Example response with no item success for groups and locations
    
    ```
    {
      "reservationTime": "2019-07-24T21:13:00Z",
      "expirationTime": "2019-07-24T21:18:00Z",
      "success": false,
      "groups": [
        {
          "id": "Germany",
          "errors": [
            {
              "sku": "sku1234",
              "errorCode": "InsufficientQuantity"
            },
            {
              "sku": "sku5678",
              "errorCode": "InsufficientQuantity"
            }
          ]
        }
      ],
      "locations": [
        {
          "id": "warehouse5",
          "errors": [
            {
              "sku": "sku1234",
              "errorCode": "InsufficientQuantity"
            },
            {
              "sku": "sku5678",
              "errorCode": "InsufficientQuantity"
            }
          ]
        }
      ]
    }
    ```
    
    _Example: reservationNonPartialSomeItemSuccessSomeFail_ Example response with some items succeeded and some failed for groups and locations
    
    _Example: reservationNonPartialAllItemsFail_ Example response where all items failed for groups and locations
    
*   **400** Invalid request.
    
    Headers:
    
    *   `X-RateLimit-Limit` (string) The maximum number of requests permitted per minute.
    *   `X-RateLimit-Remaining` (string) The number of requests remaining in the current rate limit window.
    *   `X-RateLimit-Reset` (string) The time at which the current rate limit window resets in UTC epoch seconds.
    
    Media type: `application/problem+json`. Schema: `InvalidRequestLocOrGroupDoesNotExist`.
    
    _Example: locationGroupNotFound_
    
    ```
    {
      "errorCode": "GroupDoesNotExist",
      "message": "No group exists with ID",
      "type": "about:blank"
    }
    ```
    
    _Example: locationIdNotFound_
    
    ```
    {
      "errorCode": "LocationDoesNotExist",
      "message": "No location exists with ID 'warehouse5'",
      "type": "about:blank"
    }
    ```
    
    _Example: noLocationOrGroupsNotProvided_
    
    ```
    {
      "errorCode": "InvalidRequest",
      "message": "No location or groups provided.",
      "type": "about:blank"
    }
    ```
    
*   **403** Organization not authorized.
    
    Media type: `application/problem+json`. Schema: `InventoryResponseErrorSchema`.
    
    _Example: TenantNotProvisioned_
    
    ```
    {
      "type": "about:blank",
      "errorCode": "TenantNotProvisioned",
      "message": "The client is not correctly configured to access the system."
    }
    ```
    
*   **409** A reservation with the specified ID is in an invalid state.
    
    Headers:
    
    *   `X-RateLimit-Limit` (string) The maximum number of requests permitted per minute.
    *   `X-RateLimit-Remaining` (string) The number of requests remaining in the current rate limit window.
    *   `X-RateLimit-Reset` (string) The time at which the current rate limit window resets in UTC epoch seconds.
    
    Media type: `application/problem+json`. Schema: `ReservationInvalidState`.
    
    _Example: conflictExample_ Example conflict response
    
    ```
    {
      "errorCode": "ReservationInvalidState",
      "message": "Reservation is in a CLOSED state.",
      "type": "about:blank",
      "parameterName": "sku"
    }
    ```
    
*   **429** The user has sent too many requests in a given amount of time ("rate limiting")
    
    Headers:
    
    *   `Retry-After` (string)
    
    Media type: `application/problem+json`. Schema: `object`.
    
    *   `title` (_string_) A short, human-readable summary of the problem type. It will not change from occurrence to occurrence of the problem, except for purposes of localization.  
        Example: `You do not have enough credit.`.
    *   `type` (_string_, required) A URI reference \[RFC3986\] that identifies the problem type. This specification encourages that, when dereferenced, it provide human-readable documentation for the problem type (e.g., using HTML \[W3C.REC-html5-20141028\]). When this member is not present, its value is assumed to be "about:blank". It accepts relative URIs; this means that they must be resolved relative to the document's base URI, as per \[RFC3986\], Section 5.  
        Example: `https://example.com/probs/out-of-credit`.
    *   `detail` (_string_) A human-readable explanation specific to this occurrence of the problem.  
        Example: `Your current balance is 30, but that costs 50.`.
    *   `instance` (_string_) A URI reference that identifies the specific occurrence of the problem. It may or may not yield further information if dereferenced. It accepts relative URIs; this means that they must be resolved relative to the document's base URI, as per \[RFC3986\], Section 5.  
        Example: `/account/12345/msgs/abc`.
    
    _Example_
    
    ```
    {
      "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/too-many-requests",
      "title": "Too Many Requests",
      "detail": "You have performed too many requests in a short period of time."
    }
    ```
    

### PATCH Cancel a reservation or add items to an existing reservation document. This endpoint references the reservation document directly, marking it as cancelled or adding the items, and then adjusting the reservation and inventory counts based on the details of the reservation document.

`PATCH /organizations/{organizationId}/reservation-documents/{reservationId}`

Operation ID: `updateReservation`. Security: AmOAuth2 (sfcc.inventory.reservations.rw, sfcc\_inventory\_reservations\_rw).

Cancels or updates an existing reservation document by ID.

#### Parameters

*   `organizationId` (path, OrganizationId, required) An identifier for the organization the request is being made by
    
    _Example_
    
    ```
    f_ecom_zzxy_prd
    ```
    
*   `reservationId` (path, string, required)  
    Maximum length: 36. Pattern: ^\[0-9a-fA-F\\-\]{36}$. Example: `12345-23456-3456-4567-5678`.

#### Request body (required)

Media type: `application/json`. Schema: `UpdateReservationRequestBody`.

_Example: cancelReservation_

```
{
  "status": "CANCELLED"
}
```

_Example: updateReservation_

```
{
  "externalRefId": "7282822-9823-aaa",
  "allowPartialReservations": true,
  "reservationTime": "2019-07-24T21:13:00Z",
  "id": "b45a0d25-d9e2-419f-a55a-f435c871fe2b",
  "locations": [
    {
      "id": "warehouse5",
      "reservations": [
        {
          "sku": "sku1234",
          "quantity": 10
        },
        {
          "sku": "sku5678",
          "quantity": 7
        }
      ],
      "allOrNothingReservations": {
        "id": "a14s-4b1c-1a3cbd4",
        "reservations": [
          {
            "sku": "sku1234",
            "quantity": 10
          },
          {
            "sku": "skuABCDE",
            "quantity": 27
          }
        ]
      }
    }
  ],
  "groups": [
    {
      "id": "Arizona",
      "reservations": [
        {
          "sku": "sku1234",
          "quantity": 10
        },
        {
          "sku": "skuHIJKL",
          "quantity": 37
        }
      ],
      "allOrNothingReservations": {
        "id": "a14s-4b1c-1a3cbd4",
        "reservations": [
          {
            "sku": "sku1234",
            "quantity": 10
          },
          {
            "sku": "skuZYX",
            "quantity": 47
          }
        ]
      }
    }
  ]
}
```

#### Responses

*   **200** Reservation update request was received and processed successfully.
    
    Headers:
    
    *   `X-RateLimit-Limit` (string) The maximum number of requests permitted per minute.
    *   `X-RateLimit-Remaining` (string) The number of requests remaining in the current rate limit window.
    *   `X-RateLimit-Reset` (string) The time at which the current rate limit window resets in UTC epoch seconds.
    
    Media type: `application/json`. Schema: `UpdateReservationResponse`.
    
    _Example: successfulReservationUpdateResponse_
    
    ```
    {
      "reservationTime": "2019-07-24T21:13:00Z",
      "expirationTime": "2019-07-24T22:13:00Z",
      "success": true,
      "groups": [
        {
          "id": "UnitedStates",
          "details": [
            {
              "sku": "sku1234",
              "quantity": 10,
              "adjustment": 5
            }
          ]
        }
      ],
      "locations": [
        {
          "id": "warehouse5",
          "details": [
            {
              "sku": "sku1234",
              "quantity": 8,
              "adjustment": 4
            }
          ]
        }
      ]
    }
    ```
    
    _Example: partialQuantitySuccessfulReservationUpdateResponse_
    
    ```
    {
      "reservationTime": "2019-07-24T21:13:00Z",
      "expirationTime": "2019-07-24T22:13:00Z",
      "success": false,
      "groups": [
        {
          "id": "Germany",
          "errors": [
            {
              "sku": "sku3456",
              "errorCode": "InsufficientQuantity"
            }
          ],
          "details": [
            {
              "sku": "sku1234",
              "quantity": 8,
              "adjustment": 4
            }
          ]
        }
      ],
      "locations": [
        {
          "id": "warehouse5",
          "errors": [
            {
              "sku": "sku5678",
              "errorCode": "InsufficientQuantity"
            }
          ],
          "details": [
            {
              "sku": "sku9875",
              "quantity": 8,
              "adjustment": 4
            }
          ]
        }
      ]
    }
    ```
    
    _Example: partialAllItemsFailedReservationUpdateResponse_
    
    ```
    {
      "reservationTime": "2019-07-24T21:13:00Z",
      "expirationTime": "2019-07-24T22:13:00Z",
      "success": false,
      "groups": [
        {
          "id": "Germany",
          "errors": [
            {
              "sku": "sku3456",
              "errorCode": "InsufficientQuantity"
            },
            {
              "sku": "sku5678",
              "errorCode": "InsufficientQuantity"
            }
          ]
        }
      ],
      "locations": [
        {
          "id": "warehouse5",
          "errors": [
            {
              "sku": "sku6789",
              "errorCode": "InsufficientQuantity"
            },
            {
              "sku": "sku7891",
              "errorCode": "InsufficientQuantity"
            }
          ]
        }
      ]
    }
    ```
    
    _Example: failedUpdateReservationUpdateResponse_
    
    ```
    {
      "reservationTime": "2019-07-24T21:13:00Z",
      "expirationTime": "2019-07-24T22:13:00Z",
      "success": false,
      "groups": [
        {
          "id": "Germany",
          "errors": [
            {
              "sku": "sku3456",
              "errorCode": "InsufficientQuantity"
            }
          ]
        }
      ],
      "locations": [
        {
          "id": "warehouse5",
          "errors": [
            {
              "sku": "sku6789",
              "errorCode": "InsufficientQuantity"
            }
          ]
        }
      ]
    }
    ```
    
*   **202** Reservation marked as cancelled. Inventory levels updated asynchronously.
    
    Headers:
    
    *   `X-RateLimit-Limit` (string) The maximum number of requests permitted per minute.
    *   `X-RateLimit-Remaining` (string) The number of requests remaining in the current rate limit window.
    *   `X-RateLimit-Reset` (string) The time at which the current rate limit window resets in UTC epoch seconds.
*   **204** Reservation cancelled successfully.
    
    Headers:
    
    *   `X-RateLimit-Limit` (string) The maximum number of requests permitted per minute.
    *   `X-RateLimit-Remaining` (string) The number of requests remaining in the current rate limit window.
    *   `X-RateLimit-Reset` (string) The time at which the current rate limit window resets in UTC epoch seconds.
*   **400** Invalid request.
    
    Headers:
    
    *   `X-RateLimit-Limit` (string) The maximum number of requests permitted per minute.
    *   `X-RateLimit-Remaining` (string) The number of requests remaining in the current rate limit window.
    *   `X-RateLimit-Reset` (string) The time at which the current rate limit window resets in UTC epoch seconds.
    
    Media type: `application/problem+json`. Schema: `InventoryResponseErrorSchema`.
    
    _Example: InvalidRequestParameter_
    
    ```
    {
      "errorCode": "InvalidRequestParameter",
      "message": "Reservation ID provided does not exist",
      "parameterName": "reservationId",
      "type": "about:blank"
    }
    ```
    
*   **403** Organization not authorized.
    
    Media type: `application/problem+json`. Schema: `InventoryResponseErrorSchema`.
    
    _Example: TenantNotProvisioned_
    
    ```
    {
      "type": "about:blank",
      "errorCode": "TenantNotProvisioned",
      "message": "The client is not correctly configured to access the system."
    }
    ```
    
*   **404** Entity not found.
    
    Headers:
    
    *   `X-RateLimit-Limit` (string) The maximum number of requests permitted per minute.
    *   `X-RateLimit-Remaining` (string) The number of requests remaining in the current rate limit window.
    *   `X-RateLimit-Reset` (string) The time at which the current rate limit window resets in UTC epoch seconds.
    
    Media type: `application/problem+json`. Schema: `InventoryResponseErrorSchema`.
    
    _Example: EntityNotFound_
    
    ```
    {
      "type": "about:blank",
      "errorCode": "EntityNotFound",
      "message": "Reservation ID does not exist."
    }
    ```
    
*   **409** A reservation with the specified ID is in an invalid state.
    
    Headers:
    
    *   `X-RateLimit-Limit` (string) The maximum number of requests permitted per minute.
    *   `X-RateLimit-Remaining` (string) The number of requests remaining in the current rate limit window.
    *   `X-RateLimit-Reset` (string) The time at which the current rate limit window resets in UTC epoch seconds.
    
    Media type: `application/problem+json`. Schema: `InventoryResponseErrorSchema`.
    
    _Example: conflictExample_ Invalid reservation state
    
    ```
    {
      "errorCode": "ReservationInvalidState",
      "message": "Reservation is in a CLOSED state.",
      "type": "about:blank",
      "parameterName": "sku"
    }
    ```
    
*   **429** The user has sent too many requests in a given amount of time ("rate limiting")
    
    Headers:
    
    *   `Retry-After` (string)
    
    Media type: `application/problem+json`. Schema: `object`.
    
    *   `title` (_string_) A short, human-readable summary of the problem type. It will not change from occurrence to occurrence of the problem, except for purposes of localization.  
        Example: `You do not have enough credit.`.
    *   `type` (_string_, required) A URI reference \[RFC3986\] that identifies the problem type. This specification encourages that, when dereferenced, it provide human-readable documentation for the problem type (e.g., using HTML \[W3C.REC-html5-20141028\]). When this member is not present, its value is assumed to be "about:blank". It accepts relative URIs; this means that they must be resolved relative to the document's base URI, as per \[RFC3986\], Section 5.  
        Example: `https://example.com/probs/out-of-credit`.
    *   `detail` (_string_) A human-readable explanation specific to this occurrence of the problem.  
        Example: `Your current balance is 30, but that costs 50.`.
    *   `instance` (_string_) A URI reference that identifies the specific occurrence of the problem. It may or may not yield further information if dereferenced. It accepts relative URIs; this means that they must be resolved relative to the document's base URI, as per \[RFC3986\], Section 5.  
        Example: `/account/12345/msgs/abc`.
    
    _Example_
    
    ```
    {
      "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/too-many-requests",
      "title": "Too Many Requests",
      "detail": "You have performed too many requests in a short period of time."
    }
    ```
    

### POST Move reservation quantities between a group and its locations, or between locations. The system does not support transfers between groups. In the case of All or Nothing movements, only Group to Location movements are allowed.

`POST /organizations/{organizationId}/transfers`

Operation ID: `moveReservationQuantity`. Security: AmOAuth2 (sfcc.inventory.reservations.rw, sfcc\_inventory\_reservations\_rw).

Moves reservation quantities between a group and its locations, or between locations.

#### Parameters

*   `organizationId` (path, OrganizationId, required) An identifier for the organization the request is being made by
    
    _Example_
    
    ```
    f_ecom_zzxy_prd
    ```
    

#### Request body (required)

Media type: `application/json`. Schema: `MoveReservationBatchPostBody`.

_Example: MoveReservationBatchPostBodyExample_

```
{
  "allOrNothingTransferId": "a14s-4b1c-1a3cbd4",
  "records": [
    {
      "id": "82251928-8863-488e-840b-2aebd10b35ed",
      "externalRefId": "7282822-9823-aaa",
      "from": {
        "location": "warehouse4"
      },
      "to": {
        "location": "warehouse5"
      },
      "sku": "sku-001",
      "quantity": 2.011
    },
    {
      "id": "82251928-8863-488e-840b-2aebd10b57ba",
      "externalRefId": "7282822-9823-bbb",
      "from": {
        "group": "UnitedStates"
      },
      "to": {
        "location": "warehouse5"
      },
      "sku": "sku-002",
      "quantity": 7.417,
      "ignoreAvailabilityCheck": true
    },
    {
      "id": "12345-23456-3456-4567-5678-6F6F",
      "externalRefId": "1234561-3574-6B6D",
      "from": {
        "location": "warehouse5"
      },
      "to": {
        "group": "UnitedStates"
      },
      "sku": "sku1000",
      "quantity": 5.417
    }
  ]
}
```

#### Responses

*   **200** Batch reservation transfer partially succeeded with errors reported.
    
    Headers:
    
    *   `X-RateLimit-Limit` (string) The maximum number of requests permitted per minute.
    *   `X-RateLimit-Remaining` (string) The number of requests remaining in the current rate limit window.
    *   `X-RateLimit-Reset` (string) The time at which the current rate limit window resets in UTC epoch seconds.
    
    Media type: `application/json`. Schema: `MoveReservationErrorsResponse`.
    
    _Example: MoveReservationErrorsResponseExample_
    
    ```
    {
      "errors": [
        {
          "details": {
            "id": "82251928-8863-488e-840b-2aebd10b57ba",
            "externalRefId": "7282822-9823-aaa",
            "from": {
              "group": "UnitedStates"
            },
            "to": {
              "location": "warehouse5"
            },
            "sku": "sku-002",
            "quantity": 2.011
          },
          "message": "Insufficient Quantity",
          "errorCode": "InsufficientQuantity"
        }
      ]
    }
    ```
    
*   **204** Reservation quantities moved successfully.
    
    Headers:
    
    *   `X-RateLimit-Limit` (string) The maximum number of requests permitted per minute.
    *   `X-RateLimit-Remaining` (string) The number of requests remaining in the current rate limit window.
    *   `X-RateLimit-Reset` (string) The time at which the current rate limit window resets in UTC epoch seconds.
*   **400** Invalid request.
    
    Headers:
    
    *   `X-RateLimit-Limit` (string) The maximum number of requests permitted per minute.
    *   `X-RateLimit-Remaining` (string) The number of requests remaining in the current rate limit window.
    *   `X-RateLimit-Reset` (string) The time at which the current rate limit window resets in UTC epoch seconds.
    
    Media type: `application/problem+json`. Schema: `InventoryResponseErrorSchema`.
    
    _Example: locationNotFound_
    
    ```
    {
      "errorCode": "LocationDoesNotExist",
      "message": "No location exists with ID 'warehouse5'",
      "type": "about:blank"
    }
    ```
    
    _Example: locationGroupNotFound_
    
    ```
    {
      "errorCode": "GroupDoesNotExist",
      "message": "No group exists with ID",
      "type": "about:blank"
    }
    ```
    
    _Example: groupToGroupNotAllowed_
    
    ```
    {
      "errorCode": "InvalidRequestParameter",
      "message": "Group to Group Transfers are not permitted.",
      "type": "about:blank"
    }
    ```
    
    _Example: locationToLocationNotAllowed_
    
    ```
    {
      "errorCode": "InvalidRequestParameter",
      "message": "'from and to' Transfers between locations is not allowed",
      "type": "about:blank"
    }
    ```
    
    _Example: forceReservationLocationToGroupNotAllowed_
    
    ```
    {
      "errorCode": "InvalidRequestParameter",
      "message": "Forcing a reservation cannot be done from a location to a group",
      "type": "about:blank"
    }
    ```
    
    _Example: invalidTransferAllOrNothing_
    
    ```
    {
      "errorCode": "InvalidRequestParameter",
      "message": "All or nothing transfers are only allowed from Group to Location transfer types. Invalid transfer type for request",
      "type": "about:blank"
    }
    ```
    
*   **403** Organization not authorized.
    
    Media type: `application/problem+json`. Schema: `InventoryResponseErrorSchema`.
    
    _Example: TenantNotProvisioned_
    
    ```
    {
      "type": "about:blank",
      "errorCode": "TenantNotProvisioned",
      "message": "The client is not correctly configured to access the system."
    }
    ```
    
*   **429** The user has sent too many requests in a given amount of time ("rate limiting")
    
    Headers:
    
    *   `Retry-After` (string)
    
    Media type: `application/problem+json`. Schema: `object`.
    
    *   `title` (_string_) A short, human-readable summary of the problem type. It will not change from occurrence to occurrence of the problem, except for purposes of localization.  
        Example: `You do not have enough credit.`.
    *   `type` (_string_, required) A URI reference \[RFC3986\] that identifies the problem type. This specification encourages that, when dereferenced, it provide human-readable documentation for the problem type (e.g., using HTML \[W3C.REC-html5-20141028\]). When this member is not present, its value is assumed to be "about:blank". It accepts relative URIs; this means that they must be resolved relative to the document's base URI, as per \[RFC3986\], Section 5.  
        Example: `https://example.com/probs/out-of-credit`.
    *   `detail` (_string_) A human-readable explanation specific to this occurrence of the problem.  
        Example: `Your current balance is 30, but that costs 50.`.
    *   `instance` (_string_) A URI reference that identifies the specific occurrence of the problem. It may or may not yield further information if dereferenced. It accepts relative URIs; this means that they must be resolved relative to the document's base URI, as per \[RFC3986\], Section 5.  
        Example: `/account/12345/msgs/abc`.
    
    _Example_
    
    ```
    {
      "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/too-many-requests",
      "title": "Too Many Requests",
      "detail": "You have performed too many requests in a short period of time."
    }
    ```
    

### POST Remove reservations for canceled orders or carts. When using the unreserve/release endpoint, the reservation counts are removed from the location or group using the details provided in the call instead of the details in a reservation document (which isn't provided as part of the call to this endpoint).

`POST /organizations/{organizationId}/releases`

Operation ID: `unreserveReservations`. Security: AmOAuth2 (sfcc.inventory.reservations.rw, sfcc\_inventory\_reservations\_rw).

Removes reservations for canceled orders or carts.

#### Parameters

*   `organizationId` (path, OrganizationId, required) An identifier for the organization the request is being made by
    
    _Example_
    
    ```
    f_ecom_zzxy_prd
    ```
    

#### Request body (required)

Media type: `application/json`. Schema: `UnreserveRequestBody`.

_Example: RequestBodyGroupExample_ Example request body for unreserving by group

```
{
  "records": [
    {
      "id": "82251928-8863-488e-840b-2aebd10b57ba",
      "externalRefId": "7282822-9823-aaa",
      "group": "UnitedStates",
      "sku": "sku1234",
      "quantity": 1200.35
    }
  ]
}
```

_Example: RequestBodyLocationExample_ Example request body for unreserving by location

```
{
  "records": [
    {
      "id": "82251928-8863-488e-840b-2aebd10b57ba",
      "externalRefId": "7282822-9823-aaa",
      "location": "warehouse5",
      "sku": "sku1234",
      "quantity": 1200.35
    }
  ]
}
```

_Example: RequestBodyGroupAndLocationExample_ Example request body for unreserving by group and location

```
{
  "records": [
    {
      "id": "82251928-8863-488e-840b-2aebd10b57ba",
      "externalRefId": "7282822-9823-aaa",
      "location": "warehouse5",
      "sku": "sku1234",
      "quantity": 1200.35
    },
    {
      "id": "82251928-8863-488e-840b-2aebd10b6666",
      "externalRefId": "7282822-9823-bbb",
      "group": "UnitedStates",
      "sku": "sku5678",
      "quantity": 1.35
    }
  ]
}
```

#### Responses

*   **200** The request was received and processed successfully. The consumer is responsible for validating the returned data to ensure that the specified quantity was released as requested.
    
    Headers:
    
    *   `X-RateLimit-Limit` (string) The maximum number of requests permitted per minute.
    *   `X-RateLimit-Remaining` (string) The number of requests remaining in the current rate limit window.
    *   `X-RateLimit-Reset` (string) The time at which the current rate limit window resets in UTC epoch seconds.
    
    Media type: `application/json`. Schema: `UnreserveResponseBody`.
    
    _Example: responseBodyGroup_ Example response body for group-level unreserve errors
    
    ```
    {
      "errors": [
        {
          "details": {
            "id": "82251928-8863-488e-840b-2aebd10b6666",
            "externalRefId": "7282822-9823-bbb",
            "group": "UnitedStates",
            "sku": "sku5678",
            "quantity": 0
          },
          "message": "Insufficient Quantity",
          "errorCode": "InsufficientQuantity"
        }
      ]
    }
    ```
    
    _Example: responseBodyLocation_ Example response body for location-level unreserve errors
    
    ```
    {
      "errors": [
        {
          "details": {
            "id": "82251928-8863-488e-840b-2aebd10b57ba",
            "externalRefId": "7282822-9823-aaa",
            "location": "warehouse5",
            "sku": "sku1234",
            "quantity": 0
          },
          "message": "Insufficient Quantity",
          "errorCode": "InsufficientQuantity"
        }
      ]
    }
    ```
    
    _Example: responseBodyGroupAndLocation_ Example response body for group and location-level unreserve errors
    
    ```
    {
      "errors": [
        {
          "details": {
            "id": "82251928-8863-488e-840b-2aebd10b6666",
            "externalRefId": "7282822-9823-bbb",
            "group": "UnitedStates",
            "sku": "sku5678",
            "quantity": 0
          },
          "message": "Insufficient Quantity",
          "errorCode": "InsufficientQuantity"
        },
        {
          "details": {
            "id": "82251928-8863-488e-840b-2aebd10b57ba",
            "externalRefId": "7282822-9823-aaa",
            "location": "warehouse5",
            "sku": "sku1234",
            "quantity": 0
          },
          "message": "Insufficient Quantity",
          "errorCode": "InsufficientQuantity"
        }
      ]
    }
    ```
    
*   **204** Reservations for specified items removed successfully.
    
    Headers:
    
    *   `X-RateLimit-Limit` (string) The maximum number of requests permitted per minute.
    *   `X-RateLimit-Remaining` (string) The number of requests remaining in the current rate limit window.
    *   `X-RateLimit-Reset` (string) The time at which the current rate limit window resets in UTC epoch seconds.
*   **400** Invalid request.
    
    Headers:
    
    *   `X-RateLimit-Limit` (string) The maximum number of requests permitted per minute.
    *   `X-RateLimit-Remaining` (string) The number of requests remaining in the current rate limit window.
    *   `X-RateLimit-Reset` (string) The time at which the current rate limit window resets in UTC epoch seconds.
    
    Media type: `application/problem+json`. Schema: `InventoryResponseErrorSchema`.
    
    _Example: genericErrorMessage_
    
    ```
    {
      "errorCode": "InvalidRequest",
      "message": "The format of the message is incorrect",
      "type": "about:blank"
    }
    ```
    
    _Example: tooManyFieldsProvided_
    
    ```
    {
      "errorCode": "InvalidRequestParameter",
      "message": "User provided locationId AND groupId.  You can only provide one or the other, not both in a single record.",
      "type": "about:blank"
    }
    ```
    
    _Example: locationDoesNotExist_
    
    ```
    {
      "errorCode": "LocationDoesNotExist",
      "message": "No location exists with ID 'warehouse5'",
      "type": "about:blank"
    }
    ```
    
    _Example: locationGroupNotFound_
    
    ```
    {
      "errorCode": "GroupDoesNotExist",
      "message": "No group exists with ID",
      "type": "about:blank"
    }
    ```
    
*   **403** Organization not authorized.
    
    Media type: `application/problem+json`. Schema: `InventoryResponseErrorSchema`.
    
    _Example: TenantNotProvisioned_
    
    ```
    {
      "type": "about:blank",
      "errorCode": "TenantNotProvisioned",
      "message": "The client is not correctly configured to access the system."
    }
    ```
    
*   **429** The user has sent too many requests in a given amount of time ("rate limiting")
    
    Headers:
    
    *   `Retry-After` (string)
    
    Media type: `application/problem+json`. Schema: `object`.
    
    *   `title` (_string_) A short, human-readable summary of the problem type. It will not change from occurrence to occurrence of the problem, except for purposes of localization.  
        Example: `You do not have enough credit.`.
    *   `type` (_string_, required) A URI reference \[RFC3986\] that identifies the problem type. This specification encourages that, when dereferenced, it provide human-readable documentation for the problem type (e.g., using HTML \[W3C.REC-html5-20141028\]). When this member is not present, its value is assumed to be "about:blank". It accepts relative URIs; this means that they must be resolved relative to the document's base URI, as per \[RFC3986\], Section 5.  
        Example: `https://example.com/probs/out-of-credit`.
    *   `detail` (_string_) A human-readable explanation specific to this occurrence of the problem.  
        Example: `Your current balance is 30, but that costs 50.`.
    *   `instance` (_string_) A URI reference that identifies the specific occurrence of the problem. It may or may not yield further information if dereferenced. It accepts relative URIs; this means that they must be resolved relative to the document's base URI, as per \[RFC3986\], Section 5.  
        Example: `/account/12345/msgs/abc`.
    
    _Example_
    
    ```
    {
      "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/too-many-requests",
      "title": "Too Many Requests",
      "detail": "You have performed too many requests in a short period of time."
    }
    ```
    

### POST Adjust quantity for an item after fulfillment.

`POST /organizations/{organizationId}/fulfillments`

Operation ID: `fulfillQuantity`. Security: AmOAuth2 (sfcc.inventory.reservations.rw, sfcc\_inventory\_reservations\_rw).

Adjusts the reserved quantity for an item after fulfillment.

#### Parameters

*   `organizationId` (path, OrganizationId, required) An identifier for the organization the request is being made by
    
    _Example_
    
    ```
    f_ecom_zzxy_prd
    ```
    

#### Request body (required)

Media type: `application/json`. Schema: `FulfillQuantityRequestBody`.

_Example: FulfillQuantityRequestBodyExample_ Example request body for fulfill quantity

```
{
  "records": [
    {
      "id": "82251928-8863-488e-840b-2aebd10b57ba",
      "externalRefId": "7282822-9823-aaa",
      "location": "warehouse5",
      "sku": "sku1234",
      "quantity": 1200.35,
      "fulfillmentTime": "2019-07-24T21:13:00Z"
    },
    {
      "id": "82251928-8863-488e-840b-2aeb567d3a87",
      "externalRefId": "7282822-9823-ddd",
      "location": "warehouse4",
      "sku": "sku5678",
      "quantity": 201.27
    }
  ]
}
```

#### Responses

*   **200** Fulfillment partially succeeded with errors reported.
    
    Headers:
    
    *   `X-RateLimit-Limit` (string) The maximum number of requests permitted per minute.
    *   `X-RateLimit-Remaining` (string) The number of requests remaining in the current rate limit window.
    *   `X-RateLimit-Reset` (string) The time at which the current rate limit window resets in UTC epoch seconds.
    
    Media type: `application/json`. Schema: `FulfillQuantityResponseErrors`.
    
    _Example: locationNotFound_ Example response when a location is not found
    
    ```
    {
      "errors": [
        {
          "details": {
            "id": "82251928-8863-488e-840b-2aebd10b57ba",
            "externalRefId": "7282822-9823-aaa",
            "location": "warehouse5",
            "sku": "sku1234",
            "quantity": 1200.35
          },
          "message": "Failed to fulfill, invalid location provided.",
          "errorCode": "Unknown"
        }
      ]
    }
    ```
    
    _Example: insufficientQty_ Example response when there is insufficient quantity
    
    ```
    {
      "errors": [
        {
          "details": {
            "id": "82251928-8863-488e-840b-2aebd10b57ba",
            "externalRefId": "7282822-9823-aaa",
            "location": "warehouse5",
            "sku": "sku1234",
            "quantity": 1200.35
          },
          "message": "Insufficient Quantity.",
          "errorCode": "Unknown"
        }
      ]
    }
    ```
    
*   **204** Quantity adjusted successfully.
    
    Headers:
    
    *   `X-RateLimit-Limit` (string) The maximum number of requests permitted per minute.
    *   `X-RateLimit-Remaining` (string) The number of requests remaining in the current rate limit window.
    *   `X-RateLimit-Reset` (string) The time at which the current rate limit window resets in UTC epoch seconds.
*   **400** Invalid request.
    
    Headers:
    
    *   `X-RateLimit-Limit` (string) The maximum number of requests permitted per minute.
    *   `X-RateLimit-Remaining` (string) The number of requests remaining in the current rate limit window.
    *   `X-RateLimit-Reset` (string) The time at which the current rate limit window resets in UTC epoch seconds.
    
    Media type: `application/problem+json`. Schema: `InventoryResponseErrorSchema`.
    
    _Example: MissingParameter_
    
    ```
    {
      "type": "about:blank",
      "errorCode": "MissingParameter",
      "message": "The field 'quantity' is missing from the request body."
    }
    ```
    
*   **403** Organization not authorized.
    
    Media type: `application/problem+json`. Schema: `InventoryResponseErrorSchema`.
    
    _Example: TenantNotProvisioned_
    
    ```
    {
      "type": "about:blank",
      "errorCode": "TenantNotProvisioned",
      "message": "The client is not correctly configured to access the system."
    }
    ```
    
*   **409** Reservation ID invalid.
    
    Headers:
    
    *   `X-RateLimit-Limit` (string) The maximum number of requests permitted per minute.
    *   `X-RateLimit-Remaining` (string) The number of requests remaining in the current rate limit window.
    *   `X-RateLimit-Reset` (string) The time at which the current rate limit window resets in UTC epoch seconds.
    
    Media type: `application/json`. Schema: `InventoryResponseErrorSchema`.
    
    _Example: IDDoesNotExist_
    
    ```
    {
      "type": "about:blank",
      "errorCode": "InvalidRequestParameter",
      "message": "ID does not exist."
    }
    ```
    
*   **429** The user has sent too many requests in a given amount of time ("rate limiting")
    
    Headers:
    
    *   `Retry-After` (string)
    
    Media type: `application/problem+json`. Schema: `object`.
    
    *   `title` (_string_) A short, human-readable summary of the problem type. It will not change from occurrence to occurrence of the problem, except for purposes of localization.  
        Example: `You do not have enough credit.`.
    *   `type` (_string_, required) A URI reference \[RFC3986\] that identifies the problem type. This specification encourages that, when dereferenced, it provide human-readable documentation for the problem type (e.g., using HTML \[W3C.REC-html5-20141028\]). When this member is not present, its value is assumed to be "about:blank". It accepts relative URIs; this means that they must be resolved relative to the document's base URI, as per \[RFC3986\], Section 5.  
        Example: `https://example.com/probs/out-of-credit`.
    *   `detail` (_string_) A human-readable explanation specific to this occurrence of the problem.  
        Example: `Your current balance is 30, but that costs 50.`.
    *   `instance` (_string_) A URI reference that identifies the specific occurrence of the problem. It may or may not yield further information if dereferenced. It accepts relative URIs; this means that they must be resolved relative to the document's base URI, as per \[RFC3986\], Section 5.  
        Example: `/account/12345/msgs/abc`.
    
    _Example_
    
    ```
    {
      "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/too-many-requests",
      "title": "Too Many Requests",
      "detail": "You have performed too many requests in a short period of time."
    }
    ```
    

## Schemas

### OrganizationId

An identifier for the organization the request is being made by

Type: `string`.

Minimum length: 1. Maximum length: 32. Example: `f_ecom_zzxy_prd`.

### PlaceReservationRequest

Reservation Request

Place a reservation Request

*   `externalRefId` (_ExternalRefId_)
*   `expirationSeconds` (_ExpirationSeconds_)
*   `allowPartialReservations` (_AllowPartialReservations_)
*   `fulfillOnly` (_FulfillOnlyReservations_)
*   `reservationTime` (_ReservationTime_)
*   `groups` (_array of ReservationRequestGroup_) The reservations to request at the specified location groups.
*   `locations` (_array of ReservationRequestLocation_) The reservations to request at the specified locations.

### PlaceReservationResponseBody

The response for a successful reservation placement.

*   `reservationTime` (_string (date-time)_, required)  
    Maximum length: 30. Example: `2019-07-24T21:13:00Z`.
*   `expirationTime` (_ExpirationTime_)
*   `success` (_boolean_, required) Whether or not the reservation was able to be placed successfully.  
    Example: `true`.
*   `groups` (_array of object_) The results for the requested location group reservations.
    *   `id` (_GroupId_, required)
    *   `errors` (_array of ReservationResponseErrorRecord2_)
    *   `details` (_array of ReservedReservationRecord_) Information about the SKU, and the amount of quantity that was successfully reserved.
*   `locations` (_array of object_) The results for the requested location reservations.
    *   `id` (_LocationId_, required)
    *   `errors` (_array of ReservationResponseErrorRecord2_)
    *   `details` (_array of ReservedReservationRecord_) Information about the SKU, and the amount of quantity that was successfully reserved.

### InvalidRequestLocOrGroupDoesNotExist

*   `errorCode` (_InvalidRequestLocOrGroupDoesNotExistEnum_, required)
*   `message` (_string_, required)  
    Maximum length: 250. Example: `An invalid group was provided.`.
*   `type` (_string_, required)  
    Maximum length: 250. Example: `about:blank`.
*   `parameterName` (_string_) When invalid json is passed to the service, this field will indicate which piece of the supplied json was invalid.  
    Maximum length: 250. Example: `sku`.
*   `group` (_string_) Indicates which group was provided that does not exist  
    Maximum length: 250. Example: `UnitedStates`.
*   `location` (_string_) Indicates the location that was provided that does not exist  
    Maximum length: 250. Example: `warehouse5`.

### InventoryResponseErrorSchema

*   `errorCode` (_string_, required)  
    Maximum length: 32. Example: `InvalidRequestParameter`.
*   `message` (_string_, required)  
    Maximum length: 250. Example: `An invalid request parameter was provided.`.
*   `type` (_string_, required)  
    Maximum length: 250. Example: `about:blank`.
*   `parameterName` (_string_) When invalid json is passed to the service, this field will indicate which piece of the supplied json was invalid.  
    Maximum length: 250. Example: `location`.

### ReservationInvalidState

Error generated when attempting to create a reservation with the same ID as an existing one.

Maximum length: 1.

*   `errorCode` (_string_, required)  
    Allowed values: `ReservationInvalidState`, `ReservationAlreadyFinalized`, `ReservationCancelled`, `ReservationOperationInProcess`, `EntityExists`, `ConcurrentModification`, `PreviousRequestAborted`, `PreviousRequestCancelled`. Maximum length: 32. Example: `ReservationInvalidState`.
*   `message` (_string_, required)  
    Maximum length: 250. Example: `Reservation is in a CLOSED state.`.
*   `type` (_string_, required)  
    Maximum length: 250. Example: `about:blank`.
*   `parameterName` (_string_) When invalid json is passed to the service, this field will indicate which piece of the supplied json was invalid.  
    Maximum length: 250. Example: `sku`.

_Example_

```
{
  "errorCode": "ReservationInvalidState",
  "message": "Reservation is in a CLOSED state.",
  "type": "about:blank",
  "parameterName": "sku"
}
```

### UpdateReservationRequestBody

The body that is sent requesting a reservation be cancelled.

*   `status` (_string_) The status to set on the reservation document  
    Allowed values: `CANCELLED`. Example: `CANCELLED`.
*   `externalRefId` (_ExternalRefId_)
*   `allowPartialReservations` (_boolean_) Whether or not to allow partial reservations. The default value is 'true'. If the value sent in is 'true', or no value is sent, the response will only include the quantity that was available to be reserved. There will be no error message. In this case, the response must be verified by the caller.  
    Example: `true`.
*   `reservationTime` (_ReservationTime_)
*   `id` (_IdempotenceId_)
*   `locations` (_UpdateReservationLocationType_)
*   `groups` (_UpdateReservationGroupType_)

### UpdateReservationResponse

*   `reservationTime` (_ReservationTime_)
*   `expirationTime` (_ExpirationTime_)
*   `success` (_boolean_)  
    Example: `false`.
*   `groups` (_array of object_)
    *   `id` (_GroupId_)
    *   `errors` (_GenericErrorsArray_)
    *   `details` (_array of object_)
        *   `sku` (_SkuId_)
        *   `quantity` (_number (float)_)  
            Example: `8`.
        *   `adjustment` (_number (float)_)  
            Example: `4`.
*   `locations` (_array of object_)
    *   `id` (_LocationId_)
    *   `errors` (_GenericErrorsArray_)
    *   `details` (_array of object_)
        *   `sku` (_SkuId_)
        *   `quantity` (_number (float)_)  
            Example: `8`.
        *   `adjustment` (_number (float)_)  
            Example: `4`.

### MoveReservationBatchPostBody

Move Reservations Batch Call

*   `allOrNothingTransferId` (_AllOrNothingId_, required)
*   `records` (_array of MoveReservationBodyRecords_, required) List of records to process in a batch update. The maximum number of entries in the array is 100.

### MoveReservationErrorsResponse

moveReservationsErrorResponse

*   `errors` (_array of MoveReservationError_, required) Errors generated during transfer/move reservation

_Example_

```
{
  "errors": [
    {
      "details": {
        "id": "82251928-8863-488e-840b-2aebd10b57ba",
        "externalRefId": "7282822-9823-aaa",
        "from": {
          "group": "UnitedStates"
        },
        "to": {
          "location": "warehouse5"
        },
        "sku": "sku-002",
        "quantity": 2.011
      },
      "message": "Insufficient Quantity",
      "errorCode": "InsufficientQuantity"
    }
  ]
}
```

### UnreserveRequestBody

Request Body By Location Only

*   `records` (_array of object_, required)
    *   `id` (_IdempotenceId_, required)
    *   `externalRefId` (_ExternalRefId_)
    *   `location` (_LocationId_)
    *   `group` (_GroupId_)
    *   `sku` (_SkuId_, required)
    *   `quantity` (_QuantityOnHand_, required)

### UnreserveResponseBody

Unreserve Response Body

*   `errors` (_array of object_, required)
    
    _Example_
    
    ```
    [
      {
        "details": {
          "id": "82251928-8863-488e-840b-2aebd10b6666",
          "externalRefId": "7282822-9823-bbb",
          "group": "UnitedStates",
          "sku": "sku5678",
          "quantity": 0
        },
        "message": "Insufficient Quantity",
        "errorCode": "InsufficientQuantity"
      }
    ]
    ```
    
    *   `details` (_UnreservedDetail_, required)
    *   `errorCode` (_ErrorCode_)
    *   `message` (_Message_)

### FulfillQuantityRequestBody

Fulfills the given quantity of reservations for a SKU at a given location. The given quantity will be subtracted from the reservation count and the quantity on hand, in an atomic operation.

*   `records` (_array of object_, required) List of records to process in a batch update. The maximum number of entries in the array is 100.
    
    Each item: The records provided in a fulfillment request.
    
    *   `id` (_IdempotenceId_, required)
    *   `externalRefId` (_ExternalRefId_)
    *   `location` (_LocationId_, required)
    *   `sku` (_SkuId_, required)
    *   `quantity` (_QuantityOnHand_, required)
    *   `fulfillmentTime` (_FulfillmentTime_)

_Example_

```
{
  "records": [
    {
      "id": "82251928-8863-488e-840b-2aebd10b57ba",
      "externalRefId": "7282822-9823-aaa",
      "location": "warehouse5",
      "sku": "sku1234",
      "quantity": 1200.35,
      "fulfillmentTime": "2019-07-24T21:13:00Z"
    },
    {
      "id": "82251928-8863-488e-840b-2aeb567d3a87",
      "externalRefId": "7282822-9823-ddd",
      "location": "warehouse4",
      "sku": "sku5678",
      "quantity": 201.27
    }
  ]
}
```

### FulfillQuantityResponseErrors

*   `errors` (_array of object_, required)
    
    Each item: Error message generated after a failed fulfillment.
    
    *   `details` (_object_, required) Reservation fulfillment error detail information
        *   `id` (_IdempotenceId_, required)
        *   `externalRefId` (_ExternalRefId_)
        *   `location` (_LocationId_, required)
        *   `sku` (_SkuId_, required)
        *   `quantity` (_QuantityOnHand_, required)
    *   `message` (_string_, required) Error message  
        Maximum length: 128. Example: `Fulfillment failed - invalid location provided`.
    *   `errorCode` (_ErrorCode_, required)

_Example_

```
{
  "errors": [
    {
      "details": {
        "id": "82251928-8863-488e-840b-2aebd10b57ba",
        "externalRefId": "7282822-9823-aaa",
        "location": "warehouse5",
        "sku": "sku1234",
        "quantity": 1200.35
      },
      "message": "Failed to fulfill, invalid location provided.",
      "errorCode": "err751"
    }
  ]
}
```

### ExternalRefId

A convenience identifier for the consumer, used for auditing events. This field is NOT used by the service itself, but is intended for the consumer to be able to identify records submitted from their systems that are external to OCI.

Type: `string`.

Maximum length: 128. Pattern: ^\[a-zA-Z0-9\\-\]\*$. Example: `7282822-9823-aaa`.

### ExpirationSeconds

The number of seconds until this reservation expires. If not specified, this reservation never expires.

Typically, there's about a 10-15 second delay between the specified expiration time and its reflection on inventory counts under normal load, but usually stays within 60 seconds under higher loads.

Type: `integer`.

Minimum: 1. Maximum: 14400. Example: `300`.

### AllowPartialReservations

Whether or not to allow partial reservations. The default value is 'true'. If the value sent in is 'true', or no value is sent, the response will only include the quantity that was available to be reserved. There will be no error message. In this case, the response must be verified by the caller.

Type: `boolean`.

Example: `true`.

### FulfillOnlyReservations

Whether or not to fulfill a reservation ONLY against the ATF amount. The default value is 'false'. If the value sent in is 'false', or no value is sent, the reservations will apply normally. If the value is sent as 'true', the reservation will ONLY be placed against the ATF amount and will fail if this amount is insufficient to fulfill the reservation request.

Type: `boolean`.

Example: `true`.

### ReservationTime

The time the reservation was placed

Type: `string (date-time)`.

Maximum length: 30. Example: `2019-07-24T21:13:00Z`.

### ReservationRequestGroup

The reservations to request at the location group.

*   `id` (_GroupId_, required)
*   `reservations` (_array of ReservationRequestRecord_, required)

### ReservationRequestLocation

The reservations to request at the location.

*   `id` (_LocationId_, required)
*   `reservations` (_array of ReservationRequestRecord_, required)
*   `allOrNothingReservations` (_array of object_)
    *   `id` (_AllOrNothingId_, required)
    *   `reservations` (_array of ReservationRequestRecord_, required)

### ExpirationTime

The time the reservation expires

Type: `string (date-time)`.

Maximum length: 30. Example: `2019-07-24T21:13:00Z`.

### GroupId

An identifier for a collection of locations

Type: `string`.

Minimum length: 2. Maximum length: 128. Pattern: ^\[a-zA-Z0-9-\_\]\*$. Example: `UnitedStates`.

### ReservationResponseErrorRecord2

Information about any errors that occurred attempting to place the reservation.

Maximum length: 250.

*   `sku` (_SkuId_, required)
*   `errorCode` (_ErrorCode_, required)

_Example_

```
{
  "sku": "sku5678",
  "errorCode": "Unknown"
}
```

### ReservedReservationRecord

*   `sku` (_SkuId_, required)
*   `quantity` (_ReservedQuantity_, required)

### LocationId

The id of the location of the inventory.

Type: `string`.

Minimum length: 2. Maximum length: 128. Pattern: ^\[a-zA-Z0-9-\_\]\*$. Example: `warehouse5`.

### InvalidRequestLocOrGroupDoesNotExistEnum

Type: `string`.

Allowed values: `InvalidRequest`, `LocationDoesNotExist`, `GroupDoesNotExist`. Example: `LocationDoesNotExist`.

### IdempotenceId

A unique identifier, used in combination with the SKU, so that future requests with the same combination have the same result.

Type: `string`.

Maximum length: 128. Pattern: ^\[a-zA-Z0-9\\-\]\*$. Example: `82251928-8863-488e-840b-2aebd10b57ba`.

### UpdateReservationLocationType

The reservations to request at the specified locations.

Array of `object`.

*   `id` (_LocationId_, required)
*   `reservations` (_Reservations_, required)
*   `allOrNothingReservations` (_object_, required)
    *   `id` (_string_, required) The user defined ID of the all or nothing reservation  
        Maximum length: 32. Example: `a14s-4b1c-1a3cbd4`.
    *   `reservations` (_Reservations_, required)

### UpdateReservationGroupType

The reservations to request at the specified location groups.

Array of `object`.

*   `id` (_GroupId_, required)
*   `reservations` (_Reservations_, required)
*   `allOrNothingReservations` (_object_, required)
    *   `id` (_string_, required) The user defined ID of the all or nothing reservation  
        Maximum length: 32. Example: `a14s-4b1c-1a3cbd4`.
    *   `reservations` (_Reservations_, required)

### GenericErrorsArray

Array of `object`.

*   `sku` (_SkuId_)
*   `errorCode` (_string_)  
    Maximum length: 32. Example: `InsufficientQuantity`.

### SkuId

The inventory identifier

Type: `string`.

Minimum length: 1. Maximum length: 250. Pattern: ^\[^\\\\<>;%/\\s\]\*$. Example: `sku1234`.

### AllOrNothingId

The used defined id of the All Or Nothing Reservation.

Type: `string`.

Minimum length: 1. Maximum length: 128. Pattern: ^\[a-zA-Z0-9-\_\]\*$. Example: `a14s-4b1c-1a3cbd4`.

### MoveReservationBodyRecords

Location To Location Move Reservation Records

*   `id` (_IdempotenceId_, required)
*   `externalRefId` (_ExternalRefId_)
*   `from` (_MoveReservationFromLocation | MoveReservationFromGroup_, required) The place from which the reservation quantity is being moved.
    
    One of: `MoveReservationFromLocation`, `MoveReservationFromGroup`.
    
*   `to` (_MoveReservationToLocation | MoveReservationToGroup_, required) The place where the reservation quantity is being moved to.
    
    One of: `MoveReservationToLocation`, `MoveReservationToGroup`.
    
*   `sku` (_SkuId_, required)
*   `quantity` (_number (double)_, required)  
    Minimum: 0.001. Multiple of: 0.001. Example: `2.011`.
*   `ignoreAvailabilityCheck` (_boolean_) It specifies if the reservation should be moved even if there is no inventory at the destination.  
    Default: `false`. Example: `false`.

### MoveReservationError

*   `details` (_MoveReservationErrorDetail_, required)
*   `message` (_Message_, required)
*   `errorCode` (_ErrorCode_, required)

### QuantityOnHand

Quantity on hand.

Type: `number (double)`.

Minimum: 0. Multiple of: 0.001. Example: `1200.35`.

### UnreservedDetail

*   `id` (_IdempotenceId_, required)
*   `externalRefId` (_ExternalRefId_, required)
*   `location` (_LocationId_)
*   `group` (_GroupId_)
*   `sku` (_SkuId_, required)
*   `quantity` (_number_, required)  
    Example: `0`.

### ErrorCode

The error code

Type: `string`.

Allowed values: `InsufficientQuantity`, `Unknown`. Maximum length: 128. Pattern: ^\[a-zA-Z0-9\\-\]\*$. Example: `MoveError`.

### Message

The error message

Type: `string`.

Maximum length: 128. Pattern: ^\[a-zA-Z0-9\\- \]\*$. Example: `MoveError`.

### FulfillmentTime

The time the fulfillment takes place

Type: `string (date-time)`.

Maximum length: 30. Example: `2019-07-24T21:13:00Z`.

### ReservationRequestRecord

Information about the SKU, and quantity to reserve.

*   `sku` (_SkuId_, required)
*   `quantity` (_ReservedQuantity_, required)

### ReservedQuantity

The quantity to reserve

Type: `number (double)`.

Minimum: 0.001. Multiple of: 0.001. Example: `10`.

### Reservations

Array of `object`.

*   `sku` (_SkuId_, required)
*   `quantity` (_ReservedQuantity_, required)

### MoveReservationFromLocation

*   `location` (_LocationId_, required)

### MoveReservationFromGroup

*   `group` (_GroupId_, required)

### MoveReservationToLocation

*   `location` (_LocationId_, required)

### MoveReservationToGroup

*   `group` (_GroupId_, required)

### MoveReservationErrorDetail

*   `id` (_IdempotenceId_, required)
*   `externalRefId` (_ExternalRefId_, required)
*   `from` (_MoveReservationFromGroup | MoveReservationFromLocation_, required)
    
    One of: `MoveReservationFromGroup`, `MoveReservationFromLocation`.
    
*   `to` (_MoveReservationToGroup | MoveReservationToLocation_, required)
    
    One of: `MoveReservationToGroup`, `MoveReservationToLocation`.
    
*   `sku` (_SkuId_, required)
*   `quantity` (_number (double)_, required)  
    Minimum: 0.001. Multiple of: 0.001. Example: `2.011`.