Skip to main content

Free API for conjugating Russian verbs in all tenses (present, past, future)

Project description

ru-api-free

Free REST API for Russian morphology: verb conjugation, noun pluralisation, noun case declension, and adjective declension. Translate words from any language to Russian — if it's a verb, you get full conjugation.

Live API: https://ru-api-free.onrender.com

Website frontend: https://ru-api-free.onrender.com/site

PyPI package: ru-api-free

GitHub repo: faharht1/ru-api-free


Quick Start

# Translate + conjugate any verb
curl "https://ru-api-free.onrender.com/translate?text=speak"

# Pluralise a noun
curl "https://ru-api-free.onrender.com/pluralise?text=house"

# Decline a noun (all 6 cases × 2 numbers)
curl "https://ru-api-free.onrender.com/decline?text=book"

# Decline an adjective (all genders × 6 cases)
curl "https://ru-api-free.onrender.com/decline-adjective?text=new"

# Get aspect pair (imperfective ↔ perfective)
curl "https://ru-api-free.onrender.com/aspect-pair?text=speak"
curl "https://ru-api-free.onrender.com/aspect-pair?text=читать"
const res = await fetch("https://ru-api-free.onrender.com/translate?text=speak");
const data = await res.json();
console.log(data.verb, data.tenses.present["я"]); // "говорить говорю"
import requests

r = requests.get("https://ru-api-free.onrender.com/translate", params={"text": "speak"})
print(r.json()["tenses"]["present"]["я"])  # "говорю"

API Endpoints

Endpoint overview

Endpoint Description
GET /translate Translate any word; if it's a verb, conjugate it
GET /conjugate Conjugate a Russian verb directly
GET /verbs List all supported Russian verbs
GET /search Search verbs by substring
GET /exceptions List all conjugation exceptions
GET /exceptions/{verb} Get exceptions for a specific verb
GET /pluralise Pluralise a noun
GET /decline Decline a noun (6 cases × singular/plural)
GET /decline-adjective Decline an adjective (2 genders × 6 cases + plural)
GET /aspect-pair Get aspect pair (imperfective ↔ perfective) with both conjugated
GET /site Interactive web UI

1. Translate + Conjugate

GET /translate?text={word}&source=auto&target=ru
Param Default Description
text Word to translate (required)
source auto Source language code
target ru Target language code

Behaviour:

  • If the translated word is a known Russian verb → returns full conjugation table
  • If it's a noun / other → returns just the translation
  • Supports any language via auto-detect

Examples:

# English verb → conjugation
curl "https://ru-api-free.onrender.com/translate?text=speak"

# German verb → conjugation
curl "https://ru-api-free.onrender.com/translate?text=sprechen&source=de"

# French verb → conjugation
curl "https://ru-api-free.onrender.com/translate?text=lire&source=fr"

# Spanish verb → conjugation
curl "https://ru-api-free.onrender.com/translate?text=hablar&source=es"

# Noun → translation only
curl "https://ru-api-free.onrender.com/translate?text=house"

# Russian → English
curl "https://ru-api-free.onrender.com/translate?text=читать&source=ru&target=en"

# Polish word → translation
curl "https://ru-api-free.onrender.com/translate?text=pić&source=pl"

Response (verb):

{
  "verb": "говорить",
  "aspect": "imperfective",
  "conjugation_type": 2,
  "reflexive": false,
  "tenses": {
    "present": { "я": "говорю", "ты": "говоришь", "он/она/оно": "говорит", "мы": "говорим", "вы": "говорите", "они": "говорят" },
    "past": { "мужской": "говорил", "женский": "говорила", "средний": "говорило", "множественное": "говорили" },
    "future": { "я": "буду говорить", "ты": "будешь говорить", "он/она/оно": "будет говорить", "мы": "будем говорить", "вы": "будете говорить", "они": "будут говорить" }
  },
  "original": "speak",
  "translated": "говорить",
  "source_lang": "en"
}

Response (noun):

{
  "original": "house",
  "translated": "дом",
  "source_lang": "en",
  "note": "дом is not a verb in our dictionary"
}

2. Direct Conjugation

GET /conjugate?verb={verb}

Conjugate a Russian verb directly without translation.

Param Description
verb Russian infinitive (required)
curl "https://ru-api-free.onrender.com/conjugate?verb=читать"
curl "https://ru-api-free.onrender.com/conjugate?verb=говорить"
curl "https://ru-api-free.onrender.com/conjugate?verb=мыть"

Returns the same response format as /translate but without original, translated, or source_lang fields.


3. List all verbs

GET /verbs

Returns a JSON object with all supported Russian verbs grouped by conjugation type.

curl "https://ru-api-free.onrender.com/verbs"

4. Search verbs

