Today we are opening the Anagrama API v1 to all developers. The API provides programmatic access to the same curated word dictionary that powers every Anagrama game mode.

Whether you are building a Discord bot, a classroom vocabulary tool, a personal dashboard, or just experimenting with word data, the API is designed to be simple, fast, and well-documented.


API at a glance

Free Tier
100requests per day
Pro Tier
10Krequests per day
API Keys
Up to 25per account on Business
Avg Latency
<50msp95 response time

What Is the Anagrama API?

The Anagrama API v1 is a developer-facing REST API that gives you programmatic access to the Anagrama platform. It lets you fetch words from our curated puzzle dictionary, retrieve the daily featured word, and integrate Anagrama word data into your own applications.

The API lives at the /api/v1 path and returns JSON for every response. It follows standard REST conventions with predictable URLs, meaningful HTTP status codes, and clear error messages.

Free to Use

The API is free and open during the beta period. No API key is required to get started.


Plan comparison

Select a column to highlight. All plans include access to the full Anagrama word engine.

Burst rate
10/min
30/min
60/min
200/min
24h requests
100
5,000
10,000
100,000
7d requests
500
25,000
50,000
500,000
API keys
2
5
10
25
Custom wordsets
1
10
50
Unlimited
Words per set
50
500
1,000
10,000
Webhooks
—
—
3 endpoints
10 endpoints
Support
Community
Community
Email
Priority

Feature availability

Core API features and perks available on each plan.

Feature
Free
Plus
Pro
Business
Anagram generation
Word validation
Custom wordsets
Full puzzle archive
Detailed statistics
Exclusive game modes
Webhook notifications
Email support
Priority support

Available Endpoints

The v1 API offers 7 endpoints across four sections — Words, Wordsets, Dictionary, and Puzzles. Every endpoint requires an API key passed via the X-API-Key header, no exceptions.

  • Word API — random words, daily word, and word validation across 870+ languages
  • Wordsets API — retrieve and filter custom word lists with optional letter scrambling
  • Dictionary API (beta) — multilingual definitions, etymology, synonyms, and prefix search across 10M+ entries
  • Puzzle API (beta) — generate complete Anagrama puzzles with hints, alternate answers, and definitions

Word API

Three endpoints for working with words — fetch random words, get the daily word, or validate whether a word exists in the dictionary.

GET /words/random

Returns one or more random words from the Anagrama dictionary. Filter by length and request up to 10 words at a time.

bash
curl -H "X-API-Key: ak_your_key" \
  "https://api.playanagrama.com/api/v1/words/random?count=3&minLength=5&maxLength=8"

Fetch 3 random words between 5-8 letters

json
{
  "words": ["cipher", "presto", "quartz"],
  "count": 3
}

Response

GET /words/daily

Returns the same word for all users on a given day. The word is deterministically seeded so everyone gets the same daily word. Supports timezone-aware date boundaries.

bash
curl -H "X-API-Key: ak_your_key" \
  "https://api.playanagrama.com/api/v1/words/daily?tz=America/New_York"
json
{
  "word": "enigma",
  "date": "2025-05-15",
  "timezone": "America/New_York"
}

Response — same word for all users on this date

GET /words/validate

Check whether a word exists in the dictionary. Supports 870+ languages via the lang parameter. Returns the word, language, validity, and part of speech when available.

bash
curl -H "X-API-Key: ak_your_key" \
  "https://api.playanagrama.com/api/v1/words/validate?word=quixotic&lang=en"
json
{
  "word": "quixotic",
  "lang": "en",
  "valid": true,
  "pos": "adj"
}

Wordsets API

Retrieve custom word lists created via the developer dashboard. Filter by length, category, or request a random subset. All requests require an API key.

GET /v1/wordsets/:wordsetId

bash
curl -H "X-API-Key: ak_your_key" \
  "https://api.playanagrama.com/v1/wordsets/ws_abc123?limit=5&random=true&scramble=true"

Fetch 5 random words from a wordset with scrambled letters

