Muvexa API documentation

Authorize a store, test requests in the online console, or call the same platform endpoint from your backend. Free includes 20 calls per platform per day.

Who this documentation is for

These docs are written for technical teams integrating commerce systems through Muvexa API.

SaaS, ERP, OMS, WMS and internal engineering teams that need marketplace API access.
Agencies and integrators managing API access for multiple authorized stores.
Developers who want to test first in the browser, then integrate through a server-to-server API.

Quickstart

Authorize a store, test requests in the online console, or call the same platform endpoint from your backend. Free includes 20 calls per platform per day.

1

Register and authorize a store

Create a Muvexa account, open the console, and generate a store authorization link. After authorization, Muvexa issues a store-scoped credential pair: an API Key and an API Secret. Both live on the store management page, masked by default — click the eye icon to reveal or copy.

2

Test online in the API Console

For testing, use the online API Console to send marketplace requests and inspect status, latency and response metadata.

http
POST https://openapi.muvexa.co/amazon/execute
Content-Type: application/json
X-Api-Key: <your-api-key>
X-Timestamp: 1723795200000
X-Nonce: 7b1f2d0c-5b52-4c74-a615-0d7e3cce8e9c
X-Signature: <hmac-sha256-hex>

{
  "method": "GET",
  "path": "/orders/v0/orders",
  "queryParams": {
    "MarketplaceIds": "ATVPDKIKX0DER",
    "CreatedAfter": "2026-08-01T00:00:00Z"
  }
}
3

Connect your backend

Use the store API Key from your backend to call the platform endpoint. This is available on Free and Pro; the plan determines the call quota.

Platform endpoints

Each marketplace has one stable Muvexa endpoint. The request contract stays the same across platforms.

http
Muvexa API
POST https://openapi.muvexa.co/amazon/execute

Connected commerce platforms
Managed by Muvexa API
Use the Muvexa API endpoint with the method, path, queryParams and body required by your connected commerce system.
Successful responses are passed through byte for byte, with the marketplace's original status code. Muvexa adds no wrapper of its own.
A store API Key is bound to one platform, seller and region. Calling the wrong platform endpoint is rejected; Amazon parameters must follow its documentation.

Request signature

Every server-to-server request must be signed with the API Secret shown in the console. X-Api-Key is sent in plaintext; API Secret is never sent.

X-Api-Key identifies the store authorization and token mapping.
X-Timestamp is the current Unix timestamp in milliseconds. Requests outside the allowed time window are rejected.
X-Nonce must be unique within the nonce window to prevent replay.
X-Signature is HMAC-SHA256 hex of the canonical string, using API Secret as the key.

Canonical string

Join the six parts with a single newline, in this exact order. Every hex output is lowercase.

text
HTTP_METHOD          + "\n" +   // POST
REQUEST_PATH         + "\n" +   // /amazon/execute  (路径,不含域名与查询串)
QUERY_STRING         + "\n" +   // 网关侧查询串,通常为空行
SHA256_HEX(raw_body) + "\n" +   // 原始请求体字节的 SHA-256,小写十六进制
X_TIMESTAMP          + "\n" +   // 毫秒级 Unix 时间戳
X_NONCE                          // 本次请求唯一的随机串

X-Signature = HEX(HMAC_SHA256(stringToSign, apiSecret))

Request headers

Send all four headers on every request. API Secret is used only to compute the signature locally and never leaves your server.

http
POST https://openapi.muvexa.co/amazon/execute
Content-Type: application/json
X-Api-Key: <your-api-key>
X-Timestamp: 1723795200000
X-Nonce: 7b1f2d0c-5b52-4c74-a615-0d7e3cce8e9c
X-Signature: <hmac-sha256-hex>

Common mistakes

Nearly every INVALID_SIGNATURE report traces back to one of these four.

Serializing the body twice. The signature covers the exact bytes you send, so serialize once, then sign and send that same buffer. A different key order or one extra space breaks it.
Signing the full URL. REQUEST_PATH is the path only, without scheme, host or query string.
Reusing a timestamp or nonce on retry. Generate both fresh for every request, including retries, or you get DUPLICATE_NONCE.
A skewed server clock. X-Timestamp is in milliseconds and must fall inside the allowed window, so keep NTP running.

API integration format

API integration is available on Free and Pro. Send X-Api-Key and signature headers, then send the target marketplace request to its platform endpoint.

method: HTTP method of the original marketplace endpoint, such as GET, POST, PUT or DELETE.
path: original platform API path, for example /orders/v0/orders.
queryParams: parameters appended after ? in the target URL. Put only fields that the platform documents as URL query parameters here. Values are treated as already percent-encoded, so encode anything containing a space, =, &, % or + yourself.
body: JSON request body for POST/PUT endpoints, using the platform's documented shape. Put arrays and nested objects here. Omit it when there is no request body. queryParams and body are not interchangeable.

