MENU navbar-image

Introduction

API para o aplicativo de estudo de Grego Bíblico gamificado.

## Bem-vindo à API do Grego Bíblico

Esta API fornece endpoints para autenticação, lições, vocabulário, versículos bíblicos, gramática, exercícios e gamificação.

### Autenticação

A API utiliza **Laravel Sanctum** (Bearer tokens). Após fazer login via `POST /api/auth/login` ou `POST /api/auth/register`, você receberá um token que deve ser enviado no header `Authorization: Bearer {token}`.

### Endpoints Públicos

Endpoints de conteúdo (lições, vocabulário, versículos, gramática, fontes) são públicos e não requerem autenticação.

### Endpoints Autenticados

Endpoints de usuário, estatísticas e sincronização requerem token de autenticação.

<aside>Use o botão <b>Try It Out</b> para testar os endpoints diretamente nesta documentação.</aside>

Authenticating requests

To authenticate requests, include an Authorization header with the value "Bearer {Bearer token}".

All authenticated endpoints are marked with a requires authentication badge in the documentation below.

Faça login via POST /api/auth/login ou POST /api/auth/register para obter um token Bearer. Envie o token no header Authorization: Bearer {token}.

Autenticação

Endpoints para registro, login, logout e autenticação Google.

Registrar novo usuário

Cria uma nova conta e retorna o token de autenticação.

Example request:
curl --request POST \
    "http://localhost/api/auth/register" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"João Silva\",
    \"email\": \"joao@exemplo.com\",
    \"password\": \"senha123\"
}"
const url = new URL(
    "http://localhost/api/auth/register"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "João Silva",
    "email": "joao@exemplo.com",
    "password": "senha123"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (201):


{
    "token": "1|abc123...",
    "user": {
        "id": 1,
        "name": "João Silva",
        "email": "joao@exemplo.com"
    }
}
 

Example response (422):


{
    "message": "Validation error",
    "errors": {
        "email": [
            "The email has already been taken."
        ]
    }
}
 

Request      

POST api/auth/register

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

name   string     

Nome do usuário. Example: João Silva

email   string     

Email válido. Example: joao@exemplo.com

password   string     

Senha (mínimo 6 caracteres). Example: senha123

Login

Autentica um usuário existente e retorna o token.

Example request:
curl --request POST \
    "http://localhost/api/auth/login" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"email\": \"joao@exemplo.com\",
    \"password\": \"senha123\"
}"
const url = new URL(
    "http://localhost/api/auth/login"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "email": "joao@exemplo.com",
    "password": "senha123"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "token": "1|abc123...",
    "user": {
        "id": 1,
        "name": "João Silva",
        "email": "joao@exemplo.com"
    }
}
 

Example response (401):


{
    "message": "Credenciais inválidas"
}
 

Request      

POST api/auth/login

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

email   string     

Email do usuário. Example: joao@exemplo.com

password   string     

Senha do usuário. Example: senha123

Login com Google

Autentica ou registra um usuário via Google OAuth.

Example request:
curl --request POST \
    "http://localhost/api/auth/google" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"google_id\": \"123456789\",
    \"name\": \"João Silva\",
    \"email\": \"joao@gmail.com\",
    \"avatar\": \"https:\\/\\/lh3.googleusercontent.com\\/...\"
}"
const url = new URL(
    "http://localhost/api/auth/google"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "google_id": "123456789",
    "name": "João Silva",
    "email": "joao@gmail.com",
    "avatar": "https:\/\/lh3.googleusercontent.com\/..."
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "token": "1|abc123...",
    "user": {
        "id": 1,
        "name": "João Silva",
        "email": "joao@gmail.com",
        "avatar": "https://..."
    }
}
 

Request      

POST api/auth/google

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

google_id   string     

ID do Google. Example: 123456789

name   string     

Nome do usuário. Example: João Silva

email   string     

Email do Google. Example: joao@gmail.com

avatar   string  optional    

URL do avatar. Example: https://lh3.googleusercontent.com/...

Logout

requires authentication

Revoga o token atual do usuário.

Example request:
curl --request POST \
    "http://localhost/api/auth/logout" \
    --header "Authorization: Bearer {Bearer token}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/auth/logout"
);

const headers = {
    "Authorization": "Bearer {Bearer token}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Example response (200):


{
    "message": "Logout realizado com sucesso"
}
 

Request      

POST api/auth/logout

Headers

Authorization        

Example: Bearer {Bearer token}

Content-Type        

Example: application/json

Accept        

Example: application/json

Deploy

Endpoints para gerenciar migrations e seed do banco de dados remotamente.

Requer header X-Deploy-Token com o valor configurado em DEPLOY_TOKEN no .env.

Executar migrations

Roda as migrations pendentes (php artisan migrate --force).

Example request:
curl --request GET \
    --get "http://localhost/api/deploy/migrate" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/deploy/migrate"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (403):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Unauthorized. Valid deploy token required."
}
 

Request      

GET api/deploy/migrate

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

GET api/deploy/migrate/fresh-seed

Example request:
curl --request GET \
    --get "http://localhost/api/deploy/migrate/fresh-seed" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/deploy/migrate/fresh-seed"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (403):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Unauthorized. Valid deploy token required."
}
 

Request      

GET api/deploy/migrate/fresh-seed

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

GET api/deploy/seed

Example request:
curl --request GET \
    --get "http://localhost/api/deploy/seed" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/deploy/seed"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (403):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Unauthorized. Valid deploy token required."
}
 

Request      

GET api/deploy/seed

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

GET api/deploy/migrate/status

Example request:
curl --request GET \
    --get "http://localhost/api/deploy/migrate/status" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/deploy/migrate/status"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (403):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Unauthorized. Valid deploy token required."
}
 

Request      

GET api/deploy/migrate/status

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Estatísticas

Endpoints para consultar e sincronizar estatísticas do usuário.

Obter estatísticas

requires authentication

