Capability library / Application package

Shopify package v1.0.0

Shopify: read orders, customers, products and refunds, and create refund records, submit payment refunds and optionally notify customers.

Review state: Reviewed · Distributable: yes, digest matches the release manifest

This page describes AAES Govern’s controls. AAES Operate has private-work permissions, operational reviews and recorded-spend limits; it does not include Govern. About AAES Govern

Before you enable this package

Budgets apply to the amount declared in the task, not to the amount the provider actually sends or moves. This package pins REST Admin API 2026-07. Shopify treats REST Admin as legacy; new public apps must use GraphQL, which this package does not cover. The endpoint host 'shopify-store.invalid' is a reserved .invalid placeholder that fails closed until you substitute the real host in both the endpoint URLs and the egress allowlist.

Compatibility source: Shopify REST Admin API status. Confirm app eligibility before choosing this package.

Read each action's effects and exclusions below. Before installation, also read the complete package requirements, including credential issuance, scope, expiry, and provider permissions. These are deployment prerequisites, not capabilities this package supplies.

Capabilities (5)

Each capability below is one registered operation. The complete package JSON includes its exact network destination allowlist. The repository stores it at packs/shopify.json and embeds a copy in the release binary.

Risk tiers. R0 is the minimum for reads. R2 is the minimum for write, create, update, execute, and invoke. R3 is the minimum for delete, send, pay, deploy, approve, share, and transfer. Operators can raise these levels. A minimum tier does not measure the operation's business or confidentiality risk.

On supported execution paths routed through AAES Govern, the R3 actions listed below require approval by an authorized person. Bypass paths and observation-only registrations are outside that guarantee. A provider's restoration feature does not remove this approval requirement. A provider-side approval, such as approving a GitLab merge request, is also separate from AAES Govern human approval. The capability matrix shows which execution paths are implemented, restricted to lab use, or refused at startup. Live compatibility must be tested in your environment.

Field guide. Endpoint is the service address and request method. Connector is the adapter that makes the call. Custody describes how the credential is held; the credential reference identifies the value to resolve. Data class sets handling requirements: pii means personal data, financial means financial records, and internal means internal organizational data.

shopify.orders.read v1.0.0R0

Kind
tool
Action
read
Endpoint
GET https://shopify-store.invalid/admin/api/2026-07/orders.json
Connector
http
Custody
customer_vault
Credential ref
secret-ref-shopify-admin-token
Data class
financial

Read orders.

Retrieve a list of orders (filterable by status and date). Order records carry totals, payment status and transaction references (financial data) alongside customer names, emails, phones and addresses (personal data), and Shopify treats them as protected customer data; the resource is classified as financial data. The registered path covers the collection read only — single-order reads and the order count endpoint are not registered by this pack.

shopify.customers.read v1.0.0R0

Kind
tool
Action
read
Endpoint
GET https://shopify-store.invalid/admin/api/2026-07/customers.json
Connector
http
Custody
customer_vault
Credential ref
secret-ref-shopify-admin-token
Data class
pii

Read customers.

Retrieve a list of customers: names, email addresses, phone numbers, addresses and marketing-consent state — personal data, classified as pii (personal data) and treated by Shopify as protected customer data. The registered path covers the collection read only — single-customer reads, customer search, customer order history and the customer count endpoint are not registered by this pack.

shopify.products.read v1.0.0R0

Kind
tool
Action
read
Endpoint
GET https://shopify-store.invalid/admin/api/2026-07/products.json
Connector
http
Custody
customer_vault
Credential ref
secret-ref-shopify-admin-token
Data class
internal

Read products.

Retrieve a list of products with variants, prices, tags and publication state — the store's internal catalogue, classified as internal data. The registered path covers the collection read only — single-product reads and the product count endpoint are not registered by this pack.

shopify.orders.refunds.read v1.0.0R0

Kind
tool
Action
read
Endpoint
GET https://shopify-store.invalid/admin/api/2026-07/orders/ORDER_ID/refunds.json
Connector
http
Custody
customer_vault
Credential ref
secret-ref-shopify-admin-token
Data class
financial

Read order refunds.

Retrieve the list of refunds for one order: refund amounts, restock instructions and refund transactions — records of money returned to customers, classified as financial data. ORDER_ID is a placeholder the deployment binds to a concrete order before enabling. The registered path covers the collection read only — single-refund reads are not registered by this pack.

shopify.orders.refunds.create v1.0.0R3

