v1.0.0

Shopify Admin API

zachgodsell93 zachgodsell93 ← All skills

Manage Shopify store data including orders, products, variants, customers, inventory, fulfillments, refunds, returns, and transactions via the Admin REST API.

Downloads
1.3k
Stars
2
Versions
1
Updated
2026-02-24

Install

npx clawhub@latest install shopify-admin-api

Documentation

Shopify Admin API

Description

Full read/write access to Shopify Admin REST API for managing orders, products, customers, inventory, fulfillments, refunds, returns, and transactions.

Setup

Environment Variables

  • -SHOPIFY_STORE_DOMAIN - Your store's myshopify.com domain (e.g., my-store.myshopify.com)
  • -SHOPIFY_ACCESS_TOKEN - Admin API access token from custom app

Required API Scopes

| Scope | Access |

|-------|--------|

| read_orders / write_orders | Orders, Fulfillments, Abandoned Checkouts |

| read_products / write_products | Products, Variants, Collections |

| read_customers / write_customers | Customers, Segments |

| read_inventory / write_inventory | Inventory Levels, Items |

| read_returns / write_returns | Returns |

| read_all_orders | Orders older than 60 days (requires approval) |

Authentication

All requests require this header:

X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN

Getting an Access Token

1. Go to your Shopify Admin > Settings > Apps and sales channels

2. Click "Develop apps" > "Create an app"

3. Configure Admin API scopes based on what you need

4. Install the app to your store

5. Copy the Admin API access token

API Reference

Base URL: https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10

Orders

#### List Orders

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/orders.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

Query parameters: ids, limit, since_id, created_at_min, created_at_max, updated_at_min, updated_at_max, processed_at_min, processed_at_max, status (open, closed, cancelled, any), financial_status, fulfillment_status, fields

#### Get Order

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/orders/{ORDER_ID}.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

#### Get Order Count

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/orders/count.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

#### Update Order

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/orders/{ORDER_ID}.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN" \

-H "Content-Type: application/json" \

-X PUT \

-d '{"order":{"id":{ORDER_ID},"note":"Updated note","tags":"priority,vip"}}'

#### Close Order

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/orders/{ORDER_ID}/close.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN" \

-X POST

#### Re-open Order

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/orders/{ORDER_ID}/open.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN" \

-X POST

#### Cancel Order

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/orders/{ORDER_ID}/cancel.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN" \

-H "Content-Type: application/json" \

-X POST \

-d '{"reason":"customer","email":true,"restock":true}'

Cancel reasons: customer, fraud, inventory, declined, other

Products

#### List Products

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/products.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

Query parameters: ids, limit, since_id, title, vendor, handle, product_type, collection_id, created_at_min, created_at_max, updated_at_min, updated_at_max, published_at_min, published_at_max, published_status (published, unpublished, any), fields, status (active, archived, draft)

#### Get Product

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/products/{PRODUCT_ID}.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

#### Get Product Count

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/products/count.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

#### Create Product

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/products.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN" \

-H "Content-Type: application/json" \

-X POST \

-d '{"product":{"title":"Burton Custom Freestyle","body_html":"<strong>Good snowboard!</strong>","vendor":"Burton","product_type":"Snowboard","status":"draft","variants":[{"price":"99.99","sku":"BOARD-001"}]}}'

#### Update Product

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/products/{PRODUCT_ID}.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN" \

-H "Content-Type: application/json" \

-X PUT \

-d '{"product":{"id":{PRODUCT_ID},"title":"Updated Product Title","status":"active"}}'

#### Delete Product

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/products/{PRODUCT_ID}.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN" \

-X DELETE

Product Variants

#### List Variants for Product

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/products/{PRODUCT_ID}/variants.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

#### Get Variant

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/variants/{VARIANT_ID}.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

#### Create Variant

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/products/{PRODUCT_ID}/variants.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN" \

-H "Content-Type: application/json" \

-X POST \

-d '{"variant":{"option1":"Blue","price":"19.99","sku":"BLUE-001","inventory_management":"shopify"}}'