Request body

Describe the commerce API call you want to make. queryParams become URL parameters, while body is sent as the JSON request body. Fill both according to the connected platform documentation; Muvexa does not inject or rewrite business fields.

json
{
  "method": "GET",
  "path": "/orders/v0/orders",
  "queryParams": {
    "MarketplaceIds": "ATVPDKIKX0DER",
    "CreatedAfter": "2026-08-01T00:00:00Z"
  }
}

POST request example

Endpoints such as report creation require reportType and marketplaceIds in body. Do not move them into queryParams.

json
{
  "method": "POST",
  "path": "/reports/2021-06-30/reports",
  "body": {
    "reportType": "GET_MERCHANT_LISTINGS_ALL_DATA",
    "marketplaceIds": ["ATVPDKIKX0DER"]
  }
}

Successful response: straight passthrough

What you get back is the connected platform's own response body with its original status code. Muvexa keeps the response contract transparent.

json
{
  "payload": {
    "Orders": [
      {
        "OrderId": "902-0000000-0000000",
        "OrderStatus": "Shipped",
        "PurchaseDate": "2026-08-14T09:12:33Z",
        "OrderTotal": { "CurrencyCode": "USD", "Amount": "42.50" }
      }
    ],
    "NextToken": "MRjLDgAAAAA..."
  }
}

Gateway errors

Only rejections raised by Muvexa itself use this envelope: invalid parameters, invalid key or signature, and exhausted quota. Marketplace errors are passed through untouched, so the body is the marketplace's own error payload.

json
{
  "code": 429,
  "msg": "当日调用额度已用尽",
  "data": null
}

Code samples

The same signed request in Python, Java, TypeScript, Go and cURL. Each sample is self-contained and uses only the standard library.

import hashlib, hmac, json, os, time, uuid
from urllib.parse import urlsplit
import requests

ENDPOINT = "https://openapi.muvexa.co/amazon/execute"
API_KEY = os.environ["MUVEXA_API_KEY"]
API_SECRET = os.environ["MUVEXA_API_SECRET"]

# 只序列化一次:下面签的和发的是同一串字节
payload = {
    "method": "GET",
    "path": "/orders/v0/orders",
    "queryParams": {"MarketplaceIds": "ATVPDKIKX0DER", "CreatedAfter": "2026-08-01T00:00:00Z"},
}
body = json.dumps(payload, separators=(",", ":")).encode("utf-8")

timestamp = str(int(time.time() * 1000))
nonce = str(uuid.uuid4())
string_to_sign = "\n".join([
    "POST",
    urlsplit(ENDPOINT).path,
    "",                                    # 查询串为空
    hashlib.sha256(body).hexdigest(),
    timestamp,
    nonce,
])
signature = hmac.new(
    API_SECRET.encode("utf-8"), string_to_sign.encode("utf-8"), hashlib.sha256
).hexdigest()

res = requests.post(
    ENDPOINT,
    headers={
        "Content-Type": "application/json",
        "X-Api-Key": API_KEY,
        "X-Timestamp": timestamp,
        "X-Nonce": nonce,
        "X-Signature": signature,
    },
    data=body,          # 传 data=body,不要用 json=payload(会重新序列化)
    timeout=60,
)
print(res.status_code, res.text)

There is no Muvexa SDK yet, so these samples call the endpoint over plain HTTP. Read the API Key and API Secret from environment variables or your secret manager, never from source control.

Signature error codes

A 401 response carries a code field that names the exact cause. Other status codes are passed through from the marketplace unchanged.

CodeMeaning
INVALID_API_KEYThe API Key does not exist, has been revoked, or has no API Secret configured.
MISSING_SIGNATUREOne of X-Timestamp, X-Nonce or X-Signature is missing or blank.
INVALID_TIMESTAMPX-Timestamp is not a number or falls outside the allowed time window. Check your server clock first.
DUPLICATE_NONCEThis X-Nonce was already used with the same API Key inside the nonce window. Generate a new one per request.
INVALID_SIGNATUREThe signature does not match. Compare your canonical string against the reference above, line by line.

Privacy & Data

This platform does not collect, store or expose buyer personally identifiable information (PII).

Call history records metadata only (method, path, status code, latency) — never request or response bodies.
Buyer-data restricted endpoints are outside the documented public proxy surface.
Store refresh tokens are encrypted at rest; the backend keeps only authorization mappings and call metrics — no PII.