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

GET /latin/{word}
Look up a Latin word and get detailed grammatical analysis
POST /latin/batch
Lookup multiple Latin words in a single request
GET /latin/random
Get a random Latin word with optional difficulty levels
GET /english/{word}
Translate an English word to Latin
POST /english/batch
Translate multiple English words to Latin in a single request
GET /english/random
Get a random English word with its Latin translation
GET /word-of-day
Get the word of the day with definition
GET /latin/{word}/examples
Get example sentences for a Latin word
GET /chart/{word}
Get declension or conjugation chart for a word
POST /parse/sentence
Parse full Latin sentences with grammatical analysis
GET /grammar/{topic}
Get comprehensive grammar rules and examples
GET /health
Check API health and status

Word Lookup

Look up any Latin word to get its definition, grammatical analysis, and optionally its declension/conjugation chart.

GET /latin/{word}

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.

GET /english/{word}

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:

POST /english/batch
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:

GET /english/random
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.

POST /latin/batch

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.

GET /latin/random

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.

GET /word-of-day

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:

GET /word-of-day/archive
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.

GET /latin/{word}/examples

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.

GET /chart/{word}

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.

POST /parse/sentence

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

Subjunctive Mood
Purpose clauses, result clauses, jussive
Indirect Discourse
Indirect statements, questions, commands
Sequence of Tenses
Primary vs secondary sequence
Ablative Absolute
Temporal, causal, conditional uses
Conditional Sentences
All 5 condition types
Participles
Present, perfect, future, gerundive
Deponent Verbs
Passive form, active meaning
Gerund & Gerundive
Verbal nouns and adjectives

List All Topics

GET /grammar
curl "https://latin.71m.us/grammar"

Get Specific Topic

GET /grammar/{topic}

Available Topics:

  • subjunctive - Subjunctive mood usage
  • indirect_discourse - Indirect statements, questions, commands
  • sequence_of_tenses - Tense sequence rules
  • ablative_absolute - Ablative absolute construction
  • conditions - Conditional sentences
  • participles - All participle types
  • deponent_verbs - Deponent and semi-deponent verbs
  • gerund_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

GET /grammar/search?q={keyword}
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.