Retorna as estatísticas do usuário autenticado (XP, streak, lições, badges).

Example request:
curl --request GET \
    --get "http://localhost/api/stats" \
    --header "Authorization: Bearer {Bearer token}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/stats"
);

const headers = {
    "Authorization": "Bearer {Bearer token}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/stats

Headers

Authorization        

Example: Bearer {Bearer token}

Content-Type        

Example: application/json

Accept        

Example: application/json

Sincronizar estatísticas

requires authentication

Sincroniza as estatísticas do cliente com o servidor, resolvendo conflitos.

Example request:
curl --request POST \
    "http://localhost/api/stats/sync" \
    --header "Authorization: Bearer {Bearer token}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"total_xp\": 27,
    \"level\": 22,
    \"streak\": 84,
    \"last_study_date\": \"2026-08-29T21:19:43\",
    \"lessons_completed\": [
        16
    ],
    \"vocab_mastered\": [
        \"architecto\"
    ],
    \"verses_completed\": [
        \"architecto\"
    ],
    \"exercises_answered\": 39,
    \"exercises_correct\": 84,
    \"badges\": [
        \"architecto\"
    ]
}"
const url = new URL(
    "http://localhost/api/stats/sync"
);

const headers = {
    "Authorization": "Bearer {Bearer token}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "total_xp": 27,
    "level": 22,
    "streak": 84,
    "last_study_date": "2026-08-29T21:19:43",
    "lessons_completed": [
        16
    ],
    "vocab_mastered": [
        "architecto"
    ],
    "verses_completed": [
        "architecto"
    ],
    "exercises_answered": 39,
    "exercises_correct": 84,
    "badges": [
        "architecto"
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/stats/sync

Headers

Authorization        

Example: Bearer {Bearer token}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

total_xp   integer     

Must be at least 0. Example: 27

level   integer     

Must be at least 1. Must not be greater than 100. Example: 22

streak   integer     

Must be at least 0. Example: 84

last_study_date   string  optional    

Must be a valid date. Example: 2026-08-29T21:19:43

lessons_completed   integer[]  optional    
vocab_mastered   string[]  optional    
verses_completed   string[]  optional    
exercises_answered   integer     

Must be at least 0. Example: 39

exercises_correct   integer     

Must be at least 0. Example: 84

badges   string[]  optional    

Exercícios

Endpoints para gerar exercícios dinâmicos baseados em lições e versículos.

Gerar exercícios

Gera exercícios dinâmicos (verdadeiro/falso, múltipla escolha) baseados em lições ou versículos. Use lesson_id para exercícios de lição ou verse_id para exercícios de versículo.

Example request:
curl --request GET \
    --get "http://localhost/api/exercises?lesson_id=5&verse_id=b1&count=5&type=multiple_choice&from=1&to=5" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/exercises"
);

const params = {
    "lesson_id": "5",
    "verse_id": "b1",
    "count": "5",
    "type": "multiple_choice",
    "from": "1",
    "to": "5",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

[
    {
        "id": "vb_b1_0",
        "type": "multiple_choice",
        "question": "Como se traduz \"ἀρχή\" em João 1:1?",
        "greek_text": "ἀρχή",
        "options": [
            "paz",
            "espírito",
            "princípio",
            "ir"
        ],
        "correct_answer": "princípio",
        "explanation": null,
        "xp": 10
    },
    {
        "id": "vb_b1_1",
        "type": "multiple_choice",
        "question": "Como se traduz \"λόγος\" em João 1:1?",
        "greek_text": "λόγος",
        "options": [
            "Verbo, palavra",
            "filho",
            "primeiro",
            "se fez, tornou-se"
        ],
        "correct_answer": "Verbo, palavra",
        "explanation": null,
        "xp": 10
    },
    {
        "id": "vb_b1_2",
        "type": "multiple_choice",
        "question": "Como se traduz \"θεός\" em João 1:1?",
        "greek_text": "θεός",
        "options": [
            "substância",
            "deu",
            "Deus",
            "pastor"
        ],
        "correct_answer": "Deus",
        "explanation": null,
        "xp": 10
    }
]
 

Request      

GET api/exercises

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

lesson_id   integer  optional    

ID da lição para gerar exercícios. Example: 5

verse_id   string  optional    

ID do versículo para gerar exercícios. Example: b1

count   integer  optional    

Número de exercícios a gerar (padrão: 10). Example: 5

type   string  optional    

Tipo de exercício (true_false, multiple_choice). Example: multiple_choice

from   integer  optional    

Lição inicial (para intervalo). Example: 1

to   integer  optional    

Lição final (para intervalo). Example: 5

Fontes

Endpoints para listar as fontes bibliográficas de referência.

Listar fontes

Retorna todas as fontes bibliográficas cadastradas.

Example request:
curl --request GET \
    --get "http://localhost/api/sources" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/sources"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

[
    {
        "id": "rega_bergmann",
        "title": "Noções do Grego Bíblico: Gramática Fundamental",
        "authors": "Lourenço Stelio Rega e Johannes Bergmann",
        "edition": "Edição revisada",
        "city": "São Paulo",
        "publisher": "Editora Vida Nova",
        "year": 2004,
        "isbn": null,
        "url": "www.etica.pro.br/gregont",
        "description": "Gramática de grego koinê voltada ao estudo do Novo Testamento. Aborda o alfabeto, fonética, sistema verbal (tempos, modos, vozes), sistema nominal (casos, declinações), preposições, pronomes, particípios e sintaxe. O método é dedutivo, começando pelos verbos devido à similaridade com a gramática portuguesa. Contém 36 lições progressivas com exercícios e vocabulário.",
        "usage": "Utilizada como fonte principal para: estrutura das 36 lições, dados de vocabulário grego (palavras com transliteração, tradução, frequência no NT e mnemônicos), versículos bíblicos para treino, e conteúdo gramatical do grego koinê.",
        "created_at": "2026-08-29T20:51:04.000000Z",
        "updated_at": "2026-08-29T20:51:04.000000Z"
    },
    {
        "id": "cunha_cintra",
        "title": "Nova Gramática do Português Contemporâneo",
        "authors": "Celso Cunha e Lindley Cintra",
        "edition": "7ª edição",
        "city": "Rio de Janeiro",
        "publisher": "Lexikon Editora Digital",
        "year": 2017,
        "isbn": "978-85-8300-031-0",
        "url": null,
        "description": "Gramática de referência da língua portuguesa, abrangendo fonética, ortografia, classes de palavras (substantivo, artigo, adjetivo, pronome, numeral, verbo, advérbio, preposição, conjunção, interjeição), sintaxe (frase, oração, período, termos da oração, concordância, regência), figuras de sintaxe, discurso e pontuação. Texto atualizado conforme o Acordo Ortográfico de 2009.",
        "usage": "Utilizada como fonte para a seção de Gramática Portuguesa: definições e explicações de conceitos gramaticais portugueses (presente do indicativo, pretérito imperfeito, vozes do verbo, pronomes, substantivos, adjetivos, preposições, sintaxe, etc.) que aparecem como referência expansível ao estudar o grego.",
        "created_at": "2026-08-29T20:51:04.000000Z",
        "updated_at": "2026-08-29T20:51:04.000000Z"
    }
]
 

Request      

GET api/sources

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Detalhar fonte

Retorna uma fonte bibliográfica específica.

Example request:
curl --request GET \
    --get "http://localhost/api/sources/nocoes_grego" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/sources/nocoes_grego"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Fonte não encontrada"
}
 

Request      

GET api/sources/{id}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

ID da fonte. Example: nocoes_grego

Gamificação

Endpoints para consultar badges e níveis disponíveis.

Listar badges

Retorna todas as conquistas (badges) disponíveis no app.

Example request:
curl --request GET \
    --get "http://localhost/api/badges" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/badges"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

[
    {
        "id": "first_lesson",
        "name": "Primeiros Passos",
        "description": "Complete sua primeira lição",
        "icon": "🌱"
    },
    {
        "id": "five_lessons",
        "name": "Dedicado",
        "description": "Complete 5 lições",
        "icon": "📚"
    },
    {
        "id": "ten_lessons",
        "name": "Estudante Fiel",
        "description": "Complete 10 lições",
        "icon": "🎓"
    },
    {
        "id": "all_lessons",
        "name": "Concluiu o Curso!",
        "description": "Complete todas as 36 lições",
        "icon": "🏆"
    },
    {
        "id": "first_vocab",
        "name": "Primeira Palavra",
        "description": "Domine 10 palavras de vocabulário",
        "icon": "✏️"
    },
    {
        "id": "fifty_vocab",
        "name": "Vocabularista",
        "description": "Domine 50 palavras",
        "icon": "📝"
    },
    {
        "id": "hundred_vocab",
        "name": "Léxico Rico",
        "description": "Domine 100 palavras",
        "icon": "📖"
    },
    {
        "id": "first_verse",
        "name": "Luz da Palavra",
        "description": "Complete 1 versículo bíblico",
        "icon": "🕯️"
    },
    {
        "id": "ten_verses",
        "name": "Semeador",
        "description": "Complete 10 versículos",
        "icon": "🌾"
    },
    {
        "id": "streak_3",
        "name": "Em Chamas",
        "description": "Mantenha 3 dias de streak",
        "icon": "🔥"
    },
    {
        "id": "streak_7",
        "name": "Semana de Ouro",
        "description": "Mantenha 7 dias de streak",
        "icon": "⭐"
    },
    {
        "id": "streak_30",
        "name": "Inabalável",
        "description": "Mantenha 30 dias de streak",
        "icon": "💎"
    },
    {
        "id": "level_5",
        "name": "Estudioso",
        "description": "Alcance o nível 5",
        "icon": "🧠"
    },
    {
        "id": "level_10",
        "name": "Sábio",
        "description": "Alcance o nível 10",
        "icon": "👑"
    },
    {
        "id": "accuracy_80",
        "name": "Precisão",
        "description": "Tenha 80% de acerto com 50+ exercícios",
        "icon": "🎯"
    },
    {
        "id": "accuracy_90",
        "name": "Perfeccionista",
        "description": "Tenha 90% de acerto com 100+ exercícios",
        "icon": "🎖️"
    }
]
 

Request      

GET api/badges

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Listar níveis

Retorna todos os níveis e XP necessário para cada um.

Example request:
curl --request GET \
    --get "http://localhost/api/levels" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/levels"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

[
    {
        "level": 1,
        "title": "Iniciante",
        "xp_required": 0
    },
    {
        "level": 2,
        "title": "Discípulo",
        "xp_required": 50
    },
    {
        "level": 3,
        "title": "Estudante",
        "xp_required": 120
    },
    {
        "level": 4,
        "title": "Aprendiz",
        "xp_required": 200
    },
    {
        "level": 5,
        "title": "Estudioso",
        "xp_required": 350
    },
    {
        "level": 6,
        "title": "Intérprete",
        "xp_required": 550
    },
    {
        "level": 7,
        "title": "Mestre",
        "xp_required": 800
    },
    {
        "level": 8,
        "title": "Sábio",
        "xp_required": 1200
    },
    {
        "level": 9,
        "title": "Erudito",
        "xp_required": 1800
    },
    {
        "level": 10,
        "title": "Pai da Igreja",
        "xp_required": 2500
    },
    {
        "level": 11,
        "title": "Doutor",
        "xp_required": 3500
    },
    {
        "level": 12,
        "title": "Sofista",
        "xp_required": 5000
    },
    {
        "level": 13,
        "title": "Filósofo",
        "xp_required": 7000
    },
    {
        "level": 14,
        "title": "Helenista",
        "xp_required": 10000
    },
    {
        "level": 15,
        "title": "Mestre do Koinê",
        "xp_required": 15000
    }
]
 

Request      

GET api/levels

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Gramática

Endpoints para listar e buscar conceitos gramaticais.

Listar conceitos gramaticais

Retorna conceitos gramaticais. Filtrar por categoria ou buscar por termo.

Example request:
curl --request GET \
    --get "http://localhost/api/grammar?category=Verbo&search=presente" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/grammar"
);