Kind
tool
Actions
create, pay, send
Endpoint
POST https://shopify-store.invalid/admin/api/2026-07/orders/ORDER_ID/refunds.json
Connector
http
Custody
customer_vault
Credential ref
secret-ref-shopify-admin-token
Data class
financial

Create order refunds.

Create a refund for one order, with three distinct effects.

Refund record: a 201 response confirms creation of the Refund resource, including line items and restock instructions.

Payment: the request submits refund transactions to the payment gateway. Transactions are typically prepared through refunds/calculate; change their suggested_refund kind to refund before submission. Each transaction has its own processing outcome. A 201 does not prove that every transaction settled or that funds reached the customer; check individual outcomes through the registered refund read.

Notification: the request's notify option sends a refund email to the customer. The declared actions are create, pay, and send at R3.

The registered cost ceiling limits the amount declared to AAES: the gateway refuses higher declarations and commits the ceiling against the work budget. It does not limit the amount encoded in the provider request. Review currency, minor units, and restock instructions separately.

Bind ORDER_ID before enabling. The package excludes refunds/calculate; a human can perform that calculation in Shopify admin without moving money.

Credential reference

The credential field names a reference rather than containing credential material. Packs are designed not to contain secrets; the format checks cover only known credential formats and cannot prove that arbitrary text contains no secrets. Installing a package registers its capabilities. Configure the provider credentials, endpoints, and network access, then test the integration in your environment before enabling it.

Reference
secret-ref-shopify-admin-token
Custody
customer_vault
Injection
header (X-Shopify-Access-Token)

Configure the value and injection format specified in the package. Assign responsibility for credential rotation and revocation, restrict provider permissions, and keep credential material out of logs and responses.

Complete credential requirements

A Shopify Admin API access token held in the client's own secret manager. The stored material must be the complete X-Shopify-Access-Token header value: the token itself, with no scheme. customer_vault is the only generally-supported production custody model here — identity_federation and customer_broker are refused at startup and inline is lab-only.

Issuance depends on the app generation, and the two must not be conflated. Supported legacy credentials: apps created directly in the Shopify admin (admin-created custom apps) had Shopify pre-generate a non-expiring Admin API access token at install — Shopify documents that these apps can no longer be created, so that flow applies only to apps the deployment already operates, and it is not available to a new 2026 deployment; such tokens remain valid until the app is uninstalled or the client secret is revoked, and rotation is an external administrative action.

Current issuance and renewal flows: a new app is created in the Shopify Dev Dashboard and obtains tokens through a grant — for a server-side integration acting on the organization's own stores, the client credentials grant returns a token valid for 24 hours that is renewed by repeating the same request; embedded and standalone apps use token exchange or the authorization code grant, and Shopify directs public apps to expiring offline tokens (1-hour access token with a 90-day refresh token, and refresh retirements handled by Shopify as new tokens are acquired).

Either way an external deployment process MUST mint and renew tokens and write the fresh header value into the vault — the executor injects the stored value verbatim and performs no token lifecycle itself, and a stale value fails closed. Uninstalling the app or revoking the client secret ends a token's access (requests then return 401).

Least privilege: grant the token only the scopes these capabilities need — read_orders, read_customers and read_products for the reads, plus write_orders only if the refund-creation capability is enabled — and Shopify requires apps to be approved for protected customer data before order and customer reads return it.

Executor hygiene: the value must live only in executor memory for the lifetime of a call, must never be written to logs, traces or diagnostics, and must not appear in crash dumps; a deployment that cannot meet that bar must not enable the pack.

Resources

  • shopify-store-orders (api, financial): https://shopify-store.invalid/admin/api/2026-07/orders.json
  • shopify-store-customers (api, pii): https://shopify-store.invalid/admin/api/2026-07/customers.json
  • shopify-store-products (api, internal): https://shopify-store.invalid/admin/api/2026-07/products.json

Technical package and review record

Complete provider requirements and exclusions

The endpoint host 'shopify-store.invalid' is a reserved non-production placeholder (an RFC 2606 reserved TLD): substitute the store's own host before enabling, in the endpoints, the resource locators and the egress allowlist — the allowlist matches exactly, so all three must be substituted together, and substitution is a required deployment step. The real substitution shape is '{store}.myshopify.com' (the store's myshopify.com subdomain; myshopify.com subdomains are real vendor hosts but are customer-specific, so the pack ships the reserved pattern). ORDER_ID in the refund endpoint paths is a placeholder too: refunds are sub-resources of one order, so the capability is bound to a concrete order id before enabling.

