Introduction
Welcome to the Latin Translation API documentation. This free, public API provides comprehensive bidirectional Latin-English translation, grammatical analysis, and declension/conjugation charts powered by Whitaker's Words.
Key Features
- No authentication required
- Free to use for personal and commercial projects
- JSON responses for easy integration
- Bidirectional Latin-English translation
- Support for all 8 parts of speech
- Complete grammatical analysis
- Declension and conjugation charts
- Full sentence parsing with pattern detection
- Comprehensive grammar reference for 8 topics
Getting Started
Making your first API call is simple. No API key or authentication is required.
Base URL
https://latin.71m.us
Quick Example
curl https://latin.71m.us/latin/gloria
Authentication
No authentication is required. All endpoints are publicly accessible. Simply make HTTP GET requests to the endpoints below.
API Endpoints
Word Lookup
Look up any Latin word to get its definition, grammatical analysis, and optionally its declension/conjugation chart.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
word required |
string | The Latin word to look up (e.g., "gloria", "amare", "rex") |
Query Parameters
| Parameter | Type | Description |
|---|---|---|
withChart optional |
boolean | Include declension/conjugation chart data (default: false) |
Example Request
curl "https://latin.71m.us/latin/gloria?withChart=true"
fetch('https://latin.71m.us/latin/gloria?withChart=true')
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
import requests
response = requests.get('https://latin.71m.us/latin/gloria',
params={'withChart': 'true'})
data = response.json()
print(data)
$url = 'https://latin.71m.us/latin/gloria?withChart=true';
$response = file_get_contents($url);
$data = json_decode($response, true);
print_r($data);
Example Response
{
"translations": [
{
"inflections": [
{
"stem": "glori",
"ending": "a",
"pos": "noun",
"declension": 1,
"case": "nom",
"number": 1,
"gender": "feminine"
}
],
"forms": ["gloria", "gloriae"],
"definitions": ["glory, fame, renown, praise, honor"]
}
]
}
English to Latin Translation
Translate English words to Latin and get multiple translation options with grammatical information.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
word required |
string | The English word or phrase to translate (e.g., "love", "re-enter", "mother-in-law") |
Normalization: The API normalizes English input by stripping punctuation and handling compound words. For example, love! and re-enter are supported.
Example Request
curl "https://latin.71m.us/english/love"
fetch('https://latin.71m.us/english/love')
.then(response => response.json())
.then(data => console.log(data));
import requests
response = requests.get('https://latin.71m.us/english/love')
data = response.json()
Response
{
"word": "love",
"data": {
"translations": [
{
"forms": ["amor", "amoris"],
"inflections": [...],
"definitions": ["love; affection; the beloved; Cupid; affair; passion"]
},
{
"forms": ["amo", "amare", "amavi", "amatus"],
"inflections": [...],
"definitions": ["love, like; fall in love with; be fond of"]
}
]
}
}
Batch Translation
Translate multiple English words at once:
curl -X POST "https://latin.71m.us/english/batch" \
-H "Content-Type: application/json" \
-d '{"words": ["love", "peace", "war"]}'
Random English Word
Get a random English word with its Latin translation:
curl "https://latin.71m.us/english/random"
Batch Lookup
Look up multiple Latin words in a single request to reduce API calls and improve efficiency.
Request Body
| Field | Type | Description |
|---|---|---|
words required |
array | Array of Latin words to lookup (max 50 words) |
withChart optional |
boolean | Include charts for all words (default: false) |
Example Request
curl -X POST "https://latin.71m.us/latin/batch" \
-H "Content-Type: application/json" \
-d '{"words": ["gloria", "amor", "pax"]}'
fetch('https://latin.71m.us/latin/batch', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
words: ['gloria', 'amor', 'pax']
})
})
.then(response => response.json())
.then(data => console.log(data));
import requests
response = requests.post(
'https://latin.71m.us/latin/batch',
json={'words': ['gloria', 'amor', 'pax']}
)
data = response.json()
print(data)
Example Response
{
"total": 3,
"successful": 3,
"failed": 0,
"results": [
{
"word": "gloria",
"success": true,
"data": {
"translations": [...]
}
},
{
"word": "amor",
"success": true,
"data": {
"translations": [...]
}
},
{
"word": "pax",
"success": true,
"data": {
"translations": [...]
}
}
]
}
Error Handling
If a word is not found or invalid, it will be marked with success: false in the results, but the request will still return 200 OK with partial results.
{
"word": "invalidword123",
"success": false,
"error": "Word not found"
}
Random Word
Get a random Latin word, useful for practice or study applications.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
difficulty optional |
string | Difficulty level: beginner, intermediate, advanced, verbs, mixed (default: mixed) |
definition optional |
boolean | Include word definition (default: true) |
chart optional |
boolean | Include chart data (default: false) |
Example Request
curl "https://latin.71m.us/latin/random?difficulty=beginner"
fetch('https://latin.71m.us/latin/random?difficulty=beginner')
.then(response => response.json())
.then(data => console.log(data));
import requests
response = requests.get('https://latin.71m.us/latin/random',
params={'difficulty': 'beginner'})
print(response.json())
Word of the Day
Get a consistent daily Latin word. All users see the same word for any given date.
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
date |
string | today | Date in YYYY-MM-DD format |
Example
curl "https://latin.71m.us/word-of-day"
fetch('https://latin.71m.us/word-of-day')
.then(response => response.json())
.then(data => console.log(data));
import requests
response = requests.get('https://latin.71m.us/word-of-day')
print(response.json())
Archive
View past words of the day:
curl "https://latin.71m.us/word-of-day/archive?limit=7"
Example Response
{
"date": "2026-02-14",
"word": "venio",
"difficulty": "verbs",
"summary": {
"definition": "come",
"part_of_speech": "verb",
"forms": ["venio", "venire", "veni", "ventus"]
},
"definition": {
"translations": [
{
"forms": ["venio", "venire", "veni", "ventus"],
"inflections": [...],
"definitions": ["come"]
}
]
}
}
Example Sentences
Get example sentences showing Latin words in context with translations and literary sources.
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
limit |
integer | 5 | Maximum examples to return (1-20) |
difficulty |
string | null | Filter by difficulty: beginner, intermediate, advanced |
author |
string | null | Filter by author name (e.g., Cicero, Vergil) |
Example
curl "https://latin.71m.us/latin/amor/examples"
Response
{
"word": "amor",
"total_available": 2,
"examples": [
{
"id": 1,
"latin": "Omnia vincit amor.",
"english": "Love conquers all.",
"source": {
"author": "Vergil",
"work": "Eclogues",
"reference": "10.69"
},
"difficulty": "beginner"
}
]
}
Declension & Conjugation Charts
Get complete declension (for nouns, adjectives) or conjugation (for verbs) charts.
Example Request
curl "https://latin.71m.us/chart/amo"
Tip: You can also get charts inline with word lookup by using ?withChart=true parameter.
Sentence Parser
Parse full Latin sentences to analyze word-by-word grammar, detect agreements, and identify syntax patterns like ablative absolutes and indirect statements.
Request Body
| Field | Type | Description |
|---|---|---|
sentence required |
string | Latin sentence to parse (max 500 characters) |
detect_patterns optional |
boolean | Enable pattern detection (default: true) |
include_charts optional |
boolean | Include full charts for each word (default: false) |
Features
- Word-by-word analysis - Each word parsed with POS, case, number, gender, mood
- Agreement detection - Finds noun-adjective and subject-verb agreements
- Pattern detection - Identifies ablative absolutes, indirect statements, purpose clauses
- Graceful degradation - Continues parsing even with unknown words
- Syntax analysis - Identifies main verb, subject, and clause structure
Example Request
curl -X POST "https://latin.71m.us/parse/sentence" \
-H "Content-Type: application/json" \
-d '{"sentence": "Puella bona amat"}'
fetch('https://latin.71m.us/parse/sentence', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
sentence: 'Puella bona amat'
})
})
.then(response => response.json())
.then(data => console.log(data));
import requests
response = requests.post(
'https://latin.71m.us/parse/sentence',
json={'sentence': 'Puella bona amat'}
)
print(response.json())
Example Response
{
"sentence": "Puella bona amat",
"words": [
{
"position": 0,
"word": "puella",
"inflection": {
"pos": "noun",
"case": "nom",
"number": 1,
"gender": "feminine"
},
"status": "success"
},
{
"position": 1,
"word": "bona",
"inflection": {
"pos": "adjective",
"case": "nom",
"number": 1,
"gender": "feminine"
},
"status": "success"
},
{
"position": 2,
"word": "amat",
"inflection": {
"pos": "verb",
"mood": "indicative",
"number": 1
},
"status": "success"
}
],
"agreements": [
{
"type": "noun_adjective_agreement",
"description": "Words at positions 0 and 1 agree in case, number, and gender",
"indices": [0, 1],
"confidence": "high"
},
{
"type": "subject_verb_agreement",
"description": "Subject at position 0 agrees with verb at position 2",
"indices": [0, 2],
"confidence": "high"
}
],
"patterns_detected": [],
"errors": [],
"warnings": []
}
Detected Patterns
The parser can automatically detect common Latin syntax patterns:
- Ablative Absolute - Noun/participle pairs in ablative case
- Indirect Statement - Accusative + infinitive constructions
- Purpose Clause - Ut/ne + subjunctive verb
Error Handling
If a word is not found in the dictionary, the parser continues with the remaining words and reports the error:
{
"sentence": "Puella xyz amat",
"words": [...],
"errors": [
{
"position": 1,
"word": "xyz",
"error": "Word not found in dictionary"
}
],
"partial_parse": true
}
Grammar Reference
Access comprehensive Latin grammar rules, explanations, and examples for 8 major grammar topics.
Available Topics
Purpose clauses, result clauses, jussive
Indirect statements, questions, commands
Primary vs secondary sequence
Temporal, causal, conditional uses
All 5 condition types
Present, perfect, future, gerundive
Passive form, active meaning
Verbal nouns and adjectives
List All Topics
curl "https://latin.71m.us/grammar"
Get Specific Topic
Available Topics:
subjunctive- Subjunctive mood usageindirect_discourse- Indirect statements, questions, commandssequence_of_tenses- Tense sequence rulesablative_absolute- Ablative absolute constructionconditions- Conditional sentencesparticiples- All participle typesdeponent_verbs- Deponent and semi-deponent verbsgerund_gerundive- Gerunds and gerundives
curl "https://latin.71m.us/grammar/ablative_absolute"
fetch('https://latin.71m.us/grammar/ablative_absolute')
.then(response => response.json())
.then(data => console.log(data));
import requests
response = requests.get(
'https://latin.71m.us/grammar/ablative_absolute'
)
print(response.json())
Search Grammar Topics
curl "https://latin.71m.us/grammar/search?q=purpose"
Example Response
{
"id": "ablative_absolute",
"name": "Ablative Absolute",
"category": "syntax",
"description": "A noun/pronoun and participle in the ablative case...",
"uses": {
"temporal": {
"name": "Time (When)",
"translation": "when, after, while",
"examples": [
{
"latin": "Caesare duce, Romani vicerunt.",
"english": "When Caesar was leader, the Romans conquered.",
"explanation": "Caesar (abl) + dux (abl) expressing time",
"difficulty": "intermediate"
}
]
},
"causal": {...},
"conditional": {...}
},
"examples": [...],
"related_topics": ["participles", "ablative_case"]
}
Error Handling
The API uses standard HTTP status codes to indicate success or failure.
Status Codes
| Code | Description |
|---|---|
200 |
Success - Request completed successfully |
400 |
Bad Request - Invalid parameters or input |
404 |
Not Found - Word not found in dictionary |
429 |
Too Many Requests - Rate limit exceeded (see Rate Limits) |
500 |
Internal Server Error - Something went wrong on our end |
Error Response Format
{
"error": "Word not found",
"status": "404"
}
Rate Limit Error (429)
{
"error": "Rate limit exceeded",
"message": "5 per 1 second",
"status": 429
}
Rate Limits
The API uses IP-based rate limiting to ensure fair usage for all users.
Default Limits
10 requests per second and 1000 requests per day per IP address.
Endpoint-Specific Limits
| Endpoint | Rate Limit |
|---|---|
/latin/{word} |
10 per second, 500 per hour |
/latin/{word}/examples |
10 per second, 200 per hour |
/latin/batch |
3 per second, 200 per hour |
/latin/random |
5 per second, 100 per hour |
/english/{word} |
10 per second, 500 per hour |
/english/batch |
3 per second, 200 per hour |
/english/random |
5 per second, 100 per hour |
/word-of-day |
10 per second, 500 per hour |
/chart/{word} |
10 per second, 200 per hour |
/parse/sentence |
3 per second, 100 per hour |
/grammar |
10 per second, 500 per hour |
/grammar/{topic} |
10 per second, 500 per hour |
/grammar/search |
10 per second, 200 per hour |
Rate Limit Response
When you exceed the rate limit, the API returns HTTP status code 429 Too Many Requests:
{
"error": "Rate limit exceeded",
"message": "10 per 1 second",
"status": 429
}
Best Practices
- Cache responses when possible to reduce API calls
- Use the batch endpoint for multiple word lookups
- Implement exponential backoff when receiving 429 errors
Performance Metrics
Real-time performance statistics for the API.
Average
Minimum
Maximum
Live updates every 5 seconds | Based on last 100 requests
Access Metrics
curl https://latin.71m.us/metrics
Support & Resources
This API is powered by Whitaker's Words, an open-source Latin-English dictionary.