const params = {
    "category": "Verbo",
    "search": "presente",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

[
    {
        "id": "futuro_presente",
        "term": "Futuro do Presente",
        "category": "Verbo",
        "short_description": "Indica um fato que se realizará posteriormente ao momento em que se fala.",
        "full_explanation": "O futuro do presente indica um fato que se realizará posteriormente ao momento em que se fala. Forma-se com o acréscimo das terminações -ei, -ás, -á, -emos, -eis, -ão ao infinitivo. Pode também exprimir probabilidade ou suposição no presente.",
        "examples": [
            "Estudarei grego amanhã.",
            "Que horas serão? (suposição no presente)"
        ],
        "related_greek": "Corresponde ao futuro do indicativo grego (λύσω), formado com o sufixo -σ-.",
        "source": "CUNHA, Celso; CINTRA, Lindley. Nova Gramática do Português Contemporâneo. 7ª ed. Rio de Janeiro: Lexikon, 2017.",
        "source_page": "p. 440-441",
        "created_at": "2026-08-29T20:51:04.000000Z",
        "updated_at": "2026-08-29T20:51:04.000000Z"
    },
    {
        "id": "presente_indicativo",
        "term": "Presente do Indicativo",
        "category": "Verbo",
        "short_description": "Tempo verbal que expressa um fato atual, que se realiza no momento em que se fala.",
        "full_explanation": "O presente do indicativo é o tempo verbal que expressa um fato que se realiza no momento em que se fala. É o tempo por excelência da atualidade. Emprega-se: 1) para enunciar um fato que se realiza no momento em que se fala; 2) para enunciar verdades gerais (verdades científicas, máximas, provérbios); 3) para indicar ações habituais; 4) para dar vivacidade a narrações de fatos passados (presente histórico); 5) para designar ação futura cuja realização é certa; 6) como forma de polidez para atenuar um pedido.",
        "examples": [
            "Estudo grego todos os dias. (ação habitual)",
            "A terra gira em torno do sol. (verdade geral)",
            "Chego amanhã. (futuro certo)"
        ],
        "related_greek": "Presente do indicativo em grego (λύω, λύεις, λύει...) expressa ação durativa, contínua, em progresso.",
        "source": "CUNHA, Celso; CINTRA, Lindley. Nova Gramática do Português Contemporâneo. 7ª ed. Rio de Janeiro: Lexikon, 2017.",
        "source_page": "p. 462-464",
        "created_at": "2026-08-29T20:51:04.000000Z",
        "updated_at": "2026-08-29T20:51:04.000000Z"
    },
    {
        "id": "preterito_imperfeito",
        "term": "Pretérito Imperfeito",
        "category": "Verbo",
        "short_description": "Designa um fato passado, mas não concluído (imperfeito = inacabado). Encerra ideia de continuidade.",
        "full_explanation": "A própria denominação deste tempo — pretérito imperfeito — ensina o seu valor fundamental: o de designar um fato passado, mas não concluído. Encerra uma ideia de continuidade, de duração do processo verbal mais acentuada que os outros tempos pretéritos. Emprega-se: 1) para descrever o que era presente numa época passada; 2) para indicar, entre ações simultâneas, a que se estava processando quando sobreveio outra; 3) para denotar uma ação passada habitual ou repetida (imperfeito frequentativo); 4) para designar fatos passados concebidos como duráveis; 5) como imperfeito de cortesia; 6) para situar vagamente no tempo contos, lendas, fábulas (\"Era uma vez...\").",
        "examples": [
            "Falava alto, e algumas mulheres acordaram. (ação em curso quando outra sobreveio)",
            "Quando eu não a esperava, ela aparecia. (ação habitual no passado)",
            "Era uma vez uma mulher que queria ver a beleza. (narrativa atemporal)"
        ],
        "related_greek": "Corresponde ao imperfeito do indicativo grego (ἔλυον), que também expressa ação contínua no passado.",
        "source": "CUNHA, Celso; CINTRA, Lindley. Nova Gramática do Português Contemporâneo. 7ª ed. Rio de Janeiro: Lexikon, 2017.",
        "source_page": "p. 465-467",
        "created_at": "2026-08-29T20:51:04.000000Z",
        "updated_at": "2026-08-29T20:51:04.000000Z"
    },
    {
        "id": "preterito_perfeito",
        "term": "Pretérito Perfeito",
        "category": "Verbo",
        "short_description": "Indica uma ação completamente concluída, afastada do presente.",
        "full_explanation": "O pretérito perfeito simples indica uma ação que se realizou completamente, num momento anterior ao em que se fala. A forma composta (tenho estudado) exprime geralmente a repetição de um ato ou a sua continuidade até o presente. Em síntese: o pretérito perfeito simples, denotador de uma ação completamente concluída, afasta-se do presente; o pretérito perfeito composto, expressão de um fato repetido ou contínuo, aproxima-se do presente.",
        "examples": [
            "Ergui-me tonto, e vi em rebolo no chão os dois faroleiros. (ação concluída)",
            "Tenho lutado contra a adversidade. (ação contínua até o presente)"
        ],
        "related_greek": "Corresponde ao aoristo grego (ἔλυσα), que indica ação pontual, concluída no passado.",
        "source": "CUNHA, Celso; CINTRA, Lindley. Nova Gramática do Português Contemporâneo. 7ª ed. Rio de Janeiro: Lexikon, 2017.",
        "source_page": "p. 468-469",
        "created_at": "2026-08-29T20:51:04.000000Z",
        "updated_at": "2026-08-29T20:51:04.000000Z"
    }
]
 

Request      

GET api/grammar

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

category   string  optional    

Filtrar por categoria. Example: Verbo

search   string  optional    

Buscar por termo ou descrição. Example: presente

Detalhar conceito gramatical

Retorna um conceito gramatical com explicação completa e exemplos.

Example request:
curl --request GET \
    --get "http://localhost/api/grammar/presente_indicativo" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/grammar/presente_indicativo"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "id": "presente_indicativo",
    "term": "Presente do Indicativo",
    "category": "Verbo",
    "short_description": "Tempo verbal que expressa um fato atual, que se realiza no momento em que se fala.",
    "full_explanation": "O presente do indicativo é o tempo verbal que expressa um fato que se realiza no momento em que se fala. É o tempo por excelência da atualidade. Emprega-se: 1) para enunciar um fato que se realiza no momento em que se fala; 2) para enunciar verdades gerais (verdades científicas, máximas, provérbios); 3) para indicar ações habituais; 4) para dar vivacidade a narrações de fatos passados (presente histórico); 5) para designar ação futura cuja realização é certa; 6) como forma de polidez para atenuar um pedido.",
    "examples": [
        "Estudo grego todos os dias. (ação habitual)",
        "A terra gira em torno do sol. (verdade geral)",
        "Chego amanhã. (futuro certo)"
    ],
    "related_greek": "Presente do indicativo em grego (λύω, λύεις, λύει...) expressa ação durativa, contínua, em progresso.",
    "source": "CUNHA, Celso; CINTRA, Lindley. Nova Gramática do Português Contemporâneo. 7ª ed. Rio de Janeiro: Lexikon, 2017.",
    "source_page": "p. 462-464",
    "created_at": "2026-08-29T20:51:04.000000Z",
    "updated_at": "2026-08-29T20:51:04.000000Z"
}
 

