instacart · AsyncAPI Specification

Instacart Connect Event Callbacks

Version 2.0

Instacart Connect notifies retailers of order status changes and fulfillment events through webhook callbacks. Retailers configure callback endpoints to receive real-time notifications about order lifecycle events including order creation, shopper assignment, picking, delivery, cancellation, item replacements, and item refunds. Callback endpoints must be protected by OAuth 2.0 authentication.

View Spec View on GitHub AsyncAPIWebhooksEvents

Channels

/webhook
publish receiveEventCallback
Receive an Instacart Connect event callback
The retailer's configured webhook endpoint that receives event callbacks from Instacart Connect. Events are sent as HTTP POST requests. The same event notification may be delivered multiple times when an order reverts to a previous status.

Messages

OrderCreated
Order Created
Sent when an order is successfully created in the Instacart system.
OrderAcknowledged
Order Acknowledged
Sent when a shopper acknowledges and accepts the order.
OrderPicking
Order Picking
Sent when the shopper begins picking items for the order in the store.
OrderStaging
Order Staging
Sent when the order is being staged for delivery or pickup.
OrderDelivering
Order Delivering
Sent when the order has left the store and is being delivered to the customer.
OrderDelivered
Order Delivered
Sent when the order has been successfully delivered to the customer.
OrderCanceled
Order Canceled
Sent when an order has been canceled.
OrderRescheduled
Order Rescheduled
Sent when an order will be fulfilled at a different time than originally scheduled.
LateDelivery
Late Delivery
Sent when the estimated delivery time has changed and the delivery will be later than originally scheduled.
ItemReplacement
Item Replacement
Sent when a shopper replaces an item in the order with a substitute product.
ItemRefund
Item Refund
Sent when a shopper refunds an order item because it is unavailable and no suitable replacement is found.
CustomerMIA
Customer MIA
Sent when the delivery driver arrives but cannot locate the customer at the delivery address.

Servers

https
retailerWebhook {retailer_callback_url}
The retailer's webhook endpoint configured to receive event callbacks from Instacart Connect. Must support OAuth 2.0 authentication.

AsyncAPI Specification

Raw ↑
asyncapi: 2.6.0
info:
  title: Instacart Connect Event Callbacks
  description: >-
    Instacart Connect notifies retailers of order status changes and fulfillment
    events through webhook callbacks. Retailers configure callback endpoints to
    receive real-time notifications about order lifecycle events including order
    creation, shopper assignment, picking, delivery, cancellation, item
    replacements, and item refunds. Callback endpoints must be protected by
    OAuth 2.0 authentication.
  version: '2.0'
  contact:
    name: Instacart Connect Support
    url: https://docs.instacart.com/connect/
servers:
  retailerWebhook:
    url: '{retailer_callback_url}'
    protocol: https
    description: >-
      The retailer's webhook endpoint configured to receive event callbacks
      from Instacart Connect. Must support OAuth 2.0 authentication.
    variables:
      retailer_callback_url:
        description: >-
          The retailer's HTTPS endpoint for receiving Instacart event
          callbacks.
    security:
      - oauth2: []
channels:
  /webhook:
    description: >-
      The retailer's configured webhook endpoint that receives event callbacks
      from Instacart Connect. Events are sent as HTTP POST requests. The same
      event notification may be delivered multiple times when an order reverts
      to a previous status.
    publish:
      operationId: receiveEventCallback
      summary: Receive an Instacart Connect event callback
      description: >-
        Receives event callbacks from Instacart Connect about order status
        changes, item replacements, and item refunds. Retailers should handle
        duplicate deliveries of the same event gracefully.
      message:
        oneOf:
          - $ref: '#/components/messages/OrderCreated'
          - $ref: '#/components/messages/OrderAcknowledged'
          - $ref: '#/components/messages/OrderPicking'
          - $ref: '#/components/messages/OrderStaging'
          - $ref: '#/components/messages/OrderDelivering'
          - $ref: '#/components/messages/OrderDelivered'
          - $ref: '#/components/messages/OrderCanceled'
          - $ref: '#/components/messages/OrderRescheduled'
          - $ref: '#/components/messages/LateDelivery'
          - $ref: '#/components/messages/ItemReplacement'
          - $ref: '#/components/messages/ItemRefund'
          - $ref: '#/components/messages/CustomerMIA'
