generated: '2026-08-08' method: derived source: graphql/bulletproof-storefront.graphql (introspected live 2026-08-08) note: 'Entity graph derived mechanically from the live Storefront GraphQL schema: object-typed fields become has_one, list and *Connection fields become has_many, and `via` is the real field name. Only the 424-type schema''s commerce/content core is included; scalar, input, enum and payload types are excluded. Bulletproof publishes no object reference of its own.' identifier_convention: format: gid://shopify/{Type}/{numeric} example: gid://shopify/Product/1320950595707 human_key: handle (URL slug) on Product, Collection, Blog, Article, Page, Metaobject entity_count: 34 relationship_count: 77 entities: - name: Shop field_count: 19 identifier: gid handle: false metafields: true - name: Product field_count: 36 identifier: gid handle: true metafields: true - name: ProductVariant field_count: 30 identifier: gid handle: false metafields: true - name: Collection field_count: 13 identifier: gid handle: true metafields: true - name: Cart field_count: 19 identifier: gid handle: false metafields: true - name: BaseCartLine field_count: 9 identifier: gid handle: false metafields: false - name: CartLine field_count: 11 identifier: gid handle: false metafields: false - name: ComponentizableCartLine field_count: 10 identifier: gid handle: false metafields: false - name: Order field_count: 41 identifier: gid handle: false metafields: true - name: OrderLineItem field_count: 8 identifier: null handle: false metafields: false - name: Customer field_count: 18 identifier: gid handle: false metafields: true - name: MailingAddress field_count: 19 identifier: gid handle: false metafields: false - name: Article field_count: 19 identifier: gid handle: true metafields: true - name: Blog field_count: 10 identifier: gid handle: true metafields: true - name: Page field_count: 12 identifier: gid handle: true metafields: true - name: Menu field_count: 5 identifier: gid handle: true metafields: false - name: MenuItem field_count: 8 identifier: gid handle: false metafields: false - name: Metaobject field_count: 8 identifier: gid handle: true metafields: false - name: Metafield field_count: 12 identifier: gid handle: false metafields: false - name: SellingPlan field_count: 11 identifier: gid handle: false metafields: true - name: SellingPlanGroup field_count: 4 identifier: null handle: false metafields: false - name: Location field_count: 5 identifier: gid handle: false metafields: true - name: Image field_count: 9 identifier: gid handle: false metafields: false - name: Video field_count: 6 identifier: gid handle: false metafields: false - name: Model3d field_count: 6 identifier: gid handle: false metafields: false - name: ProductOption field_count: 4 identifier: gid handle: false metafields: false - name: ProductOptionValue field_count: 4 identifier: gid handle: false metafields: false - name: CartDeliveryGroup field_count: 6 identifier: gid handle: false metafields: false - name: Fulfillment field_count: 3 identifier: null handle: false metafields: false - name: DiscountApplication field_count: 4 identifier: null handle: false metafields: false - name: AppliedGiftCard field_count: 7 identifier: gid handle: false metafields: false - name: TaxonomyCategory field_count: 3 identifier: gid handle: false metafields: false - name: Filter field_count: 5 identifier: gid handle: false metafields: false - name: SEO field_count: 2 identifier: null handle: false metafields: false relationships: - from: Shop to: Metafield kind: has_one via: metafield - from: Shop to: Metafield kind: has_many via: metafields - from: Product to: ProductVariant kind: has_many via: adjacentVariants - from: Product to: TaxonomyCategory kind: has_one via: category - from: Product to: Collection kind: has_many via: collections - from: Product to: Image kind: has_one via: featuredImage - from: Product to: Image kind: has_many via: images - from: Product to: Media kind: has_many via: media - from: Product to: Metafield kind: has_one via: metafield - from: Product to: Metafield kind: has_many via: metafields - from: Product to: ProductOption kind: has_many via: options - from: Product to: ProductVariant kind: has_one via: selectedOrFirstAvailableVariant - from: Product to: SellingPlanGroup kind: has_many via: sellingPlanGroups - from: Product to: SEO kind: has_one via: seo - from: Product to: ProductVariant kind: has_one via: variantBySelectedOptions - from: Product to: ProductVariant kind: has_many via: variants - from: ProductVariant to: ProductVariantComponent kind: has_many via: components - from: ProductVariant to: ProductVariant kind: has_many via: groupedBy - from: ProductVariant to: Image kind: has_one via: image - from: ProductVariant to: Metafield kind: has_one via: metafield - from: ProductVariant to: Metafield kind: has_many via: metafields - from: ProductVariant to: Product kind: has_one via: product - from: ProductVariant to: QuantityPriceBreak kind: has_many via: quantityPriceBreaks - from: ProductVariant to: SellingPlanAllocation kind: has_many via: sellingPlanAllocations - from: ProductVariant to: StoreAvailability kind: has_many via: storeAvailability - from: Collection to: Image kind: has_one via: image - from: Collection to: Metafield kind: has_one via: metafield - from: Collection to: Metafield kind: has_many via: metafields - from: Collection to: Product kind: has_many via: products - from: Collection to: SEO kind: has_one via: seo - from: Cart to: AppliedGiftCard kind: has_many via: appliedGiftCards - from: Cart to: CartDeliveryGroup kind: has_many via: deliveryGroups - from: Cart to: BaseCartLine kind: has_many via: lines - from: Cart to: Metafield kind: has_one via: metafield - from: Cart to: Metafield kind: has_many via: metafields - from: ComponentizableCartLine to: CartLine kind: has_many via: lineComponents - from: Order to: MailingAddress kind: has_one via: billingAddress - from: Order to: DiscountApplication kind: has_many via: discountApplications - from: Order to: OrderLineItem kind: has_many via: lineItems - from: Order to: Metafield kind: has_one via: metafield - from: Order to: Metafield kind: has_many via: metafields - from: Order to: MailingAddress kind: has_one via: shippingAddress - from: Order to: Fulfillment kind: has_many via: successfulFulfillments - from: OrderLineItem to: ProductVariant kind: has_one via: variant - from: Customer to: MailingAddress kind: has_many via: addresses - from: Customer to: MailingAddress kind: has_one via: defaultAddress - from: Customer to: Metafield kind: has_one via: metafield - from: Customer to: Metafield kind: has_many via: metafields - from: Customer to: Order kind: has_many via: orders - from: Article to: Blog kind: has_one via: blog - from: Article to: Comment kind: has_many via: comments - from: Article to: Image kind: has_one via: image - from: Article to: Metafield kind: has_one via: metafield - from: Article to: Metafield kind: has_many via: metafields - from: Article to: SEO kind: has_one via: seo - from: Blog to: Article kind: has_one via: articleByHandle - from: Blog to: Article kind: has_many via: articles - from: Blog to: Metafield kind: has_one via: metafield - from: Blog to: Metafield kind: has_many via: metafields - from: Blog to: SEO kind: has_one via: seo - from: Page to: Metafield kind: has_one via: metafield - from: Page to: Metafield kind: has_many via: metafields - from: Page to: SEO kind: has_one via: seo - from: Menu to: MenuItem kind: has_many via: items - from: Metafield to: MetafieldReference kind: has_many via: references - from: SellingPlan to: Metafield kind: has_one via: metafield - from: SellingPlan to: Metafield kind: has_many via: metafields - from: SellingPlanGroup to: SellingPlan kind: has_many via: sellingPlans - from: Location to: Metafield kind: has_one via: metafield - from: Location to: Metafield kind: has_many via: metafields - from: Video to: Image kind: has_one via: previewImage - from: Model3d to: Image kind: has_one via: previewImage - from: ProductOption to: ProductOptionValue kind: has_many via: optionValues - from: ProductOptionValue to: ProductVariant kind: has_one via: firstSelectableVariant - from: CartDeliveryGroup to: BaseCartLine kind: has_many via: cartLines - from: CartDeliveryGroup to: MailingAddress kind: has_one via: deliveryAddress - from: Fulfillment to: FulfillmentLineItem kind: has_many via: fulfillmentLineItems