Request      

GET api/grammar/{id}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

ID do conceito. Example: presente_indicativo

Idiomas

Endpoints para listar idiomas e gramáticas disponíveis.

Listar idiomas

Retorna todos os idiomas com suas gramáticas associadas.

Example request:
curl --request GET \
    --get "http://localhost/api/languages" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/languages"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

[
    {
        "id": "greek",
        "name": "Grego",
        "native_name": "Ελληνικά",
        "icon": "Ω",
        "color": "from-blue-500 to-cyan-500",
        "created_at": "2026-08-29T20:51:02.000000Z",
        "updated_at": "2026-08-29T20:51:02.000000Z",
        "grammars": [
            {
                "id": "rega",
                "language_id": "greek",
                "name": "Noções do Grego Bíblico",
                "author": "Rega & Bergmann",
                "description": "Gramática clássica para o estudo do grego do Novo Testamento, com abordagem tradicional e exercícios.",
                "available": true,
                "created_at": "2026-08-29T20:51:02.000000Z",
                "updated_at": "2026-08-29T20:51:02.000000Z"
            }
        ]
    },
    {
        "id": "hebrew",
        "name": "Hebraico",
        "native_name": "עברית",
        "icon": "א",
        "color": "from-amber-500 to-orange-500",
        "created_at": "2026-08-29T20:51:02.000000Z",
        "updated_at": "2026-08-29T20:51:02.000000Z",
        "grammars": [
            {
                "id": "rega_hebrew",
                "language_id": "hebrew",
                "name": "Noções do Hebraico Bíblico",
                "author": "Rega & Bergmann",
                "description": "Gramática para o estudo do hebraico do Antigo Testamento.",
                "available": false,
                "created_at": "2026-08-29T20:51:02.000000Z",
                "updated_at": "2026-08-29T20:51:02.000000Z"
            }
        ]
    }
]
 

