Public API
Read the leaderboard from your own site, bot or dashboard. Free, no key, JSON over HTTPS, CORS enabled.
- Base URL:
https://pornbid.wtf/api/v1— index - Auth: none. Methods: GET only. Rate limit: 120 requests / minute / IP (HTTP 429 +
Retry-Afterbeyond). Responses are cacheable for 30 s — please cache on your side. - CORS:
Access-Control-Allow-Origin: *— call it straight from the browser. - Money: integer USD. Dates: ISO 8601 UTC. Ranks: 1 = top;
category_rankis the position inside the listing's category.
Endpoints
| Endpoint | What you get | Parameters |
|---|---|---|
GET /leaderboard | The ranked board (overall or one category), paginated, with the price to claim #1. | category (slug, optional) · page (1…) · per_page (1–100, default 50) |
GET /listings/{id} | One listing with rank, category rank, bid, clicks, links. | — |
GET /lookup | Find a listing by URL (same normalization as the site: tracking params ignored). 404 + current price if not listed. | url (required) |
GET /categories | All 27 categories: counts, leader, price to claim #1, links. | — |
GET /categories/{slug} | One category with its description and leader. | — |
GET /price | What it costs to take #1 right now (overall or in a category), minimum bid, increment. | category (optional) |
GET /trending | Top 10 by clicks in the last hour. | category (optional) |
GET /activity | Latest bids: listing, amount, rank after the bid. | category (optional) · limit (1–50) |
GET /badge/{id}.svg | Embeddable SVG badge "#N · PornBid" for your page. | category=true to show the category rank |
Examples
Top 5 overall
curl "https://pornbid.wtf/api/v1/leaderboard?per_page=5"
{
"category": null, "page": 1, "per_page": 5, "total": 0, "pages": 1,
"price": { "claim_first": 10, "top_bid": 0, "min_bid": 10, "top_increment": 5, "currency": "USD" },
"items": [
{ "id": 42, "rank": 1, "category_rank": 1, "title": "…", "description": "…", "url": "https://…",
"domain": "xvideos.com", "category": "amateur", "category_name": "Amateur",
"bid": 0, "currency": "USD", "clicks": 1287, "image": "https://…/thumb.jpg",
"created_at": "2026-08-22T17:40:11.000Z", "last_bid_at": "2026-08-22T19:02:45.000Z",
"links": { "self": "https://pornbid.wtf/api/v1/listings/42", "board": "https://pornbid.wtf/amateur", "badge": "https://pornbid.wtf/api/v1/badge/42.svg" } }
]
}
Is my video listed, and where?
curl "https://pornbid.wtf/api/v1/lookup?url=https://www.xvideos.com/video.abc123/my-video"
From the browser
const r = await fetch("https://pornbid.wtf/api/v1/leaderboard?category=milf&per_page=10");
const { items, price } = await r.json();
console.log(items[0].title, "is #1 in MILF — claim it for $" + price.claim_first);
Put your rank on your site
Three formats, all live (they follow the board). Replace 42 by your listing id — shown on your confirmation page, in /api/v1/lookup?url=…, and in every API response.
A live card that refreshes itself, isolated in a Shadow DOM so it never clashes with your CSS. Recommended.
<script src="https://pornbid.wtf/widget.js" data-listing="42" data-theme="dark" data-clicks="true" async></script>
Same card, zero JavaScript on your side.
<iframe src="https://pornbid.wtf/embed/42?theme=dark&clicks=1" width="360" height="80" loading="lazy" style="border:0" title="PornBid rank"></iframe>
An image: works anywhere (README, forum signature, profile, email).
<a href="https://pornbid.wtf"><img src="https://pornbid.wtf/api/v1/badge/42.svg?category=true" alt="Ranked on PornBid"></a>
Errors
JSON with an error code: 400 invalid_url / unknown_category, 404 not_found / not_listed, 405 method_not_allowed, 429 rate_limited.
Terms
- Free for any use, including commercial. A link back to PornBid is appreciated.
- Stay under the rate limit and cache responses; heavy scraping gets blocked. Statistics and revenue are not exposed — only the public board.
- The API is stable under
/api/v1; fields are only added, never removed. Changes will be announced here.