#### Update Variant

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/variants/{VARIANT_ID}.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN" \

-H "Content-Type: application/json" \

-X PUT \

-d '{"variant":{"id":{VARIANT_ID},"price":"24.99","compare_at_price":"29.99"}}'

#### Delete Variant

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/products/{PRODUCT_ID}/variants/{VARIANT_ID}.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN" \

-X DELETE

Customers

#### List Customers

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/customers.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

Query parameters: ids, limit, since_id, created_at_min, created_at_max, updated_at_min, updated_at_max, fields

#### Search Customers

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/customers/search.json?query=email:customer@example.com" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

Search fields: email, phone, first_name, last_name, company, orders_count, total_spent, country, state

#### Get Customer

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/customers/{CUSTOMER_ID}.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

#### Get Customer Count

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/customers/count.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

#### Create Customer

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/customers.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN" \

-H "Content-Type: application/json" \

-X POST \

-d '{"customer":{"first_name":"John","last_name":"Doe","email":"john.doe@example.com","phone":"+15551234567","addresses":[{"address1":"123 Main St","city":"Ottawa","province":"ON","country":"CA","zip":"K1A 0B1"}]}}'

#### Update Customer

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/customers/{CUSTOMER_ID}.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN" \

-H "Content-Type: application/json" \

-X PUT \

-d '{"customer":{"id":{CUSTOMER_ID},"tags":"vip,wholesale","note":"Important customer"}}'

#### Delete Customer

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/customers/{CUSTOMER_ID}.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN" \

-X DELETE

#### Get Customer Orders

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/customers/{CUSTOMER_ID}/orders.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

Inventory

#### List Inventory Levels

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/inventory_levels.json?inventory_item_ids={ITEM_ID}" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

Query parameters: inventory_item_ids (required), location_ids, limit, updated_at_min

#### Adjust Inventory Level

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/inventory_levels/adjust.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN" \

-H "Content-Type: application/json" \

-X POST \

-d '{"location_id":{LOCATION_ID},"inventory_item_id":{ITEM_ID},"available_adjustment":5}'

#### Set Inventory Level

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/inventory_levels/set.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN" \

-H "Content-Type: application/json" \

-X POST \

-d '{"location_id":{LOCATION_ID},"inventory_item_id":{ITEM_ID},"available":100}'

#### Connect Inventory to Location

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/inventory_levels/connect.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN" \

-H "Content-Type: application/json" \

-X POST \

-d '{"location_id":{LOCATION_ID},"inventory_item_id":{ITEM_ID}}'

Inventory Items

#### List Inventory Items

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/inventory_items.json?ids={ITEM_IDS}" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

#### Get Inventory Item

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/inventory_items/{ITEM_ID}.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

#### Update Inventory Item

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/inventory_items/{ITEM_ID}.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN" \

-H "Content-Type: application/json" \

-X PUT \

-d '{"inventory_item":{"id":{ITEM_ID},"cost":"25.00","tracked":true}}'

Locations

#### List Locations

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/locations.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

#### Get Location

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/locations/{LOCATION_ID}.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

#### Get Location Count

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/locations/count.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

#### Get Inventory Levels for Location

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/locations/{LOCATION_ID}/inventory_levels.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

Fulfillments

#### List Fulfillments for Order

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/orders/{ORDER_ID}/fulfillments.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

#### Get Fulfillment

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/orders/{ORDER_ID}/fulfillments/{FULFILLMENT_ID}.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

#### Get Fulfillment Count

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/orders/{ORDER_ID}/fulfillments/count.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

#### Create Fulfillment

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/fulfillments.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN" \

-H "Content-Type: application/json" \

-X POST \

-d '{"fulfillment":{"line_items_by_fulfillment_order":[{"fulfillment_order_id":{FULFILLMENT_ORDER_ID}}],"tracking_info":{"number":"1Z999AA10123456784","url":"https://www.ups.com/track?tracknum=1Z999AA10123456784","company":"UPS"}}}'