Request      

GET api/languages

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Detalhar idioma

Retorna um idioma específico com suas gramáticas.

Example request:
curl --request GET \
    --get "http://localhost/api/languages/greek" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/languages/greek"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "id": "greek",
    "name": "Grego",
    "native_name": "Ελληνικά",
    "icon": "Ω",
    "color": "from-blue-500 to-cyan-500",
    "created_at": "2026-08-29T20:51:02.000000Z",
    "updated_at": "2026-08-29T20:51:02.000000Z",
    "grammars": [
        {
            "id": "rega",
            "language_id": "greek",
            "name": "Noções do Grego Bíblico",
            "author": "Rega & Bergmann",
            "description": "Gramática clássica para o estudo do grego do Novo Testamento, com abordagem tradicional e exercícios.",
            "available": true,
            "created_at": "2026-08-29T20:51:02.000000Z",
            "updated_at": "2026-08-29T20:51:02.000000Z"
        }
    ]
}
 

Request      

GET api/languages/{id}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

ID do idioma (ex: greek, hebrew). Example: greek

Lições

Endpoints para listar e visualizar lições e seus conteúdos.

Listar lições

Retorna todas as lições ordenadas. Filtrar por categoria com ?category=.

Example request:
curl --request GET \
    --get "http://localhost/api/lessons?category=alfabeto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/lessons"
);

const params = {
    "category": "alfabeto",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

[]
 

Request      

GET api/lessons

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

category   string  optional    

Filtrar por categoria. Example: alfabeto

Detalhar lição

Retorna os metadados de uma lição específica.

Example request:
curl --request GET \
    --get "http://localhost/api/lessons/1" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/lessons/1"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "id": 1,
    "title": "A Língua Grega",
    "category": "Introdução",
    "description": "História e contexto da língua grega do NT",
    "topics": [
        "História do grego",
        "Koinê",
        "Importância para o NT"
    ],
    "xp_reward": 15,
    "grammar_refs": null,
    "order_column": 1,
    "created_at": "2026-08-29T20:51:02.000000Z",
    "updated_at": "2026-08-29T20:51:02.000000Z"
}
 

Request      

GET api/lessons/{id}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

ID da lição. Example: 1

