What You Can Do
- 185+ curated decks — official decks across 12 languages (A1–C2) with example sentences, grammar notes, and grammar cards. Learn more
- AI extraction — turn URLs, PDFs, and YouTube videos into vocabulary decks
- 3 study modes — standard flashcards, reverse (translate to target language), and recall (type the answer from memory)
- Spaced repetition — FSRS scheduling adapts to how you learn each word
- 7 quiz games — match, write, multiple choice, race, sentence builder, fill-in-the-blank, and listening
- Multiple decks — organize by language, topic, or level
- Works everywhere — install as an app, study on any device
- Import & export — bring in your existing vocabulary or back up your data
Getting Started
Sign up and you're ready to go in under a minute.
- Create a deck — pick a name and choose your languages (e.g., Spanish to English).
- Add vocabulary — the fastest way is AI extraction: paste a URL, upload a document, or drop in text and AI creates your flashcards. You can also add words manually or browse public decks.
- Study — open the Study page. Spaced repetition shows each word at the right moment for your memory.
- Track progress — check your retention rate, daily reviews, and study streaks on the Progress page.
Managing Decks
The Decks page is your home screen. It shows all your decks in a grid layout with word counts, due badges, and action buttons.
| Action | Description |
|---|---|
| New Deck | Create a deck with a name, description, and source/target language pair (e.g., Spanish → Polish) |
| Select & Study | Sets the deck as active and redirects to the Study page. The active deck name appears in the nav bar |
| Import | Opens the import modal to paste data or upload a file directly into that deck |
| Share | Share the deck with another user by email. They get read-only access |
| Edit | Change the deck name, description, or language settings |
| Duplicate | Creates a copy of the deck with all words. Review progress is reset (all words start as New) |
| Delete | Permanently removes the deck and all its words. This cannot be undone |
The nav bar shows a deck selector dropdown — you can switch between decks from any page without going back to the Decks page. All pages (Study, Vocabulary, Progress) are scoped to the active deck.
Due badge: Each deck card shows how many cards are due for review. An orange badge appears when cards are due, helping you prioritize which decks to study.
Official Curated Decks
Words on Repeat provides 185+ official curated decks across 12 languages, covering all CEFR levels from A1 (beginner) to C2 (mastery). Every word in these decks is quality-checked and includes rich study material.
What's included in every curated deck
- Example sentence — a natural sentence using the word in context
- Example translation — a translation of the example sentence in your native language
- Grammar notes — per-word grammar explanations (verb conjugation, gender agreement, usage rules)
- Grammar cards — dedicated flashcards that teach grammar concepts alongside vocabulary. Shown during study via the Grammar button on each card
- CEFR tags — every word is tagged with its CEFR level (A1, A2, B1, B2, C1, C2) and topic (greetings, travel, business, etc.)
Languages available
| Language | Decks | Levels |
|---|---|---|
| Spanish | 35 | A1–C2 + thematic |
| French | 31 | A1–C2 + thematic |
| German | 31 | A1–C2 + thematic |
| Italian | 27 | A1–C2 + thematic |
| English | 16 | A1–C2 |
| Polish | 12 | A1–B2 |
| Portuguese | 9 | A1–B2 |
| Dutch | 9 | A1–B2 |
| Japanese | 5 | A1–A2 |
| Korean | 5 | A1–A2 |
| Chinese | 5 | A1–A2 |
| Swiss German | 3 | A1–A2 |
How to use curated decks
- Go to Public Decks from the nav menu
- Filter by language, level, or search by topic
- Click Copy to my decks on any deck — all words, examples, grammar notes, and grammar cards are copied to your account
- Start studying immediately — all cards begin as New with full FSRS scheduling
All curated decks are free for all users, on all plans. No limits on how many you can copy.
Adding Words
Navigate to the Vocabulary page to manage your vocabulary. You can add words one at a time or import a file.
Each word can include:
- Word and Translation (required)
- Example sentence and its translation (optional but recommended)
- Tags (comma-separated) for organizing and filtering
Duplicate detection: If you add a word that already exists in the deck (case-insensitive match), you'll see a warning with the option to "Add Anyway" or cancel.
Search and filter: Use the search box to find words by text, the tag dropdown to filter by tag, and the state dropdown to show only New, Learning, Review, or Relearning cards.
Importing: You can import vocabulary from a file or paste data directly. Click the Import button on the Vocabulary page or on any deck card. See the full import guide for details.
AI Content Extraction
Extract vocabulary from any content source using AI. Navigate to the AI Extract page from the nav menu.
- Choose a source — paste text, enter a URL, or upload a file (TXT, PDF, DOCX)
- AI extracts vocabulary — the AI reads your content and returns words with translations and example sentences
- Preview and edit — review the extracted cards in a table, edit or remove any before saving
- Save to your deck — confirm and the cards are added to your active deck, ready to study
Free users get 5 extractions per month. See plans for higher limits.
Reviewing Cards
The Study page is the core of the app. Cards appear one at a time: you see the word, reveal the answer, then grade yourself.
- A card appears showing the word only.
- Press
Spaceor click the card to reveal the answer (translation + example). - Grade yourself using one of four buttons (or keys
1-4). - The app calculates the best time for your next review based on your grade.
- The next card loads automatically. When all due cards are done, you'll see "All caught up!"
Grade meanings
| Grade | Key | Meaning | Effect on scheduling |
|---|---|---|---|
| Again | 1 | Forgot the word | Reset to short interval, increases lapse count |
| Hard | 2 | Recalled with difficulty | Shorter next interval than normal |
| Good | 3 | Recalled correctly | Normal interval increase |
| Easy | 4 | Recalled effortlessly | Larger interval increase |
Tracking Progress
The Stats page shows comprehensive learning analytics for the active deck.
Key Metrics
| Metric | What it tells you |
|---|---|
| Total Words | Total vocabulary in the active deck |
| Due Now | Cards overdue for review — this is the number you see on each deck's badge |
| Reviewed Today | How many cards you've reviewed in today's sessions |
| Retention (30d) | Percentage of reviews where you answered correctly (not "Again") over the last 30 days. This is your memory accuracy |
| New / Learning / Review | Card counts by state: New (never reviewed), Learning (in initial reviews), Review (graduated to long intervals) |
Advanced & Developer Reference
Study Options
Session size limit
When you have many cards due, you can limit your session to a fixed number of cards. This is shown prominently at the top of the study page.
- Enter a number (e.g.
20or50) in the Session size input to cap how many unique cards you review. - Cards you grade as "Again" will loop back within the session — they don't count against your limit twice.
- When you finish the session, you'll see a "Session complete!" screen with a Continue reviewing button to start another batch.
- If you rated any cards Again or Hard, a Review weak cards button appears letting you immediately re-review only those cards before moving on.
- Leave the field empty (or clear filters) to review all due cards with no limit.
- Your session size is remembered across page reloads (stored in session storage).
Tip: Combine session size with tag or state filters. For example, filter by a tag with 100+ words and set session size to 20 to review in manageable chunks.
Review filters
Below the session size, you can filter by tags, state (New/Learning/Review), or mode (Due only vs. all cards). Filters and session size work together — for example, you can review only "New" cards from a specific tag, limited to 15 per session.
Reverse mode
Check the Reverse toggle in the filter bar to flip the card direction: the translation is shown on the front and you recall the foreign word. This is useful for practicing active recall (L1 → L2). Reverse mode works with all other filters and persists across page reloads via the URL.
Study Time Analytics
The Progress page tracks how much time you spend studying:
- Today's study time and number of sessions
- All-time total study time across all sessions
- Total sessions — each visit to the Study page that includes at least one card review counts as a session
- Average session length and average cards per session
- Total reviews — cumulative count of all card reviews ever
Sessions are tracked automatically. The Study page starts a timer when you begin, and saves the session when you finish or leave the page.
Charts
- Daily Reviews (30 days) — a bar chart showing how many reviews you did each day. Helps you see study consistency
- Due Forecast (7 days) — a strip showing how many cards will be due each upcoming day. Useful for planning when to study
Interpreting Your Retention Rate
- 90%+ — excellent. FSRS is scheduling optimally and your memory is strong
- 80-90% — good. Consider reviewing more frequently or reducing new cards per day
- Below 80% — you may be adding too many new cards or not reviewing often enough. Focus on clearing your due queue before adding new words
Importing Words
Words on Repeat provides an Import button on both the Vocabulary page and each deck card on the Decks page. Click it to open the import modal.
The import modal has two tabs:
- Upload File — select a
.jsonfile from your computer - Paste JSON — paste JSON directly (great for AI-generated output)
Word fields (strict validation)
The import modal performs strict field validation. Only the following field names are accepted — any unknown fields will be rejected with an error showing the allowed fields:
| Field | Required | Description |
|---|---|---|
word | Yes | The vocabulary word (e.g., "hola") |
translation | Yes | The translation (e.g., "czesc") |
example_sentence | No | An example sentence using the word |
example_translation | No | Translation of the example sentence |
tags | No | Comma-separated tags (e.g., "travel,A2") |
Example JSON:
[
{
"word": "Disparar",
"translation": "To skyrocket",
"example_sentence": "Lidl dispara su beneficio en España.",
"example_translation": "Lidl's profit is skyrocketing in Spain.",
"tags": "business,B2"
}
]
Common mistakes: Using definition instead of translation, context instead of example_sentence, or camelCase names like exampleSentence. The validation will catch these and show you the correct field names.
Both tabs accept two JSON formats:
- Bare array:
[{ "word": "...", "translation": "..." }] - Wrapped:
{ "words": [{ "word": "...", "translation": "..." }] }
Tags on import: Enter comma-separated tags in the "Tags to apply" field. These tags are applied to any imported words that don't already have tags set in the JSON. Words that already have tags in the JSON keep their original tags.
Duplicate handling: After importing, you'll see:
- How many words were successfully created
- A list of any duplicates that were skipped (case-insensitive match on the word text)
- An "Import anyway" button to force-add the duplicates as separate entries
Typical use cases:
- Paste AI-generated vocabulary from Claude or ChatGPT
- Upload a previously exported JSON backup
- Transfer words between decks (export from one, import to another)
- Bulk-add vocabulary from a textbook or word list
Daily Study Goals
You can set a daily study goal for each deck to stay consistent with your reviews.
- Where to set goals: Go to the Settings page, or click the pencil icon on the Study setup screen to edit your goal inline.
- Per-deck: Each deck has its own independent goal. Switching decks shows the goal for that deck.
- What it tracks: Total cards reviewed (all grades count). Re-reviews of cards graded "Again" within the same session don't double-count.
- Where progress shows: Nav bar indicator, Study setup page, session summary, and the Progress page banner.
- Soft goal: Goals never block studying — they're purely motivational. You can always review more or fewer cards than your goal.
- Disable: Set the goal to 0 to turn it off for a deck.
Push Notifications
Words on Repeat can send you a daily push notification when you have cards due for review.
- What's sent: A single daily reminder like "You have X cards waiting" — only when you have due cards.
- When: Once per day (server-side, default 9 AM UTC).
- How to enable: Go to Settings → Notifications → Enable, or click "Enable" on the dashboard prompt.
- How to disable: Go to Settings → Notifications → Disable, or use your browser's notification settings.
- Requirements: HTTPS, a browser with Push API support, and an active service worker.
- Max frequency: At most once per 20 hours, and only if you have due cards.
- No marketing: We only send study reminders — never promotional or marketing messages.
Install as App (PWA)
Words on Repeat is a Progressive Web App (PWA) that can be installed on your phone or desktop for a native-like experience.
- Install prompt: An install banner appears automatically when you visit the app in a compatible browser.
- Manual install: Use your browser menu → "Add to Home Screen" or "Install App".
- Offline: Static pages (CSS, JS, icons) are cached for fast loading. Study and vocabulary features require an internet connection for data sync.
- Benefit: Runs in its own window, no browser chrome, quick access from your home screen or taskbar.
Appearance (Light / Dark Mode)
You can toggle between light and dark themes to suit your preference.
- Toggle: Click the sun/moon icon in the nav bar, or go to Settings → Appearance.
- Three options: Light, Dark, or System (follows your OS preference).
- Default: Dark mode.
- Persistence: Your preference is saved in localStorage and restored on every visit.
- Cross-tab sync: Changing the theme in one tab syncs across all open tabs.
Understanding FSRS Details
Click the "Details" button on any word in the Vocabulary page to see its FSRS memory metrics. Here's what each metric means:
| Metric | Description |
|---|---|
| State | The card's current phase: New (never reviewed), Learning (first reviews), Review (graduated, on long intervals), or Relearning (forgotten, being re-learned). |
| Stability | How long your memory lasts, measured in days. At exactly stability days after a review, you have a 90% chance of remembering the word. Higher stability = stronger memory. |
| Difficulty | How hard this card is for you personally, on a 0-10 scale. Higher values mean the card is harder and gets shorter intervals. Unlike SM-2, difficulty uses mean reversion — it naturally decreases after consecutive correct answers. |
| Retrievability | The probability that you can recall this word right now, shown as a percentage. It starts at ~100% right after a review and decays over time following the forgetting curve. FSRS schedules reviews when this drops to ~90%. |
| Reviews | Total number of times you've reviewed this card. |
| Lapses | Number of times you forgot the card (graded "Again" after it had graduated to Review state). More lapses = the card is a "leech" that needs extra attention. |
| Last reviewed | When you last reviewed this card. |
| Next due | When FSRS has scheduled the next review. |
| Scheduled interval | The gap in days between the last review and the next due date. |
The FSRS Algorithm
Why FSRS
Words on Repeat uses FSRS (Free Spaced Repetition Scheduler) — the most accurate open-source spaced repetition algorithm available today. Created by Jarrett Ye and backed by peer-reviewed research published at ACM KDD 2022 and IEEE TKDE 2023, FSRS represents a generational leap over the 37-year-old SM-2 algorithm still used as Anki's default.
The core promise: FSRS achieves 20-30% fewer reviews than SM-2 at the same retention rate, or higher retention with the same number of reviews. This is validated across 727 million reviews from 10,000 users in the largest spaced repetition benchmark ever conducted.
How FSRS Works
FSRS models human memory using three core variables:
| Variable | Symbol | Description |
|---|---|---|
| Difficulty | D | How hard is this card to remember? Range: 1-10. Updated after each review. |
| Stability | S | How well is the memory stored? Measured in days — the time until retrievability drops to 90%. |
| Retrievability | R | What's the probability of recall right now? Decreases over time from 100% toward 0%. |
These three variables (the DSR model) work together to determine when to schedule each card. After each review, FSRS recalculates stability based on your grade:
The forgetting curve: FSRS models forgetting as a power function — more accurate than the exponential decay used by older algorithms. Your retrievability decreases over time after each review:
Key insight: The harder the card is for you specifically, the shorter the interval. The easier, the longer. This is personalized per card based on your review history.
FSRS vs SM-2 (Anki)
SM-2 was created in 1987. It's simple but has fundamental limitations by modern standards.
| Feature | SM-2 (Anki default) | FSRS (Words on Repeat) |
|---|---|---|
| Created | 1987 | 2022 |
| Memory model | Single "ease factor" | 3-variable DSR model |
| Forgetting curve | Not modeled at all | Explicitly modeled (power function) |
| Personalization | None — same formula for everyone | 21 parameters optimized per user |
| Trainable parameters | 0 | 21 |
| Desired retention | Fixed (~90%, not configurable) | Configurable (70%-97%) |
| After forgetting | Reset to 1 day, ease drops 20% | Calculated post-lapse stability |
| "Ease hell" | Yes — cards get permanently stuck | No — mean reversion prevents it |
| Interval calculation | Fixed multiplier: interval * ease | Derived from predicted retrievability |
| Review efficiency | Baseline | 20-30% fewer reviews at same retention |
The "Ease Hell" problem in SM-2: Once a card's ease factor drops to the minimum (130%), it never recovers with normal use. The card appears too frequently, wasting your time forever. FSRS solves this with mean reversion — after consecutive correct answers, difficulty naturally decreases back toward baseline.
Benchmark Results
From the open-spaced-repetition benchmark — the largest SRS evaluation ever conducted (727 million reviews, 10,000 users):
What this means in practice:
- FSRS predicts with high accuracy when you'll forget each card
- It schedules reviews at the mathematically optimal moment
- You review only when needed — no wasted sessions on cards you already know
- Difficult cards get more attention; easy cards get longer breaks
Import & Export
Go to Settings to import and export words for the active deck.
Export
Downloads all words from the active deck as a JSON file, including FSRS scheduling state. You can optionally filter by tag using the dropdown before clicking Export.
Import
Select a JSON file to import words. The import flow includes duplicate detection:
- Words that already exist in the deck (case-insensitive match) are skipped by default and listed.
- If duplicates are found, you'll see an "Import duplicates anyway" button to add them as separate entries.
- Words without FSRS data are imported as new cards. Words with FSRS data (from a previous export) retain their scheduling state.
Migrate from Quizlet
You can bring your Quizlet study sets into Words on Repeat using the built-in Quizlet import format.
Method 1: Copy & paste (easiest)
- Open your Quizlet study set
- Click the three dots (...) → Export
- Set separator to Tab between term and definition
- Set rows separated by New line
- Click Copy text
- In Words on Repeat, open a deck and click Import
- Select the Quizlet format tab → switch to Paste Text
- Paste the copied text and click Import
Your cards are immediately available for study with FSRS scheduling.
Note: Quizlet may require a paid plan to access the Export feature. If the export option isn't available, try Method 2.
Method 2: Use curated decks instead
If you were studying a language on Quizlet with community-made sets, the curated deck library may be a better starting point. Community Quizlet sets often have typos and no example sentences. The official Words on Repeat decks include grammar notes, example sentences with translations, and follow CEFR vocabulary standards.
For a detailed comparison of Quizlet vs Words on Repeat, see the full migration guide on the blog.
Deck Sharing
You can share your decks with other Words on Repeat users. Shared users get read-only access to view the deck and its words.
How to share a deck
- Go to the Decks page
- Click the Share button on any deck you own
- Enter the email address of the user you want to share with
- The deck will appear in their deck list marked as a shared deck
What shared users can do
| Action | Allowed? |
|---|---|
| View deck and word list | Yes |
| Search and filter words | Yes |
| Add, edit, or delete words | No |
| Review cards | No |
| Import words | No |
| Delete or modify the deck | No |
The deck owner can unshare at any time by clicking the share button again and removing the user. Sharing is per-user — each user must be added individually.
Use cases: Teachers sharing vocabulary lists with students, study groups using the same word sets, or creating a "master deck" for new users to reference.
Settings & API Keys
The Settings page provides account management and programmatic access.
API Keys
API keys allow external tools (scripts, AI assistants like Claude or ChatGPT) to read and write words and decks programmatically.
- Click "Generate Key" and enter an optional label
- The raw key is shown — click Copy to copy it to your clipboard, or Show to reveal it
- Use in HTTP requests:
Authorization: Bearer sk_your_key_here - Keys can be revoked at any time
Note: Only users with the api_user or admin role can create API keys. If you don't see the API Keys section, ask your admin to grant you the api_user role.
API keys can read/write words and decks but cannot perform destructive operations (deck delete, password change) or access study/progress endpoints — those require browser login.
Appearance
Choose your preferred theme: Light, Dark, or System (follows your OS setting). You can also toggle the theme using the sun/moon icon in the nav bar.
Notifications
Enable or disable daily push notification reminders. When enabled, you'll receive a notification when you have cards due for review. See the Push Notifications section for details.
Daily Study Goal
Set a daily review target for the active deck. See Daily Study Goals for details.
Change Password
Enter your current password and a new password (minimum 8 characters) to update your login credentials.
Import / Export (Settings page)
The Settings page also provides import/export for the active deck, with optional tag filtering on export. This is in addition to the Import modal available on the Vocabulary and Decks pages.
Admin & User Management
Admins can manage user accounts from the Admin page, accessible via Settings > User Management.
| Action | Description |
|---|---|
| Create user | Set display name, email, initial password, and roles |
| Edit user | Change name, email, roles, or status (active/inactive/locked) |
| Reset password | Set a new password for any user (minimum 8 characters) |
| Delete user | Permanently remove the user and all their data (decks, words, reviews). Cannot delete yourself |
| Unlock account | Change a locked user's status back to "active" after failed login lockout |
Roles
Each user can have one or more roles. Roles control what features are available:
| Role | What it grants |
|---|---|
user | Own decks, add/study words, view progress, change password |
api_user | Everything user can do, plus create and use API keys for programmatic access |
admin | Full access: user management, all features, API keys |
Users can have multiple roles at once (e.g., user + api_user).
Account Security
Words on Repeat includes several security measures to protect your account and data:
- Password hashing — passwords are stored as bcrypt hashes, not plain text
- Minimum password length — 8 characters enforced on all password operations
- Account lockout — after 3 consecutive failed login attempts, the account is automatically locked. An admin must unlock it from the Admin panel by setting the status back to "active"
- JWT security — tokens have 7-day expiry, stored in httpOnly cookies with sameSite strict (prevents CSRF attacks)
- API key security — keys are stored as SHA256 hashes in the database. The raw key (
sk_...) is shown only once at creation time. Use the Copy button to save it - Role-based access — destructive operations require JWT login (not API keys). Admin operations require the
adminrole. API key creation requiresapi_useroradmin - Inactive accounts — admins can set a user's status to "inactive" to prevent login without deleting their data
Deck Types
Words on Repeat supports two deck types:
- Language decks — The default type. Each card has a word and translation with optional example sentences. Requires source and target language (e.g., Spanish → English).
- Generic decks — For non-language content. Each card has a front and back instead of word/translation. Use for history, science, exam prep, or any topic. Set an optional subject field to describe the topic.
Choose the deck type when creating a new deck. The study experience, FSRS scheduling, and all features work identically for both types — only the labels change.
Card Types
Each word/card can be one of three types:
| Type | Format | Grading |
|---|---|---|
| Q&A (default) | Shows word, tap to reveal translation | Self-grade: Again / Hard / Good / Easy |
| Cloze | Sentence with blank: {{c1::answer::hint}} | Self-grade after reveal |
| Multiple Choice | Word + 2-6 answer options | Auto-grade: correct = Good, wrong = Again |
Cloze format: Store the sentence in the word field as The {{c1::cat::animal}} sat on the mat. During study, it displays as "The [animal] sat on the mat". Tap to reveal the answer.
MC format: Provide 2-6 options when adding the card. The first option is the correct answer (shuffled during study). Selecting the correct answer auto-grades as Good; wrong answers auto-grade as Again.
Study Modes
Words on Repeat offers three ways to study your cards during a review session:
| Mode | How it works | Best for |
|---|---|---|
| Standard | See the word, reveal the translation. Self-grade with Again/Hard/Good/Easy | Recognition — learning to understand words when you see them |
| Reverse | See the translation, recall the foreign word. Toggle via the Reverse checkbox in the study filter bar | Production — practicing active recall from meaning to target language |
| Recall | See the translation, type the word from memory. Auto-graded based on accuracy. Toggle via the Recall checkbox in the study filter bar | Spelling and deep recall — forces you to produce the exact word |
All three modes use FSRS scheduling and work with tag filters, state filters, and session size limits. Reverse and Recall can be combined with any other filter.
Deck scheduling modes
Each deck also has a scheduling mode that controls whether cards appear in the study queue:
- Active (default) — Normal FSRS scheduling. Cards appear when due.
- Paused — Deck is visible but cards never appear in the study queue. Due count shows as 0. Use for decks you want to take a break from.
- Reference — Cards can be browsed (next/previous) but no FSRS grades are recorded. Use for completed decks you want to look up.
Change the scheduling mode from the deck edit modal. Switching from Paused back to Active makes all overdue cards immediately available.
AI Content Extraction
Extract vocabulary from any content source using AI. Navigate to the AI Extract page from the nav menu.
How it works
- Choose a source — Three tabs: paste text, enter a URL, or upload a file (TXT, PDF, DOCX)
- AI extracts vocabulary — The AI reads your content and returns vocabulary words with translations, example sentences, and example translations
- Preview and edit — Review the extracted cards in a table. Edit, delete, or add cards before saving
- Confirm — Save the cards to your active deck. They start as new FSRS cards
Tier limits
| Limit | Free | Pro | Pro Max |
|---|---|---|---|
| Extractions | 5/month | 5/day (35/week) | 20/day (140/week) |
| Max characters | 10,000 | 100,000 | 250,000 |
| Max words extracted | 20 | 40 | 50 |
| File formats | TXT, URL | TXT, PDF, DOCX, URL | TXT, PDF, DOCX, URL |
| Max upload size | 2 MB | 10 MB | 25 MB |
| AI model | Amazon Nova 2 Lite (all tiers) | ||
AI Exercises
Generate practice exercises from your existing deck words. The AI creates new study material in three formats:
- Cloze — AI creates a sentence with the target word blanked out
- Multiple Choice — AI generates 3 plausible distractors for each word
- Q&A — AI reformulates the word/translation as a question and answer
Free users get 1 exercise generation per day. Pro gets 10/day. Pro Max gets 30/day. Pro and Pro Max users can save generated exercises as new cards in the deck.
Daily Context Sentences
Each day, the AI generates a natural sentence using 3-5 of your recently studied words. This helps you see vocabulary used in context and reinforces memory through meaningful connections.
The sentence is cached for the day (one per deck). Pro Max users can regenerate with different styles: formal, casual, story, or dialogue. Access daily sentences from the study page at the start of each session.
YouTube Import
Import vocabulary from YouTube video subtitles. Available on Pro (3/day) and Pro Max (5/day).
- Navigate to the AI Extract page
- Paste a YouTube video URL (standard watch URLs, short links, and embed URLs supported)
- The system fetches subtitles (auto-generated or manual captions)
- AI extracts vocabulary from the subtitle text using the same extraction pipeline
- Preview, edit, and save cards to your deck
Works with any language that has captions available on the video.
Smart Duplicate Detection
When adding words or importing vocabulary, the system checks for duplicates at up to three levels:
| Level | Method | Available |
|---|---|---|
| L1 — Exact | Case-insensitive word match within the deck | All plans |
| L2 — Normalized | Strips diacritics, articles (the/el/le/der), whitespace. Compares normalized forms | Pro+ |
| L3 — Semantic | AI checks for synonyms and near-duplicates among existing deck words | Pro Max |
When a duplicate is detected, you see a warning with the match level. You can choose to add the word anyway or skip it.
Quiz Games
Four game modes for testing your vocabulary. Navigate to the Quiz page from the nav menu. All games require at least 4 words in the deck.
- Match — Tap word-translation pairs to match them. Pairs disappear when correctly matched.
- Write — See the translation, type the word from memory. Includes a first-letter hint.
- Multiple Choice — Answer MC questions generated from your deck words. 4 options per question.
- Race — Timed match game with a countdown. Score based on speed and accuracy.
Quiz games don't call AI — they generate questions from your existing deck data.
Test Export
Export printable vocabulary tests in two formats:
- HTML (all tiers) — Clean printable page with questions. Open in browser and print.
- PDF (Pro+) — A4 document with questions and an optional answer key on a separate page.
| Limit | Free | Pro | Pro Max |
|---|---|---|---|
| Max questions | 10 | 30 | 50 |
| HTML export | Yes | Yes | Yes |
| PDF export | No | Yes | Yes |
Anki Import/Export
Import and export Anki deck packages (.apkg files). Available on Pro and Pro Max.
Import
- Click Import Anki on the Decks page
- Upload a .apkg file
- Preview the extracted notes (front/back fields)
- Choose to create a new deck or add to an existing one
- Confirm to save all cards
Export
Click Export Anki on the Vocabulary page to download your deck as a .apkg file. Pro Max exports include FSRS scheduling metadata so your review history transfers to Anki.
Free users can still import and export vocabulary via JSON.
Browser Extension
The Words on Repeat Chrome extension lets you save vocabulary from any webpage.
- Double-click any word on a webpage to see a save tooltip
- Right-click selected text and choose "Save to Words on Repeat"
- Auto-translate — click the translate button in the popup to get an AI translation
- Deck selector — choose which deck to save words to from the popup
The extension works with all plans. Log in with your Words on Repeat account through the extension popup. Recently saved words are tracked in the popup for quick reference.
REST API Reference
Words on Repeat exposes 30+ REST endpoints for programmatic access. You can use these from scripts, AI assistants, or external tools.
Authentication
All endpoints (except login and /api/spec) require authentication. Two methods are supported:
- JWT cookie — automatic in the browser after login.
- API key header —
Authorization: Bearer sk_your_key_here. Generate keys in Settings.
Endpoints marked JWT only require browser login — API keys are not accepted for destructive operations (deck delete, password change) or study/progress endpoints.
API Spec (Machine-Readable)
Fetch /api/spec (no auth required) to get a compact JSON description of every endpoint, including auth requirements, request bodies, query parameters, and response shapes. This is designed for LLMs and AI tools to discover the API programmatically.
Endpoints
Auth
| Method | Endpoint | Auth | Description |
|---|---|---|---|
POST | /api/auth/login | None | Login with { email, password } |
POST | /api/auth/logout | None | Clear session cookie |
GET | /api/auth/me | JWT only | Get current user info. Returns { userId, username, email, roles } |
PUT | /api/auth/password | JWT only | Change password { currentPassword, newPassword } (min 8 chars) |
Admin
All admin endpoints require JWT with the admin role.
| Method | Endpoint | Auth | Description |
|---|---|---|---|
GET | /api/admin/users | JWT (admin) | List all users |
POST | /api/admin/users | JWT (admin) | Create user { username, email, password, roles? }. Password min 8 chars. Roles is a string array, default ["user"] |
PUT | /api/admin/users/:id | JWT (admin) | Update user { roles?, status?, email?, username? } |
PUT | /api/admin/users/:id/password | JWT (admin) | Reset user password { password } (min 8 chars) |
DELETE | /api/admin/users/:id | JWT (admin) | Delete user and all their data. Cannot delete self |
Roles: Users can have multiple roles stored as an array: admin, user, api_user. The admin role grants access to user management. The api_user role (or admin) allows creating API keys.
Decks
| Method | Endpoint | Auth | Description |
|---|---|---|---|
GET | /api/decks | JWT or Key | List all decks with word_count and due_count |
GET | /api/decks/:id | JWT or Key | Get deck with detailed stats |
POST | /api/decks | JWT or Key | Create deck { name, description?, source_lang?, target_lang? } |
PUT | /api/decks/:id | JWT or Key | Update deck fields |
DELETE | /api/decks/:id | JWT only | Delete deck and all its words (cascade) |
POST | /api/decks/:id/duplicate | JWT or Key | Duplicate deck with all words (FSRS state reset) |
Deck Sharing
| Method | Endpoint | Auth | Description |
|---|---|---|---|
GET | /api/decks/:id/shares | JWT or Key | List users a deck is shared with (owner only) |
POST | /api/decks/:id/shares | JWT or Key | Share deck with user { email } (owner only). Returns 404 if user not found, 409 if already shared |
DELETE | /api/decks/:id/shares/:userId | JWT or Key | Unshare deck with user (owner only) |
Vocabulary
All list/create operations require deck_id parameter.
| Method | Endpoint | Auth | Description |
|---|---|---|---|
GET | /api/vocabulary?deck_id=N | JWT or Key | List words (paginated). Optional: search, tags, state, page, limit |
GET | /api/vocabulary/:id | JWT or Key | Get single word by ID |
POST | /api/vocabulary | JWT or Key | Create word { deck_id, word, translation, ... }. Returns 409 on duplicate |
POST | /api/vocabulary/batch | JWT or Key | Batch create { deck_id, words: [...] }. Skips duplicates by default |
PUT | /api/vocabulary/:id | JWT or Key | Update word fields |
DELETE | /api/vocabulary/:id | JWT or Key | Delete word |
Study
| Method | Endpoint | Auth | Description |
|---|---|---|---|
GET | /api/study?deck_id=N | JWT only | Get due cards. Optional: tags, state, mode, limit |
GET | /api/study/tags?deck_id=N | JWT only | Get all tags used in this deck |
POST | /api/study/:id | JWT only | Grade a card { rating: 1|2|3|4 } |
Progress
| Method | Endpoint | Auth | Description |
|---|---|---|---|
GET | /api/progress?deck_id=N | JWT only | Full statistics for the deck |
POST | /api/progress/session | JWT only | Save study session { started_at, ended_at, duration_ms, cards_reviewed?, deck_id? } |
Import / Export
| Method | Endpoint | Auth | Description |
|---|---|---|---|
POST | /api/import | JWT only | Import words { words: [...], deck_id }. Skips duplicates by default |
GET | /api/export?deck_id=N | JWT only | Export words as JSON. Optional tags filter |
API Keys
| Method | Endpoint | Auth | Description |
|---|---|---|---|
GET | /api/keys | JWT only | List all API keys |
POST | /api/keys | JWT only | Generate new key { label? }. Returns raw key (shown once) |
DELETE | /api/keys/:id | JWT only | Revoke an API key |
Error Responses
All errors return JSON with an error field, e.g. { "error": "deck_id is required" }
| Status | Meaning |
|---|---|
400 | Bad request (missing/invalid parameters) |
401 | Unauthorized (missing or invalid credentials) |
403 | Forbidden (insufficient permissions, e.g., non-admin accessing admin routes, or writing to a read-only shared deck) |
404 | Resource not found |
409 | Conflict (duplicate word exists) |
500 | Server error |
Vocabulary Generation
The easiest way to generate vocabulary is using the built-in AI Extract feature. Paste text, enter a URL, upload a file, or use a YouTube video — the AI extracts vocabulary automatically and adds it to your deck.
For advanced users, you can also import words via the REST API. See the API Endpoints section for POST /api/vocabulary/batch.
Keyboard Shortcuts
| Key | Context | Action |
|---|---|---|
Space / Enter | Review | Reveal the answer |
1 | Review (answer shown) | Grade as Again |
2 | Review (answer shown) | Grade as Hard |
3 | Review (answer shown) | Grade as Good |
4 | Review (answer shown) | Grade as Easy |