owsjh APIowsjh.cn ↗
Retrieve owsjh.cn shop listings for Overwatch/Battle.net phone keys, game account keys, and ChatGPT verification numbers with prices, stock, and availability in CNY.
What is the owsjh API?
The owsjh.cn API exposes 2 endpoints covering the full product catalog of the owsjh.cn shop, which sells phone-number verification keys and game account keys for services including Overwatch, Battle.net, and ChatGPT/OpenAI across multiple countries. The list_products endpoint returns every product row in one call, including CNY price, availability flag, stock count, service category, and country code. A second endpoint, list_page_images, enumerates every image reference on the shop or home page.
curl -X GET 'https://api.parse.bot/scraper/841de058-9c4e-4b92-b373-4d3e561ead66/list_products?service=dr&product_type=phone' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace owsjh-cn-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: owsjh.cn shop API — browse products and page images."""
from parse_apis.owsjh_cn_api import OwsjhCn, Service, ProductType, Page, InputFormatInvalid
client = OwsjhCn()
# List all products in the catalog, capped to 10 items.
for product in client.products.list(limit=10):
print(product.name, f"¥{product.price_cny}", product.stock_status or f"stock: {product.stock_count}")
# Filter to Overwatch / Battle.net phone-number verification keys only.
phone_key = client.products.list(
service=Service.OVERWATCH_BATTLENET,
product_type=ProductType.PHONE,
in_stock_only=True,
limit=1,
).first()
if phone_key is not None:
print(f"{phone_key.name} — {phone_key.subject}, ¥{phone_key.price_cny}, available={phone_key.available}")
# List images from the shop page.
for img in client.images.list(page=Page.SHOP, limit=5):
print(img.url, img.kind, f"{img.width}x{img.height}" if img.width and img.height else "")
# Demonstrate typed-error handling for an invalid filter value.
try:
client.products.list(service="nonexistent", limit=1).first()
except InputFormatInvalid as e:
print(f"Expected error for bad service value: {e.message}")
print("exercised: products.list (all / filtered / error) / images.list")
Returns every product currently offered in the shop in one round trip, one row per product (a product is identified by the combination of country_code, service and product_type). Each row carries the display name, subject, description, price in CNY (price_cny, a decimal number), the stock indicator and an availability flag. Stock is reported two ways by the site: phone-number products carry a textual stock_status (e.g. 充足) and stock_count is null; account products carry a numeric stock_count and stock_status is null. available is false only when the site marks the product unavailable (accounts with zero stock). Optional filters (service, product_type, in_stock_only) are applied locally after the fetch; total_products is the unfiltered catalog size and count is the number of rows returned. No pagination; the catalog is small. An unknown service or product_type value is rejected as invalid input.
| Param | Type | Description |
|---|---|---|
| service | string | Shop category tab to restrict to. Omitted = all categories. |
| product_type | string | Kind of product to restrict to: phone-number verification keys or game-account keys. Omitted = all types. |
| in_stock_only | boolean | When true, drops products whose available flag is false. |
{
"type": "object",
"fields": {
"count": "integer, number of rows in products after filters",
"products": "array of product rows",
"total_products": "integer, number of products in the full catalog before filters",
"shop_configured": "boolean, whether the site reports its payment/catalog as configured",
"products[].service": "string shop category code (bz or dr)",
"products[].available": "boolean, false when the site disables purchase",
"products[].price_cny": "number, price in CNY",
"products[].stock_count": "integer stock for account products, null for phone products",
"products[].country_code": "string site country code (14=香港, 16=英国, 182=日本, 187=美国)",
"products[].product_type": "phone or account",
"products[].stock_status": "textual stock indicator for phone products, null for accounts",
"products[].service_label": "Chinese display label of the category tab"
},
"sample": {
"data": {
"count": 2,
"products": [
{
"name": "香港账号密码",
"service": "bz",
"subject": "香港游戏账号密码密钥",
"currency": "CNY",
"available": true,
"price_cny": 28.2,
"description": "香港账号可以使用中文名称,登录即玩",
"stock_count": 3,
"country_code": "14",
"product_type": "account",
"stock_status": null,
"service_label": "守望先锋战网"
},
{
"name": "英国账号密码",
"service": "bz",
"subject": "英国游戏账号密码密钥",
"currency": "CNY",
"available": true,
"price_cny": 7.5,
"description": "领取暴雪账号密码,登录即玩",
"stock_count": 2,
"country_code": "16",
"product_type": "account",
"stock_status": null,
"service_label": "守望先锋战网"
}
],
"total_products": 9,
"shop_configured": true
},
"status": "success"
}
}About the owsjh API
Product Catalog via list_products
The list_products endpoint returns the complete owsjh.cn shop catalog in a single response. Each row in the products array identifies a unique listing by the combination of country_code, service, and product_type. Country codes map to specific markets: 14 = Hong Kong (香港), 16 = UK (英国), 182 = Japan (日本), and 187 = USA (美国). The service field uses short codes (bz or dr) corresponding to shop category tabs. The price_cny field is a decimal number in Chinese Yuan. Phone-number verification products carry a null stock_count; game account products report an integer count.
Three optional filters let you narrow results before they arrive: service restricts to one category tab, product_type restricts to phone or account listings, and in_stock_only: true drops any row where available is false. The response always includes total_products (full catalog size before filtering) alongside count (rows returned after filtering), so you can track catalog coverage in a single call. The shop_configured boolean indicates whether the site's payment and catalog system is active.
Page Image Index via list_page_images
The list_page_images endpoint scans either the shop or home page and returns every image reference in document order. Each row in the images array carries the absolute url, a kind field (img for inline images, or the icon link rel such as icon or apple-touch-icon), alt text (empty string when explicitly empty, null for icon links), declared width and height integers (or null when absent), and css_class. The page_title field surfaces the HTML <title> of the scanned page. No image files are downloaded; only references are returned.
Coverage Notes
The API covers the publicly visible shop catalog without requiring a login. Products are listed with the fields the site exposes at the catalog level; individual order history, transaction records, and user account data are not part of the catalog surface and are not returned.
The owsjh API is a managed, monitored endpoint for owsjh.cn — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when owsjh.cn changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official owsjh.cn API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Monitor CNY price changes across Overwatch/Battle.net phone-number keys by polling
list_productson a schedule. - Filter game account key stock counts by country to detect when a specific market's inventory drops to zero.
- Check
shop_configuredstatus to detect outages or catalog deactivation before attempting purchases. - Track which country codes are currently offering ChatGPT/OpenAI verification numbers using the
servicefilter. - Collect the shop's product image URLs and alt text for a catalog mirror or archival tool via
list_page_images. - Compare
total_productsversuscountwithin_stock_only: trueto calculate the share of in-stock listings at any given time. - Identify favicon and Apple touch icon URLs for the owsjh.cn domain using the
kindfield inlist_page_images.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does owsjh.cn provide an official developer API?+
How does list_products handle out-of-stock items?+
available boolean. Pass in_stock_only: true to drop rows where available is false. The stock_count field is an integer for account-type products and null for phone-number products, since the site does not report a discrete stock figure for that product type.Does the API return product detail pages, pricing history, or individual order data?+
What country markets does list_products cover?+
country_code field currently maps four values: 14 (Hong Kong), 16 (UK), 182 (Japan), and 187 (USA). These reflect the markets the site exposes in its catalog at query time. If the site adds new country codes, they will appear in the country_code field of returned rows.Can I retrieve images from pages other than 'shop' and 'home'?+
list_page_images endpoint accepts only shop or home as the page parameter. Other site pages such as login, checkout, or FAQ sections are not scanned. You can fork this API on Parse and revise it to add coverage for additional pages.