← White Lands Pricing
v1REST · JSONBearer auth

White Lands API

Generate white pages programmatically — create an order, poll its status, download the ZIP. Same engine, same prices as the website. Billed from your prepaid balance.

1. Get an API key

Keys are created from your account. You must top up your balance to at least $10 to create a key. Each generation is then charged from that balance (1 credit = $1) — no balance, nothing is generated.

2. Authentication

Send your key as a Bearer token on every /api/v1 request:

Authorization: Bearer wl_live_xxxxxxxxxxxxxxxxxxxx

3. Generate

POST/api/v1/generate
FieldTypeDefaultNotes
page_typestringlandinglanding · corporate · blog
pagesint31–50 pages per land
countint11–100 lands (volume pricing applies)
nichestringrandome.g. "solar panels". Empty = auto
target_langstringenISO code, e.g. es, de
geostringISO-2 country, e.g. US, AR (real local address)
reactboolfalse+$1/land — React source included
curl -X POST https://white-lands.com/api/v1/generate \
 -H "Authorization: Bearer $WL_KEY" \
 -H "Content-Type: application/json" \
 -d '{"page_type":"landing","pages":3,"count":5,"niche":"solar","geo":"US","target_lang":"en"}'

Response:

{
 "ok": true,
 "order_id": 412,
 "cost_usd": 23,
 "balance_after_usd": 77,
 "count": 5,
 "status": "queued",
 "poll": "/api/v1/orders/412"
}

4. Check status & download

GET/api/v1/orders/{id}

Poll every ~20–30s. When status is done, downloads holds signed ZIP links (valid 30 days).

curl https://white-lands.com/api/v1/orders/412 \
 -H "Authorization: Bearer $WL_KEY"

{
 "order_id": 412,
 "status": "done", // queued | generating | done | failed
 "downloads": [
 {"slug":"solar-grid-x9", "url":"https://white-lands.com/api/delivery/solar-grid-x9?t=..."}
 ]
}

5. Balance

GET/api/v1/balance
curl https://white-lands.com/api/v1/balance -H "Authorization: Bearer $WL_KEY"
{ "balance_usd": 77 }

Full example (Python)

import requests, time
H = {"Authorization": "Bearer " + WL_KEY}
B = "https://white-lands.com"

r = requests.post(f"{B}/api/v1/generate",
 headers=H, json={"page_type":"landing","pages":3,"count":1,"geo":"US"}).json()
oid = r["order_id"]
print("order", oid, "cost $", r["cost_usd"])

while True:
 s = requests.get(f"{B}/api/v1/orders/{oid}", headers=H).json()
 print(s["status"])
 if s["status"] in ("done","failed"): break
 time.sleep(30)

for d in s.get("downloads", []):
 print("download:", d["url"])
Pricing is identical to the website (volume discounts apply by count). A 3-page landing starts at a few dollars; blogs cost more. Check the live cost in the cost_usd field — it's deducted at order time, before generation.
Top-up. Add balance yourself at /topup (USDT (TRC20/BEP20), with volume bonuses), then create a key here.

Errors

CodeMeaning
401Missing / invalid / revoked key
402Insufficient balance for this order
400Bad parameters (type/size/count)
404Order not found (or not yours)
429Rate limit (60 generations / hour / key)