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/v1index
  • Auth: none. Methods: GET only. Rate limit: 120 requests / minute / IP (HTTP 429 + Retry-After beyond). 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_rank is the position inside the listing's category.

Endpoints

EndpointWhat you getParameters
GET /leaderboardThe 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 /lookupFind a listing by URL (same normalization as the site: tracking params ignored). 404 + current price if not listed.url (required)
GET /categoriesAll 27 categories: counts, leader, price to claim #1, links.
GET /categories/{slug}One category with its description and leader.
GET /priceWhat it costs to take #1 right now (overall or in a category), minimum bid, increment.category (optional)
GET /trendingTop 10 by clicks in the last hour.category (optional)
GET /activityLatest bids: listing, amount, rank after the bid.category (optional) · limit (1–50)
GET /badge/{id}.svgEmbeddable 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.

Options: data-theme="dark|light" · data-size="sm" (compact) · data-clicks="false" (hide the click count)

<script src="https://pornbid.wtf/widget.js" data-listing="42" data-theme="dark" data-clicks="true" async></script>

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.