List Refunds (Datagrid)
GraphQL counterpart of GET /api/admin/refunds. Returns a cursor-paginated list of refunds — the same rows shown on the admin Sales → Refunds datagrid. Every refund column plus the billing/shipping addresses are populated on each row; only the line items and payment info are detail-only.
Operation
adminRefunds(first, after, id, order_id, state, base_grand_total_from, base_grand_total_to, billed_to, created_at_from, created_at_to, sort, order) — a cursor QueryCollection. Every REST query parameter is also exposed as a GraphQL argument; see the REST page for the full argument table.
Permission
sales.refunds.view
Address objects are returned whole
billingAddress and shippingAddress are returned as JSON — query them bare, without a sub-selection (billingAddress, not billingAddress { … }). The whole object comes back.
Fields
Every refund column is populated on each row (currency codes, all base_* / formatted* / incl-tax variants, the adjustment refund/fee, order & customer context, and both address objects). Only items (the refunded line items) and the payment info (paymentMethod, paymentTitle, shippingMethod, shippingTitle) are detail-only — they return null on the listing and are filled when you fetch the refund by id with adminRefund(id:). The full field reference is on the Get Refund page.
Amounts — which one to show. Use formattedGrandTotal for a viewer working in the order's currency, and baseGrandTotal / formattedBaseGrandTotal for reporting in the store's base currency. For a single-currency store the two are identical.
Listing vs. full record
The listing already carries every column — the only reason to fetch a single refund is to read its line items and payment info, which are skipped on the listing because loading items for every row of a large list would be expensive. Typical flow: list with adminRefunds, read _id from the row you want, then fetch the full record with adminRefund(id:).

