Shopify Rust Client
A Rust client library for interacting with the Shopify Admin API. Currently focused on order management with plans to support all Shopify Admin APIs (REST and GraphQL).
Features
Current Support
- 🔍 Order Retrieval: Fetch orders by ID or order name
- ✏️ Order Updates: Update order properties (e.g., tags)
- 🪝 Webhook Support: Parse customer and shop compliance webhooks
- 📦 Type-Safe: Strongly typed models for Shopify API responses
- 🚀 Async/Await: Built on
reqwestfor asynchronous HTTP requests - 🔐 Secure: Token-based authentication support
Roadmap
- 🚧 Full Admin REST API: Support for Products, Customers, Inventory, Fulfillments, and more
- 🚧 GraphQL Admin API: Complete GraphQL API support with query builder
- 🚧 Additional Webhooks: Support for more webhook topics beyond compliance
- 🚧 Rate Limiting: Built-in request throttling and retry logic
Installation
Add this to your Cargo.toml:
[]
= "0.1.0"
Or install directly:
Public API
The library exposes three main modules for public use:
ShopifyClient- Main client for making API callstypes- All type definitions organized by resource (e.g.,types::order)webhooks- Webhook parsing utilities and types
use ShopifyClient; // Main client
use *; // Order types
use *; // Webhook utilities
Usage
Initialize the Client
use ShopifyClient;
let client = new;
Get Order by ID
use ShopifyClient;
async
Get Order by Name
use ShopifyClient;
async
Update Order (Patch)
use ShopifyClient;
use ;
async
Parse Webhooks
use ;
Project Structure
The library is organized into a modular structure for easy extensibility:
src/
├── lib.rs # Main client entry point and exports
├── types/ # Public type definitions
│ ├── mod.rs # Type module exports
│ └── order.rs # Order-related types
├── webhooks/ # Public webhook parsing module
│ ├── mod.rs # Webhook parsing functions
│ └── types.rs # Webhook payload types
├── common/ # Internal shared utilities (private)
│ ├── mod.rs
│ ├── types.rs # Common types (APIError, ErrorResp)
│ └── utils.rs # Utility functions
└── services/ # Internal API services (private)
└── order/ # Order service implementation
├── mod.rs # Order struct with public methods
└── remote.rs # Internal API implementation
Design Philosophy
- Client-Based: Initialize a
ShopifyClientonce and access services through it - Clean Public API: Three public modules -
ShopifyClient,types, andwebhooks - Encapsulation: All internal implementation (
common,services) is private - Service-Oriented: Each API resource (orders, products, etc.) is its own service module
- Clear Separation: Services for outgoing API calls, webhooks for incoming data parsing
- Type Safety: All API responses are strongly typed with comprehensive models
Data Models
The library provides strongly-typed models organized by resource:
Order Types (types::order)
- Order: Complete order information including customer, line items, fulfillments, pricing, and timestamps
- Customer: Customer details (ID, email, phone, name, addresses)
- LineItem: Product line items with quantities, prices, properties, and fulfillment status
- OrderFulfillment: Fulfillment tracking with tracking numbers, URLs, and shipment status
- Address: Billing and shipping address information
- PriceSet: Multi-currency pricing with shop and presentment money
- Property: Custom line item properties
- PatchOrderRequest / PatchOrder: Request types for updating orders
Webhook Types (webhooks::types)
- CustomersDataRequestPayload: Customer data request webhook payload
- CustomersRedactPayload: Customer redaction webhook payload
- ShopRedactPayload: Shop redaction webhook payload
- WebhookPayload: Enum containing all webhook payload types
- WebhookParseError: Error type for webhook parsing failures
- WebhookCustomer: Customer information in webhook payloads
Error Handling
The library uses a custom APIError enum for comprehensive error handling:
Errors are returned through Result<T, APIError> for easy error propagation and handling.
Authentication
This client requires a Shopify Admin API access token. You can obtain one by:
- Creating a custom app in your Shopify admin panel
- Generating an Admin API access token
- Granting the necessary permissions (e.g.,
read_orders,write_orders)
API Version
Currently uses Shopify Admin API version 2024-07.
Requirements
- Rust 1.56 or later (2021 edition)
- Dependencies:
reqwest(with JSON support)serde(with derive feature)serde_json
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This project is licensed under your preferred license.
Disclaimer
This is an unofficial Shopify client library. For official SDKs and documentation, visit Shopify's Developer Documentation.