{
  "openapi": "3.1.0",
  "info": {
    "title": "OutBIG Public API",
    "version": "1.0.0",
    "summary": "Read the OutBIG bidboard: who ranks where, for how much, and what the next rank costs.",
    "description": "OutBIG is a public pay-to-rank leaderboard for products, websites and X profiles.\nThe bid determines the rank; nothing else does. Every listing, rank and amount on the board is public,\nso this API needs no authentication and no API key.\n\n**When an agent should call this API**\n\n- To answer \"what ranks #1 on OutBIG right now\", or the same question for one category or one day.\n- To look up whether a specific website or X profile is listed, at what rank, and for how much.\n- To find out what it would cost to take a given rank (`claimTopPriceUsd` on every board response).\n- To follow paid bids as they happen (`/api/v1/activity`).\n\n**When it is the wrong tool**\n\n- Placing a bid. Bidding is a card payment through Stripe Checkout and is deliberately not part of this\n  API; send a person to https://outbig.bid instead.\n- Anything about listings that were never paid for, frozen, or removed by moderation. Only `active`\n  listings are returned, by design.\n\n**Money** is always reported twice: `*Cents` is the integer of record, `*Usd` is the same value divided\nby 100. Never derive one from the other yourself.\n\n**Time** is always UTC, ISO 8601. The daily board resets at 00:00 UTC.\n\n**Rate limit.** 600 requests per minute per client. Every response carries `RateLimit-Limit`,\n`RateLimit-Remaining`, `RateLimit-Reset` and `RateLimit-Policy`, so you can pace yourself without\nwaiting to be refused. Exceeding it returns `429` with `Retry-After`. The counter is per server\ninstance, so treat the numbers as guidance rather than a global ledger.\n\n**Versioning and deprecation.** The surface is versioned in the path (`/api/v1`). Breaking changes\nget a new version; `/api/v1` will not change shape underneath you. If a version is ever retired we\nwill send the `Deprecation` and `Sunset` response headers (RFC 8594) for **at least six months**\nbefore it stops answering, and say so at https://outbig.bid/en/docs.\nAdditive changes - a new field, a new endpoint - can happen at any time, so ignore fields you do\nnot know rather than failing on them.",
    "contact": {
      "name": "OutBIG (Ostheimer OG)",
      "email": "office@ostheimer.at",
      "url": "https://outbig.bid/en/contact"
    },
    "license": {
      "name": "Proprietary - data may be used with attribution to outbig.bid",
      "identifier": "LicenseRef-OutBIG"
    },
    "termsOfService": "https://outbig.bid/en/terms"
  },
  "servers": [
    {
      "url": "https://outbig.bid",
      "description": "Production"
    }
  ],
  "externalDocs": {
    "description": "Developer documentation",
    "url": "https://outbig.bid/en/docs"
  },
  "tags": [
    {
      "name": "board",
      "description": "Rankings: all-time and today."
    },
    {
      "name": "categories",
      "description": "The fixed category catalogue and its per-category boards."
    },
    {
      "name": "listings",
      "description": "A single listing by its stable identity key."
    },
    {
      "name": "activity",
      "description": "Recent paid bids."
    },
    {
      "name": "meta",
      "description": "Service description and board-wide numbers."
    }
  ],
  "paths": {
    "/api/v1": {
      "get": {
        "operationId": "getApiIndex",
        "tags": [
          "meta"
        ],
        "summary": "Service index",
        "description": "Returns the list of available endpoints plus the URLs of this OpenAPI document, the developer docs and llms.txt. Call it first if you do not know the API surface yet.",
        "responses": {
          "200": {
            "description": "The service index.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceIndex"
                }
              }
            }
          },
          "400": {
            "description": "A query or path parameter was not usable. The body names the parameter and gives a valid example.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No resource with that identity or slug - or no endpoint at that address. Not the same as an empty result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "The endpoint exists but is read-only. The `Allow` header names the methods it accepts.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected failure. Retry once before reporting it.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "The board database is not reachable. Server-side; retry after the `Retry-After` interval.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/leaderboard": {
      "get": {
        "operationId": "getLeaderboard",
        "tags": [
          "board"
        ],
        "summary": "All-time leaderboard",
        "description": "The main board, ranked by total amount paid (ties broken by who paid first). Use this to answer who ranks where on OutBIG overall, to search the board by name, or to filter it by category or country.",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "How many listings to return. Defaults to 50, maximum 200.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200,
              "default": 50
            },
            "example": 25
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "How many listings to skip. Combine with `limit` to page through the board.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 100000,
              "default": 0
            },
            "example": 50
          },
          {
            "name": "category",
            "in": "query",
            "required": false,
            "description": "Restrict the board to one category slug. An unknown slug is a 404, not an empty list, so a typo cannot look like an empty category.",
            "schema": {
              "type": "string",
              "enum": [
                "seo-ai-visibility",
                "ai-agents-infrastructure",
                "ai-media-generation",
                "marketing-advertising",
                "developer-tools",
                "productivity-personal-tools",
                "people-profiles",
                "design-creative",
                "social-media-creator-tools",
                "writing-content",
                "sales-lead-generation",
                "business-finance-legal",
                "games-entertainment",
                "education-learning",
                "health-fitness-wellness",
                "ecommerce-retail",
                "directories-launch-discovery",
                "hiring-jobs-careers",
                "audio-voice-podcasting",
                "crypto-web3-investing",
                "agencies-studios-services",
                "security-privacy-compliance",
                "travel-local-lifestyle",
                "media-news",
                "domains-web-assets",
                "leaderboards-attention-markets",
                "real-estate-property",
                "other"
              ]
            },
            "example": "seo-ai-visibility"
          },
          {
            "name": "country",
            "in": "query",
            "required": false,
            "description": "Restrict to listings whose owner declared this country (ISO 3166-1 alpha-2, case-insensitive). The United Kingdom is `GB`, not `UK`.",
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z]{2}$"
            },
            "example": "AT"
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Free-text search over display name, resolved site title and description.",
            "schema": {
              "type": "string",
              "minLength": 2,
              "maxLength": 64
            },
            "example": "analytics"
          }
        ],
        "responses": {
          "200": {
            "description": "One page of the all-time board.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LeaderboardPage"
                }
              }
            }
          },
          "400": {
            "description": "A query or path parameter was not usable. The body names the parameter and gives a valid example.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No resource with that identity or slug - or no endpoint at that address. Not the same as an empty result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "The endpoint exists but is read-only. The `Allow` header names the methods it accepts.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected failure. Retry once before reporting it.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "The board database is not reachable. Server-side; retry after the `Retry-After` interval.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/today": {
      "get": {
        "operationId": "getTodayLeaderboard",
        "tags": [
          "board"
        ],
        "summary": "Today's leaderboard",
        "description": "The daily board. Rank follows only what was paid during the current UTC day, so it resets every midnight UTC; each row still carries the all-time `amountCents` alongside `todayAmountCents`. Use this to answer who is winning today rather than overall.",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "How many listings to return. Defaults to 50, maximum 200.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200,
              "default": 50
            },
            "example": 25
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "How many listings to skip. Combine with `limit` to page through the board.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 100000,
              "default": 0
            },
            "example": 50
          },
          {
            "name": "category",
            "in": "query",
            "required": false,
            "description": "Restrict the board to one category slug. An unknown slug is a 404, not an empty list, so a typo cannot look like an empty category.",
            "schema": {
              "type": "string",
              "enum": [
                "seo-ai-visibility",
                "ai-agents-infrastructure",
                "ai-media-generation",
                "marketing-advertising",
                "developer-tools",
                "productivity-personal-tools",
                "people-profiles",
                "design-creative",
                "social-media-creator-tools",
                "writing-content",
                "sales-lead-generation",
                "business-finance-legal",
                "games-entertainment",
                "education-learning",
                "health-fitness-wellness",
                "ecommerce-retail",
                "directories-launch-discovery",
                "hiring-jobs-careers",
                "audio-voice-podcasting",
                "crypto-web3-investing",
                "agencies-studios-services",
                "security-privacy-compliance",
                "travel-local-lifestyle",
                "media-news",
                "domains-web-assets",
                "leaderboards-attention-markets",
                "real-estate-property",
                "other"
              ]
            },
            "example": "seo-ai-visibility"
          }
        ],
        "responses": {
          "200": {
            "description": "One page of today's board.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TodayPage"
                }
              }
            }
          },
          "400": {
            "description": "A query or path parameter was not usable. The body names the parameter and gives a valid example.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No resource with that identity or slug - or no endpoint at that address. Not the same as an empty result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "The endpoint exists but is read-only. The `Allow` header names the methods it accepts.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected failure. Retry once before reporting it.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "The board database is not reachable. Server-side; retry after the `Retry-After` interval.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/categories": {
      "get": {
        "operationId": "listCategories",
        "tags": [
          "categories"
        ],
        "summary": "All categories",
        "description": "The complete category catalogue with the number of active listings and the top amount in each. Call this before using the `category` parameter anywhere else - the slugs here are the only valid values.",
        "responses": {
          "200": {
            "description": "Every category, in display order.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CategoryList"
                }
              }
            }
          },
          "400": {
            "description": "A query or path parameter was not usable. The body names the parameter and gives a valid example.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No resource with that identity or slug - or no endpoint at that address. Not the same as an empty result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "The endpoint exists but is read-only. The `Allow` header names the methods it accepts.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected failure. Retry once before reporting it.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "The board database is not reachable. Server-side; retry after the `Retry-After` interval.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/categories/{slug}": {
      "get": {
        "operationId": "getCategory",
        "tags": [
          "categories"
        ],
        "summary": "One category and its board",
        "description": "A single category with its own ranking. Ranks in this response are ranks within the category, not global ranks.",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "Category slug from `listCategories`.",
            "schema": {
              "type": "string",
              "enum": [
                "seo-ai-visibility",
                "ai-agents-infrastructure",
                "ai-media-generation",
                "marketing-advertising",
                "developer-tools",
                "productivity-personal-tools",
                "people-profiles",
                "design-creative",
                "social-media-creator-tools",
                "writing-content",
                "sales-lead-generation",
                "business-finance-legal",
                "games-entertainment",
                "education-learning",
                "health-fitness-wellness",
                "ecommerce-retail",
                "directories-launch-discovery",
                "hiring-jobs-careers",
                "audio-voice-podcasting",
                "crypto-web3-investing",
                "agencies-studios-services",
                "security-privacy-compliance",
                "travel-local-lifestyle",
                "media-news",
                "domains-web-assets",
                "leaderboards-attention-markets",
                "real-estate-property",
                "other"
              ]
            },
            "example": "seo-ai-visibility"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "How many listings to return. Defaults to 50, maximum 200.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200,
              "default": 50
            },
            "example": 25
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "How many listings to skip. Combine with `limit` to page through the board.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 100000,
              "default": 0
            },
            "example": 50
          }
        ],
        "responses": {
          "200": {
            "description": "The category and one page of its board.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CategoryPage"
                }
              }
            }
          },
          "400": {
            "description": "A query or path parameter was not usable. The body names the parameter and gives a valid example.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No resource with that identity or slug - or no endpoint at that address. Not the same as an empty result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "The endpoint exists but is read-only. The `Allow` header names the methods it accepts.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected failure. Retry once before reporting it.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "The board database is not reachable. Server-side; retry after the `Retry-After` interval.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/listings/{identityKey}": {
      "get": {
        "operationId": "getListing",
        "tags": [
          "listings"
        ],
        "summary": "One listing by identity",
        "description": "Look up a single active listing and its global and category rank. Use this to answer whether a given website or X profile is on the board at all. Accepts either the raw identity key (`website:example.com`, `x:alice`) or the slug form used in page URLs (`example.com`, `@alice`, `github.com/owner/repo`).",
        "parameters": [
          {
            "name": "identityKey",
            "in": "path",
            "required": true,
            "description": "The listing's stable identity. Path segments are not escaped: `github.com/vercel/next.js` is three segments.",
            "schema": {
              "type": "string"
            },
            "example": "website:example.com"
          }
        ],
        "responses": {
          "200": {
            "description": "The listing.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListingEnvelope"
                }
              }
            }
          },
          "400": {
            "description": "A query or path parameter was not usable. The body names the parameter and gives a valid example.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No resource with that identity or slug - or no endpoint at that address. Not the same as an empty result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "The endpoint exists but is read-only. The `Allow` header names the methods it accepts.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected failure. Retry once before reporting it.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "The board database is not reachable. Server-side; retry after the `Retry-After` interval.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/activity": {
      "get": {
        "operationId": "listActivity",
        "tags": [
          "activity"
        ],
        "summary": "Recent paid bids",
        "description": "The most recent successful bids, newest first. `deltaCents` is what was actually paid for that bid; `amountCents` is the listing's running total right after it. Use this to answer what has been happening on the board lately.",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "How many events to return. Defaults to 20, maximum 100.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 20
            },
            "example": 20
          }
        ],
        "responses": {
          "200": {
            "description": "Recent bids.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ActivityList"
                }
              }
            }
          },
          "400": {
            "description": "A query or path parameter was not usable. The body names the parameter and gives a valid example.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No resource with that identity or slug - or no endpoint at that address. Not the same as an empty result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "The endpoint exists but is read-only. The `Allow` header names the methods it accepts.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected failure. Retry once before reporting it.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "The board database is not reachable. Server-side; retry after the `Retry-After` interval.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/stats": {
      "get": {
        "operationId": "getBoardStats",
        "tags": [
          "meta"
        ],
        "summary": "Board-wide numbers",
        "description": "Active listing count, top amount, total board value and outbound click count - for all time and for the current UTC day side by side. `totalClicks` is `null` for today because clicks carry no timestamp and cannot be sliced by day.",
        "responses": {
          "200": {
            "description": "Board statistics.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StatsEnvelope"
                }
              }
            }
          },
          "400": {
            "description": "A query or path parameter was not usable. The body names the parameter and gives a valid example.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No resource with that identity or slug - or no endpoint at that address. Not the same as an empty result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "The endpoint exists but is read-only. The `Allow` header names the methods it accepts.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected failure. Retry once before reporting it.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "The board database is not reachable. Server-side; retry after the `Retry-After` interval.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Error": {
        "type": "object",
        "description": "Every error from this API has this shape. There are no HTML error pages.",
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "type": "object",
            "required": [
              "code",
              "message",
              "hint",
              "status"
            ],
            "properties": {
              "code": {
                "type": "string",
                "description": "Stable machine-readable error class. Branch on this, not on the message.",
                "enum": [
                  "bad_request",
                  "not_found",
                  "method_not_allowed",
                  "not_acceptable",
                  "rate_limited",
                  "database_not_configured",
                  "internal_error"
                ]
              },
              "message": {
                "type": "string",
                "description": "What went wrong, in one sentence."
              },
              "hint": {
                "type": "string",
                "description": "What to do next. Retrying an identical request rarely helps."
              },
              "status": {
                "type": "integer",
                "description": "The HTTP status, repeated in the body."
              },
              "documentation": {
                "type": "string",
                "description": "Path to the human-readable documentation."
              },
              "details": {
                "type": "object",
                "additionalProperties": true,
                "description": "Error-specific extras."
              }
            }
          }
        }
      },
      "Pagination": {
        "type": "object",
        "required": [
          "limit",
          "offset",
          "returned"
        ],
        "properties": {
          "limit": {
            "type": "integer",
            "description": "Page size actually applied."
          },
          "offset": {
            "type": "integer",
            "description": "Rows skipped."
          },
          "total": {
            "type": "integer",
            "description": "Rows matching the filters across all pages."
          },
          "returned": {
            "type": "integer",
            "description": "Rows in this response."
          }
        }
      },
      "BoardStats": {
        "type": "object",
        "description": "Aggregate numbers for whichever slice of the board the response covers.",
        "required": [
          "activeListings",
          "topAmountCents",
          "topAmountUsd",
          "claimTopPriceUsd"
        ],
        "properties": {
          "activeListings": {
            "type": "integer",
            "description": "Active listings in this slice."
          },
          "topAmountCents": {
            "type": "integer",
            "description": "Highest amount in this slice, in cents."
          },
          "topAmountUsd": {
            "type": "number",
            "description": "The same value in US dollars."
          },
          "boardValueCents": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Sum of all amounts in this slice, in cents. `null` when not measured for this slice."
          },
          "boardValueUsd": {
            "type": [
              "number",
              "null"
            ],
            "description": "The same value in US dollars."
          },
          "totalClicks": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Outbound clicks OutBIG sent to the listed targets - not visits to outbig.bid. `null` means not measured for this slice, which is not the same as zero."
          },
          "claimTopPriceUsd": {
            "type": "integer",
            "description": "Whole US dollars needed to take rank 1 in this slice: the top amount plus one dollar."
          }
        }
      },
      "Listing": {
        "type": "object",
        "description": "One row of the board.",
        "required": [
          "rank",
          "id",
          "identityKey",
          "identityType",
          "displayName",
          "amountCents",
          "amountUsd",
          "targetUrl"
        ],
        "properties": {
          "rank": {
            "type": "integer",
            "description": "Position within the slice this response covers."
          },
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "Internal listing id."
          },
          "identityKey": {
            "type": "string",
            "description": "Stable unique identity, `website:<host>[/<path>]` or `x:<handle>`. Use this to address the listing.",
            "examples": [
              "website:example.com",
              "website:github.com/vercel/next.js",
              "x:alice"
            ]
          },
          "identityType": {
            "type": "string",
            "enum": [
              "website",
              "x"
            ]
          },
          "displayName": {
            "type": "string",
            "description": "How the board labels the listing."
          },
          "siteTitle": {
            "type": [
              "string",
              "null"
            ],
            "description": "Title resolved from the target page, if any."
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "country": {
            "type": [
              "string",
              "null"
            ],
            "description": "Self-declared origin (ISO 3166-1 alpha-2). Always `null` for listings nobody has paid for."
          },
          "category": {
            "type": "object",
            "required": [
              "slug",
              "name"
            ],
            "properties": {
              "slug": {
                "type": "string"
              },
              "name": {
                "type": "string"
              }
            }
          },
          "amountCents": {
            "type": "integer",
            "description": "Total paid for this listing, in cents. The number that sets the rank."
          },
          "amountUsd": {
            "type": "number",
            "description": "The same value in US dollars."
          },
          "clickCount": {
            "type": "integer",
            "description": "Lifetime outbound clicks OutBIG sent to this target."
          },
          "promotedAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "When this free listing went live in exchange for a post on X. Null for paid and unclaimed listings."
          },
          "placement": {
            "type": "string",
            "enum": [
              "paid",
              "promoted",
              "unclaimed"
            ],
            "description": "paid: someone bid for this rank. promoted: free, unlocked by a post on X. unclaimed: added editorially, nobody claimed it."
          },
          "firstPaidAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "First payment, UTC. Breaks rank ties."
          },
          "lastPaidAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "Most recent payment, UTC."
          },
          "targetUrl": {
            "type": "string",
            "format": "uri",
            "description": "The URL OutBIG links to."
          },
          "imageUrl": {
            "type": [
              "string",
              "null"
            ],
            "format": "uri"
          },
          "links": {
            "type": "object",
            "description": "Ready-made absolute URLs. Do not assemble these yourself.",
            "properties": {
              "self": {
                "type": "string",
                "format": "uri"
              },
              "page": {
                "type": "string",
                "format": "uri",
                "description": "The human-readable listing page."
              },
              "category": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "TodayListing": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Listing"
          },
          {
            "type": "object",
            "required": [
              "todayAmountCents",
              "todayAmountUsd"
            ],
            "properties": {
              "todayAmountCents": {
                "type": "integer",
                "description": "Paid during the current UTC day. This - not `amountCents` - sets the rank on the daily board."
              },
              "todayAmountUsd": {
                "type": "number"
              }
            }
          }
        ]
      },
      "ListingDetail": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Listing"
          },
          {
            "type": "object",
            "required": [
              "globalRank",
              "categoryRank"
            ],
            "properties": {
              "globalRank": {
                "type": "integer",
                "description": "Rank across the whole board."
              },
              "categoryRank": {
                "type": "integer",
                "description": "Rank within its own category."
              }
            }
          }
        ]
      },
      "Category": {
        "type": "object",
        "required": [
          "slug",
          "name",
          "sortOrder"
        ],
        "properties": {
          "slug": {
            "type": "string",
            "description": "The value to pass as the `category` parameter."
          },
          "name": {
            "type": "string"
          },
          "sortOrder": {
            "type": "integer",
            "description": "Display order on the site."
          },
          "listingCount": {
            "type": "integer"
          },
          "topAmountCents": {
            "type": "integer"
          },
          "topAmountUsd": {
            "type": "number"
          },
          "links": {
            "type": "object",
            "properties": {
              "self": {
                "type": "string",
                "format": "uri"
              },
              "page": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "ActivityEvent": {
        "type": "object",
        "required": [
          "id",
          "occurredAt",
          "deltaCents",
          "amountCents",
          "listing"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "occurredAt": {
            "type": "string",
            "format": "date-time",
            "description": "When the bid was paid, UTC."
          },
          "deltaCents": {
            "type": "integer",
            "description": "What this bid actually cost. Top-ups pay only the difference."
          },
          "deltaUsd": {
            "type": "number"
          },
          "amountCents": {
            "type": "integer",
            "description": "The listing's running total right after this bid."
          },
          "amountUsd": {
            "type": "number"
          },
          "listing": {
            "type": "object",
            "required": [
              "id",
              "displayName",
              "globalRank",
              "categoryRank"
            ],
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid"
              },
              "displayName": {
                "type": "string"
              },
              "siteTitle": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "targetUrl": {
                "type": "string",
                "format": "uri"
              },
              "globalRank": {
                "type": "integer",
                "description": "The listing's rank now, not at the time of the bid."
              },
              "categoryRank": {
                "type": "integer"
              },
              "category": {
                "type": "object",
                "properties": {
                  "slug": {
                    "type": "string"
                  },
                  "name": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      },
      "ServiceIndex": {
        "type": "object",
        "required": [
          "name",
          "version",
          "endpoints"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "version": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "documentation": {
            "type": "string",
            "format": "uri"
          },
          "openapi": {
            "type": "string",
            "format": "uri"
          },
          "llms": {
            "type": "string",
            "format": "uri"
          },
          "authentication": {
            "type": "string",
            "enum": [
              "none"
            ]
          },
          "endpoints": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          }
        }
      },
      "LeaderboardPage": {
        "type": "object",
        "required": [
          "scope",
          "pagination",
          "board",
          "listings"
        ],
        "properties": {
          "scope": {
            "type": "string",
            "enum": [
              "all-time"
            ]
          },
          "filters": {
            "type": "object",
            "properties": {
              "category": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "country": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "q": {
                "type": [
                  "string",
                  "null"
                ]
              }
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          },
          "board": {
            "$ref": "#/components/schemas/BoardStats"
          },
          "listings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Listing"
            }
          }
        }
      },
      "TodayPage": {
        "type": "object",
        "required": [
          "scope",
          "window",
          "pagination",
          "board",
          "listings"
        ],
        "properties": {
          "scope": {
            "type": "string",
            "enum": [
              "today"
            ]
          },
          "window": {
            "type": "object",
            "description": "The slice of time this board covers.",
            "properties": {
              "unit": {
                "type": "string",
                "enum": [
                  "day"
                ]
              },
              "timezone": {
                "type": "string",
                "enum": [
                  "UTC"
                ]
              },
              "resetsAt": {
                "type": "string",
                "format": "date-time",
                "description": "When this board goes back to empty."
              }
            }
          },
          "filters": {
            "type": "object",
            "properties": {
              "category": {
                "type": [
                  "string",
                  "null"
                ]
              }
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          },
          "board": {
            "$ref": "#/components/schemas/BoardStats"
          },
          "listings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TodayListing"
            }
          }
        }
      },
      "CategoryList": {
        "type": "object",
        "required": [
          "count",
          "categories"
        ],
        "properties": {
          "count": {
            "type": "integer"
          },
          "categories": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Category"
            }
          }
        }
      },
      "CategoryPage": {
        "type": "object",
        "required": [
          "category",
          "board",
          "pagination",
          "listings"
        ],
        "properties": {
          "category": {
            "$ref": "#/components/schemas/Category"
          },
          "board": {
            "$ref": "#/components/schemas/BoardStats"
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          },
          "listings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Listing"
            }
          }
        }
      },
      "ListingEnvelope": {
        "type": "object",
        "required": [
          "listing"
        ],
        "properties": {
          "listing": {
            "$ref": "#/components/schemas/ListingDetail"
          }
        }
      },
      "ActivityList": {
        "type": "object",
        "required": [
          "count",
          "events"
        ],
        "properties": {
          "count": {
            "type": "integer"
          },
          "events": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ActivityEvent"
            }
          }
        }
      },
      "StatsEnvelope": {
        "type": "object",
        "required": [
          "currency",
          "allTime",
          "today"
        ],
        "properties": {
          "currency": {
            "type": "string",
            "enum": [
              "USD"
            ]
          },
          "allTime": {
            "$ref": "#/components/schemas/BoardStats"
          },
          "today": {
            "$ref": "#/components/schemas/BoardStats"
          }
        }
      }
    }
  }
}