This pack pins the Admin REST API version 2026-07 deliberately: Shopify serves dated versions, and a version bump is a reviewed migration, not a silent edit. This pack registers only endpoints the official REST Admin API reference documents: listing orders, listing customers, listing products, listing an order's refunds, and creating a refund. Reads are collection reads: single-record reads (GET /admin/api/2026-07/orders/{order_id}.json, GET /admin/api/2026-07/customers/{customer_id}.json, GET /admin/api/2026-07/products/{product_id}.json, GET .../refunds/{refund_id}.json) and count endpoints are not registered by this pack.

Only the last 60 days of orders are accessible by default; older orders require the read_all_orders scope in addition to read_orders, which is a deployment decision, not a pack default.

Documented exclusions: this pack does not register order creation, update, deletion, cancellation, close or re-open (order creation through the API collects no payment, but it still records a customer-facing purchase, and cancellation moves obligations the other way), product creation, update or deletion, customer creation, update, deletion or account-invite sending, fulfillment operations, gift cards, discounts, and the entire GraphQL Admin API — Shopify marks the REST Admin API a legacy API for new public apps, and new deployments should weigh the GraphQL surface under its own review.

Refund creation is the one write in the pack because money moves: it is pay at the minimum R3 tier. Credential custody was reviewed on 2026-09-21 against this pack's custody model (an Admin API access token held in the customer's vault), with the following findings.

Issuance authority and delegation: issuance depends on the app generation, and the two must not be conflated — legacy admin-created custom apps had Shopify pre-generate a non-expiring Admin API access token at install (a flow Shopify documents as no longer creatable, so it applies only to apps the deployment already operates), while a new app is created in the Shopify Dev Dashboard and obtains tokens through a grant — the client credentials grant for a server-side integration acting on the organization's own stores, token exchange or the authorization code grant for embedded and standalone apps.

Scope: access scopes are granted per app — read_orders, read_customers and read_products for the reads, plus write_orders only if the refund-creation capability is enabled; Shopify requires apps to be approved for protected customer data before order and customer reads return it, and orders older than 60 days require read_all_orders as a deliberate deployment decision, not a pack default. Audience: no audience mechanism is documented — the token authorizes against the store's own myshopify.com host, and audience binding beyond that is not established. TTL: legacy admin-created tokens do not expire and remain valid until the app is uninstalled or the client secret is revoked; client credentials tokens are valid for 24 hours (expires_in 86399) and renewed by repeating the same request; expiring offline tokens pair a 1-hour access token with a 90-day refresh token.

Refresh ownership: an external deployment process owns minting and renewal — the client credentials grant renews by repeating the request, and Shopify handles refresh retirements as new tokens are acquired — and writes the fresh header value into the vault; the executor injects the stored value verbatim and performs no token lifecycle itself, and a stale value fails closed.

Revocation: uninstalling the app or revoking the client secret ends a token's access, with requests then returning 401. Executor access and replay/exposure: the executor reads only the vault reference; the token is replayable while valid, and its window depends on the generation — 24 hours for a new client-credentials deployment, unbounded for a legacy token until uninstall or secret revocation.

Alternate access paths: the Shopify admin UI and other apps retain access outside this pack, and uninstalling this app or revoking its client secret closes only this path. Credential custody review is complete.

Download the complete package JSON for exact network allowlists, credential requirements, exclusions, and setup notes. Read these requirements before installation.

The full documentation review record is supplied in the evaluation package. The evaluation package runs in your environment and comes only with the paid design partnership. This page reproduces the source links and review block; the full record is available for evaluation. Discuss a design partnership to inspect it before installation.

Review block

This section reproduces the review block recorded in the pack file. The evidence and approval record is separate: for a reviewed pack, it is in the evaluation materials and in the release binary's embedded assets.

Review completed: 2026-09-22

5 sources, retrieved 2026-09-21

Current documentation links are navigation aids. They do not change the package, its historical sources or its review date. Review dates describe a documentation review, not a live integration test. No package is provider-endorsed or yet tested against a live provider tenant.

Release identity

SHA-256 of the pack file bytes: c7b55f34ee6cc4da5de9fc3553a2c1f7f6d58ac5325a2ed964a461b38be8b2f6

Distributable: yes, digest matches the release manifest. Editing a package changes its release identity. A deployment plan checks its own file digests; it does not restore reviewed status or authenticate approval.