Wordleverse Public API
A free, read-only JSON API for the Wordleverse catalog of Wordle-like games. No sign-up and no key needed.
- Base URL:
https://wordleverse.net/api/v1 - Methods:
GETonly. Responses are UTF-8 JSON. CORS is open (Access-Control-Allow-Origin: *), so browsers can call the API directly. - Only approved, publicly listed games are returned: the same games and public details (title, links, description, languages, tags, rating, public submitter credit) you see on the site. No user accounts or private data are exposed.
- Timestamps are ISO 8601 in UTC. Game ids are assigned in approval order, so a higher id means a game was approved more recently.
GET/api/v1/games
Paginated list of games, with the same filters as the Games page. Filters accepting several values take repeated params (group[]=a&group[]=b) or a comma list (group=a,b); values in one filter are OR'd, different filters are AND'd.
| Parameter | Description |
|---|---|
q | Search title, description and URL. |
language | Language codes (ISO 639-1 / 639-3), e.g. es, de,fr. |
group | Group slugs (game families, e.g. wordle). |
topic | Topic tag slugs. |
platform | Platform tag slugs. |
mode | Play mode: daily, unlimited and/or completable (finite, can be finished). Modes are independent flags; any listed mode matches. |
difficulty | easy, medium, hard (community ratings). |
min_rating | Minimum overall rating (0–5). |
after_id | Only games with an id greater than this. |
since | Only games approved after this ISO 8601 time. |
sort | default (catalog order, or relevance when searching), title, newest, oldest, top. |
page, per_page | Page number (from 1) and page size (default 24, max 100). |
curl "https://wordleverse.net/api/v1/games?language=es&sort=newest&per_page=2"
{
"data": [ { "id": 812, "slug": "palabra-del-dia", "title": "Palabra del Día", ... } ],
"meta": { "page": 1, "per_page": 2, "total": 57, "last_page": 29, "sort": "newest" },
"links": { "next": "https://wordleverse.net/api/v1/games?language=es&sort=newest&per_page=2&page=2", "prev": null }
}
GET/api/v1/games/{id|slug}
One game by numeric id or by its slug (the last part of its page URL, https://wordleverse.net/games/slug). Returns {"data": {game}}, or 404.
curl "https://wordleverse.net/api/v1/games/wordle"
GET/api/v1/games/new
Newly approved games, oldest first, for bots and feeds that announce new games. Poll it with a cursor:
| Parameter | Description |
|---|---|
since (required) | A game id (games with a higher id), an ISO 8601 time (games approved after it), or now (no games, just the current cursor, to start fresh without the backlog). |
limit | Maximum games returned (default 50, max 100). |
Pass the returned cursor as since on the next call. When more is true, call again right away.
curl "https://wordleverse.net/api/v1/games/new?since=810"
{
"cursor": 812,
"games": [ { "id": 811, ... }, { "id": 812, ... } ],
"more": false
}
Game object
{
"id": 812,
"slug": "palabra-del-dia",
"title": "Palabra del Día",
"url": "https://wordleverse.net/games/palabra-del-dia",
"play_url": "https://example.com/palabra/",
"links": [
{"type": "unlimited", "label": "Unlimited", "url": "https://example.com/palabra/unlimited"},
{"type": "archive", "label": "Archive", "url": "https://example.com/palabra/archive"}
],
"domain": "example.com",
"description": "Guess the Spanish word of the day in six tries.",
"languages": ["es"],
"groups": ["wordle"],
"topics": ["words"],
"platforms": ["web"],
"daily": true,
"unlimited": true,
"completable": false,
"play_modes": ["daily", "unlimited"],
"daily_start_date": "2021-06-19",
"current_puzzle_number": 1958,
"tags": ["Web", "Wordle", "Words"],
"rating": 4.2,
"link_status": "active",
"credit": "jane_doe",
"credit_url": null,
"approved_at": "2026-10-22T18:04:11Z",
"reddit": { "id": "1abcde", "subreddit": "wordleverse", "permalink": "https://www.reddit.com/r/wordleverse/comments/1abcde/" }
}
url is the game's page on Wordleverse; play_url is the game itself. links lists extra pages of the game in display order (each with type: one of daily, unlimited, archive, leaderboard, stats, practice, discord, other, and the app links app_store, play_store, windows_app, mac_app, web_app (install instructions for an installable web app); a display label; and url); it is empty for most games. link_status is active or down (our link checker could not reach it recently). credit is the public submitter credit shown on the site, reddit the Reddit post the game was found in (both may be null). rating is null until rated.
Rate limits & optional token
Anonymous requests are limited to 60 requests per minute per IP address. Every response carries X-RateLimit-Limit and X-RateLimit-Remaining; over the limit you get HTTP 429 with a Retry-After header (seconds).
Apps that need more can ask for a token ([email protected]) and send it as a Bearer token for a limit of 1000 requests per minute. The token is optional: it only raises the limit, every endpoint and all data work the same without it. An unknown token is ignored (you get the anonymous limit).
curl -H "Authorization: Bearer YOUR_TOKEN" "https://wordleverse.net/api/v1/games/new?since=now"
Please cache responses where you can (responses may be cached for up to a minute) and poll /games/new no more than once a minute.
Errors
Errors are JSON: 404 unknown game, 422 invalid parameter (e.g. a bad since) with an error message; 429 rate limit exceeded and unknown paths with a message.
{ "error": "since must be a game id, an ISO 8601 time, or \"now\"" }
POST/api/v1/results GET/api/v1/results
A personal results API for the helper extension, a signed-in session, a same-site guest, or Skorble (server-to-server). It is not part of the public catalog API above: results stay private to the caller, CORS stays GET-only for anonymous browsers, and a request without a principal is rejected (except a same-site POST, which may create a guest cookie and store the result there until you sign in).
Auth, first match: Authorization: Bearer wvu_... (personal / extension token from Settings or Connect extension); a short-lived guest results token Bearer wvg_... (Connect without signing in; results-only, refresh at POST /api/v1/extension/refresh, upgrades to a wvu_ token after you sign in); a configured Skorble ingest token Bearer wvs_... (server only, no Origin header, body or query must include the Qorble user_id); a signed-in Wordleverse session; or the wv_guest cookie on a same-site request.
| POST field | Description |
|---|---|
game_id or slug or url | The published catalog game. url may be the game itself or a /games/{slug} page on this site. |
raw_text | Required. The share text, stored byte-for-byte (max 2000 characters; the whole JSON body is capped at 16384 bytes). |
played_on | Optional YYYY-MM-DD. Defaults to today in played_tz (or the player's zone). Future dates more than one day ahead are rejected. |
played_tz | Optional IANA time zone used to compute the default date. |
source | Optional: paste, extension, api, or skorble. Default depends on the caller. |
origin_host | Optional host the result was captured on. |
puzzle_id | Optional puzzle identifier (max 64). Combined with the parsed puzzle number for de-duplication. |
user_id | Required for the Skorble ingest token only. |
A new result returns 201 with {"status":"created","data":{...}}. The same owner, game, date and text (or the same puzzle) returns 200 with {"status":"duplicate","data":{...}} and does not insert a second row. The share text is parsed on intake (parser version rp2) and the parsed fields are stored so they can be reparsed later. GET /api/v1/results lists the caller's history (?game= / game_id / slug / url, ?from=, ?until=, page, per_page).
curl -X POST "https://wordleverse.net/api/v1/results" \
-H "Authorization: Bearer wvu_..." -H "Content-Type: application/json" \
-d '{"game_id":2,"raw_text":"Wordle 1,234 4/6","played_on":"2026-11-11","origin_host":"www.nytimes.com"}'
The API is provided as is and may change; breaking changes will get a new version prefix (/api/v2). Questions or ideas: r/wordleverse or Discord.