OneCart API
OneCart is a global multichannel commerce platform — supporting sellers worldwide, not any single region. The OneCart API lets you manage products, orders, listings, and sales analytics across global marketplaces and storefronts from one place — including Amazon (US, UK, EU and more), Shopify, eBay, Walmart, TikTok Shop, WooCommerce, and Southeast Asian marketplaces like Shopee and Lazada.
Interactive API reference → Connect via MCP OpenAPI spec (JSON) llms.txt
APIs by platform
OneCart is a single, unified REST API for every marketplace and storefront you sell on. Connect a channel once and use the same endpoints — products, listings, orders, inventory, and analytics — across all of them. The per-platform guides below all map to the same OpenAPI spec.
Shopify API
Sync your Shopify catalog and inventory, and pull, print, and fulfill Shopify orders through the OneCart API — while keeping stock consistent across every other channel you sell on.
Amazon API
Manage Amazon listings, push inventory levels, and retrieve and fulfill Amazon orders via the OneCart API, alongside all your other marketplaces from one integration.
eBay API
List and update products on eBay, keep inventory in sync across channels, and pull and fulfill eBay orders through the OneCart API — one integration instead of many.
WooCommerce API
Connect your WooCommerce store to list and update products, sync stock, and pull and fulfill orders via the OneCart API, unified with the rest of your channels.
Etsy API
Manage your Etsy listings and inventory and retrieve and fulfill Etsy orders through the OneCart API, in sync with every other marketplace you sell on.
Shopee API
List and update Shopee products, push inventory, and pull, print, and fulfill Shopee orders via the OneCart API — with stock kept consistent across all channels.
Walmart API
Manage Walmart Marketplace listings and inventory and retrieve and fulfill Walmart orders through the OneCart API, unified with the rest of your storefronts.
TikTok Shop API
Sync your TikTok Shop catalog and inventory and pull, print, and fulfill TikTok Shop orders via the OneCart API, alongside every other channel from one place.
Lazada API
List and update Lazada products, push inventory levels, and pull, print, and fulfill Lazada orders through the OneCart API — consistent with all your other channels.
Qoo10 API
Manage Qoo10 listings and inventory and retrieve and fulfill Qoo10 orders via the OneCart API, in sync with the rest of your marketplaces.
Zalora API
Sync your Zalora catalog and stock and pull and fulfill Zalora orders through the OneCart API, unified with every other channel you sell on.
RedMart API
Manage RedMart listings and inventory and retrieve and fulfill RedMart orders via the OneCart API, alongside your other storefronts.
Magento API
Connect your Magento store to list and update products, sync stock, and pull and fulfill orders through the OneCart API, unified with the rest of your channels.
Temu API
List and update Temu products, keep inventory in sync, and retrieve and fulfill Temu orders via the OneCart API — one integration across every marketplace.
Basics
- Base URL:
https://app.getonecart.com/api/v2 - All responses are JSON. Request parameters can be sent as query strings, form fields, or a JSON body.
Authentication
Every request must include your API key in the Authorization header:
Authorization: YOUR_API_KEY
Create and manage keys in Settings → API Keys in your OneCart dashboard. Each key belongs to one company and only ever sees that company's data. The same key authenticates both API v1 and v2 — the version is just the URL path, not a property of the key.
Access within v2 is controlled one of two ways.
1. Access level (default). Every key is either:
- Full access — read and write.
- Read-only —
GETrequests only. Any write returns403 FORBIDDEN.
2. Granular scopes (optional, v2 only). A key can instead be limited to
specific resources and actions using resource:action scopes. Each request is
checked against the resource in the URL path and the HTTP method — safe methods
(GET, HEAD, OPTIONS) count as read,
everything else as write.
| Scope | Grants |
|---|---|
orders:read | read the orders resource |
orders:write | write orders (does not include read) |
orders:* | read and write orders |
*:read | read every resource |
* | full access — every resource, both actions |
A key can hold several scopes (e.g. orders:read and shops:read).
A request its scopes don't cover returns 403 FORBIDDEN with
details: [{ "field": "scope", "message": "requires <resource>:<action>" }].
Granular scopes apply to v2 only — v1 always uses the full / read-only model above.
A missing or invalid key returns 401 UNAUTHORIZED.
Connect from an AI agent (MCP)
You can connect an AI assistant such as Claude Code, or the Claude web and desktop apps, to OneCart through a single Model Context Protocol (MCP) endpoint. Every endpoint listed below becomes a callable tool, with no per-endpoint wiring.
The MCP server URL is the whole address below, path included. When a client asks for the server URL (for example the Add custom connector screen in the Claude apps), paste it exactly, with no changes:
https://app.getonecart.com/mcp
/mcp. Do not enter just
https://app.getonecart.com or the API base
https://app.getonecart.com/api/v2; those are not MCP
endpoints and the connection will fail.
Connect with OAuth. Point your MCP client at that URL and it runs a standard browser sign-in: you choose the company and the scopes to grant (reads pre-selected, writes off by default), and the client receives a token bound to that company. This is how the Claude web and desktop connectors work. In Claude Code:
claude mcp add --transport http onecart https://app.getonecart.com/mcp
Connect with an API key. For a script, or a client that
does not use OAuth, send an existing API key (Settings → API
Keys) in the Authorization header instead, the same
key you use for REST.
Tools map one to one to the operations in Endpoints
(get_orders, put_variants_bulk_update, and so
on). Authentication, company isolation, scopes, and rate limits are
identical to the REST API, because each tool call runs through the same
v2 stack. Read tools are marked read-only and cancel or delete tools are
marked destructive, so the client can warn before a write.
Rate limits
Requests are limited to 300 per 60 seconds, per API key. Every response carries:
| Header | Meaning |
|---|---|
X-RateLimit-Limit | Requests allowed in the window |
X-RateLimit-Remaining | Requests left in the current window |
X-RateLimit-Reset | Unix time when the window resets |
Over the limit returns 429 RATE_LIMITED with a Retry-After header (seconds to wait).
Response format
Every successful response is wrapped in a consistent envelope:
{
"data": { },
"meta": { },
"links": { },
"errors": [],
"warnings": []
}
data— the resource or list of resources you requested.meta— pagination and context.links— pagination links; present on list endpoints only.errors— always empty ([]) on success.warnings— non-fatal notices, such as deprecations. Usually empty.
Pagination
List endpoints accept page (default 1) and
per_page (default 25, max 100).
meta reports current_page, per_page,
total_items, total_pages, has_next_page,
and has_previous_page. links gives ready-made URLs for
self, first, prev, next, and
last — follow next until it is null.
Choosing fields
Most endpoints support a _fields query parameter so you only fetch what you need:
- Omit it for the resource's default fields.
- Pass a bare list —
?_fields=id,order_no,status— for exactly those fields (idis always included). - Adjust the defaults with
+/-—?_fields=+order_items,-tracking_no.
Unknown field names are ignored. Mixing a bare list with +/- in the same request returns a 400.
Errors
When a request fails, the body is a single error object:
{
"error": {
"code": "VALIDATION_ERROR",
"message": "Validation failed",
"details": [{ "field": "quantity", "message": "must be an integer" }],
"request_id": "b1f2…"
}
}
request_id matches the X-Request-Id response header — include it when contacting support.
| Code | Status | Meaning |
|---|---|---|
UNAUTHORIZED | 401 | Missing or invalid API key |
FORBIDDEN | 403 | Key lacks access (e.g. read-only key on a write) |
NOT_FOUND | 404 | Resource does not exist or isn't yours |
VALIDATION_ERROR | 400 / 422 | Request parameters were invalid |
RATE_LIMITED | 429 | Too many requests — see Rate limits |
Endpoints
Full definitions (parameters, response schemas) are in the OpenAPI spec. Base URL https://app.getonecart.com/api/v2.
Products (variants / SKUs)
- GET /variants — List products
- GET /variants/count — Count products
- POST /variants — Create products
- PUT /variants/{id} — Update stock
- PUT /variants/bulk_update — Update stock in bulk
- POST /variants/force_push — Resync stock to channels
Listings
- GET /listings — List listings
- GET /listings/count — Count listings
- GET /listings/{id} — Get a listing
- PUT /listings/{id} — Update a listing
- GET /listings/{id}/skus — List a listing's SKUs
Orders
- GET /orders — List orders
- GET /orders/{id} — Get an order
- PUT /orders/{id} — Mark an order shipped
- PUT /orders/{id}/cancel — Cancel an order
- PUT /orders/bulk_cancel — Cancel orders in bulk
- GET /orders/cancelled — List cancelled orders
- POST /orders/print_awbs — Print shipping labels
- GET /delivery_orders — List delivery orders
Catalog
- GET /brands — List brands
- GET /brands/{id}/skus — List a brand's SKUs
- GET /buyer_categories — List buyer categories
- GET /buyer_categories/{id}/skus — List SKUs in a category
- POST /bundle_uploads — Create a bundle upload
- GET /bundle_uploads/{id} — Get a bundle upload
Channels & coverage
- GET /shops — List shops (connected channels)
- GET /sku_channels — Look up channels for SKUs
- GET /coverage — Find SKU coverage gaps
- POST /coverage — Coverage gaps for a large SKU list
- GET /shopify_locations — List Shopify locations
- PUT /shopify_locations/{id} — Update location stock
- GET /zapier — Test the connection
Insights & analytics
- GET /insights/brand_sales — Sales summary for a brand
- GET /insights/category_sales — Sales summary for a category
- GET /insights/sku_sales — Sales summary for a SKU
- GET /insights/channels — Channel performance
- GET /insights/bundles — Bundle analysis
- GET /insights/cancellations — Cancellation metrics
- GET /insights/peak_hours — Peak shopping hours
- GET /insights/hidden_winners — Hidden winners
- GET /insights/slow_movers — Slow-moving inventory
- GET /insights/stockout_risks — Products at risk of stocking out
- GET /insights/out_of_stock_sellers — Out-of-stock sellers
- GET /insights/sla_risks — Orders at risk of missing ship-by deadline
- GET /insights/fees_summary — Fee summary
- GET /insights/fees_by_brand — Fees by brand
- GET /insights/fees_by_category — Fees by category
- GET /insights/fees_by_shop — Fees by shop
- GET /insights/fees_by_sku — Fees by SKU
Versioning
This is version 2 of the OneCart API — the current, actively supported version. We add fields without notice, so build clients that ignore unrecognized fields; breaking changes ship as a new version.
API v1 is deprecated and at end of life. It remains available without support until 31 January 2027, after which it will be shut down permanently. New integrations should use v2.
Support
Questions? Email hello@getonecart.com.