#### Update Tracking

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/fulfillments/{FULFILLMENT_ID}/update_tracking.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN" \

-H "Content-Type: application/json" \

-X POST \

-d '{"fulfillment":{"tracking_info":{"number":"1Z999AA10123456784","url":"https://www.ups.com/track?tracknum=1Z999AA10123456784","company":"UPS"},"notify_customer":true}}'

#### Cancel Fulfillment

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/fulfillments/{FULFILLMENT_ID}/cancel.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN" \

-X POST

Fulfillment Orders

#### List Fulfillment Orders for Order

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/orders/{ORDER_ID}/fulfillment_orders.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

#### Get Fulfillment Order

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/fulfillment_orders/{FULFILLMENT_ORDER_ID}.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

Refunds

#### List Refunds for Order

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/orders/{ORDER_ID}/refunds.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

#### Get Refund

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/orders/{ORDER_ID}/refunds/{REFUND_ID}.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

#### Calculate Refund

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/orders/{ORDER_ID}/refunds/calculate.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN" \

-H "Content-Type: application/json" \

-X POST \

-d '{"refund":{"shipping":{"full_refund":true},"refund_line_items":[{"line_item_id":{LINE_ITEM_ID},"quantity":1,"restock_type":"return"}]}}'

Restock types: no_restock, cancel, return, legacy_restock

#### Create Refund

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/orders/{ORDER_ID}/refunds.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN" \

-H "Content-Type: application/json" \

-X POST \

-d '{"refund":{"currency":"USD","notify":true,"note":"Customer returned item","shipping":{"full_refund":true},"refund_line_items":[{"line_item_id":{LINE_ITEM_ID},"quantity":1,"restock_type":"return"}],"transactions":[{"parent_id":{TRANSACTION_ID},"amount":"10.00","kind":"refund","gateway":"shopify_payments"}]}}'

Returns

#### List Returns

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/returns.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

Query parameters: limit, status (open, closed, cancelled, requested, in_progress)

#### Get Return

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/returns/{RETURN_ID}.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

#### Create Return

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/returns.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN" \

-H "Content-Type: application/json" \

-X POST \

-d '{"return":{"order_id":{ORDER_ID},"return_line_items":[{"fulfillment_line_item_id":{FULFILLMENT_LINE_ITEM_ID},"quantity":1,"return_reason":"WRONG_ITEM"}]}}'

Return reasons: UNKNOWN, SIZE_TOO_SMALL, SIZE_TOO_LARGE, UNWANTED, NOT_AS_DESCRIBED, WRONG_ITEM, DEFECTIVE, STYLE, COLOR, OTHER

Transactions

#### List Transactions for Order

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/orders/{ORDER_ID}/transactions.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

#### Get Transaction

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/orders/{ORDER_ID}/transactions/{TRANSACTION_ID}.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

#### Get Transaction Count

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/orders/{ORDER_ID}/transactions/count.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

#### Create Transaction (Capture)

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/orders/{ORDER_ID}/transactions.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN" \

-H "Content-Type: application/json" \

-X POST \

-d '{"transaction":{"kind":"capture","amount":"10.00","parent_id":{AUTHORIZATION_ID}}}'

Transaction kinds: authorization, capture, sale, void, refund

Collections

#### List Custom Collections

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/custom_collections.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

#### Get Custom Collection

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/custom_collections/{COLLECTION_ID}.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

#### Create Custom Collection

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/custom_collections.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN" \

-H "Content-Type: application/json" \

-X POST \

-d '{"custom_collection":{"title":"Summer Collection","body_html":"<p>Summer products</p>"}}'

#### Update Custom Collection

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/custom_collections/{COLLECTION_ID}.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN" \

-H "Content-Type: application/json" \

-X PUT \

-d '{"custom_collection":{"id":{COLLECTION_ID},"title":"Updated Collection"}}'

#### Delete Custom Collection

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/custom_collections/{COLLECTION_ID}.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN" \

-X DELETE

#### List Smart Collections

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/smart_collections.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

