Arceto Developer Get API keys

Arceto Marketplace API

Programmatic access to your Arceto seller account. Sync inventory, manage prices, fetch orders and submit shipments — all from your existing OMS or ERP.

Introduction

The Arceto Marketplace API is a JSON-over-HTTPS interface scoped to a single seller account. Every request is authenticated against your Client ID / Client Secret pair, and authorized via a short-lived bearer token. All endpoints return application/json.

Base URL:

https://www.arceto.com/api

Quick start

  1. Generate a Client ID and Client Secret in Seller Central → Settings → API Keys.
  2. Exchange them for an access token via POST /api/token.php.
  3. Send your token in the AccessToken header to any other endpoint.

Authentication

Every API call (other than token.php) requires three request headers:

HeaderRequiredDescription
SellerIDYESYour numeric seller ID (vendor ID).
AuthorizationYESBasic + base64(clientId:clientSecret).
AccessTokenYESThe token returned by POST /api/token.php.
Content-TypeYESapplication/json for JSON bodies, or application/x-www-form-urlencoded for legacy form bodies.
POST /api/token.php

Exchange Basic credentials for an access token. Tokens are tied to a single seller and rotate on every request — store the latest one and re-issue when your client gets UNAUTHORIZED.

curl -X POST https://www.arceto.com/api/token.php \
  -H "SellerID: 12345" \
  -H "Authorization: Basic $(echo -n 'YOUR_CLIENT_ID:YOUR_CLIENT_SECRET' | base64)" \
  -H "Content-Type: application/x-www-form-urlencoded"

Response

{
  "access_token": "xWlZz*zEsi3HWg9t3Rz1u5CelAMGvPf7GE85qLWVAhrBRB&...",
  "token_type": "Bearer",
  "expires_in": 900
}
Heads up: Each call to token.php rotates your active token — older tokens stop working immediately. Cache the latest token and only re-issue when you hit a 401.

Errors

All errors are returned as JSON with the same shape:

{
  "status": "Error",
  "error_reason": "INVALID_REQUEST_PARAM",
  "error_description": "SellerID is missing or invalid."
}
error_reasonWhen it happens
METHOD_NOT_ALLOWEDWrong HTTP verb (e.g. GET on a write endpoint).
INVALID_REQUEST_HEADERMissing or wrong Content-Type.
INVALID_REQUEST_PARAMRequired parameter missing or malformed.
UNAUTHORIZEDBad Client ID / Client Secret pair.
CONTENT_NOT_FOUNDResource doesn't exist or isn't owned by this seller.

Bulk endpoints (price, qty, shipping) return per-item results — you'll get HTTP 200 with a mixed summary + items array, not a top-level error.

Condition IDs

Several endpoints take a conditionId field. Each (BSIN, conditionId) pair on your account is a distinct row — the same product in New and Open Box conditions are listed separately.

conditionIdDisplay name
1New
2Open Box
3Refurbished
4Seller Refurbished
5Used

List products v1

GET /api/products.php

Return your seller-scoped product feed. Supports search, filtering and pagination. Use this to bootstrap your local mirror of BSINs, then call /price and /qty to push updates.

Query parameters

ParamTypeDescription
bsinstringFilter by exact Arceto BSIN.
itemIdintFilter by Arceto numeric item id.
upcstringFilter by GTIN / UPC.
conditionIdintRestrict to one condition (1–5, see above).
qstringSubstring match on title or manufacturer part #.
changedSincedatetimeOnly return rows updated after YYYY-MM-DD HH:MM:SS (UTC).
pageint1-indexed page number. Default 1.
limitintItems per page. Default 50, max 200.
curl "https://www.arceto.com/api/products.php?changedSince=2026-04-26+00:00:00&limit=100" \
  -H "SellerID: 12345" \
  -H "Authorization: Basic $BASIC" \
  -H "AccessToken: $TOKEN" \
  -H "Content-Type: application/x-www-form-urlencoded"

Response

{
  "meta": { "page": 1, "limit": 50, "total": 1, "pages": 1 },
  "products": [
    {
      "bsin": "ZUGKSHHKHO",
      "itemId": 238724478,
      "title": "YAMAHA YVC-330 USB MICROPHONE & SPEAKER SYSTEM",
      "mfg": "Yamaha",
      "mfgPart": "10-YVC330",
      "productId": "889025128698",
      "productIdType": "UPC",
      "conditionId": 1,
      "condition": "New",
      "cost": 367.72,
      "mapEnabled": true,
      "mapPrice": 410.29,
      "qty": 2,
      "markup": 9,
      "discount": 0,
      "imageUrl": "https://img.arceto.com/product_images/2026/04/4/08/ZUGKSHHKHO-0.webp",
      "active": true,
      "lastUpdated": "2026-04-26 23:24:44"
    }
  ]
}

Update price v1

POST /api/price.php

Bulk-update cost (your selling price in USD) and optional mapPrice (Minimum Advertised Price floor) for one or more (BSIN, conditionId) pairs you own. Up to 500 items per request.

Request body

Send either raw JSON with Content-Type: application/json, or form-encoded with Data=<json-string> and Content-Type: application/x-www-form-urlencoded.

