openapi: 3.1.0 info: title: Manhattan Active Omni Order Management API description: >- Manhattan Active Omni APIs enable omnichannel order management and fulfillment, including order promising, order orchestration, inventory availability, and customer service operations for retail and distribution. version: 1.0.0 contact: name: Manhattan Associates Developer Support url: https://developer.manh.com/ license: name: Proprietary url: https://www.manh.com/terms-of-use externalDocs: description: Manhattan Active Omni Developer Portal url: https://omni.developer.manh.com/ servers: - url: https://api.developer.manh.com/omni/v1 description: Manhattan Active Omni REST API security: - OAuth2ClientCredentials: [] paths: /orders: get: operationId: listOrders summary: List orders description: >- Retrieve a paginated list of orders. Supports filtering by status, customer, channel, and date range. tags: - Orders parameters: - name: status in: query schema: type: string enum: [created, allocated, released, shipped, delivered, cancelled, returned] - name: customerId in: query schema: type: string - name: channelId in: query schema: type: string - name: orderDateFrom in: query schema: type: string format: date-time - name: orderDateTo in: query schema: type: string format: date-time - name: limit in: query schema: type: integer default: 50 maximum: 500 - name: offset in: query schema: type: integer default: 0 responses: '200': description: List of orders content: application/json: schema: $ref: '#/components/schemas/OrderListResponse' '401': $ref: '#/components/responses/Unauthorized' post: operationId: createOrder summary: Create an order description: >- Submit a new customer order for orchestration. The system performs inventory availability checking and assigns fulfillment nodes. tags: - Orders requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/OrderCreateRequest' responses: '201': description: Order created content: application/json: schema: $ref: '#/components/schemas/Order' '400': $ref: '#/components/responses/BadRequest' '422': description: Order validation failed (inventory, address, etc.) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' /orders/{orderId}: get: operationId: getOrder summary: Get an order description: Retrieve full details of an order including line items, fulfillment assignments, and shipments. tags: - Orders parameters: - name: orderId in: path required: true schema: type: string responses: '200': description: Order details content: application/json: schema: $ref: '#/components/schemas/Order' '404': $ref: '#/components/responses/NotFound' patch: operationId: updateOrder summary: Update an order description: Modify an open order (add/remove lines, change quantities, update addresses). tags: - Orders parameters: - name: orderId in: path required: true schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/OrderUpdateRequest' responses: '200': description: Order updated content: application/json: schema: $ref: '#/components/schemas/Order' /orders/{orderId}/cancel: post: operationId: cancelOrder summary: Cancel an order description: Cancel an order or specific order lines. tags: - Orders parameters: - name: orderId in: path required: true schema: type: string requestBody: content: application/json: schema: type: object properties: reason: type: string lineIds: type: array items: type: string description: Specific line IDs to cancel (omit to cancel entire order) responses: '200': description: Cancellation processed content: application/json: schema: $ref: '#/components/schemas/Order' /inventory/availability: post: operationId: checkInventoryAvailability summary: Check inventory availability description: >- Query real-time inventory availability for a list of items across fulfillment nodes, applying ATP (Available to Promise) rules. tags: - Inventory requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AvailabilityRequest' responses: '200': description: Availability results content: application/json: schema: $ref: '#/components/schemas/AvailabilityResponse' /inventory/positions: get: operationId: getInventoryPositions summary: Get inventory positions description: Retrieve current inventory positions for items across fulfillment locations. tags: - Inventory parameters: - name: itemId in: query schema: type: string - name: locationId in: query schema: type: string - name: limit in: query schema: type: integer default: 100 responses: '200': description: Inventory positions content: application/json: schema: $ref: '#/components/schemas/InventoryPositionListResponse' /promise/check: post: operationId: checkOrderPromise summary: Check order promise (ATP) description: >- Run order promising logic to determine earliest delivery dates, best fulfillment nodes, and shipping options without committing inventory. tags: - Promising requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PromiseRequest' responses: '200': description: Promise options content: application/json: schema: $ref: '#/components/schemas/PromiseResponse' /returns: post: operationId: createReturn summary: Create a return description: Initiate a customer return or exchange for a fulfilled order. tags: - Returns requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ReturnRequest' responses: '201': description: Return created content: application/json: schema: $ref: '#/components/schemas/Return' components: securitySchemes: OAuth2ClientCredentials: type: oauth2 flows: clientCredentials: tokenUrl: https://auth.developer.manh.com/oauth2/token scopes: orders:read: Read order data orders:write: Create and modify orders inventory:read: Read inventory positions responses: Unauthorized: description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' Forbidden: description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' NotFound: description: Resource not found content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' BadRequest: description: Invalid request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' schemas: Order: type: object properties: orderId: type: string externalOrderId: type: string description: Customer or channel order number status: type: string enum: [created, allocated, released, shipped, delivered, cancelled, returned] channelId: type: string customerId: type: string orderDate: type: string format: date-time requiredDeliveryDate: type: string format: date shippingAddress: $ref: '#/components/schemas/Address' lines: type: array items: $ref: '#/components/schemas/OrderLine' totals: $ref: '#/components/schemas/OrderTotals' fulfillments: type: array items: $ref: '#/components/schemas/Fulfillment' createdAt: type: string format: date-time updatedAt: type: string format: date-time OrderCreateRequest: type: object required: - channelId - customerId - shippingAddress - lines properties: externalOrderId: type: string channelId: type: string customerId: type: string orderDate: type: string format: date-time requiredDeliveryDate: type: string format: date shippingAddress: $ref: '#/components/schemas/Address' lines: type: array minItems: 1 items: $ref: '#/components/schemas/OrderLineRequest' shippingMethod: type: string OrderUpdateRequest: type: object properties: shippingAddress: $ref: '#/components/schemas/Address' requiredDeliveryDate: type: string format: date addLines: type: array items: $ref: '#/components/schemas/OrderLineRequest' removeLineIds: type: array items: type: string OrderListResponse: type: object properties: orders: type: array items: $ref: '#/components/schemas/Order' totalCount: type: integer limit: type: integer offset: type: integer OrderLine: type: object properties: lineId: type: string externalLineId: type: string itemId: type: string sku: type: string description: type: string quantity: type: number unitPrice: type: number status: type: string enum: [open, allocated, released, shipped, delivered, cancelled] fulfillmentNodeId: type: string OrderLineRequest: type: object required: - itemId - quantity properties: externalLineId: type: string itemId: type: string sku: type: string quantity: type: number minimum: 1 unitPrice: type: number OrderTotals: type: object properties: subtotal: type: number taxTotal: type: number shippingTotal: type: number discountTotal: type: number orderTotal: type: number currency: type: string default: USD Fulfillment: type: object properties: fulfillmentId: type: string type: type: string enum: [ship_from_store, ship_from_dc, in_store_pickup, curbside_pickup] nodeId: type: string nodeName: type: string status: type: string trackingNumber: type: string carrier: type: string estimatedDeliveryDate: type: string format: date shippedAt: type: string format: date-time Address: type: object required: - street1 - city - state - postalCode - country properties: firstName: type: string lastName: type: string street1: type: string street2: type: string city: type: string state: type: string postalCode: type: string country: type: string phone: type: string AvailabilityRequest: type: object required: - items properties: items: type: array items: type: object required: - itemId - quantity properties: itemId: type: string quantity: type: number deliveryAddress: $ref: '#/components/schemas/Address' channelId: type: string AvailabilityResponse: type: object properties: items: type: array items: type: object properties: itemId: type: string requestedQuantity: type: number availableQuantity: type: number available: type: boolean availabilityDate: type: string format: date nodes: type: array items: type: object properties: nodeId: {type: string} nodeName: {type: string} availableQuantity: {type: number} InventoryPosition: type: object properties: itemId: type: string locationId: type: string locationName: type: string onHand: type: number reserved: type: number available: type: number onOrder: type: number updatedAt: type: string format: date-time InventoryPositionListResponse: type: object properties: positions: type: array items: $ref: '#/components/schemas/InventoryPosition' totalCount: type: integer PromiseRequest: type: object required: - lines - deliveryAddress properties: lines: type: array items: type: object required: - itemId - quantity properties: itemId: {type: string} quantity: {type: number} deliveryAddress: $ref: '#/components/schemas/Address' channelId: type: string requestedDeliveryDate: type: string format: date PromiseResponse: type: object properties: options: type: array items: type: object properties: fulfillmentType: type: string nodeId: type: string estimatedDeliveryDate: type: string format: date shippingMethod: type: string shippingCost: type: number lines: type: array items: type: object properties: itemId: {type: string} promisedQuantity: {type: number} Return: type: object properties: returnId: type: string orderId: type: string status: type: string enum: [created, in_transit, received, completed, denied] reason: type: string lines: type: array items: type: object properties: lineId: {type: string} itemId: {type: string} quantity: {type: number} refundAmount: {type: number} createdAt: type: string format: date-time ReturnRequest: type: object required: - orderId - reason - lines properties: orderId: type: string reason: type: string lines: type: array items: type: object required: - lineId - quantity properties: lineId: {type: string} quantity: {type: number} ErrorResponse: type: object properties: code: type: string message: type: string details: type: array items: type: object properties: field: {type: string} message: {type: string} tags: - name: Inventory description: Real-time inventory positions and ATP - name: Orders description: Order lifecycle and management - name: Promising description: Order promising and delivery date estimation - name: Returns description: Return and exchange processing