#### Get Smart Collection

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/smart_collections/{COLLECTION_ID}.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

#### Create Smart Collection

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/smart_collections.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN" \

-H "Content-Type: application/json" \

-X POST \

-d '{"smart_collection":{"title":"Sale Items","rules":[{"column":"compare_at_price","relation":"greater_than","condition":"0"}]}}'

Rule columns: title, type, vendor, variant_price, tag, compare_at_price, weight, inventory_stock, variant_compare_at_price, variant_weight, variant_inventory, variant_title

Rule relations: equals, not_equals, greater_than, less_than, starts_with, ends_with, contains, not_contains

Collects (Product-Collection Links)

#### List Collects

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/collects.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

Query parameters: product_id, collection_id, limit, since_id, fields

#### Create Collect

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/collects.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN" \

-H "Content-Type: application/json" \

-X POST \

-d '{"collect":{"product_id":{PRODUCT_ID},"collection_id":{COLLECTION_ID}}}'

#### Delete Collect

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/collects/{COLLECT_ID}.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN" \

-X DELETE

Abandoned Checkouts

#### List Abandoned Checkouts

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/checkouts.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

Query parameters: limit, since_id, created_at_min, created_at_max, updated_at_min, updated_at_max, status (open, closed)

#### Get Abandoned Checkout Count

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/checkouts/count.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

Status Reference

Order Status

| Field | Values |

|-------|--------|

| financial_status | pending, authorized, partially_paid, paid, partially_refunded, refunded, voided |

| fulfillment_status | null (unfulfilled), partial, fulfilled, restocked |

Product Status

| Status | Description |

|--------|-------------|

| active | Available for sale |

| archived | No longer available, hidden from admin lists |

| draft | Not ready for sale |

Return Status

| Status | Description |

|--------|-------------|

| requested | Return requested by customer |

| in_progress | Return being processed |

| open | Return accepted, awaiting items |

| closed | Return completed |

| cancelled | Return cancelled |

Pagination

Shopify uses cursor-based pagination via the Link header.

Using Page Info

First request

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/products.json?limit=50" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN" \

-i

Response includes Link header:

Link: <https://store.myshopify.com/admin/api/2024-10/products.json?page_info=abc123&limit=50>; rel="next"

Next page

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/products.json?page_info=abc123&limit=50" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

Note: When using page_info, you cannot use other query parameters except limit and fields.

Rate Limiting

Shopify uses a leaky bucket algorithm:

  • -Bucket size: 40 requests
  • -Leak rate: 2 requests/second
  • -Restoration: ~20 seconds for full bucket

Response headers:

  • -X-Shopify-Shop-Api-Call-Limit: Current usage (e.g., 32/40)
  • -Retry-After: Seconds to wait (on 429 response)

Best Practices

1. Check X-Shopify-Shop-Api-Call-Limit header

2. If near limit, add delays between requests

3. On 429 response, wait for Retry-After seconds

4. Use bulk operations for large data sets

Webhooks

List Webhooks

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/webhooks.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

Create Webhook

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/webhooks.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN" \

-H "Content-Type: application/json" \

-X POST \

-d '{"webhook":{"topic":"orders/create","address":"https://example.com/webhooks/orders","format":"json"}}'

Common topics: orders/create, orders/updated, orders/fulfilled, orders/cancelled, products/create, products/update, products/delete, customers/create, customers/update, inventory_levels/update, refunds/create

Delete Webhook

curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/webhooks/{WEBHOOK_ID}.json" \

-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN" \

-X DELETE

Changelog

v1.0.0

  • -Initial release with full Admin REST API coverage
  • -Orders, Products, Variants, Customers
  • -Inventory management (levels, items, locations)
  • -Fulfillments and fulfillment orders
  • -Refunds, Returns, Transactions
  • -Collections (custom, smart) and collects
  • -Abandoned checkouts
  • -Webhooks management
  • -Status reference tables
  • -Pagination and rate limiting documentation

Launch an agent with Shopify Admin API on Termo.