Powered by Gopuff Fulfillment API

The Powered by Gopuff Fulfillment API is the partner-facing HTTP surface used by Gopuff's Shopify Fulfillment app and white-labeled Storefronts theme to determine whether a consumer is inside a Gopuff micro-fulfillment center (MFC) delivery zone, to check real-time product availability at the local MFC, to surface carrier rates at Shopify checkout, and to route orders from the merchant's storefront to Gopuff for picking, packing, and delivery. Detailed reference documentation is published as "coming soon" at the partner docs site; the base URL `https://fulfillment-api-eus.partners.gopuff.com/shopify/v1/shops` is wired into the Shopify app embed as the canonical entry point and is the only publicly documented host.

Powered by Gopuff Fulfillment API is one of 2 APIs that Gopuff publishes on the APIs.io network, described by a machine-readable OpenAPI specification.

This API exposes 3 machine-runnable capabilities that can be deployed as REST, MCP, or Agent Skill surfaces via Naftiko.

Tagged areas include Fulfillment, Instant Delivery, Shopify, Quick Commerce, and Last Mile. The published artifact set on APIs.io includes API documentation, an OpenAPI specification, and 3 Naftiko capability specs.

OpenAPI Specification

gopuff-fulfillment-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Powered by Gopuff Fulfillment API
  description: >-
    Partner-facing API powering the Powered by Gopuff Shopify Fulfillment app and the Storefronts
    Powered by Gopuff theme. The API determines whether a consumer's address falls inside a Gopuff
    micro-fulfillment center (MFC) delivery zone, exposes real-time product availability at the
    serving MFC, surfaces Gopuff carrier rates at Shopify checkout, and accepts orders that should
    be routed to Gopuff for picking, packing, and delivery in roughly 15 to 30 minutes. The
    canonical entry point is the shops resource wired into the Powered by Gopuff Shopify app embed
    block. Detailed reference documentation is published by Gopuff as "coming soon"; the surfaces
    captured here are derived from the partner Help Center and the Powered by Gopuff Shopify theme
    behavior.
  version: '1.0'
  contact:
    name: Powered by Gopuff Partner Support
    url: https://poweredby.gopuff.com/
  termsOfService: https://www.gopuff.com/go/terms-and-conditions
externalDocs:
  description: Powered by Gopuff Partner Documentation
  url: https://docs.poweredbygopuff.com/
servers:
  - url: https://fulfillment-api-eus.partners.gopuff.com/shopify/v1
    description: Production Partner API (US East)
tags:
  - name: Shops
    description: >-
      Manage the binding between a partner Shopify shop and the Powered by Gopuff partnership.
  - name: Zones
    description: >-
      Check whether a consumer address or IP location falls inside a Gopuff micro-fulfillment
      center (MFC) delivery zone.
  - name: Availability
    description: >-
      Look up real-time product availability at the Gopuff MFC servicing a given customer
      location.
  - name: Rates
    description: >-
      Return Gopuff Instant Delivery carrier rates for a Shopify checkout, alongside the
      merchant's standard shipping options.
  - name: Orders
    description: >-
      Route completed Shopify checkouts to Gopuff for picking, packing, and last-mile delivery
      from the nearest MFC.
security:
  - partnerApiKey: []
