CLI and public API
Script ShipX without scraping.
The official ShipX CLI plus an OpenAPI 3.1 REST API. Search live products, read this week’s board, fetch a product by slug. No API key for reads, and errors come back as structured JSON, not HTML.
Ask AI about the API:ChatGPTClaudePerplexityGrok
- Auth for GET
- None
- Contract
- OpenAPI 3.1
- Errors
- RFC 9457
- CLI
- npx
Install
Official CLI
Node 18.3 or newer, zero dependencies. Published on npm as @suhailroushan/shipx; once installed, the command is shipx.
# run without installing npx @suhailroushan/shipx --help npx @suhailroushan/shipx search "ai writer" --json # or install globally; the command is shipx npm install -g @suhailroushan/shipx shipx leaderboard --limit 10
Add --json to any command for the raw API response. Exit codes: 0 success, 1 API or network error, 2 usage error.
Commands
What the CLI can do
Each command is a thin client over GET /api/v1.
leaderboard
This week's ranked launches, or any past week.
shipx leaderboard --week 2026-W40search
Search live products by keyword.
shipx search "ai writer" --jsonproducts
List live products, newest, top or trending.
shipx products --sort top --limit 10product
One product's public detail by slug.
shipx product <slug>maker
A maker's profile and everything they've shipped.
shipx maker <username>categories
Categories with live product counts.
shipx categoriesREST
Public endpoints
Unauthenticated GET under https://shipx.live/api/v1. Unknown paths return problem+json, not HTML.
GET /api/v1Endpoint index: every route, the limits and linksGET /api/v1/productsPaginated live products (sort, category, tag, technology, audience, pricing, platform, page, limit)GET /api/v1/products/{slug}One product's public detailGET /api/v1/weeks/{week}A launch week's ranked board: an ISO week such as 2026-W41, or currentGET /api/v1/search?q=Search products, makers and topics· 30/minGET /api/v1/makers/{username}A maker's public profile and launchesGET /api/v1/categoriesCategories and audiences with product countsGET /api/openapi.jsonThe OpenAPI 3.1 contract
curl "https://shipx.live/api/v1/weeks/current"
Limits
Rate limits
Counted per IP address; IPv6 per /64 network, so rotating addresses doesn’t reset the window.
| Endpoints | Limit |
|---|---|
| Everything except search | 120 requests / 60 s |
| /search | 30 requests / 60 s |
RateLimit-Policy: 120;w=60 RateLimit: limit=120, remaining=119, reset=60 # once exceeded: HTTP 429 Retry-After: 42
Errors
Problem details
Every error is RFC 9457 application/problem+json. The type URI points at the matching entry below.
invalid_request400 Invalid requestDon’t retry as-isnot_found404 Not foundDon’t retry as-israte_limited429 Too many requestsRetryableserver_error500 Server errorRetryable
{
"type": "https://shipx.live/cli#error-not_found",
"title": "Not found",
"status": 404,
"detail": "No public product with that slug.",
"code": "not_found",
"hint": "Check the slug, or find it with GET /api/v1/search?q=.",
"retryable": false
}FAQ
Common questions
Do I need an API key?
No. The API and the CLI are public and read-only. Launching a product, supporting or commenting still needs a signed-in account on the site.
What are the rate limits?
Per IP address: 120 requests every 60 seconds, and 30 every 60 seconds for search. IPv6 clients are counted per /64 network. Every response carries RateLimit and RateLimit-Policy headers; a 429 also sends Retry-After.
Where is the OpenAPI spec?
At /api/openapi.json, as OpenAPI 3.1. Point a code generator or an agent at it. Open the spec
How do errors look?
RFC 9457 problem details as application/problem+json, with type, title, status, detail, code, hint and retryable. Read hint before retrying, and only retry when retryable is true.
Can I use the data in my own app?
Yes, for public launch data. Please link back to the product pages on ShipX when you display it. Private data (follower counts, analytics, emails) is never exposed.
More on the data itself: API & data.