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 → Fulfilling orders 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 |
Fulfilling orders
The API does what OneCart's Order Processing does, on every channel the app supports, with the same marketplace calls. Every endpoint is also an MCP tool. In the reference these are the sections Fulfilment 1, Fulfilment 2, Ship with your logistics provider and Fulfilment 3.
| Step | What you do | Endpoints |
|---|---|---|
| 1. Orders to ship | Find orders waiting to ship (the app's queue, with its Check/Print stages and filters); mark them picked | GET /delivery_orders, PUT /orders/{id}/picking |
| 2. Arrange shipment | Choose how the parcel leaves you; a tracking number is assigned | GET /orders/{id}/shipping_options → POST /orders/{id}/arrange_shipment (or POST /orders/arrange_shipment for many), or POST /shipments with your SPX/SingPost account |
| 3. Print | Labels and documents, then hand over | POST /orders/print_awbs, POST /orders/documents |
Always arrange shipment before printing. Orders that can't have a label yet come back in skipped_orders with a reason, and nothing is sent to the marketplace.
Arrange shipment: methods per marketplace
| Platform | method (inputs) |
|---|---|
| Shopee | pickup (address_id, pickup_time_id from pickup.addresses[].time_slots[]), dropoff, non_integrated (your tracking_number), or per package with packages[]. Split first with POST /orders/{id}/split. |
| Lazada | pack, ready_to_ship (packs first if needed) |
| TikTok | ready_to_ship (TikTok's courier), own_tracking (you deliver: tracking_number, optional shipping_provider_id) |
| Zalora | pack, then ready_to_ship |
| Qoo10 | confirm (pickup_date, today to +7 days) |
| Temu | buy_shipping (service + parcel weight and dimensions; returns label and tracking), own_tracking |
| Shopify, WooCommerce | fulfil (Shopify: optional tracking), or book SPX/SingPost with POST /shipments and tracking is written back automatically |
shipping_options tells you which methods are available right now and what each needs. A stale slot, an unavailable method or an order that's already arranged is refused before anything is sent. PUT /orders/{id} with mark_as_shipped=true still lets OneCart choose for you.
Statuses per platform, documents, bulk, splitting and a typical integration are covered in the full guide: Fulfilling orders.
Endpoints
Full definitions (parameters, response schemas) are in the OpenAPI spec. Base URL https://app.getonecart.com/api/v2.
Products
Manage product variants (SKUs) and their stock levels.
- 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
Your product listings on each connected sales channel.
- GET /listings — List listings
- GET /listings/count — Count listings
- GET /listings/{id} — Get a listing
- GET /listings/{id}/skus — List a listing's SKUs
- GET /listings/{id}/quality — Check a listing against the marketplace listing rules
- PUT /listings/{id} — Update a listing
- POST /listings/{id}/refresh — Refresh a listing from its platform
Channel prices
The price of each SKU on each channel (a channel link), and updating it.
- GET /links — List channel links (per-channel prices)
- GET /links/{id} — Get a channel link
- PUT /links/{id} — Update the price on one channel
- PUT /links/bulk_update — Update channel prices in bulk
Orders
Read orders from every connected channel. To ship them, follow Fulfilment 1, 2 and 3 below.
- GET /orders — List orders
- GET /orders/{id} — Get an order
Fulfilment 1: Orders to ship
The Order Processing queue: unshipped orders with the items to pick and pack, and marking them picked.
- GET /delivery_orders — List orders waiting to ship
- PUT /orders/{id}/picking — Mark an order picked or not picked
- PUT /orders/picking — Mark orders picked or not picked
Fulfilment 2: Arrange shipment
Tell the marketplace how the parcel leaves you, with the same options as Order Processing: Shopee pickup time or dropoff (per order or per package, and splitting), Lazada and Zalora pack and ready to ship, TikTok ready to ship or your own tracking, Qoo10 confirm with a pickup date, Temu buy shipping, Shopify and WooCommerce fulfil. Read the options, arrange one order or up to 50 at once, or let OneCart choose automatically. The marketplace then assigns a tracking number.
- GET /orders/{id}/shipping_options — Get shipping options for an order
- GET /orders/shipping_options — Get shipping options for many orders
- POST /orders/{id}/arrange_shipment — Arrange shipment for an order
- POST /orders/arrange_shipment — Arrange shipment for many orders
- GET /orders/arrange_shipment/{id} — Get a bulk arrange-shipment result
- POST /orders/{id}/split — Split a Shopee order into packages
- PUT /orders/{id} — Arrange shipment automatically (mark_as_shipped)
Ship with your logistics provider
Book Shopify, WooCommerce and Magento orders with your own SPX or SingPost account: pickup slots, parcels, tracking numbers, labels and cancellation.
- GET /logistics_providers — List your logistics providers
- GET /logistics_providers/{id}/pickup_timings — Get pickup dates and time slots
- GET /orders/{id}/shippable_items — Get the items left to ship
- POST /shipments — Book shipments with your logistics provider
- GET /shipments — List shipments
- GET /shipments/{id} — Get a shipment
- GET /shipments/{id}/label — Get the shipping label
- POST /shipments/{id}/cancel — Cancel a shipment
Fulfilment 3: Print labels & documents
Print shipping labels once the order has a tracking number, plus the other documents Order Processing prints: invoices, carrier manifests, receipts, packing slips, picking lists. Orders that cannot have a document yet are listed in skipped_orders with the reason, and nothing is sent to the marketplace for them.
- POST /orders/print_awbs — Print shipping labels
- POST /orders/documents — Print invoices, receipts, picking lists and other documents
- GET /orders/documents/{job_id} — Get a background document
Own delivery (seller-own-fleet)
For orders you deliver yourself or with your own courier: ready to ship, tracking numbers and delivery, in bulk.
- POST /orders/bulk_mark_shipped — Update own-delivery orders in bulk (ready to ship, tracking, delivered)
- GET /orders/bulk_mark_shipped — List own-delivery bulk updates
- GET /orders/bulk_mark_shipped/{id} — Get an own-delivery bulk update
Cancellations
Cancel orders and list cancelled ones.
- PUT /orders/{id}/cancel — Cancel an order
- PUT /orders/bulk_cancel — Cancel orders in bulk
- GET /orders/cancelled — List cancelled orders
Brands
The brands in your catalog.
- GET /brands — List brands
- GET /brands/{id}/skus — List a brand's SKUs
Categories
Buyer categories and the SKUs assigned to them.
- GET /buyer_categories — List buyer categories
- GET /buyer_categories/{id}/skus — List SKUs in a category
Shops
The sales channels connected to your account.
- GET /shops — List shops
- GET /shops/{id} — Get a shop
- POST /shops/{id}/import_listings — Import a shop's listings
Locations
Stock levels at your Shopify store locations.
- GET /shopify_locations — List Shopify locations
- PUT /shopify_locations/{id} — Update location stock
Coverage
Which SKUs are listed on which channels.
- GET /sku_channels — Look up channels for SKUs
- GET /coverage — Find SKU coverage gaps
- POST /coverage — Find SKU coverage gaps for a large SKU list
Account Health
Account setup and data-quality completeness for the AI agent.
- GET /account_health — Account setup & data-quality health check
Bundle Uploads
Bulk-create product bundles from a list.
- POST /bundle_uploads — Create a bundle upload
- GET /bundle_uploads/{id} — Get a bundle upload
Insights
Sales, inventory, and performance analytics.
- GET /insights/channels — Channel performance
- GET /insights/sku_sales — Sales summary for a SKU
- GET /insights/brand_sales — Sales summary for a brand
- GET /insights/category_sales — Sales summary for a category
- GET /insights/stockout_risks — Products at risk of stocking out
- GET /insights/out_of_stock_sellers — Out-of-stock sellers
- GET /insights/slow_movers — Slow-moving inventory
- GET /insights/hidden_winners — Hidden winners
- GET /insights/bundles — Bundle analysis
- GET /insights/peak_hours — Peak shopping hours
- GET /insights/sla_risks — Orders at risk of missing their ship-by deadline
- GET /insights/cancellations — Cancellation metrics
Reviews
Marketplace reviews inbox: read reviews and KPIs, and post seller replies.
- GET /reviews — List reviews
- GET /reviews/kpis — Review KPIs
- GET /reviews/{id} — Get a review
- POST /reviews/{id}/reply — Reply to a review
Backfills
Get an account report-ready: create brands and categories from every connected channel, and link past order lines to products. Background jobs, safe to repeat.
- POST /backfills/all — Run every backfill in order (brands → categories → order history)
- POST /backfills/brands — Create brands from every connected channel and tag SKUs
- POST /backfills/buyer_categories — Create buyer categories from every connected channel and tag SKUs
- POST /backfills/link_order_history — Link order history to products
Cross-posting
Copy a product listing onto your other sales channels in two steps: prepare an AI-built draft, then publish it live.
- POST /cross_posts — Prepare a cross-post (step 1 of 2)
- GET /cross_posts/{id} — Get a cross-post batch
- GET /cross_posts/{id}/draft — Get the prepared draft
- POST /cross_posts/{id}/publish — Publish a prepared cross-post (step 2 of 2)
AI
AI content tools: enhance a listing title or description. Metered against your AI credits.
- POST /ai/enhance — Enhance a title or description
Fees
Marketplace fee breakdowns by brand, category, shop, and SKU.
- GET /insights/fees_summary — Fee summary
- GET /insights/fees_by_shop — Fees by shop
- GET /insights/fees_by_brand — Fees by brand
- GET /insights/fees_by_category — Fees by category
- GET /insights/fees_by_sku — Fees by SKU
Utilities
Connection and credential checks.
- GET /zapier — Test the connection
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.