json
{
  "wordsetId": "ws_abc123",
  "name": "SAT Vocabulary",
  "description": "Common SAT prep words",
  "isPublic": false,
  "words": [
    { "word": "aelcbnaa", "original": "balance", "category": "noun" },
    { "word": "tpraseci", "original": "practice", "category": "noun" }
  ],
  "wordCount": 5,
  "totalWordCount": 248
}

Scramble mode

Pass scramble=true to receive letter-scrambled versions of words — useful for building anagram games with your own word lists.


Dictionary API (Beta)

Full multilingual dictionary with definitions, etymology, synonyms, antonyms, related words, and more. Covers 871 languages with over 10 million entries.

GET /dictionary/:word

Look up any word for definitions, etymology, forms, synonyms, antonyms, and related words. Use exact=false for prefix search. Filter results by part of speech or specific fields.

bash
curl -H "X-API-Key: ak_your_key" \
  "https://api.playanagrama.com/api/v1/dictionary/ephemeral?lang=en&fields=definitions,synonyms&examples=true"
json
{
  "word": "ephemeral",
  "lang": "en",
  "results": [
    {
      "pos": "adj",
      "definitions": [
        {
          "text": "lasting for a very short time",
          "examples": ["the ephemeral nature of fashion trends"]
        }
      ],
      "synonyms": ["transient", "fleeting", "momentary", "brief"]
    }
  ]
}

GET /dictionary/languages

List all available dictionary languages with entry counts. Results are sorted by entry count and cached for 5 minutes.

bash
curl -H "X-API-Key: ak_your_key" \
  "https://api.playanagrama.com/api/v1/dictionary/languages"

Puzzle API (Beta)

Generate complete Anagrama puzzles programmatically — including the target word, scrambled letters, a letter pool with decoys, pre-computed hints, alternate valid answers, and definitions.

GET /puzzles/generate

Generate a puzzle at a specified difficulty level. Easy puzzles use 4-5 letter words with 0-1 extra letters, medium uses 5-6 with 1-2 extra, and hard uses 6-7 with 3-4 extra. All puzzles allow 5 attempts and up to 3 hints (0 in hard mode).

bash
curl -H "X-API-Key: ak_your_key" \
  "https://api.playanagrama.com/api/v1/puzzles/generate?difficulty=medium"
json
{
  "seed": "a7f3c2d1",
  "difficulty": "medium",
  "target": "cipher",
  "scramble": "hprice",
  "pool": ["c", "i", "p", "h", "e", "r", "t"],
  "wordLength": 6,
  "maxAttempts": 5,
  "maxHints": 3,
  "hints": [
    { "position": 0, "letter": "c" },
    { "position": 3, "letter": "h" },
    { "position": 5, "letter": "r" }
  ],
  "alts": ["enrich", "richen"],
  "definitions": {
    "cipher": "a secret or disguised way of writing; a code"
  },
  "metadata": {
    "vowelCount": 2,
    "hasRepeats": false,
    "poolSize": 7,
    "altCount": 2
  }
}

Reproducible puzzles

Pass a seed value to regenerate the exact same puzzle — useful for multiplayer games or sharing specific puzzles with friends.


Authentication and Rate Limits

All API requests require an API key passed in the X-API-Key header. Create and manage keys from the Developer Dashboard. The free tier includes 2 keys with 100 requests per day — upgrade for higher limits.

Rate limit headers

Every response includes X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset headers for daily limits, plus X-Weekly-Limit, X-Weekly-Remaining, and X-Burst-Limit for weekly and per-minute burst limits. Exceeding any limit returns 429 Too Many Requests with a Retry-After header.

Getting Started

Full documentation is available at the links below. The quickest way to get started is to create a free account, generate an API key, and make your first request.

python
import requests

# Fetch 5 random words
response = requests.get(
    "https://api.playanagrama.com/api/v1/words/random",
    params={"count": 5, "minLength": 5},
    headers={"X-API-Key": "ak_your_key"}
)
words = response.json()["words"]
print(words)

Python quick start

javascript
// Fetch the daily word
const res = await fetch(
  "https://api.playanagrama.com/api/v1/words/daily",
  { headers: { "X-API-Key": "ak_your_key" } }
);
const { word, date } = await res.json();
console.log(`Today's word: ${word} (${date})`);

JavaScript quick start