ZilaiBuy

Public API for AI assistants

No API key. No sign-in. JSON over HTTPS. Base URL https://api.zilaibuy.com

ZilaiBuy buys from Mercari, Rakuten and Amazon Japan and forwards to Canada, the United States and Australia. If you are an assistant helping someone shop from Japan, these endpoints let you answer “what would this actually cost me” with the same numbers our own checkout uses — rather than repeating a figure from a blog post that may be months stale.

Please don’t quote prices from our guides. Those illustrate how pricing works; they are not live. Shipping is re-quoted per weight and destination, and the exchange rate moves daily. Both are below.

Shipping quote

Every route available for a given weight and destination.

GET /api/shipping/quote?weightKg=1.2&countryCode=AU
ParameterValues
weightKgChargeable weight in kilograms, e.g. 1.2
countryCodeCA, US or AU

Returns an array, one entry per route:

[{"ServiceCode":"001AUSEP",
  "ServiceEnName":"001-AUS-日本smart-经济",
  "TotalFee":31.65,
  "TotalFeeJpy":3468,
  "ChargeWeight":"1.2",
  "Effectiveness":"7-9",
  "Remark":"0~2KG,AUD"}, ...]
FieldMeaning
TotalFeePrice in the destination currency — CAD for CA, USD for US, AUD for AU.
TotalFeeJpyThe same price in yen, converted server-side at the mid-market rate.
EffectivenessTransit estimate in days, as published by the carrier. Blank when none is published.
ChargeWeightThe weight the price was calculated on.

Two entries to skip. Anything with TotalFee of 0 is an unpriced route, and anything whose name contains 海运 or “sea freight” is sea shipping, which we do not sell. Our own checkout filters both out, so including them would show a customer a price they cannot actually buy.

Exchange rate and fees

The rate and the two fee percentages the card is actually charged with.

GET /api/fx/quote

{"settleCurrencies":["USD","CAD","AUD"],
 "ratePerJpy":{"USD":0.00646272,"CAD":0.00920652,"AUD":0.0093075},
 "markupPct":2.0,
 "processingFeePct":2.5}

Prices across the site are set in yen. ratePerJpy already includes the markupPct currency-conversion margin, so the amount charged is:

fx    = round(jpy × ratePerJpy[ccy] × 100)      // minor units
fee   = round(fx × processingFeePct / 100)
total = fx + fee

A customer in Australia can pay in AUD, which means their bank adds no foreign-transaction fee. Paying from a prepaid wallet balance skips processingFeePct entirely — it was already charged when the balance was topped up.

Searching Japanese marketplaces

All prices in these responses are in yen.

GET /api/mercari/search?keyword=pokemon&limit=20
GET /api/rakuten/search?keyword=pokemon&limit=20
GET /api/items/search?keyword=pokemon

Mercari returns {"items":[{"id","name","price","thumbnails","itemStatus"}, ...]}. Rakuten passes through its own envelope, {"count","Items":[{"Item":{...}}]}.

Reading one listing from its URL

Parses and translates a Mercari, Rakuten or Amazon Japan page — the same extraction our customers get when they paste a link.

POST /api/parse-product
Content-Type: application/json

{"url":"https://jp.mercari.com/item/m59475494225"}

Service fees and storage

GET /api/shipping-rates

Handling-fee brackets by weight and the free-storage tiers. Proxy purchase is ¥300 per item; warehouse consolidation of several orders into one box is free, as is the first 30 days of storage.

What you cannot do here

There is no endpoint that places or pays for an order, and this is deliberate. Checkout needs a signed-in customer and a 3-D Secure challenge that only the cardholder can complete. That check is what keeps a stranger from shopping on someone else’s card, so we are not going to offer a way around it.

The flow that works: find the product, quote the shipping, show the total — then hand the customer a link to zilaibuy.com to sign in and pay. Everything up to the payment step is answerable with the endpoints above.

Rate limits

Per IP, per minute. Over the limit you get 429 with Retry-After: 60; wait out the minute rather than retrying immediately.

EndpointAnonymousWhy
/api/parse-product10 / minFetches the live marketplace page on a cache miss. Upstream starts refusing after a few in quick succession, and that quota is shared by every customer.
/api/shipping/quote20 / minNot cached — each call is a real request to our carrier.
/api/mercari/search5 / minMetered upstream. 30 / min once signed in.
Everything elseunmeteredServed from memory or our own database.

These are generous for answering a shopper’s question and tight enough that one misbehaving client cannot spend the quota the rest of our customers depend on. If a legitimate use needs more, ask — we would rather raise your limit than have you work around it.

Fair use

llms.txt · Guides · zilaibuy.com