components:
  securitySchemes:
    oauth2:
      type: oauth2
      description: >-
        OAuth 2.0 authentication required on the retailer's callback endpoint.
        Instacart authenticates to the retailer's endpoint using OAuth 2.0
        before sending event data.
      flows:
        clientCredentials:
          tokenUrl: '{retailer_token_url}'
          scopes: {}
  messages:
    OrderCreated:
      name: fulfillment.order_created
      title: Order Created
      summary: >-
        Sent when an order is successfully created in the Instacart system.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/OrderEventPayload'
    OrderAcknowledged:
      name: fulfillment.acknowledged
      title: Order Acknowledged
      summary: >-
        Sent when a shopper acknowledges and accepts the order.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/OrderEventPayload'
    OrderPicking:
      name: fulfillment.picking
      title: Order Picking
      summary: >-
        Sent when the shopper begins picking items for the order in the store.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/OrderEventPayload'
    OrderStaging:
      name: fulfillment.staging
      title: Order Staging
      summary: >-
        Sent when the order is being staged for delivery or pickup.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/OrderEventPayload'
    OrderDelivering:
      name: fulfillment.delivering
      title: Order Delivering
      summary: >-
        Sent when the order has left the store and is being delivered to the
        customer.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/OrderEventPayload'
    OrderDelivered:
      name: fulfillment.delivered
      title: Order Delivered
      summary: >-
        Sent when the order has been successfully delivered to the customer.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/OrderEventPayload'
    OrderCanceled:
      name: fulfillment.canceled
      title: Order Canceled
      summary: >-
        Sent when an order has been canceled.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/OrderEventPayload'
    OrderRescheduled:
      name: fulfillment.rescheduled
      title: Order Rescheduled
      summary: >-
        Sent when an order will be fulfilled at a different time than
        originally scheduled.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/OrderEventPayload'
    LateDelivery:
      name: fulfillment.late_delivery
      title: Late Delivery
      summary: >-
        Sent when the estimated delivery time has changed and the delivery
        will be later than originally scheduled.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/OrderEventPayload'
    ItemReplacement:
      name: fulfillment.order_item_replacement
      title: Item Replacement
      summary: >-
        Sent when a shopper replaces an item in the order with a substitute
        product.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/ItemEventPayload'
    ItemRefund:
      name: fulfillment.order_item_refund
      title: Item Refund
      summary: >-
        Sent when a shopper refunds an order item because it is unavailable
        and no suitable replacement is found.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/ItemEventPayload'
    CustomerMIA:
      name: fulfillment.customer_mia
      title: Customer MIA
      summary: >-
        Sent when the delivery driver arrives but cannot locate the customer
        at the delivery address.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/OrderEventPayload'
  schemas:
    OrderEventPayload:
      type: object
      properties:
        event:
          type: string
          description: >-
            The event type identifier such as fulfillment.delivered or
            fulfillment.canceled.
        order_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.
        timestamp:
          type: string
          format: date-time
          description: >-
            The timestamp when the event occurred.
        order:
          type: object
          description: >-
            Summary details about the order.
          properties:
            id:
              type: string
              description: >-
                The order identifier.
            user_id:
              type: string
              description: >-
                The retailer's user identifier for the customer.
            fulfillment_type:
              type: string
              enum:
                - delivery
                - pickup
                - last_mile
              description: >-
                The fulfillment type of the order.
            created_at:
              type: string
              format: date-time
              description: >-
                When the order was created.
            estimated_delivery_at:
              type: string
              format: date-time
              description: >-
                The estimated delivery or pickup time.
    ItemEventPayload:
      type: object
      properties:
        event:
          type: string
          description: >-
            The event type identifier such as fulfillment.order_item_refund
            or fulfillment.order_item_replacement.
        order_id:
          type: string
          description: >-
            The unique identifier for the order.
        timestamp:
          type: string
          format: date-time
          description: >-
            The timestamp when the event occurred.
        items:
          type: array
          description: >-
            The full list of order items with their current statuses. Check
            the refunded or replaced fields to determine which items were
            affected.
          items:
            type: object
            properties:
              product_id:
                type: string
                description: >-
                  The product identifier.
              name:
                type: string
                description: >-
                  The name of the product.
              quantity:
                type: integer
                description: >-
                  The ordered quantity.
              status:
                type: string
                enum:
                  - found
                  - replaced
                  - refunded
                  - pending
                description: >-
                  The current status of the item.
              refunded:
                type: boolean
                description: >-
                  Whether this item has been refunded.
              replacement:
                type: object
                description: >-
                  Details about the replacement product, if the item was
                  replaced.
                properties:
                  product_id:
                    type: string
                    description: >-
                      The product identifier of the replacement.
                  name:
                    type: string
                    description: >-
                      The name of the replacement product.
                  quantity:
                    type: integer
                    description: >-
                      The quantity of the replacement.