openapi: 3.1.0 info: title: Instacart Catalog Authentication Last Mile Delivery API description: The Instacart Catalog API enables retailers to programmatically manage their product catalogs on the Instacart platform. Retailers can use the API to create or update products and items, with partial updates supported so that only the attributes included in the request body are modified. This API is designed for retailers who need to keep their Instacart product listings synchronized with their inventory management systems, ensuring accurate product information, pricing, and availability across the platform. version: '2.0' contact: name: Instacart Catalog Support url: https://docs.instacart.com/catalog/catalog_api/overview/ termsOfService: https://www.instacart.com/terms servers: - url: https://connect.instacart.com description: Production Server security: - bearerAuth: [] tags: - name: Last Mile Delivery description: Endpoints for last mile delivery where items are pre-packed and only require delivery from the store to the customer. paths: /v2/fulfillment/stores/last_mile: post: operationId: findLastMileStores summary: Find stores offering last mile delivery description: Returns an array of stores that offer last mile delivery for the customer's location. Last mile delivery is for pre-packed orders that only require transportation from the store to the customer. tags: - Last Mile Delivery requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/FindStoresRequest' responses: '200': description: List of stores offering last mile delivery content: application/json: schema: $ref: '#/components/schemas/StoresResponse' '400': description: Bad request content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' /v2/fulfillment/lastmile/users/{user_id}/service_options: post: operationId: previewLastMileServiceOptions summary: Reserve a time slot for last mile delivery description: Previews and reserves a time slot for a last mile delivery order. Used to secure a delivery window before creating the order. tags: - Last Mile Delivery parameters: - $ref: '#/components/parameters/userId' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PreviewServiceOptionsRequest' responses: '200': description: Service options for last mile delivery content: application/json: schema: $ref: '#/components/schemas/ServiceOptionsResponse' '400': description: Bad request content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' /v2/fulfillment/lastmile/users/{user_id}/orders: post: operationId: createLastMileOrder summary: Create a last mile delivery order description: Creates a last mile delivery order for a previously reserved time slot. Last mile orders are for pre-packed items that require only delivery from the store to the customer location. tags: - Last Mile Delivery parameters: - $ref: '#/components/parameters/userId' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateOrderRequest' responses: '200': description: Last mile delivery order created successfully content: application/json: schema: $ref: '#/components/schemas/OrderResponse' '400': description: Bad request content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' /v2/fulfillment/lastmile/orders/{order_id}/staged: post: operationId: stageLastMileOrder summary: Stage a last mile delivery order description: Marks a last mile delivery order as staged and ready for pickup by the delivery driver. This should be called when the order items are packed and ready at the store. tags: - Last Mile Delivery parameters: - $ref: '#/components/parameters/orderId' responses: '200': description: Order staged successfully content: application/json: schema: $ref: '#/components/schemas/OrderResponse' '400': description: Bad request content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: Order not found content: application/json: schema: $ref: '#/components/schemas/Error' components: schemas: ServiceOption: type: object properties: id: type: string description: The unique identifier for the service option. date: type: string format: date description: The date of the service option. window_starts_at: type: string format: date-time description: The start time of the delivery or pickup window. window_ends_at: type: string format: date-time description: The end time of the delivery or pickup window. fulfillment_type: type: string enum: - delivery - pickup - last_mile description: The type of fulfillment for this service option. OrderResponse: type: object properties: id: type: string description: The unique identifier for the order. status: type: string enum: - brand_new - acknowledged - picking - staging - delivering - delivered - canceled - rescheduled description: The current status of the order. created_at: type: string format: date-time description: The timestamp when the order was created. fulfillment_type: type: string enum: - delivery - pickup - last_mile description: The fulfillment type of the order. service_option: $ref: '#/components/schemas/ServiceOption' store: $ref: '#/components/schemas/Store' items: type: array description: The items included in the order. items: $ref: '#/components/schemas/OrderItem' CreateOrderRequest: type: object required: - hold_id properties: hold_id: type: string description: The identifier of the time slot hold from the reserve step. cart: type: object description: The finalized cart for the order. properties: items: type: array description: The items to include in the order. items: $ref: '#/components/schemas/CartItem' delivery_address: type: object description: The delivery address for the order. properties: address_line_1: type: string description: The street address. address_line_2: type: string description: Additional address information. city: type: string description: The city. state: type: string description: The state or province. postal_code: type: string description: The postal or ZIP code. delivery_instructions: type: string description: Special instructions for the delivery driver. StoresResponse: type: object properties: stores: type: array description: An array of stores offering the requested fulfillment type, sorted by distance with the closest store first. items: $ref: '#/components/schemas/Store' Store: type: object properties: id: type: string description: The unique identifier for the store. name: type: string description: The name of the store. address: type: object description: The physical address of the store. properties: address_line_1: type: string description: The street address. city: type: string description: The city. state: type: string description: The state or province. postal_code: type: string description: The postal or ZIP code. distance: type: number format: double description: The distance from the customer's location to the store. ServiceOptionsResponse: type: object properties: service_options: type: array description: Available service option time slots for the requested fulfillment type. items: $ref: '#/components/schemas/ServiceOption' OrderItem: type: object properties: product_id: type: string description: The Instacart product identifier. upc: type: string description: The Universal Product Code of the item. name: type: string description: The name of the product. quantity: type: integer description: The ordered quantity. status: type: string enum: - pending - found - replaced - refunded description: The current status of the item in the order. FindStoresRequest: type: object properties: address_line_1: type: string description: The street address of the customer's location. address_line_2: type: string description: Additional address information such as apartment or suite number. city: type: string description: The city of the customer's location. state: type: string description: The state or province of the customer's location. postal_code: type: string description: The postal or ZIP code of the customer's location. latitude: type: number format: double description: The latitude coordinate of the customer's location. longitude: type: number format: double description: The longitude coordinate of the customer's location. PreviewServiceOptionsRequest: type: object properties: store_id: type: string description: The unique identifier of the store to preview service options for. address: type: object description: The delivery or pickup address. properties: address_line_1: type: string description: The street address. address_line_2: type: string description: Additional address information. city: type: string description: The city. state: type: string description: The state or province. postal_code: type: string description: The postal or ZIP code. CartItem: type: object properties: upc: type: string description: The Universal Product Code of the item. quantity: type: integer description: The quantity of the item. minimum: 1 product_id: type: string description: The Instacart product identifier. Error: type: object properties: error: type: string description: A human-readable error message. status: type: integer description: The HTTP status code. parameters: userId: name: user_id in: path required: true description: The unique identifier for the user in the retailer's system. schema: type: string orderId: name: order_id in: path required: true description: The unique identifier for the order. schema: type: string securitySchemes: bearerAuth: type: http scheme: bearer description: OAuth 2.0 Bearer token obtained using client credentials with the connect:data_ingestion scope. externalDocs: description: Instacart Catalog API Documentation url: https://docs.instacart.com/catalog/catalog_api/overview/