title: "Shop API Guide" weight: 2
This is an overview of the GraphQL Shop API, which is used when implementing a storefront application with Vendure.
{{< alert "warning" >}} This guide only lists some of the more common operations you'll need for your storefront. Please consult the Shop API reference for a complete guide. {{< /alert >}}
There are a couple of query parameters that are valid for all GraphQL operations:
languageCode: This sets the current language for the request. Any translatable types (e.g. Products, Facets, Collections) will be returned in that language, if a translation is defined for that language. If not, they will fall back to the default language. The value should be one of the ISO 639-1 codes defined by the LanguageCode enum.
POST http://localhost:3000/shop-api?languageCode=de
vendure-token: If your Vendure instance features more than a single Channel, the token of the active Channel can be specified by token as either a query parameter or as a header. The name of the key can be configured by the channelTokenKey config option.
{{< shop-api-operation operation="collections" type="query" >}}
This query lists available Collections. Useful for creating navigation menus. The query will return Collections as a flat list, rather than a tree structure. Using the parent and children fields, you can convert this list into an arrayToTree function.
{{< shop-api-operation operation="search" type="query" >}}
The search query is intended to be used for keyword searching, facet-based filtering, and for listing product results by collection. In practice this query can power all kinds of storefront product lists, and is preferable to the products query, since it is backed by a dedicated search index and as such, queries are significantly more efficient.
A common requirement is to make product listing pages filterable based on facets. Using the search query, you can select a summary of all Facets and FacetValues which apply to the current results:
query SearchProducts {
search(input: {
collectionSlug: "shoes"
}) {
totalItems
items {
productId
productName
}
facetValues {
facetValue {
id
name
}
count
}
}
}
The FacetValue data can be then used to create a facet filter UI, allowing the customer to select which facets to filter for. The result set can then be filtered using the facetValueFilters input field:
query SearchProducts {
search(input: {
collectionSlug: "shoes"
facetValueFilters: [
{ or: [34, 25] },
{ and: 12 }
]
}) {
totalItems
# etc.
}
}
The above example translates to return all products in the "shoes" collection, which have FacetValue 12 AND (34 OR 25)
{{< shop-api-operation operation="product" type="query" >}}
Use the product query for the Product detail view.
See the Order Workflow guide for a detailed explanation with examples of how Orders are handled in Vendure.
PaymentAuthorized or PaymentSettled state (depending on how the payment provider is configured) and the order process is complete from the customer's side.null if not logged in. This is useful for displaying the logged-in status in the storefront. The returned Customer type can also be used to query the Customer's Order history, list of Addresses and other personal details.