Conteúdo da lição

Retorna o conteúdo detalhado (seções, texto, exemplos) de uma lição.

Example request:
curl --request GET \
    --get "http://localhost/api/lessons/1/content" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/lessons/1/content"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Conteúdo não disponível para esta lição"
}
 

Request      

GET api/lessons/{id}/content

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

ID da lição. Example: 1

Usuário

Endpoints para gerenciar perfil, tema e seleções do usuário autenticado.

Perfil do usuário

requires authentication

Retorna os dados do usuário autenticado.

Example request:
curl --request GET \
    --get "http://localhost/api/user" \
    --header "Authorization: Bearer {Bearer token}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/user"
);

const headers = {
    "Authorization": "Bearer {Bearer token}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/user

Headers

Authorization        

Example: Bearer {Bearer token}

Content-Type        

Example: application/json

Accept        

Example: application/json

Atualizar perfil

requires authentication

Atualiza nome, email e/ou tema do usuário.

Example request:
curl --request PUT \
    "http://localhost/api/user" \
    --header "Authorization: Bearer {Bearer token}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"João Silva\",
    \"email\": \"joao@exemplo.com\",
    \"theme\": \"dark\"
}"
const url = new URL(
    "http://localhost/api/user"
);

const headers = {
    "Authorization": "Bearer {Bearer token}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "João Silva",
    "email": "joao@exemplo.com",
    "theme": "dark"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

PUT api/user

Headers

Authorization        

Example: Bearer {Bearer token}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

name   string  optional    

Nome do usuário. Example: João Silva

email   string  optional    

Email do usuário. Example: joao@exemplo.com

theme   string  optional    

Tema preferido (light, dark, sepia). Example: dark

Deletar conta

requires authentication

Remove a conta do usuário e revoga o token.

Example request:
curl --request DELETE \
    "http://localhost/api/user" \
    --header "Authorization: Bearer {Bearer token}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/user"
);

const headers = {
    "Authorization": "Bearer {Bearer token}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (200):


{
    "message": "Conta deletada com sucesso"
}
 

Request      

DELETE api/user

Headers

Authorization        

Example: Bearer {Bearer token}

Content-Type        

Example: application/json

Accept        

Example: application/json

Obter seleção de idioma/gramática

requires authentication

Retorna o idioma e gramática selecionados pelo usuário.

Example request:
curl --request GET \
    --get "http://localhost/api/user/selection" \
    --header "Authorization: Bearer {Bearer token}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/user/selection"
);

const headers = {
    "Authorization": "Bearer {Bearer token}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/user/selection

Headers

Authorization        

Example: Bearer {Bearer token}

Content-Type        

Example: application/json

Accept        

Example: application/json

Salvar seleção de idioma/gramática

requires authentication

Registra o idioma e gramática escolhidos pelo usuário.

Example request:
curl --request POST \
    "http://localhost/api/user/selection" \
    --header "Authorization: Bearer {Bearer token}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"language_id\": \"greek\",
    \"grammar_id\": \"nocoes_grego\"
}"
const url = new URL(
    "http://localhost/api/user/selection"
);

const headers = {
    "Authorization": "Bearer {Bearer token}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "language_id": "greek",
    "grammar_id": "nocoes_grego"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/user/selection

Headers

Authorization        

Example: Bearer {Bearer token}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

language_id   string     

ID do idioma. Example: greek

grammar_id   string     

ID da gramática. Example: nocoes_grego

Versículos Bíblicos

Endpoints para listar e analisar versículos em grego.

Listar versículos

Retorna versículos bíblicos. Filtrar por dificuldade ou lição.

Example request:
curl --request GET \
    --get "http://localhost/api/bible-verses?difficulty=facil&lesson_id=5" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/bible-verses"
);

const params = {
    "difficulty": "facil",
    "lesson_id": "5",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

[]
 

Request      

GET api/bible-verses

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

difficulty   string  optional    

Filtrar por dificuldade (facil, medio, dificil). Example: facil

lesson_id   integer  optional    

Filtrar por lição associada. Example: 5

Detalhar versículo

Retorna um versículo específico com texto grego e português.

Example request:
curl --request GET \
    --get "http://localhost/api/bible-verses/b1" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/bible-verses/b1"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "id": "b1",
    "reference": "João 1:1",
    "book": "João",
    "chapter": 1,
    "verse": 1,
    "greek_text": "Ἐν ἀρχῇ ἦν ὁ λόγος, καὶ ὁ λόγος ἦν πρὸς τὸν θεόν, καὶ θεὸς ἦν ὁ λόγος.",
    "portuguese_text": "No princípio era o Verbo, e o Verbo estava com Deus, e o Verbo era Deus.",
    "difficulty": "difícil",
    "lesson_ids": [
        5,
        9,
        15,
        19
    ],
    "words_to_translate": [
        {
            "greek": "ἀρχή",
            "portuguese": "princípio"
        },
        {
            "greek": "λόγος",
            "portuguese": "Verbo, palavra"
        },
        {
            "greek": "θεός",
            "portuguese": "Deus"
        }
    ],
    "created_at": "2026-08-29T20:51:04.000000Z",
    "updated_at": "2026-08-29T20:51:04.000000Z"
}
 

Request      

GET api/bible-verses/{id}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

ID do versículo. Example: b1

Análise do versículo

Retorna a análise linguística (palavras, casos, funções) de um versículo.