GET /search?q={query}

Search the verb dictionary by substring.

Param Description
q Search query (required)
curl "https://ru-api-free.onrender.com/search?q=чит"
curl "https://ru-api-free.onrender.com/search?q=гов"

Returns matching verbs with conjugation type, stem, and endings.


5. Pluralise (nouns)

GET /pluralise?text={word}&source=auto

Translate any word to Russian and get its plural form. Handles 150+ irregular plurals.

Param Default Description
text Word to pluralise (required)
source auto Source language code
curl "https://ru-api-free.onrender.com/pluralise?text=house"
curl "https://ru-api-free.onrender.com/pluralise?text=Haus&source=de"
curl "https://ru-api-free.onrender.com/pluralise?text=дом"
curl "https://ru-api-free.onrender.com/pluralise?text=книга"
curl "https://ru-api-free.onrender.com/pluralise?text=окно"

Response:

{
  "singular": "дом",
  "plural": "дома",
  "gender": "masculine",
  "original": "house",
  "translated": "дом",
  "source_lang": "en"
}

Irregulars covered: человек → люди, ребёнок → дети, друг → друзья, сын → сыновья, брат → братья, муж → мужья, дерево → деревья, лист → листья, стул → стулья, платье → платья, крыло → крылья, перо → перья, ухо → уши, плечо → плечи, колено → колени, яблоко → яблоки, облако → облака, море → моря, поле → поля, сердце → сердца, апельсин → апельсины, помидор → помидоры, сосед → соседи, чертёнок → чертенята, иностранец → иностранцы, славянин → славяне, римлянин → римляне, цыган → цыгане, господин → господа, хозяин → хозяева, шурин → шурья, кум → кумовья, князь → князья — and 120+ more.


6. Decline (noun cases)

GET /decline?text={word}&source=auto&animate=false

Translate any word to Russian and get all 6 noun cases in singular and plural.

Param Default Description
text Word to decline (required)
source auto Source language code
animate false If true, accusative = genitive for masculine animate nouns
curl "https://ru-api-free.onrender.com/decline?text=house"
curl "https://ru-api-free.onrender.com/decline?text=дом"
curl "https://ru-api-free.onrender.com/decline?text=книга"
curl "https://ru-api-free.onrender.com/decline?text=море"
curl "https://ru-api-free.onrender.com/decline?text=мать"
curl "https://ru-api-free.onrender.com/decline?text=ими"
curl "https://ru-api-free.onrender.com/decline?text=Haus&source=de"

Response:

{
  "word": "дом",
  "gender": "masculine",
  "declension": "first",
  "singular": {
    "nominative": "дом",
    "genitive": "дома",
    "dative": "дому",
    "accusative": "дом",
    "instrumental": "домом",
    "prepositional": "доме"
  },
  "plural": {
    "nominative": "дома",
    "genitive": "домов",
    "dative": "домам",
    "accusative": "дома",
    "instrumental": "домами",
    "prepositional": "домах"
  },
  "original": "house",
  "translated": "дом",
  "source_lang": "en"
}

Special nouns handled: путь, дитя, мать, дочь, время, имя, бремя, вымя, знамя, пламя, племя, семя, стремя, темя, and other -мя neuters. Also handles feminine nouns ending in -ь (мышь, дверь, площадь, любовь, etc.).


7. Decline Adjective

GET /decline-adjective?text={adj}&source=auto&animate=false

Decline a Russian adjective in all genders and cases. Enter the masculine nominative form.

Param Default Description
text Adjective to decline (required)
source auto Source language code
animate false If true, accusative = genitive for masculine and plural
curl "https://ru-api-free.onrender.com/decline-adjective?text=new"
curl "https://ru-api-free.onrender.com/decline-adjective?text=новый"
curl "https://ru-api-free.onrender.com/decline-adjective?text=neu&source=de"
curl "https://ru-api-free.onrender.com/decline-adjective?text=синий"
curl "https://ru-api-free.onrender.com/decline-adjective?text=хороший"
curl "https://ru-api-free.onrender.com/decline-adjective?text=большой"
curl "https://ru-api-free.onrender.com/decline-adjective?text=маленький"

Response:

{
  "adjective": "новый",
  "type": "hard",
  "forms": {
    "masculine": {
      "nominative": "новый",
      "genitive": "нового",
      "dative": "новому",
      "accusative": "новый",
      "instrumental": "новым",
      "prepositional": "новом"
    },
    "feminine": {
      "nominative": "новая",
      "genitive": "новой",
      "dative": "новой",
      "accusative": "новую",
      "instrumental": "новой",
      "prepositional": "новой"
    },
    "neuter": {
      "nominative": "новое",
      "genitive": "нового",
      "dative": "новому",
      "accusative": "новое",
      "instrumental": "новым",
      "prepositional": "новом"
    },
    "plural": {
      "nominative": "новые",
      "genitive": "новых",
      "dative": "новым",
      "accusative": "новые",
      "instrumental": "новыми",
      "prepositional": "новых"
    }
  },
  "original": "new",
  "translated": "новый",
  "source_lang": "en"
}

