Developers

Build with the Macfax API.

Everything an agent or app needs to help someone buy or sell a used Mac: serial lookup, asking-price statistics per exact configuration, quality-gated live listings with deep links, single-listing trust checks, verified reports, and standing alerts. Free, JSON, no account. Anonymous calls work; a free key raises the limits.

Machine-readable contract: /api/v1/openapi.json · agent index: /llms.txt

Quickstart

# What's a used 14" MacBook Pro M3 Pro going for?
curl 'https://macfax.com/api/v1/price-stats?config=macbook-pro-14-m3pro-2023'

# Live listings under $1,500, cheapest first
curl 'https://macfax.com/api/v1/listings?config=macbook-pro-14-m3pro-2023&max_price_usd=1500&sort=price_asc'

# Is this eBay listing trustworthy?
curl 'https://macfax.com/api/v1/check-listing?url=https://www.ebay.com/itm/1234567890'

# 10x the limits, one request, no email
curl -X POST 'https://macfax.com/api/v1/keys'

Every response is { data, meta }. The meta block carries as_of, attribution, and a docs link. Send a key as Authorization: Bearer, X-Api-Key, or ?api_key=.

The endpoints

EndpointWhat it answers
GET /api/v1/lookup?serial=…Serial number to model, config and year. Lookup identifies; a report proves.
GET /api/v1/price-stats?config=…Median, p25 and p75 asking price for a configuration, with sample size, per-channel medians and net-to-seller after fees.
GET /api/v1/listings?config=…Live listings across eBay, Craigslist, OfferUp, Swappa, Facebook and Reddit, scam/junk/stale-filtered, each with a deep link to the source.
GET /api/v1/check-listing?url=…One listing's trust picture: known, still live, flags, ask vs the typical band, verified report attached.
GET /api/v1/reports/{id}A verified Macfax report as JSON. Also served at /r/{id}.json.
GET /api/v1/configs/{config}A config page as data: band, inventory, freshest listings, demand signal. Also served at /shop/{config}.json.
POST /api/v1/alertsA standing watch: daily email when new matching listings appear. Human-confirmed before anything sends.
POST /api/v1/keysMint a free API key in one request. No email, no account; limits rise about 10x.

Rate limits

Published so nobody has to probe for them. Anonymous limits are per IP; a free key multiplies them. Over-limit calls get an honest 429 with Retry-After and X-RateLimit-* headers, plus a shared per-endpoint daily breaker so a runaway integration degrades one tool for a day rather than everything.

ToolAnonymousWith free keyShared daily cap
lookup10/min · 200/day100/min · 2000/day2,000/day
price-stats30/min · 1000/day300/min · 10000/day50,000/day
listings20/min · 500/day200/min · 5000/day20,000/day
check-listing20/min · 500/day200/min · 5000/day20,000/day
reports30/min · 1000/day300/min · 10000/day50,000/day
configs20/min · 500/day200/min · 5000/day20,000/day
alerts5/min · 20/day10/min · 40/day500/day
keys2/min · 5/day2/min · 5/day200/day

Need more for an operational use, or interested in market history? Email support@macfax.com.

The rules

  • Asking, not sold. Every price Macfax serves is an asking price from a live listing. The API says so in-band (price_basis: "asking"); keep the distinction when you relay numbers.
  • Cite and deep-link. Attribute results to Macfax with the html_url in the payload, and keep each listing's deep link to the source marketplace. The transaction belongs where the listing lives; Macfax is the trust and routing layer.
  • Alerts need consent. Create an alert only for a user who asked for that alert on that email. The first alert for a new email activates only when its owner clicks the confirmation link; nothing sends before that, and every alert email carries manage and unsubscribe links. Per-email creation is capped at 5/day.
  • Tasks, not dumps. There is no bulk export, no exhaustive pagination, and no raw-row feed at any tier. Result and page-depth caps are deliberate; if you need the whole market, you need a different conversation (see above).

Machine surfaces

  • /api/v1/openapi.json · the full contract, stable URL.
  • /shop/{config}.json · every config page has a JSON twin.
  • /r/{id}.json · every report has a JSON twin.
  • /llms.txt · the curated index of everything above.

An MCP server exposing these same tools is planned; the API is already shaped for it. Questions, higher limits, or something you wish existed: support@macfax.com.