EasyStore MCP by usefulapi
Read EasyStore orders, products and customers; manage stock, fulfillments and customer records.
Should I use this
Quality & Safety
Findings (6)
- LOWin easystore_list_product_variants
- LOWin easystore_list_inventory_levels
- LOWin easystore_list_order_fulfillments
- LOWin easystore_list_order_transactions
- LOWin easystore_list_customer_addresses
- LOWin easystore_adjust_inventory_level
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"easystore": {
"url": "https://easystore.usefulapi.io/mcp"
}
}
}Remote endpoints
https://easystore.usefulapi.io/mcpstreamable-httpWhat it can do
Tool inventory
Tools (29)
🟢easystore_get_store
The store behind this access token: name, contact emails, easystore domain, plan, locale, country, time zone, currencies and locations. Needs no API access scope. GET /api/3.0/store.json.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢easystore_list_locations(page, limit)
The store's stock and pickup locations (warehouses, outlets) with address, phone, is_primary and pickup settings. Use the ids for inventory levels. Needs read_locations. GET /api/3.0/locations.json.
Input Schema
{
"type": "object",
"properties": {
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"limit": {
"description": "Results per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢easystore_list_products(collection_ids, skus, visibility, is_bundle, created_at_min, ...)
List products with variants, prices, SKUs, stock, images and collections. Filter by collection, SKU, published status or dates. Needs read_products. GET /api/3.0/products.json.
Input Schema
{
"type": "object",
"properties": {
"collection_ids": {
"description": "Only products in these collection ids, comma-separated, e.g. 2311217,2311218.",
"type": "string",
"pattern": "^\\d+(\\s*,\\s*\\d+)*$"
},
"skus": {
"description": "Only products with these SKUs, comma-separated.",
"type": "string",
"minLength": 1,
"maxLength": 500
},
"visibility": {
"description": "Only published or only unpublished products.",
"type": "string",
"enum": [
"published",
"unpublished"
]
},
"is_bundle": {
"description": "true = only bundle products, false = no bundle products.",
"type": "boolean"
},
"created_at_min": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}([ T]\\d{2}:\\d{2}(:\\d{2})?)?$",
"description": "yyyy-mm-dd or yyyy-mm-dd hh:mm:ss, read in the store's own time zone."
},
"created_at_max": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}([ T]\\d{2}:\\d{2}(:\\d{2})?)?$",
"description": "yyyy-mm-dd or yyyy-mm-dd hh:mm:ss, read in the store's own time zone."
},
"updated_at_min": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}([ T]\\d{2}:\\d{2}(:\\d{2})?)?$",
"description": "yyyy-mm-dd or yyyy-mm-dd hh:mm:ss, read in the store's own time zone."
},
"updated_at_max": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}([ T]\\d{2}:\\d{2}(:\\d{2})?)?$",
"description": "yyyy-mm-dd or yyyy-mm-dd hh:mm:ss, read in the store's own time zone."
},
"since_id": {
"description": "Start at this product id (inclusive: id >= since_id).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"sort": {
"description": "Sort as field.asc or field.desc, e.g. id.asc (a stable order for paging through everything).",
"type": "string",
"pattern": "^[a-z_]{1,40}\\.(asc|desc)$"
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"limit": {
"description": "Results per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢easystore_get_product(product_id)
One product by id with its variants, options, images and collections. Needs read_products. GET /api/3.0/products/{id}.json.
Input Schema
{
"type": "object",
"properties": {
"product_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "EasyStore product id."
}
},
"required": [
"product_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢easystore_list_product_variants(product_id)
The variants of one product (price, SKU, barcode, stock, weight, enabled flag). Needs read_products. GET /api/3.0/products/{id}/variants.json.
Input Schema
{
"type": "object",
"properties": {
"product_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "EasyStore product id."
}
},
"required": [
"product_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢easystore_list_collections(ids, visibility, since_id, sort, page, ...)
List product collections. Needs read_products. GET /api/3.0/collections.json.
Input Schema
{
"type": "object",
"properties": {
"ids": {
"description": "Only these collection ids, comma-separated.",
"type": "string",
"pattern": "^\\d+(\\s*,\\s*\\d+)*$"
},
"visibility": {
"description": "true = only published collections.",
"type": "boolean"
},
"since_id": {
"description": "Start at this collection id (inclusive).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"sort": {
"description": "Sort as field.asc or field.desc, e.g. id.asc (a stable order for paging through everything).",
"type": "string",
"pattern": "^[a-z_]{1,40}\\.(asc|desc)$"
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"limit": {
"description": "Results per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢easystore_get_collection(collection_id)
One collection by id. Needs read_products. GET /api/3.0/collections/{id}.json.
Input Schema
{
"type": "object",
"properties": {
"collection_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "EasyStore collection id."
}
},
"required": [
"collection_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢easystore_list_inventory_levels(variant_ids, location_ids, page, limit)
Stock per variant per location: available (inventory_quantity), committed, incoming and reserved. Pass variant_ids or location_ids (at least one is required). Needs read_products. GET /api/4.0/inventory_levels.json.
Input Schema
{
"type": "object",
"properties": {
"variant_ids": {
"description": "Variant ids, comma-separated (see easystore_list_product_variants).",
"type": "string",
"pattern": "^\\d+(\\s*,\\s*\\d+)*$"
},
"location_ids": {
"description": "Location ids, comma-separated (see easystore_list_locations).",
"type": "string",
"pattern": "^\\d+(\\s*,\\s*\\d+)*$"
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"limit": {
"description": "Results per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢easystore_list_orders(financial_status, fulfillment_status, customer_id, ids, processed_at_min, ...)
List orders from every sales channel with customer, items, totals, payment and fulfillment status. Filter by payment or fulfillment status, customer, or dates (store time zone). Needs read_orders. GET /api/3.0/orders.json.
Input Schema
{
"type": "object",
"properties": {
"financial_status": {
"description": "Payment status.",
"type": "string",
"enum": [
"paid",
"partially_paid",
"unpaid",
"cod"
]
},
"fulfillment_status": {
"description": "Shipping status.",
"type": "string",
"enum": [
"fulfilled",
"partially_fulfilled",
"unfulfilled"
]
},
"customer_id": {
"description": "Only this customer's orders.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"ids": {
"description": "Only these order ids, comma-separated.",
"type": "string",
"pattern": "^\\d+(\\s*,\\s*\\d+)*$"
},
"processed_at_min": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}([ T]\\d{2}:\\d{2}(:\\d{2})?)?$",
"description": "yyyy-mm-dd or yyyy-mm-dd hh:mm:ss, read in the store's own time zone."
},
"processed_at_max": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}([ T]\\d{2}:\\d{2}(:\\d{2})?)?$",
"description": "yyyy-mm-dd or yyyy-mm-dd hh:mm:ss, read in the store's own time zone."
},
"created_at_min": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}([ T]\\d{2}:\\d{2}(:\\d{2})?)?$",
"description": "yyyy-mm-dd or yyyy-mm-dd hh:mm:ss, read in the store's own time zone."
},
"created_at_max": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}([ T]\\d{2}:\\d{2}(:\\d{2})?)?$",
"description": "yyyy-mm-dd or yyyy-mm-dd hh:mm:ss, read in the store's own time zone."
},
"updated_at_min": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}([ T]\\d{2}:\\d{2}(:\\d{2})?)?$",
"description": "yyyy-mm-dd or yyyy-mm-dd hh:mm:ss, read in the store's own time zone."
},
"updated_at_max": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}([ T]\\d{2}:\\d{2}(:\\d{2})?)?$",
"description": "yyyy-mm-dd or yyyy-mm-dd hh:mm:ss, read in the store's own time zone."
},
"since_id": {
"description": "Start at this order id (inclusive: id >= since_id). Use with sort=id.asc.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"sort": {
"description": "Sort as field.asc or field.desc, e.g. id.asc (a stable order for paging through everything).",
"type": "string",
"pattern": "^[a-z_]{1,40}\\.(asc|desc)$"
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"limit": {
"description": "Results per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢easystore_get_order(order_id, fields)
One order by id. Ask for extra sections with fields: items, addresses, transactions, fulfillments, refunds, taxes, customer, shipping_fees, discounts, points, cancellation, note_attributes. Needs read_orders. GET /api/3.0/orders/{id}.json.
Input Schema
{
"type": "object",
"properties": {
"order_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "EasyStore order id (not the order number)."
},
"fields": {
"description": "Comma-separated extra sections, e.g. items,addresses,fulfillments.",
"type": "string",
"pattern": "^[a-z_]+(\\s*,\\s*[a-z_]+)*$"
}
},
"required": [
"order_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢easystore_list_order_fulfillments(order_id)
The fulfillments (shipments with tracking details and status) of one order. Needs read_fulfillments. GET /api/3.0/orders/{id}/fulfillments.json.
Input Schema
{
"type": "object",
"properties": {
"order_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "EasyStore order id."
}
},
"required": [
"order_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢easystore_list_order_transactions(order_id)
The payment transactions of one order (gateway, amount, status). Needs read_orders. GET /api/3.0/orders/{id}/transactions.json.
Input Schema
{
"type": "object",
"properties": {
"order_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "EasyStore order id."
}
},
"required": [
"order_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢easystore_list_checkouts(since_id, page, limit)
List checkouts (carts in progress or abandoned). Cart tokens are not returned. Needs read_orders. GET /api/3.0/checkouts.json.
Input Schema
{
"type": "object",
"properties": {
"since_id": {
"description": "Start at this checkout id (inclusive).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"limit": {
"description": "Results per page, 1-50 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 50
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢easystore_list_customers(query, ids, created_at_min, created_at_max, updated_at_min, ...)
List customers with contact details, order count, total spent, groups and store credit. Search by name or email with query. Needs read_customers. GET /api/3.0/customers.json.
Input Schema
{
"type": "object",
"properties": {
"query": {
"description": "Match on first name, last name or email.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"ids": {
"description": "Only these customer ids, comma-separated.",
"type": "string",
"pattern": "^\\d+(\\s*,\\s*\\d+)*$"
},
"created_at_min": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}([T ]\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?(Z|[+-]\\d{2}:\\d{2})?)?$",
"description": "ISO 8601 date or date-time, e.g. 2026-10-01 or 2026-10-01T00:00:00+08:00."
},
"created_at_max": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}([T ]\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?(Z|[+-]\\d{2}:\\d{2})?)?$",
"description": "ISO 8601 date or date-time, e.g. 2026-10-01 or 2026-10-01T00:00:00+08:00."
},
"updated_at_min": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}([T ]\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?(Z|[+-]\\d{2}:\\d{2})?)?$",
"description": "ISO 8601 date or date-time, e.g. 2026-10-01 or 2026-10-01T00:00:00+08:00."
},
"updated_at_max": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}([T ]\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?(Z|[+-]\\d{2}:\\d{2})?)?$",
"description": "ISO 8601 date or date-time, e.g. 2026-10-01 or 2026-10-01T00:00:00+08:00."
},
"since_id": {
"description": "Start at this customer id (inclusive).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"sort": {
"description": "Sort as field.asc or field.desc, e.g. id.asc (a stable order for paging through everything).",
"type": "string",
"pattern": "^[a-z_]{1,40}\\.(asc|desc)$"
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"limit": {
"description": "Results per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢easystore_search_customers(email, phone, code, page, limit)
Find customers by exact email, phone number or customer code. Pass at least one. Needs read_customers. GET /api/3.0/customers/search.json.
Input Schema
{
"type": "object",
"properties": {
"email": {
"description": "Exact email address.",
"type": "string",
"minLength": 3,
"maxLength": 254
},
"phone": {
"description": "Phone number as stored, e.g. 601110768827.",
"type": "string",
"minLength": 3,
"maxLength": 40
},
"code": {
"description": "Customer code.",
"type": "string",
"minLength": 1,
"maxLength": 100
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"limit": {
"description": "Results per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢easystore_get_customer(customer_id, fields)
One customer by id. Add fields=points,membership for loyalty data. Needs read_customers. GET /api/3.0/customers/{id}.json.
Input Schema
{
"type": "object",
"properties": {
"customer_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "EasyStore customer id."
},
"fields": {
"description": "Extra sections, e.g. points,membership.",
"type": "string",
"pattern": "^[a-z_]+(\\s*,\\s*[a-z_]+)*$"
}
},
"required": [
"customer_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢easystore_list_customer_addresses(customer_id, page, limit)
The saved addresses of one customer. Needs read_customers. GET /api/3.0/customers/{id}/addresses.json.
Input Schema
{
"type": "object",
"properties": {
"customer_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "EasyStore customer id."
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"limit": {
"description": "Results per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"required": [
"customer_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢easystore_get_customer_points(customer_id)
The loyalty points balance of one customer. Needs read_customers. GET /api/3.0/customers/{id}/points.json.
Input Schema
{
"type": "object",
"properties": {
"customer_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "EasyStore customer id."
}
},
"required": [
"customer_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢easystore_list_customer_groups
List customer groups (for example VIP). Needs read_customers. GET /api/3.0/groups.json.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢easystore_list_pages(page, limit)
List the store's content pages. Needs read_content. GET /api/3.0/pages.json.
Input Schema
{
"type": "object",
"properties": {
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"limit": {
"description": "Results per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢easystore_list_blogs(visibility, page, limit)
List the store's blogs. Needs read_content. GET /api/3.0/blogs.json.
Input Schema
{
"type": "object",
"properties": {
"visibility": {
"description": "Only published or unpublished blogs.",
"type": "string",
"enum": [
"published",
"unpublished"
]
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"limit": {
"description": "Results per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢easystore_list_articles(visibility, page, limit)
List blog articles. Needs read_content. GET /api/3.0/articles.json.
Input Schema
{
"type": "object",
"properties": {
"visibility": {
"description": "Only published or unpublished articles.",
"type": "string",
"enum": [
"published",
"unpublished"
]
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"limit": {
"description": "Results per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴easystore_set_inventory_level(variant_id, location_id, quantity)
WRITE. Set the stock of one variant at one location to an exact number (quantity 0 or more). Omit location_id for the primary location. Overwrites the current quantity; use easystore_adjust_inventory_level for a relative change. Needs write_products. PUT /api/4.0/inventory_levels/set.json.
Input Schema
{
"type": "object",
"properties": {
"variant_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Variant id (see easystore_list_product_variants)."
},
"location_id": {
"description": "Location id (see easystore_list_locations). Default: the primary location.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"quantity": {
"type": "integer",
"minimum": 0,
"maximum": 1000000000,
"description": "The exact available quantity to set."
}
},
"required": [
"variant_id",
"quantity"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴easystore_adjust_inventory_level(variant_id, location_id, adjustment_quantity)
WRITE. Add to or remove from the stock of one variant at one location by a relative amount (positive adds, negative removes; 0 is rejected). Not idempotent: repeating it changes the stock again. Omit location_id for the primary location. Needs write_products. PUT /api/4.0/inventory_levels/adjust.json.
Input Schema
{
"type": "object",
"properties": {
"variant_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Variant id (see easystore_list_product_variants)."
},
"location_id": {
"description": "Location id (see easystore_list_locations). Default: the primary location.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"adjustment_quantity": {
"type": "integer",
"minimum": -1000000000,
"maximum": 1000000000,
"description": "Relative change: 5 adds 5, -5 removes 5."
}
},
"required": [
"variant_id",
"adjustment_quantity"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴easystore_update_variant(product_id, variant_id, price, compare_at_price, cost_price, ...)
WRITE. Change one variant's price, compare-at price, cost price, SKU, barcode or enabled flag. Only the fields you pass change. To change stock use the inventory tools. Needs write_products. PUT /api/3.0/products/{product_id}/variants.json.
Input Schema
{
"type": "object",
"properties": {
"product_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The product the variant belongs to."
},
"variant_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Variant id."
},
"price": {
"description": "Selling price in the store's primary currency.",
"type": "number",
"minimum": 0,
"maximum": 1000000000
},
"compare_at_price": {
"description": "Original price shown struck through.",
"type": "number",
"minimum": 0,
"maximum": 1000000000
},
"cost_price": {
"description": "Cost price.",
"type": "number",
"minimum": 0,
"maximum": 1000000000
},
"sku": {
"description": "SKU.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"barcode": {
"description": "Barcode.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"is_enabled": {
"description": "Whether the variant can be sold.",
"type": "boolean"
}
},
"required": [
"product_id",
"variant_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴easystore_cancel_order(order_id, reason)
WRITE, hard to undo. Cancel an order, with an optional reason. Confirm the order id and number with the user first. Needs write_orders. POST /api/3.0/orders/{id}/cancel.json.
Input Schema
{
"type": "object",
"properties": {
"order_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "EasyStore order id (not the order number)."
},
"reason": {
"description": "Why the order is cancelled, e.g. Damaged item.",
"type": "string",
"minLength": 1,
"maxLength": 500
}
},
"required": [
"order_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴easystore_create_fulfillment(order_id, tracking_company, tracking_number, tracking_url, status, ...)
WRITE. Mark an order (or some of its line items) as shipped, with tracking details. Not idempotent: calling it twice creates two fulfillments. With notify_customer true the customer is emailed. Needs write_fulfillments. POST /api/3.0/orders/{id}/fulfillments.json.
Input Schema
{
"type": "object",
"properties": {
"order_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "EasyStore order id."
},
"tracking_company": {
"description": "Courier name, e.g. DHL.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"tracking_number": {
"description": "Tracking number.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"tracking_url": {
"description": "Tracking page URL.",
"type": "string",
"maxLength": 2000,
"format": "uri"
},
"status": {
"description": "Shipment status.",
"type": "string",
"enum": [
"label_printed",
"label_purchased",
"attempted_delivery",
"available_for_pickup",
"successful_pickup",
"pending_pickup",
"arrived_sorting_hub",
"pending",
"open",
"in_transit",
"out_for_delivery",
"delivered",
"failure",
"cancelled",
"fulfilled"
]
},
"message": {
"description": "Note about this fulfillment.",
"type": "string",
"minLength": 1,
"maxLength": 1000
},
"notify_customer": {
"description": "Email the customer (default false).",
"type": "boolean"
},
"line_items": {
"description": "Only these line items and quantities; omit to fulfill the whole order.",
"minItems": 1,
"maxItems": 200,
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Order line item id."
},
"quantity": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 1000000
}
},
"required": [
"id",
"quantity"
]
}
}
},
"required": [
"order_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡easystore_create_customer(first_name, last_name, email, phone, birthdate, ...)
WRITE. Create a customer. Pass at least one of first_name, last_name, email or phone. Not idempotent. Needs write_customers. POST /api/3.0/customers.json.
Input Schema
{
"type": "object",
"properties": {
"first_name": {
"description": "First name.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"last_name": {
"description": "Last name.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"email": {
"description": "Email (unique per store).",
"type": "string",
"maxLength": 254,
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"phone": {
"description": "Phone number, e.g. +60192233445.",
"type": "string",
"minLength": 3,
"maxLength": 40
},
"birthdate": {
"description": "yyyy-mm-dd.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"gender": {
"description": "Gender.",
"type": "string",
"enum": [
"male",
"female"
]
},
"country_code": {
"description": "Two-letter country code, e.g. MY.",
"type": "string",
"pattern": "^[A-Za-z]{2}$"
},
"code": {
"description": "Your own customer code.",
"type": "string",
"minLength": 1,
"maxLength": 100
},
"groups": {
"description": "Group names to assign, e.g. [\"VIP\"].",
"maxItems": 50,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴easystore_update_customer(customer_id, first_name, last_name, email, phone, ...)
WRITE. Change fields of an existing customer; only the fields you pass change. Needs write_customers. PUT /api/3.0/customers/{id}.json.
Input Schema
{
"type": "object",
"properties": {
"customer_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "EasyStore customer id."
},
"first_name": {
"description": "First name.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"last_name": {
"description": "Last name.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"email": {
"description": "Email (unique per store).",
"type": "string",
"maxLength": 254,
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"phone": {
"description": "Phone number, e.g. +60192233445.",
"type": "string",
"minLength": 3,
"maxLength": 40
},
"birthdate": {
"description": "yyyy-mm-dd.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"gender": {
"description": "Gender.",
"type": "string",
"enum": [
"male",
"female"
]
},
"country_code": {
"description": "Two-letter country code, e.g. MY.",
"type": "string",
"pattern": "^[A-Za-z]{2}$"
},
"code": {
"description": "Your own customer code.",
"type": "string",
"minLength": 1,
"maxLength": 100
},
"groups": {
"description": "Group names to assign, e.g. [\"VIP\"].",
"maxItems": 50,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
}
}
},
"required": [
"customer_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence