The Admin API
Liquid can only read data Shopify decides to expose to a template — it can't create an order, update inventory, or run on a schedule. For that, you need the Admin API, which is how apps and external scripts read and write a store's data directly.
GraphQL is the primary interface now
The Admin API has existed in two forms: an older set of conventional REST endpoints, one per resource type, and a newer GraphQL endpoint where you specify exactly which fields you want. For a long time these coexisted as roughly equal options, but that's no longer the case — Shopify has formally moved the REST Admin API into legacy status, and as of a firm cutoff date, new public apps are required to build exclusively against GraphQL. REST apps that already existed before that date can keep running, but nothing new should be built on it.
query {
products(first: 10) {
edges {
node {
title
priceRangeV2 { minVariantPrice { amount } }
}
}
}
}
Because of this, this course treats GraphQL as the default way to talk to the Admin API, and mentions REST mainly so you recognize it when you encounter it in an older codebase.
Authentication and scopes
Every request needs an access token, obtained by creating an app (a "custom app" for private, single-store use, or a public app for distribution) and requesting specific scopes — permissions like read_products or write_orders. A token only grants access to the scopes explicitly requested and approved.
API versioning
Every request specifies a version tied to a quarterly release cycle. A given version stays stable and supported for about a year after release, which means an integration doesn't break overnight when Shopify ships new API versions — but it does need an occasional, deliberate version bump rather than staying on one version forever.
Bulk operations
Fetching or mutating very large datasets (every order from the last five years, say) through paginated GraphQL queries would take an impractical number of requests. For that, the GraphQL Admin API supports bulk operations — you submit one query, Shopify runs it asynchronously across the full dataset, and hands back a downloadable file once it's done, rather than paginating manually:
mutation {
bulkOperationRunQuery(
query: "{ products { edges { node { id title } } } }"
) {
bulkOperation { id status }
}
}
Rate limits
GraphQL calculates a query's cost up front based on its complexity and checks that against a budget before running it, rather than counting raw requests the way the older REST API did. A response on every request tells you how much budget remains, which well-behaved integrations check before firing off more requests.