Adjective types supported:

Type Ending Examples
hard -ый новый, белый, старый, красный
hard_stressed -ой (non-sibilant) прямой, простой, рябой
soft -ий (after soft consonant) синий, древний, летний
sibilant -ий (after ш, ж, ч, щ) хороший, свежий, горячий
sibilant_stressed -ой (after sibilant) большой, чужой
velar -ий (after г, к, х) маленький, русский, великий

8. Aspect Pair

GET /aspect-pair?text={verb}&source=auto

Enter any verb (in any language) and get its aspect pair — the imperfective ↔ perfective counterpart — with both verbs fully conjugated side by side.

Param Default Description
text Verb to get aspect pair for (required)
source auto Source language code

Covers 200+ verb pairs including prefixes (делать → сделать, читать → прочитать), suppletive pairs (говорить → сказать, брать → взять), and suffix pairs (прыгать → прыгнуть).

curl "https://ru-api-free.onrender.com/aspect-pair?text=speak"
curl "https://ru-api-free.onrender.com/aspect-pair?text=читать"
curl "https://ru-api-free.onrender.com/aspect-pair?text=kaufen&source=de"
curl "https://ru-api-free.onrender.com/aspect-pair?text=сказать"

Response:

{
  "verb": "говорить",
  "aspect": "imperfective",
  "pair_type": "suppletive",
  "counterpart": "сказать",
  "counterpart_aspect": "perfective",
  "main_verb": { "verb": "говорить", "aspect": "imperfective", "tenses": { ... } },
  "counterpart_verb": { "verb": "сказать", "aspect": "perfective", "tenses": { ... } },
  "note": "Completely different roots (говор- vs скаж-)",
  "original": "speak",
  "translated": "говорить",
  "source_lang": "en"
}

Pair types:

  • prefix — perfective formed by adding a prefix (делать → с-делать)
  • suppletive — different roots/ stems (говорить → сказать)
  • likely_prefix — inferred from existing data

9. Exceptions

GET /exceptions
GET /exceptions/{verb}

List all conjugation exceptions, or get detailed exception info for a specific verb.

curl "https://ru-api-free.onrender.com/exceptions"
curl "https://ru-api-free.onrender.com/exceptions/брить"
curl "https://ru-api-free.onrender.com/exceptions/гнать"

Exception types returned:

  • сти verbs (нести, вести, etc.)
  • чь verbs (мочь, печь, etc.)
  • 1st-conjugation ить verbs (брить, стелить)
  • 2nd-conjugation ать/ять/еть verbs (гнать, держать, слышать, etc.)
  • оватьую verbs (требовать, рисовать)
  • нуть verbs (гибнуть, мёрзнуть)
  • ереть verbs (тереть, умереть)
  • олатьолю verbs (колоть, полоть)
  • оватьую with consonant mutation
  • зтиззу verbs (везти, лезть)
  • стислу verbs (расти, цвести)
  • стисду verbs (блясти, чести)
  • еречьрегу verbs (беречь, стеречь)
  • иватьую verbs
  • Miscellaneous (ехать, дать, есть)

10. Interactive Web UI

GET /site

Opens a full-featured web interface with tabs for Conjugate, Pluralise, Decline, Decline Adj, and Aspect Pair modes. Includes a language selector dropdown for source language.

https://ru-api-free.onrender.com/site

Python Library (no server needed)

Install the package and use it directly:

pip install ru-api-free
from ru_api_free import (
    conjugate, search_verbs, list_verbs,
    translate, translate_en_to_ru,
    pluralise, pluralise_with_info,
    decline, decline_with_info,
    decline_adjective, decline_adjective_with_info,
    get_aspect_pair,
    get_exceptions, get_verb_exceptions, EXCEPTION_TYPES,
)

Conjugation

result, status = conjugate("читать")
print(result["tenses"]["present"]["я"])   # читаю
print(result["tenses"]["past"]["женский"])  # читала
print(result["tenses"]["future"]["мы"])    # будем читать

Translation

russian = translate("speak", source="auto", target="ru")
print(russian)  # говорить

# Also returns Russian from English directly
eng = translate_en_to_ru("house")
print(eng)  # дом

Pluralise

info = pluralise("дом")
print(info["singular"], "→", info["plural"])  # "дом → дома"

# With metadata
info2 = pluralise_with_info("книга")
print(info2["gender"])       # feminine
print(info2["plural"])        # книги
print(info2["singular"])      # книга

