Quaterio
Shopify integration

Generate PDFs from Shopify

Connect Quaterio to your Shopify admin and render product catalogs, custom invoices, packing slips and order confirmations as paginated PDFs, with your fonts, your colors, your layout.

The problem

Shopify's default order printout is a single template you can not really brand. Custom invoice and packing-slip apps in the Shopify app store cover the basics but most charge per document or lock the design into their builder. For anything beyond stock layouts (catalogs, lookbooks, tax-localized invoices) you end up cobbling together middleware.

How Quaterio handles it

Quaterio's Shopify connector hits the Admin REST API at {store}.myshopify.com/admin/api/2026-01/ with your custom-app access token sent via X-Shopify-Access-Token. Products, variants, images, orders, line items, customers and addresses are all addressable by path. Build the layout once in the Quaterio editor; generate one PDF per order, per product, or in batch.

How it works

  1. 1

    Create a custom app and copy the access token

    Shopify admin → Settings → Apps and sales channels → Develop apps → Create an app → Configure Admin API scopes (read_products, optionally read_orders) → Install app → copy the Admin API access token (starts with shpat_).

  2. 2

    Pick the Shopify preset in Connections

    Settings → Connections → New Connection → "Shopify". The URL template, custom-header auth and X-Shopify-Access-Token header name are filled in. Replace yourstore with your shop name and paste your shpat_ token.

  3. 3

    Add a Remote Content block to a template

    Use Detect Fields to find products.0.body_html for the description, or products.0.images.0.src for the main image. For orders, point a second connection at /orders.json and bind to fields like orders.0.line_items.0.title.

  4. 4

    Generate via the editor or API

    For catalogs, export from the editor. For per-order PDFs, call POST /api/v1/generate/template with the order ID as a variable. For full catalogs, use the batch endpoint and supply one product ID per row.

What the connector handles

  • Shopify Admin REST API (current version 2026-01)
  • Custom app access token via X-Shopify-Access-Token header
  • Products with body_html (full rich-text description), variants, images, tags
  • Orders with line items, customer, billing and shipping addresses, totals and taxes
  • Per-store rate-limit awareness (2 req/s standard, 4 req/s Plus)
  • Detect Fields button maps the response paths interactively
  • Refresh on demand or via API before batch generation
  • 15 second fetch timeout, cached on the block when Shopify is slow
  • Note: REST is legacy as of October 2024; GraphQL Admin support is on the roadmap

Generate via API

# After creating the Shopify connection and binding it to a template: curl -X POST https://quaterio.com/api/v1/generate/template \ -H "Authorization: Bearer q_your_token" \ -H "Content-Type: application/json" \ -d '{ "templateId": "shopify_product_catalog" }' # → { # "ok": true, # "data": { "downloadUrl": ".../catalog_en_a7f3b2c1.pdf" } # } # Quaterio fetches products.json from your store at generation # time and renders the response into the bound template block.

Available on Business plan and above.

Shopify and PDF: the real questions

The Shopify preset talks to the Admin REST API at {store}.myshopify.com/admin/api/2026-01/. You install a custom app, copy the Admin API access token, and Quaterio sends it via the X-Shopify-Access-Token header on every request.

Creating a custom app and getting an access token

In your Shopify admin, go to Settings → Apps and sales channels → Develop apps → Create an app. Name the app, choose Admin API access, pick the scopes you need (read_products is enough for product catalogs; add read_orders for invoice/order data). Install the app on your store and copy the Admin API access token (starts with shpat_).

In Quaterio, the Shopify preset auto-fills the auth as Custom Header with the header name X-Shopify-Access-Token. Paste the shpat_ token into the value field and you are connected.

REST Admin API legacy status

Shopify marked the REST Admin API as legacy in October 2024 and now recommends the GraphQL Admin API for new apps. The REST endpoints continue to work for existing apps and custom apps installed before April 2025. If you are building from scratch in 2026 and want long-term support, GraphQL is the right call.

GraphQL via Quaterio would need a different connection setup with POST + an Authorization header. The Shopify preset today is REST-only. Building a Quaterio GraphQL helper for Shopify is on the roadmap.

Products, variants and inline HTML

GET /admin/api/2026-01/products.json returns a products array with title, body_html, vendor, product_type, variants, images and tags. The default Response Field products.0.body_html returns the rich text description as HTML, which drops straight into a Quaterio remote-content block.

Variants nest inside each product as products.0.variants.0.title, .price, .sku, etc. Images are at products.0.images.0.src as URLs Quaterio resolves at render time. For product catalogs, the typical pattern is one PDF per product via the batch endpoint, with the product ID passed as a variable.

Orders and invoice generation

For order data, point a second connection at /admin/api/2026-01/orders.json with read_orders scope on your access token. Each order returns line items, customer, billing address, shipping address, totals and taxes, everything you need for a custom invoice or packing slip.

Pair this with the invoice or packing-slip templates in the Quaterio template gallery. Pass the order ID as a variable to the generate endpoint, and Quaterio fetches the order at render time and fills the template.

Rate limits and large catalogs

Shopify Admin REST uses a leaky bucket: 2 requests per second by default for standard Shopify, 4 for Shopify Plus. Each request consumes 1 from the bucket. For batch PDF generation, drop the Quaterio concurrency to 2 to avoid 429 throttling.

Product listings return up to 250 per page with the ?limit= parameter. Quaterio fetches the first page only; for full catalogs (1000+ products), use the batch endpoint and provide each product ID as a row variable instead of relying on connector pagination.

Pricing and plan tier

CMS connections are on the Business plan ($30/mo) and above. Shopify custom apps are free regardless of Shopify plan. For Shopify Plus, the Plus version of the API has higher rate limits and the same connection setup works without changes.

Try the Shopify connector free

Set up the connection in two minutes. No credit card required to start.