Example request:
curl --request GET \
    --get "http://localhost/api/bible-verses/b1/analysis" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/bible-verses/b1/analysis"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "id": 1,
    "bible_verse_id": "b1",
    "words": [
        {
            "word": "Ἐν",
            "transliteration": "en",
            "part_of_speech": "preposição",
            "translation": "em, no",
            "case_governed": "dativo",
            "lemma": "ἐν",
            "notes": "Preposição que rege o caso dativo. Indica posição ou instrumento."
        },
        {
            "word": "ἀρχῇ",
            "transliteration": "archē",
            "part_of_speech": "substantivo",
            "translation": "princípio",
            "case": "dativo",
            "gender": "feminino",
            "number": "singular",
            "lemma": "ἀρχή",
            "ending_analysis": "Terminação -ῇ: dativo singular feminino da 1ª declinação. O iota subscrito indica dativo.",
            "notes": "1ª declinação, tema em -η. Caso dativo por causa da preposição ἐν."
        },
        {
            "word": "ἦν",
            "transliteration": "ēn",
            "part_of_speech": "verbo",
            "translation": "era, existia",
            "tense": "imperfeito",
            "voice": "ativa",
            "mood": "indicativo",
            "person": "3ª",
            "number": "singular",
            "lemma": "εἰμί",
            "ending_analysis": "Terminação -ν (imperfeito, 3ª pessoa singular). Aumento ἐ- marca o tempo passado. Verbo εἰμί (ser/estar) é irregular, da conjugação em -μι.",
            "notes": "Verbo irregular εἰμί (ser/estar). Imperfeito indica estado contínuo no passado: \"era\" (não \"foi\")."
        },
        {
            "word": "ὁ",
            "transliteration": "ho",
            "part_of_speech": "artigo",
            "translation": "o",
            "case": "nominativo",
            "gender": "masculino",
            "number": "singular",
            "lemma": "ὁ",
            "ending_analysis": "Forma ὁ: artigo definido nominativo singular masculino."
        },
        {
            "word": "λόγος",
            "transliteration": "logos",
            "part_of_speech": "substantivo",
            "translation": "Verbo, palavra",
            "case": "nominativo",
            "gender": "masculino",
            "number": "singular",
            "lemma": "λόγος",
            "ending_analysis": "Terminação -ος: nominativo singular masculino da 2ª declinação.",
            "notes": "2ª declinação, tema em -ο-. Nominativo = sujeito da oração."
        },
        {
            "word": "καὶ",
            "transliteration": "kai",
            "part_of_speech": "conjunção",
            "translation": "e",
            "lemma": "καί",
            "notes": "Conjunção coordenativa aditiva. Também pode ser advérbio (\"também\")."
        },
        {
            "word": "πρὸς",
            "transliteration": "pros",
            "part_of_speech": "preposição",
            "translation": "para, junto a, com",
            "case_governed": "acusativo",
            "lemma": "πρός",
            "notes": "Com acusativo: indica movimento em direção a, ou comunhão/presença com."
        },
        {
            "word": "τὸν",
            "transliteration": "ton",
            "part_of_speech": "artigo",
            "translation": "o",
            "case": "acusativo",
            "gender": "masculino",
            "number": "singular",
            "lemma": "ὁ",
            "ending_analysis": "Forma τὸν: artigo definido acusativo singular masculino. A terminação -ν marca o acusativo masculino."
        },
        {
            "word": "θεόν",
            "transliteration": "theon",
            "part_of_speech": "substantivo",
            "translation": "Deus",
            "case": "acusativo",
            "gender": "masculino",
            "number": "singular",
            "lemma": "θεός",
            "ending_analysis": "Terminação -όν: acusativo singular masculino da 2ª declinação. O -ν final marca o acusativo.",
            "notes": "2ª declinação. Acusativo = objeto da preposição πρός."
        },
        {
            "word": "θεὸς",
            "transliteration": "theos",
            "part_of_speech": "substantivo",
            "translation": "Deus",
            "case": "nominativo",
            "gender": "masculino",
            "number": "singular",
            "lemma": "θεός",
            "ending_analysis": "Terminação -ος: nominativo singular masculino da 2ª declinação.",
            "notes": "Nominativo sem artigo = predicativo (não sujeito). Importante para a teologia: \"Deus era o Verbo\" — o Verbo tinha a natureza de Deus."
        }
    ],
    "created_at": "2026-08-29T20:51:04.000000Z",
    "updated_at": "2026-08-29T20:51:04.000000Z"
}
 

Request      

GET api/bible-verses/{id}/analysis

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

ID do versículo. Example: b1

Vocabulário

Endpoints para listar e buscar palavras do vocabulário grego.

Listar vocabulário

Retorna palavras do vocabulário. Filtrar por lição ou categoria.

Example request:
curl --request GET \
    --get "http://localhost/api/vocabulary?lesson_id=5&category=verbo" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/vocabulary"
);

