How to get all statuses of a specific order with GraphQL?

Topic summary

A developer needs to retrieve all status types for a Shopify order via GraphQL, specifically:

  • Order status (Open, Archived, Canceled)
  • Payment status (Pending, Authorized, Paid, Refunded, etc.)
  • Fulfillment status (Fulfilled, Unfulfilled, Partially fulfilled, etc.)

Their initial query attempt doesn’t return complete information, and the code snippet appears corrupted/reversed in the post.

Solution provided:

  • Use displayFinancialStatus (type: OrderDisplayFinancialStatus) for payment status
  • Use displayFulfillmentStatus (type: OrderDisplayFulfillmentStatus) for fulfillment status
  • Reference Shopify’s GraphQL object type documentation to understand available field values
  • A sample query structure was suggested querying orders with fields like id, email, closed, closedAt, cancelledAt, displayFinancialStatus, and displayFulfillmentStatus

Required access scopes depend on the specific app type and full query requirements. The developer should review Shopify’s API access scopes documentation for proper permissions.

Summarized with AI on November 23. AI used: claude-sonnet-4-5-20250929.

I need to get all the different statuses of a specific order, that would be the statuses mentioned here:
https://help.shopify.com/en/manual/orders/order-status

  • Order status (Open, Archived, Canceled)

  • Payment status (Pending, Authorized, Overdue, Expiring, Expired, Paid, Refunded, Partially refunded, Partially paid, Voided, Unpaid)

  • Fulfillment status (Fulfilled, Unfulfilled, Partially fulfilled, Scheduled, On hold)

The query below is what I have so far, but it doesn’t really give me all the information I need. I struggle finding the correct fields for the query.

Also, what scopes do I need to get the above mentioned statuses?

{
      orders(first: 1, reverse: true, query: "email:'${customerEmail}'") {
        edges {
          node {
            id
            name
            shippingAddress {
              zip
            }
            fulfillments(first: 10) {
              status
            }
            unpaid
            confirmed
            closed
            fullyPaid
            displayFulfillmentStatus
          }
        }
      }
    }

Hi @jost21 :waving_hand:

To better understand the values that each field can take, you can reference the object types. For example, displayFinancialStatus is of type OrderDisplayFinancialStatus and displayFulfillmentStatus is of type OrderDisplayFulfillmentStatus. The access scopes will depend on your full query and the app type, so I’d recommend reviewing this doc on the required scopes.

The below query would be a good place to start.

{
    orders (first:1) {
        nodes {
            id
            email
            closed
            closedAt
            cancelledAt
            displayFinancialStatus
            displayFulfillmentStatus
        }
    }
}

Hope that helps!