FieldTypeDescription
items[].bsinstring · requiredArceto BSIN.
items[].conditionIdint · required1–5 (see Condition IDs).
items[].costnumber · requiredSelling price in USD. Must be ≥ 0.
items[].mapPricenumber · optionalMAP floor. Set to 0 to disable MAP.
curl -X POST https://www.arceto.com/api/price.php \
  -H "SellerID: 12345" \
  -H "Authorization: Basic $BASIC" \
  -H "AccessToken: $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "items": [
      {"bsin": "ZUGKSHHKHO", "conditionId": 1, "cost": 367.72, "mapPrice": 410.29},
      {"bsin": "ZYNTWY7P9R", "conditionId": 1, "cost": 27.73}
    ]
  }'

Response

{
  "summary": { "accepted": 2, "rejected": 0, "total": 2 },
  "items": [
    { "bsin": "ZUGKSHHKHO", "conditionId": 1, "status": "Success", "description": "Price updated.", "cost": 367.72, "mapPrice": 410.29 },
    { "bsin": "ZYNTWY7P9R", "conditionId": 1, "status": "Success", "description": "Price updated.", "cost": 27.73,  "mapPrice": null  }
  ]
}
Per-item failures don't fail the batch — inspect summary.rejected and the per-row status field. Common reasons: BSIN doesn't belong to your seller account, missing conditionId, or negative cost.

Update quantity v1

POST /api/qty.php

Bulk-update on-hand quantity for (BSIN, conditionId) pairs. Same shape, same 500-item cap as /price. Set qty: 0 to deactivate a listing without retiring it.

Request body

FieldTypeDescription
items[].bsinstring · requiredArceto BSIN.
items[].conditionIdint · required1–5.
items[].qtyint · requiredOn-hand units, ≥ 0.
curl -X POST https://www.arceto.com/api/qty.php \
  -H "SellerID: 12345" \
  -H "Authorization: Basic $BASIC" \
  -H "AccessToken: $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "items": [
      {"bsin": "ZUGKSHHKHO", "conditionId": 1, "qty": 5},
      {"bsin": "ZYNTWY7P9R", "conditionId": 1, "qty": 0}
    ]
  }'

Response

{
  "summary": { "accepted": 2, "rejected": 0, "total": 2 },
  "items": [
    { "bsin": "ZUGKSHHKHO", "conditionId": 1, "status": "Success", "description": "Quantity updated.", "qty": 5 },
    { "bsin": "ZYNTWY7P9R", "conditionId": 1, "status": "Success", "description": "Quantity updated.", "qty": 0 }
  ]
}

List orders

GET /api/orders.php?createdAfter=YYYY-MM-DD+HH:MM:SS

Return up to 20 unshipped orders created after the given timestamp. Each order includes its lines, shipping/billing address and totals.

Query parameters

ParamTypeDescription
createdAfterdatetime · requiredSQL datetime, e.g. 2026-04-26 00:00:00.
curl "https://www.arceto.com/api/orders.php?createdAfter=2026-04-26+00:00:00" \
  -H "SellerID: 12345" \
  -H "Authorization: Basic $BASIC" \
  -H "AccessToken: $TOKEN" \
  -H "Content-Type: application/x-www-form-urlencoded"

Get a single order

GET /api/getOrder.php?orderId=<ORDER_ID>

Fetch one order by its orderId (the value returned by /orders). Same response shape as a single entry in the orders list.

Submit shipment

POST /api/shipping.php

Mark order lines as shipped and submit carrier + tracking. Carriers accepted include UPS, USPS, FedEx, DHL, OnTrac, Lasership, plus most LTL freight providers.

Request body

FieldTypeDescription
orderShipment.orderIdstring · requiredThe orderId from /orders.
orderLines.orderLine[].item.idint · requiredThe line's item id.
orderLines.orderLine[].item.qtyint · requiredQuantity shipped.
orderLines.orderLine[].item.statusstring · requiredSet to "1" for shipped.
orderLines.orderLine[].item.carrierstring · requirede.g. UPS, FedEx, USPS.
orderLines.orderLine[].item.servicestringService level, e.g. Ground.
orderLines.orderLine[].item.trackingNumberstring · requiredCarrier tracking number.
orderLines.orderLine[].item.shipDatedate · requiredYYYY-MM-DD.
DATA='{"orderShipment":{"orderId":"a1b2c3-91234","orderLines":{"orderLine":[
  {"item":{"id":12345,"qty":1,"status":"1","carrier":"UPS","service":"Ground","trackingNumber":"1Z999AA10123456784","shipDate":"2026-04-26"}}
]}}}'
curl -X POST https://www.arceto.com/api/shipping.php \
  -H "SellerID: 12345" \
  -H "Authorization: Basic $BASIC" \
  -H "AccessToken: $TOKEN" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  --data-urlencode "Data=$DATA"

Changelog

DateChange
2026-04-26Added /products, /price, /qty. Modernized the developer portal.
2024-12-07Initial launch: /token, /orders, /getOrder, /shipping.

Support

Hit a snag? Email developer@arceto.com with your SellerID, the request URL and the response body. We typically respond within one business day.

For account / payout / catalog questions, head to Seller Central instead.