Noun Declension

cases = decline("дом")
print(cases["singular"]["genitive"])   # дома
print(cases["plural"]["dative"])       # домам

# With metadata
cases2 = decline_with_info("книга")
print(cases2["gender"])               # feminine
print(cases2["declension"])           # second
print(cases2["plural"]["accusative"])  # книги

Adjective Declension

adj = decline_adjective("новый")
print(adj["masculine"]["instrumental"])  # новым
print(adj["feminine"]["accusative"])     # новую
print(adj["plural"]["prepositional"])    # новых

# With type info
adj2 = decline_adjective_with_info("хороший")
print(adj2["type"])   # sibilant
print(adj2["forms"]["feminine"]["genitive"])  # хорошей

### Aspect Pair

```python
pair = get_aspect_pair("читать")
print(pair["perfective"])  # прочитать
print(pair["type"])        # prefix

pair2 = get_aspect_pair("сказать")
print(pair2["imperfective"])  # говорить
print(pair2["type"])          # suppletive

### Search & List

```python
verbs = list_verbs()  # all verbs by conjugation type
results = search_verbs("чит")
print(results)  # matching verbs

Exceptions

all_exceptions = get_exceptions()
print(all_exceptions.keys())  # exception type names

verb_ex = get_verb_exceptions("брить")
print(verb_ex)

Self-Hosting

Option 1: pip install

pip install ru-api-free
ru-api-free
# Server starts at http://0.0.0.0:8000

Option 2: Direct uvicorn

pip install ru-api-free uvicorn
python -m uvicorn ru_api_free.main:app --host 127.0.0.1 --port 5000

Option 3: Render deployment

  1. Fork the repo: https://github.com/faharht1/ru-api-free
  2. Connect to Render as a Web Service
  3. Start command: uvicorn ru_api_free.main:app --host 0.0.0.0 --port $PORT
  4. Deploy

CORS is enabled for all origins — use it directly from any website.


Language Codes

auto  - Auto-detect
en    - English
ru    - Russian
de    - German
fr    - French
es    - Spanish
it    - Italian
pt    - Portuguese
nl    - Dutch
pl    - Polish
uk    - Ukrainian
be    - Belarusian
bg    - Bulgarian
cs    - Czech
sk    - Slovak
sr    - Serbian
hr    - Croatian
tr    - Turkish
ar    - Arabic
zh    - Chinese
ja    - Japanese
ko    - Korean

Pass source=pl for Polish words, source=de for German words, etc.


CLI Usage

When installed via pip, the ru-api-free command starts the server:

ru-api-free
# Running on http://0.0.0.0:8000

Or use --port to change the port (check ru-api-free --help for options).

CORS is enabled for all origins.


Local Development

git clone https://github.com/faharht1/ru-api-free.git
cd ru-api-free

# Install in editable mode
pip install -e .

# Start dev server
python -m uvicorn ru_api_free.main:app --host 127.0.0.1 --port 5000 --reload

# Open http://127.0.0.1:5000/site

Response Format Summary

All endpoints return JSON. Common fields:

Field Description
original The original input word (if applicable)
translated The Russian translation (if applicable)
source_lang Detected or provided source language
note / message Error or informational message
tenses Verb conjugation table (present / past / future)
singular / plural Noun case tables (decline) or plural (pluralise)
masculine / feminine / neuter / plural Adjective case tables

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ru_api_free-1.6.0.tar.gz (47.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ru_api_free-1.6.0-py3-none-any.whl (42.0 kB view details)

Uploaded Python 3

File details

Details for the file ru_api_free-1.6.0.tar.gz.

File metadata

  • Download URL: ru_api_free-1.6.0.tar.gz
  • Upload date:
  • Size: 47.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for ru_api_free-1.6.0.tar.gz
Algorithm Hash digest
SHA256 39960b2b7224221684f8ffe180a981c2cfd3eba22901507e4fd8dc7dbadabcdb
MD5 b38de93e17087461ac1d357405c3902c
BLAKE2b-256 69c717131f9e691523cd3e6f2dc49e9b7badf95f88e8a156795695e2455060c2

See more details on using hashes here.

File details

Details for the file ru_api_free-1.6.0-py3-none-any.whl.

File metadata

  • Download URL: ru_api_free-1.6.0-py3-none-any.whl
  • Upload date:
  • Size: 42.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for ru_api_free-1.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 90c40be778a2b36297effc9748a3de8a97dea8faffb352bc64c81c090f29a13a
MD5 600c193dc9b85da59c9db12a49871698
BLAKE2b-256 041d51df7c276a49fd9f49023cfe4b42204e75949f955ac8260ee2c48936e623

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page