shopify
Shopify (via Apideck)
Access Shopify through Apideck's Ecommerce unified API — one of 17 Ecommerce connectors that share the same method surface. Code you write here ports to BigCommerce, Shopify (Public App), WooCommerce and 13 other Ecommerce connectors by changing a single serviceId string. Apideck handles auth, pagination, rate limiting, and retries so you don't write per-tenant Shopify plumbing.
Beta connector. Shopify is currently in beta on Apideck. Expect partial resource coverage and occasional mapping gaps. Always verify coverage (see below) and fall back to the Proxy API for unsupported operations.
Quick facts
- Apideck serviceId:
shopify - Unified API: Ecommerce
- Auth type: custom
- Status: beta
- Apideck setup guide: Connection guide
- Gotchas: page
- Shopify docs: https://shopify.dev/docs/api
- Homepage: https://www.shopify.com/
When to use this skill
Activate this skill when the user explicitly wants to work with Shopify — for example, "list orders in Shopify" or "sync products in Shopify". This skill teaches the agent:
- Which Apideck unified API covers Shopify (Ecommerce)
- The correct
serviceIdto pass on every call (shopify) - Shopify-specific auth and coverage caveats
For the full method surface (parameters, pagination, filtering), use your language SDK skill:
apideck-node,apideck-python,apideck-dotnet,apideck-java,apideck-go,apideck-php, orapideck-rest
For the raw OpenAPI spec:
- Ecommerce: https://specs.apideck.com/ecommerce.yml · API Explorer
Minimal example (TypeScript)
import { Apideck } from "@apideck/unify";
const apideck = new Apideck({
apiKey: process.env.APIDECK_API_KEY,
appId: process.env.APIDECK_APP_ID,
consumerId: "your-consumer-id",
});
// List orders in Shopify
const { data } = await apideck.ecommerce.orders.list({
serviceId: "shopify",
});
Portable across 17 Ecommerce connectors
The Apideck Ecommerce unified API exposes the same methods for every connector in its catalog. Switching from Shopify to another Ecommerce connector is a one-string change — no rewrite, no new SDK.
// Today — Shopify
await apideck.ecommerce.orders.list({ serviceId: "shopify" });
// Tomorrow — same code, different connector
await apideck.ecommerce.orders.list({ serviceId: "bigcommerce" });
await apideck.ecommerce.orders.list({ serviceId: "shopify-public-app" });
This is the compounding advantage of using Apideck over integrating Shopify directly: code against the unified Ecommerce API once, gain access to every connector in it. New connectors Apideck adds become available to your app without code changes.
Shopify via Apideck Ecommerce
Shopify is the reference Ecommerce connector. Strong coverage for orders, products, customers, and stores.
Entity mapping
| Shopify entity | Apideck Ecommerce resource |
|---|---|
| Order | orders |
| Product | products |
| Variant | exposed via products[].variants[] |
| Customer | customers |
| Shop | stores |
| Fulfillment | exposed via orders[].fulfillments[] |
| Transaction | exposed via orders[].payments[] |
| Inventory Level | ❌ use Proxy |
| Discount / Price Rule | ❌ use Proxy |
| Webhook subscriptions | use Apideck Webhooks, not Shopify's |
| Metafields | custom_fields[] on orders/products |
Coverage highlights
- ✅ Read orders, products, customers, stores
- ✅ Filter orders by status, date range, customer
- ✅ Filter products by vendor, status, published state
- ✅ Variants flattened into product responses
- ✅ Multi-currency orders —
currencyandtotal_pricesurface correctly - ⚠️ Create / update are available for products and customers; orders are typically read-only (Shopify strongly prefers order creation through checkout, not API)
- ❌ Inventory adjustments — use Proxy with
/inventory_levels/adjust.json - ❌ Discount codes — use Proxy
- ❌ Draft orders — use Proxy
- ❌ Shopify Functions / App Bridge — out of scope for a backend API
Shopify-specific auth notes
- Two app models:
- Custom app (single store): store owner generates an admin API token and pastes it into Vault. Use
shopifyserviceId. - Public app (many stores): OAuth install flow from the Shopify App Store. Use
shopify-public-appserviceId (separate connector).
- Custom app (single store): store owner generates an admin API token and pastes it into Vault. Use
- Shop binding: each connection is bound to one shop (
myshop.myshopify.com). Multi-shop = multi-connection. - Merchant app review (public app only): if you're a Shopify App Store app, Apideck's Vault app must pass Shopify's review process before install. Existing Apideck customers typically use the custom-app route to avoid the review.
Common Shopify quirks handled by Apideck
- GraphQL vs REST — Shopify is pushing customers to GraphQL. Apideck currently routes through REST Admin API for most endpoints. If you need GraphQL (for large reads, bulk queries), use Proxy with the GraphQL endpoint.
- Line items on orders — nested with variant refs. Apideck surfaces as
order.line_items[]with resolved product/variant names. - Order financial_status / fulfillment_status — Apideck normalizes to
order.payment_statusandorder.status. - Metafields — exposed as
custom_fields[]; write access requires additional scopes. - Deprecation tracking — Shopify deprecates API versions twice a year. Apideck tracks the current stable version; raw Proxy calls should pin a version.
Example: list orders from the last 30 days
const since = new Date(Date.now() - 30 * 24 * 60 * 60 * 1000).toISOString();
let cursor;
const orders = [];
do {
const { data, pagination } = await apideck.ecommerce.orders.list({
serviceId: "shopify",
cursor,
filter: { updated_since: since, status: "any" },
limit: 100,
});
orders.push(...data);
cursor = pagination?.cursors?.next;
} while (cursor);
Example: create a product
const { data } = await apideck.ecommerce.products.create({
serviceId: "shopify",
product: {
name: "Linen Shirt — Navy",
description_html: "<p>100% European linen. Pre-washed.</p>",
vendor: "Acme Apparel",
status: "active",
variants: [
{
sku: "LIN-NVY-S",
price: 89.0,
inventory_quantity: 42,
options: [{ name: "Size", value: "S" }],
},
{
sku: "LIN-NVY-M",
price: 89.0,
inventory_quantity: 35,
options: [{ name: "Size", value: "M" }],
},
],
},
});
Example: GraphQL bulk query via Proxy
curl 'https://unify.apideck.com/proxy' \
-X POST \
-H "Authorization: Bearer ${APIDECK_API_KEY}" \
-H "x-apideck-app-id: ${APIDECK_APP_ID}" \
-H "x-apideck-consumer-id: ${CONSUMER_ID}" \
-H "x-apideck-service-id: shopify" \
-H "x-apideck-downstream-url: https://{shop}.myshopify.com/admin/api/2026-01/graphql.json" \
-H "Content-Type: application/json" \
-d '{"query":"{ shop { name currencyCode } }"}'
Sibling connectors
Other Ecommerce connectors that share this unified API surface (same method signatures, just change serviceId):
bigcommerce (beta), shopify-public-app (beta), woocommerce (beta), amazon-seller-central (beta), ebay (beta), etsy (beta), magento (beta), bol-com (beta), and 8 more.
See also
- Apideck connection guide for Shopify
- Ecommerce OpenAPI spec · API Explorer
apideck-connector-coverage— programmatic coverage checksapideck-best-practices— architecture, Vault, pagination, error handlingapideck-node— TypeScript / Node SDK patterns- Shopify official docs
More from apideck-libraries/api-skills
apideck-connector-coverage
Check Apideck connector API coverage before building integrations. Use when determining which operations a connector supports, comparing connector capabilities, or diagnosing why an API call fails with a specific connector. Teaches agents to query the Connector API for real-time coverage data.
18apideck-best-practices
Best practices for building Apideck integrations. Covers authentication patterns, pagination, error handling, connection management with Vault, webhook setup, and common pitfalls. Use when designing or reviewing any Apideck integration regardless of language.
18apideck-rest
Apideck Unified REST API reference for any language. Use when building integrations with accounting software (QuickBooks, Xero, NetSuite), CRMs (Salesforce, HubSpot, Pipedrive), HRIS platforms (Workday, BambooHR), file storage (Google Drive, Dropbox, Box), ATS systems (Greenhouse, Lever), e-commerce, or any of Apideck's 200+ connectors using direct HTTP calls. Covers authentication headers, CRUD operations, cursor-based pagination, filtering, sorting, error handling, rate limiting, pass-through parameters, and webhooks. Language-agnostic — works with curl, fetch, axios, httpx, or any HTTP client.
16apideck-portman
API contract testing with Portman by Apideck. Use when generating Postman collections from OpenAPI specs, writing contract tests, variation tests, integration tests, fuzz testing, or setting up CI/CD API test pipelines. Portman converts OpenAPI 3.x specs into Postman collections with auto-generated test suites.
14stripe
|
4netsuite
|
4