paths:
  /shops:
    get:
      operationId: getShop
      summary: Get Partner Shop Status
      description: >-
        Returns the partnership status, configured shop metadata, and serving region for the
        authenticated partner Shopify shop.
      tags:
        - Shops
      responses:
        '200':
          description: Shop record found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Shop'
        '401':
          description: Authentication failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: No shop found for the provided credentials.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /shops/zones/check:
    post:
      operationId: checkDeliveryZone
      summary: Check Delivery Zone Eligibility
      description: >-
        Determines whether a customer location is inside a Gopuff MFC delivery zone. Either an
        address or a coarse IP location can be supplied. When the customer is in zone, the
        response includes the serving MFC identifier and the eligible product collection so the
        Powered by Gopuff Shopify theme can selectively enable instant delivery messaging.
      tags:
        - Zones
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ZoneCheckRequest'
      responses:
        '200':
          description: Zone check completed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ZoneCheckResponse'
        '400':
          description: Invalid request body.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Authentication failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /shops/availability:
    post:
      operationId: getProductAvailability
      summary: Get Product Availability
      description: >-
        Returns real-time product availability at the Gopuff MFC servicing a given customer
        location. Products are matched via UPC mapped to the Gopuff catalog during partner
        onboarding; only items in the partner's curated instant-delivery collection are checked.
      tags:
        - Availability
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AvailabilityRequest'
      responses:
        '200':
          description: Availability returned.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AvailabilityResponse'
        '400':
          description: Invalid request body.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Authentication failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /shops/rates:
    post:
      operationId: getCarrierRates
      summary: Get Carrier Rates
      description: >-
        Returns Gopuff Instant Delivery carrier rates for a Shopify checkout. Invoked by the
        Shopify Carrier Service framework. Rates are pre-negotiated and set by the partner's
        Gopuff agreement; merchants are not allowed to add handling fees on top of the returned
        rates.
      tags:
        - Rates
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CarrierRateRequest'
      responses:
        '200':
          description: Rates returned.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CarrierRateResponse'
        '400':
          description: Invalid request body.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Authentication failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /shops/orders:
    post:
      operationId: createOrder
      summary: Route Order to Gopuff
      description: >-
        Routes a completed Shopify checkout to the nearest Gopuff MFC for picking, packing, and
        delivery. Returns the Gopuff Order ID, which is also written back to the corresponding
        Shopify order's Additional details panel within 5 to 10 seconds.
      tags:
        - Orders
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateOrderRequest'
      responses:
        '201':
          description: Order accepted by Gopuff.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Order'
        '400':
          description: Invalid order payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Authentication failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '422':
          description: Order rejected (e.g. address out of zone, items out of stock).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /shops/orders/{order_id}:
    get:
      operationId: getOrder
      summary: Get Order
      description: >-
        Returns the current status, fulfillment lifecycle, and tracking information for a Gopuff
        order. Order status mirrors the realtime fulfillment updates Gopuff pushes to Shopify
        when the order is out for delivery and when it is delivered.
      tags:
        - Orders
      parameters:
        - name: order_id
          in: path
          required: true
          schema:
            type: string
          description: Gopuff Order ID.
      responses:
        '200':
          description: Order returned.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Order'
        '401':
          description: Authentication failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Order not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  securitySchemes:
    partnerApiKey:
      type: apiKey
      in: header
      name: X-Gopuff-Partner-Key
      description: >-
        Partner API key issued by Gopuff during onboarding to the Powered by Gopuff platform.
        Keys are scoped to a single partnership/shop.
  schemas:
    Shop:
      type: object
      properties:
        shop_id:
          type: string
          description: Powered by Gopuff partner shop identifier.
        shopify_shop_domain:
          type: string
          description: The myshopify.com domain of the partner shop.
        partnership_status:
          type: string
          enum:
            - created
            - activated
            - paused
          description: Lifecycle status of the Gopuff partnership for this shop.
        region:
          type: string
          description: Serving Gopuff partner region (e.g. eus for US East).
        availability_threshold:
          type: integer
          description: Minimum number of in-stock SKUs required to consider a customer eligible.
      required:
        - shop_id
        - shopify_shop_domain
        - partnership_status
    Address:
      type: object
      properties:
        line1:
          type: string
        line2:
          type: string
        city:
          type: string
        region:
          type: string
          description: State or province code.
        postal_code:
          type: string
        country:
          type: string
          description: ISO 3166-1 alpha-2 country code.
      required:
        - line1
        - city
        - postal_code
        - country
    ZoneCheckRequest:
      type: object
      properties:
        address:
          $ref: '#/components/schemas/Address'
        ip_address:
          type: string
          description: Customer IP address used for coarse zone eligibility before address entry.
        latitude:
          type: number
          format: double
        longitude:
          type: number
          format: double
    ZoneCheckResponse:
      type: object
      properties:
        in_zone:
          type: boolean
          description: True when the location falls inside a Gopuff MFC delivery zone.
        mfc_id:
          type: string
          description: Identifier of the Gopuff micro-fulfillment center that would service the order.
        delivery_eta_minutes_min:
          type: integer
          description: Lower bound of the expected delivery window in minutes.
        delivery_eta_minutes_max:
          type: integer
          description: Upper bound of the expected delivery window in minutes.
      required:
        - in_zone
    AvailabilityRequest:
      type: object
      properties:
        address:
          $ref: '#/components/schemas/Address'
        mfc_id:
          type: string
          description: Optional MFC override if previously resolved via the zone check.
        upcs:
          type: array
          description: List of UPCs to check against the local MFC inventory.
          items:
            type: string
      required:
        - upcs
    ProductAvailability:
      type: object
      properties:
        upc:
          type: string
        available:
          type: boolean
        quantity_on_hand:
          type: integer
          description: Approximate units available at the serving MFC.
      required:
        - upc
        - available
    AvailabilityResponse:
      type: object
      properties:
        mfc_id:
          type: string
        items:
          type: array
          items:
            $ref: '#/components/schemas/ProductAvailability'
      required:
        - items
    CarrierRateRequest:
      type: object
      properties:
        shipping_address:
          $ref: '#/components/schemas/Address'
        items:
          type: array
          items:
            type: object
            properties:
              upc:
                type: string
              quantity:
                type: integer
    CarrierRate:
      type: object
      properties:
        service_name:
          type: string
          description: Always "Instant Delivery - Powered by Gopuff" for Gopuff rates.
        service_code:
          type: string
        total_price:
          type: integer
          description: Rate in the smallest currency unit (e.g. cents).
        currency:
          type: string
          description: ISO 4217 currency code.
        min_delivery_minutes:
          type: integer
        max_delivery_minutes:
          type: integer
    CarrierRateResponse:
      type: object
      properties:
        rates:
          type: array
          items:
            $ref: '#/components/schemas/CarrierRate'
    CreateOrderRequest:
      type: object
      description: >-
        Mirrors the Shopify order payload submitted to Gopuff. The shipping line must carry
        "Instant Delivery - Powered by Gopuff" as the title and "Powered By Gopuff" as the
        source.
      properties:
        shopify_order_id:
          type: string
        customer:
          type: object
          properties:
            email:
              type: string
            phone:
              type: string
        shipping_address:
          $ref: '#/components/schemas/Address'
        line_items:
          type: array
          items:
            type: object
            properties:
              upc:
                type: string
              quantity:
                type: integer
              price:
                type: integer
              currency:
                type: string
        shipping_line:
          type: object
          properties:
            title:
              type: string
            source:
              type: string
      required:
        - shopify_order_id
        - shipping_address
        - line_items
    Order:
      type: object
      properties:
        gopuff_order_id:
          type: string
        shopify_order_id:
          type: string
        mfc_id:
          type: string
        status:
          type: string
          enum:
            - accepted
            - picking
            - out_for_delivery
            - delivered
            - cancelled
        tracking_url:
          type: string
          description: Realtime delivery tracking URL surfaced via SMS to the customer.
        created_at:
          type: string
          format: date-time
        delivered_at:
          type: string
          format: date-time
      required:
        - gopuff_order_id
        - status
    Error:
      type: object
      properties:
        code:
          type: string
        message:
          type: string
        request_id:
          type: string
      required:
        - code
        - message