const params = {
    "lesson_id": "5",
    "category": "verbo",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

[
    {
        "id": "v25",
        "greek": "ἄγω",
        "transliteration": "agō",
        "portuguese": "eu vou; guio, conduzo",
        "lesson_id": 5,
        "category": "verbo",
        "frequency": 67,
        "mnemonic": "agō → \"agente\" que conduz",
        "created_at": "2026-08-29T20:51:03.000000Z",
        "updated_at": "2026-08-29T20:51:03.000000Z"
    },
    {
        "id": "v26",
        "greek": "ἀκούω",
        "transliteration": "akouō",
        "portuguese": "eu ouço, escuto, entendo",
        "lesson_id": 5,
        "category": "verbo",
        "frequency": 430,
        "mnemonic": "akouō → \"acústica\"",
        "created_at": "2026-08-29T20:51:03.000000Z",
        "updated_at": "2026-08-29T20:51:03.000000Z"
    },
    {
        "id": "v27",
        "greek": "βάλλω",
        "transliteration": "ballō",
        "portuguese": "eu jogo, lanço",
        "lesson_id": 5,
        "category": "verbo",
        "frequency": 122,
        "mnemonic": "ballō → \"balística\"",
        "created_at": "2026-08-29T20:51:03.000000Z",
        "updated_at": "2026-08-29T20:51:03.000000Z"
    },
    {
        "id": "v28",
        "greek": "βλέπω",
        "transliteration": "blepō",
        "portuguese": "eu vejo, olho, contemplo",
        "lesson_id": 5,
        "category": "verbo",
        "frequency": 133,
        "mnemonic": null,
        "created_at": "2026-08-29T20:51:03.000000Z",
        "updated_at": "2026-08-29T20:51:03.000000Z"
    },
    {
        "id": "v29",
        "greek": "γινώσκω",
        "transliteration": "ginōskō",
        "portuguese": "eu conheço, sei, compreendo",
        "lesson_id": 5,
        "category": "verbo",
        "frequency": 222,
        "mnemonic": null,
        "created_at": "2026-08-29T20:51:03.000000Z",
        "updated_at": "2026-08-29T20:51:03.000000Z"
    },
    {
        "id": "v30",
        "greek": "γράφω",
        "transliteration": "graphō",
        "portuguese": "eu escrevo",
        "lesson_id": 5,
        "category": "verbo",
        "frequency": 191,
        "mnemonic": "graphō → \"grafologia\"",
        "created_at": "2026-08-29T20:51:03.000000Z",
        "updated_at": "2026-08-29T20:51:03.000000Z"
    },
    {
        "id": "v31",
        "greek": "διδάσκω",
        "transliteration": "didaskō",
        "portuguese": "eu ensino",
        "lesson_id": 5,
        "category": "verbo",
        "frequency": 97,
        "mnemonic": "didaskō → \"didática\"",
        "created_at": "2026-08-29T20:51:03.000000Z",
        "updated_at": "2026-08-29T20:51:03.000000Z"
    },
    {
        "id": "v32",
        "greek": "εὑρίσκω",
        "transliteration": "heuriskō",
        "portuguese": "eu acho, encontro",
        "lesson_id": 5,
        "category": "verbo",
        "frequency": 176,
        "mnemonic": "heuriskō → \"heurística\"",
        "created_at": "2026-08-29T20:51:03.000000Z",
        "updated_at": "2026-08-29T20:51:03.000000Z"
    },
    {
        "id": "v33",
        "greek": "θέλω",
        "transliteration": "thelō",
        "portuguese": "eu desejo, quero",
        "lesson_id": 5,
        "category": "verbo",
        "frequency": 209,
        "mnemonic": null,
        "created_at": "2026-08-29T20:51:03.000000Z",
        "updated_at": "2026-08-29T20:51:03.000000Z"
    },
    {
        "id": "v34",
        "greek": "λέγω",
        "transliteration": "legō",
        "portuguese": "eu digo, falo",
        "lesson_id": 5,
        "category": "verbo",
        "frequency": 2262,
        "mnemonic": null,
        "created_at": "2026-08-29T20:51:03.000000Z",
        "updated_at": "2026-08-29T20:51:03.000000Z"
    },
    {
        "id": "v35",
        "greek": "λούω",
        "transliteration": "louō",
        "portuguese": "eu lavo; (voz média: me banho)",
        "lesson_id": 5,
        "category": "verbo",
        "frequency": 5,
        "mnemonic": null,
        "created_at": "2026-08-29T20:51:03.000000Z",
        "updated_at": "2026-08-29T20:51:03.000000Z"
    },
    {
        "id": "v36",
        "greek": "λύω",
        "transliteration": "luō",
        "portuguese": "eu desato, solto, liberto; destruo",
        "lesson_id": 5,
        "category": "verbo",
        "frequency": 42,
        "mnemonic": null,
        "created_at": "2026-08-29T20:51:03.000000Z",
        "updated_at": "2026-08-29T20:51:03.000000Z"
    },
    {
        "id": "v37",
        "greek": "σώζω",
        "transliteration": "sōzō",
        "portuguese": "eu salvo, liberto, preservo, curo",
        "lesson_id": 5,
        "category": "verbo",
        "frequency": 107,
        "mnemonic": null,
        "created_at": "2026-08-29T20:51:03.000000Z",
        "updated_at": "2026-08-29T20:51:03.000000Z"
    },
    {
        "id": "v38",
        "greek": "φυλάσσω",
        "transliteration": "phylassō",
        "portuguese": "eu guardo",
        "lesson_id": 5,
        "category": "verbo",
        "frequency": 31,
        "mnemonic": null,
        "created_at": "2026-08-29T20:51:03.000000Z",
        "updated_at": "2026-08-29T20:51:03.000000Z"
    },
    {
        "id": "v39",
        "greek": "χαίρω",
        "transliteration": "chairō",
        "portuguese": "eu me alegro, me regozijo",
        "lesson_id": 5,
        "category": "verbo",
        "frequency": 74,
        "mnemonic": null,
        "created_at": "2026-08-29T20:51:03.000000Z",
        "updated_at": "2026-08-29T20:51:03.000000Z"
    },
    {
        "id": "v40",
        "greek": "εἰμί",
        "transliteration": "eimi",
        "portuguese": "eu sou, estou, existo",
        "lesson_id": 5,
        "category": "verbo",
        "frequency": 2461,
        "mnemonic": null,
        "created_at": "2026-08-29T20:51:03.000000Z",
        "updated_at": "2026-08-29T20:51:03.000000Z"
    }
]
 

Request      

GET api/vocabulary

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

lesson_id   integer  optional    

Filtrar por ID da lição. Example: 5

category   string  optional    

Filtrar por categoria (verbo, substantivo, etc). Example: verbo

Detalhar palavra

Retorna uma palavra específica do vocabulário.

Example request:
curl --request GET \
    --get "http://localhost/api/vocabulary/v26" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/vocabulary/v26"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "id": "v26",
    "greek": "ἀκούω",
    "transliteration": "akouō",
    "portuguese": "eu ouço, escuto, entendo",
    "lesson_id": 5,
    "category": "verbo",
    "frequency": 430,
    "mnemonic": "akouō → \"acústica\"",
    "created_at": "2026-08-29T20:51:03.000000Z",
    "updated_at": "2026-08-29T20:51:03.000000Z"
}
 

Request      

GET api/vocabulary/{id}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

ID da palavra. Example: v26