MENU navbar-image

Introduction

This documentation aims to provide all the information you need to work with our API.

<aside>As you scroll, you'll see code examples for working with the API in different programming languages in the dark area to the right (or as part of the content on mobile).
You can switch the language used with the tabs at the top right (or from the nav menu at the top left on mobile).</aside>

Authenticating requests

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

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

You can retrieve your token by visiting your dashboard and clicking Generate API token.

Auth

Este endpoint recebe o URL de redirecionamento pós-login e retorna o link do Google para o qual o frontend deve direcionar o usuário. O parâmetro 'redirect_to' é usado como 'state' no OAuth para manter a segurança e o contexto da aplicação.

Example request:
curl --request GET \
    --get "http://localhost/api/v1/auth/google/link?redirect_to=http%3A%2F%2Fwww.bailey.biz%2Fquos-velit-et-fugiat-sunt-nihil-accusantium-harum.html" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"redirect_to\": \"architecto\"
}"
const url = new URL(
    "http://localhost/api/v1/auth/google/link"
);

const params = {
    "redirect_to": "http://www.bailey.biz/quos-velit-et-fugiat-sunt-nihil-accusantium-harum.html",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

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

let body = {
    "redirect_to": "architecto"
};

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

Example response (200):


{
    "url": "string"
}
 

Callback de Autenticação via Google Socialite.

Este endpoint processa o retorno do Google após a autorização do usuário. Ele localiza ou cria o usuário na base de dados, gera um Personal Access Token (Sanctum) e redireciona o usuário de volta para o endereço fornecido no parâmetro 'state' da query string.

Example request:
curl --request GET \
    --get "http://localhost/api/v1/auth/google/callback?state=meu-front.com" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/auth/google/callback"
);

const params = {
    "state": "meu-front.com",
};
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 (500):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Erro na autenticação com google",
    "error": "Internal Error"
}
 

Request   

GET api/v1/auth/google/callback

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

state   string     

A URL de destino para onde o usuário deve ser redirecionado após o login. Example: meu-front.com

Response

Response Fields

token        

O token de acesso é anexado à URL de redirecionamento como um fragmento (#token=...).

POST api/v1/auth/logout

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

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

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

Request   

POST api/v1/auth/logout

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Department

Listar todos os departamentos.

requires authentication

Retorna uma coleção simples contendo o ID e o nome de todos os departamentos cadastrados, ordenados alfabeticamente.

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

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

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

Example response (200):


[
    {
        "id": 1,
        "name": "Financeiro"
    },
    {
        "id": 2,
        "name": "Tecnologia"
    }
]
 

Request   

GET api/v1/departments

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Disciplinas

Endpoints para consulta e gerenciamento de disciplinas via integração ONE.

GET api/v1/disciplines

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/disciplines?name=Anatomia&page=1&per_page=15&order=asc&sort_by=name" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "X-Domain-Name: faveni Identificador do Tenant/Domínio (Obrigatório para definir o contexto da requisição)." \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/disciplines"
);

const params = {
    "name": "Anatomia",
    "page": "1",
    "per_page": "15",
    "order": "asc",
    "sort_by": "name",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "X-Domain-Name": "faveni Identificador do Tenant/Domínio (Obrigatório para definir o contexto da requisição).",
    "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
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request   

GET api/v1/disciplines

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

X-Domain-Name        

Example: faveni Identificador do Tenant/Domínio (Obrigatório para definir o contexto da requisição).

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

name   string  optional    

Filtra pelo nome parcial da disciplina. Must not be greater than 255 characters. Example: Anatomia

page   integer  optional    

Número da página para navegação. Must be at least 1. Example: 1

per_page   integer  optional    

Itens por página (Máx: 100). Must be at least 1. Must not be greater than 100. Example: 15

order   string  optional    

Ordenação. Example: asc

Must be one of:
  • asc
  • desc
  • ASC
  • DESC
sort_by   string  optional    

Coluna para ordenação. Example: name

Must be one of:
  • name
  • id
  • created_at
  • source
  • term

GET api/v1/disciplines/{id}

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/disciplines/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "X-Domain-Name: faveni Identificador do Tenant/Domínio (Obrigatório para definir o contexto da requisição)." \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/disciplines/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "X-Domain-Name": "faveni Identificador do Tenant/Domínio (Obrigatório para definir o contexto da requisição).",
    "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
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request   

GET api/v1/disciplines/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

X-Domain-Name        

Example: faveni Identificador do Tenant/Domínio (Obrigatório para definir o contexto da requisição).

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the discipline. Example: architecto

GET api/v1/disciplines/{id}/curriculum

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/disciplines/architecto/curriculum?name=Enfermagem+01%2F2026&order=asc&sort_by=term&page=1&per_page=15&has_content=&status=in_progress" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "X-Domain-Name: faveni Identificador do Tenant/Domínio (Obrigatório para definir o contexto da requisição)." \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/disciplines/architecto/curriculum"
);

const params = {
    "name": "Enfermagem 01/2026",
    "order": "asc",
    "sort_by": "term",
    "page": "1",
    "per_page": "15",
    "has_content": "0",
    "status": "in_progress",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "X-Domain-Name": "faveni Identificador do Tenant/Domínio (Obrigatório para definir o contexto da requisição).",
    "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
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request   

GET api/v1/disciplines/{id}/curriculum

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

X-Domain-Name        

Example: faveni Identificador do Tenant/Domínio (Obrigatório para definir o contexto da requisição).

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the discipline. Example: architecto

Query Parameters

name   string  optional    

Filtro textual pelo nome da matriz curricular (busca parcial). Example: Enfermagem 01/2026

order   string  optional    

Direção da ordenação: "asc" (crescente) ou "desc" (decrescente). Example: asc

sort_by   string  optional    

Coluna utilizada para ordenação. Aceita campos da matriz (name, source) ou do vínculo (term). Example: term

Must be one of:
  • id
  • name
  • created_at
  • updated_at
  • has_content
  • progress
page   integer  optional    

Número da página atual para navegação. Example: 1

per_page   integer  optional    

Quantidade de itens retornados por página (Máx: 100). Example: 15

has_content   boolean  optional    

Filtrar disciplinas com ou sem conteudo. Example: false

status   string  optional    

Example: in_progress

Must be one of:
  • not_started
  • in_progress
  • completed

Domain

GET api/v1/domains

requires authentication

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

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "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
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request   

GET api/v1/domains

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Endpoints

Buscar solicitação de repasse no portalgef api

Example request:
curl --request GET \
    --get "http://localhost/api/v1/portal-gef/split-requests/2" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/portal-gef/split-requests/2"
);

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

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

Example response (200):


{
    "id": 1,
    "split_type": "Graduação",
    "request_datetime": "2026-04-01T16:40:20.635Z",
    "calculation_period": "[2026-03-01,2026-03-10)",
    "gross_amount": "0.00",
    "operation_type": "PIX",
    "status": "payment_analysis",
    "observation": "test",
    "agent": {
        "id": 3,
        "people": {
            "name": "FULANO DA SILVA - CARATINGA",
            "document_cpf": "00030000000"
        }
    },
    "pix_key": {
        "id": 6,
        "key": "23232323232",
        "type": "CPF"
    }
}
 

Example response (404, Solicitação de repasse não encontrada!):



 

Request   

GET api/v1/portal-gef/split-requests/{id}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

Id da solicitação de repasse Example: 2

Undocumented function

Example request:
curl --request GET \
    --get "http://localhost/api/v1/portal-gef/split-requests?date_start=2023-05-01&date_end=2023-05-30&level=Gradua%C3%A7%C3%A3o&status=invoice_analysis" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/portal-gef/split-requests"
);

const params = {
    "date_start": "2023-05-01",
    "date_end": "2023-05-30",
    "level": "Graduação",
    "status": "invoice_analysis",
};
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 (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request   

GET api/v1/portal-gef/split-requests

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

date_start   string  optional    

Data de início da busca. Example: 2023-05-01

date_end   string  optional    

Data de término da busca. Example: 2023-05-30

level   string  optional    

Filtro por nível de ensino. Example: Graduação

Must be one of:
  • Pós-graduação
  • Graduação
status   string  optional    

Status atual da requisição de split. Example: invoice_analysis

Must be one of:
  • invoice_pending_delivery
  • invoice_analysis
  • invoice_approved
  • invoice_rejected
  • payment_analysis
  • payment_rejected

Aprovar ou reprovar solicitação de repasse no portalgef api

Example request:
curl --request PUT \
    "http://localhost/api/v1/portal-gef/split-requests/architecto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"status\": \"invoice_analysis\",
    \"agent_id\": 123,
    \"justification\": \"Documento com inconsistências nos valores.\",
    \"invoice_amount\": 1500.75,
    \"add_amount\": 1500.75,
    \"discount\": 1500.75
}"
const url = new URL(
    "http://localhost/api/v1/portal-gef/split-requests/architecto"
);

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

let body = {
    "status": "invoice_analysis",
    "agent_id": 123,
    "justification": "Documento com inconsistências nos valores.",
    "invoice_amount": 1500.75,
    "add_amount": 1500.75,
    "discount": 1500.75
};

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

Example response (200):



 

Example response (400, Solicitação de repasse inexistente!):



 

Request   

PUT api/v1/portal-gef/split-requests/{id}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the split request. Example: architecto

Body Parameters

status   string     

Status da solicitação. Example: invoice_analysis

Must be one of:
  • invoice_pending_delivery
  • invoice_analysis
  • invoice_approved
  • invoice_rejected
  • payment_analysis
  • payment_rejected
agent_id   integer     

ID do agente responsável. Must be at least 1. Example: 123

justification   string  optional    

Justificativa para a ação (opcional). Example: Documento com inconsistências nos valores.

invoice_amount   string  optional    

Valor da fatura (deve ser maior que zero). Must be at least 1 character. Example: 1500.75

add_amount   string  optional    

Valor do acréscimo (deve ser maior que zero). Must be at least 1 character. Example: 1500.75

discount   string  optional    

Valor do desconto (deve ser maior que zero). Must be at least 1 character. Example: 1500.75

Undocumented function

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

const headers = {
    "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
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request   

GET api/v1/portal-gef/split-partners

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Lista dados e matriculas do aluno

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

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

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

Example response (200):


{
    "data": {
        "student": {
            "name": "Kassio Bitcoin",
            "sga_student_id": 173103,
            "email": "kassiobitcoin@gmail.com",
            "created_at": "2026-03-24 08:51:14",
            "is_active": true
        },
        "courses": [
            {
                "course_id": 2142,
                "course_name": "ENGENHARIA DE SOFTWARE",
                "workload": 720,
                "status": "pending",
                "expires_at": "2027-04-01 12:32:25",
                "login": null
            },
            {
                "course_id": 4838,
                "course_name": "NEGOCIAÇÃO EMPRESARIAL - CAPACITAÇÃO - 320 HORAS",
                "workload": 320,
                "status": "pending",
                "expires_at": "2027-04-01 12:32:25",
                "login": {
                    "created_at": "2026-04-01 11:36:15",
                    "updated_at": "2026-04-01 11:40:55"
                }
            }
        ]
    }
}
 

Request   

GET api/v1/students/{sga_student_id}/enrollments

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

sga_student_id   string     

Id do aluno no portal Example: architecto

Response

Response Fields

data   object     
student   object     

Dados pessoais do aluno.

name   string     

Nome completo do aluno.

sga_student_id   integer     

ID do aluno no SGA.

email   string     

E-mail de cadastro do aluno.

created_at   string     

Data de criação do usuário.

is_active   boolean     

Indica se o aluno está ativo no sistema.

courses   object[]     

Lista de cursos/matrículas vinculados ao aluno.

course_id   integer     

ID interno do curso.

course_name   string     

Nome do curso.

workload   integer     

Carga horária total da matriz curricular.

status   string     

Status atual da matrícula (ex: pending, active).

expires_at   string     

Data limite para conclusão do curso.

login   object|null     

Histórico de acessos. Será null se nunca acessou.

created_at   string     

Data do primeiro login.

updated_at   string     

Data do último login.

Remover uma questão e suas opções

Example request:
curl --request DELETE \
    "http://localhost/api/v1/questions/2" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/questions/2"
);

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

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

Example response (204, Sucesso):

Empty response
 

Example response (404, Recurso não encontrado):



 

Request   

DELETE api/v1/questions/{id}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

Id da questão Example: 2

Matriz

GET api/v1/curriculum

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/curriculum?name=Enfermagem+01%2F2026&order=asc&sort_by=term&page=1&per_page=15&has_content=&status=in_progress" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "X-Domain-Name: faveni Identificador do Tenant/Domínio (Obrigatório para definir o contexto da requisição)." \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/curriculum"
);

const params = {
    "name": "Enfermagem 01/2026",
    "order": "asc",
    "sort_by": "term",
    "page": "1",
    "per_page": "15",
    "has_content": "0",
    "status": "in_progress",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "X-Domain-Name": "faveni Identificador do Tenant/Domínio (Obrigatório para definir o contexto da requisição).",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

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

Example response (200):


{
    "data": [
        {
            "id": 5932,
            "uuid": "019d2a7f-24a8-733c-ba6f-b5e3593b164b",
            "name": "COMUNICAÇÃO, CULTURA ORGANIZACIONAL E TECNOLOGIA - 720 HORAS - STCC",
            "source": "UNIFAVENI",
            "status": "not_started",
            "progress": {
                "total_disciplines": 5,
                "completed_disciplines": 0
            },
            "created_at": "2026-03-26T17:14:28.000000Z",
            "updated_at": "2026-03-26T17:14:28.000000Z"
        }
    ],
    "meta": {
        "current_page": 1,
        "last_page": 10,
        "per_page": 15,
        "total": 150
    }
}
 

Request   

GET api/v1/curriculum

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

X-Domain-Name        

Example: faveni Identificador do Tenant/Domínio (Obrigatório para definir o contexto da requisição).

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

name   string  optional    

Filtro textual pelo nome da matriz curricular (busca parcial). Example: Enfermagem 01/2026

order   string  optional    

Direção da ordenação: "asc" (crescente) ou "desc" (decrescente). Example: asc

sort_by   string  optional    

Coluna utilizada para ordenação. Aceita campos da matriz (name, source) ou do vínculo (term). Example: term

Must be one of:
  • id
  • name
  • created_at
  • updated_at
  • has_content
  • progress
page   integer  optional    

Número da página atual para navegação. Example: 1

per_page   integer  optional    

Quantidade de itens retornados por página (Máx: 100). Example: 15

has_content   boolean  optional    

Filtrar disciplinas com ou sem conteudo. Example: false

status   string  optional    

Example: in_progress

Must be one of:
  • not_started
  • in_progress
  • completed

GET api/v1/curriculum/{id}

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/curriculum/123" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "X-Domain-Name: faveni Identificador do Tenant/Domínio (Obrigatório para definir o contexto da requisição)." \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/curriculum/123"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "X-Domain-Name": "faveni Identificador do Tenant/Domínio (Obrigatório para definir o contexto da requisição).",
    "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
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request   

GET api/v1/curriculum/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

X-Domain-Name        

Example: faveni Identificador do Tenant/Domínio (Obrigatório para definir o contexto da requisição).

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the curriculum Example: 123

GET api/v1/curriculum/{id}/disciplines

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/curriculum/architecto/disciplines" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "X-Domain-Name: faveni Identificador do Tenant/Domínio (Obrigatório para definir o contexto da requisição)." \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"architecto\",
    \"order\": \"architecto\",
    \"sort_by\": \"updated_at\",
    \"page\": 16,
    \"per_page\": 16,
    \"has_content\": false
}"
const url = new URL(
    "http://localhost/api/v1/curriculum/architecto/disciplines"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "X-Domain-Name": "faveni Identificador do Tenant/Domínio (Obrigatório para definir o contexto da requisição).",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "architecto",
    "order": "architecto",
    "sort_by": "updated_at",
    "page": 16,
    "per_page": 16,
    "has_content": false
};

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

Example response (200):


{
 "data": [
 {
   "id": 77625,
   "name": "TÓPICOS AVANÇADOS EM APLICAÇÕES WEB",
   "source": "UNIFAVENI",
   "has_content": false
 },
 ],
 "meta": { "current_page":1, "last_page":10, "per_page":15, "total":150 }
}
 

Request   

GET api/v1/curriculum/{id}/disciplines

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

X-Domain-Name        

Example: faveni Identificador do Tenant/Domínio (Obrigatório para definir o contexto da requisição).

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the curriculum. Example: architecto

Body Parameters

name   string  optional    

Example: architecto

order   string  optional    

Example: architecto

sort_by   string  optional    

Example: updated_at

Must be one of:
  • id
  • name
  • created_at
  • updated_at
  • has_content
page   integer  optional    

Example: 16

per_page   integer  optional    

Example: 16

has_content   boolean  optional    

Example: false

GET api/v1/curriculum/{discipline_id}/{id}

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/curriculum/123/123" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "X-Domain-Name: faveni Identificador do Tenant/Domínio (Obrigatório para definir o contexto da requisição)." \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/curriculum/123/123"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "X-Domain-Name": "faveni Identificador do Tenant/Domínio (Obrigatório para definir o contexto da requisição).",
    "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
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request   

GET api/v1/curriculum/{discipline_id}/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

X-Domain-Name        

Example: faveni Identificador do Tenant/Domínio (Obrigatório para definir o contexto da requisição).

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

discipline_id   integer     

The ID of the discipline Example: 123

id   integer     

The ID of the curriculum Example: 123

Quiz

Rota para exibir detalhes de uma avaliação

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/quizzes/16" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "X-Domain-Name: Obrigatório para identificação do contexto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/quizzes/16"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "X-Domain-Name": "Obrigatório para identificação do contexto",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

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

Example response (200, Sucesso):


{
    "id": 21,
    "name": "Teste Questões de Matemática",
    "time": 60,
    "max_attempts": 3,
    "instructions": "Leia atentamente antes de responder. Boa sorte!",
    "created_at": "2026-02-10T20:48:24.000000Z",
    "updated_at": "2026-02-10T20:48:24.000000Z",
    "questions": [
        {
            "id": 3,
            "uuid": "019c4950-06e0-73c1-bd64-ccd4984a1c3a",
            "statement": "Quanto é 2 + 2?",
            "type": "multiple_choice",
            "points": 10,
            "options": [
                {
                    "id": 8,
                    "content": "3",
                    "is_correct": false
                },
                {
                    "id": 9,
                    "content": "4",
                    "is_correct": true
                }
            ]
        }
    ]
}
 

Request   

GET api/v1/quizzes/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

X-Domain-Name        

Example: Obrigatório para identificação do contexto

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

ID da avaliação Example: 16

Rota para listar avaliações

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/quizzes" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "X-Domain-Name: Obrigatório para identificação do contexto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"bngzmiyvdljnikhwaykcmyuwpwlvqwrsitcpscqldzsnrwtujwvlxjklqppwqbewtnnoqitpxntl\"
}"
const url = new URL(
    "http://localhost/api/v1/quizzes"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "X-Domain-Name": "Obrigatório para identificação do contexto",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "bngzmiyvdljnikhwaykcmyuwpwlvqwrsitcpscqldzsnrwtujwvlxjklqppwqbewtnnoqitpxntl"
};

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

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request   

GET api/v1/quizzes

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

X-Domain-Name        

Example: Obrigatório para identificação do contexto

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

name   string     

Nome da avaliacao Example: Prova 1

Body Parameters

name   string  optional    

Must be at least 5 characters. Example: bngzmiyvdljnikhwaykcmyuwpwlvqwrsitcpscqldzsnrwtujwvlxjklqppwqbewtnnoqitpxntl

Atualizar uma avaliação

requires authentication

Example request:
curl --request PUT \
    "http://localhost/api/v1/quizzes/2" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "X-Domain-Name: Obrigatório para identificação do contexto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"Prova de Matemática - 1º Bimestre\",
    \"time_limit\": 60,
    \"max_attempts\": 3,
    \"instructions\": \"Não é permitido o uso de calculadora.\",
    \"passing_score\": 7,
    \"grading_method\": \"highest\",
    \"questions\": [
        {
            \"id\": 3,
            \"statement\": \"Quanto é 2 + 2?\",
            \"type\": \"multiple_choice\",
            \"points\": 10,
            \"options\": [
                {
                    \"id\": 8,
                    \"content\": \"3\",
                    \"is_correct\": false
                },
                {
                    \"content\": \"4\",
                    \"is_correct\": true
                }
            ]
        }
    ]
}"
const url = new URL(
    "http://localhost/api/v1/quizzes/2"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "X-Domain-Name": "Obrigatório para identificação do contexto",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "Prova de Matemática - 1º Bimestre",
    "time_limit": 60,
    "max_attempts": 3,
    "instructions": "Não é permitido o uso de calculadora.",
    "passing_score": 7,
    "grading_method": "highest",
    "questions": [
        {
            "id": 3,
            "statement": "Quanto é 2 + 2?",
            "type": "multiple_choice",
            "points": 10,
            "options": [
                {
                    "id": 8,
                    "content": "3",
                    "is_correct": false
                },
                {
                    "content": "4",
                    "is_correct": true
                }
            ]
        }
    ]
};

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

Example response (204, Sucesso):

Empty response
 

Example response (404, Recurso não encontrado):



 

Request   

PUT api/v1/quizzes/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

X-Domain-Name        

Example: Obrigatório para identificação do contexto

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

Id da avaliacao Example: 2

Body Parameters

name   string     

O título do questionário. Must not be greater than 255 characters. Example: Prova de Matemática - 1º Bimestre

time_limit   integer     

Tempo limite em minutos para responder. Must be at least 0. Example: 60

max_attempts   integer     

Número máximo de tentativas permitidas. Must be at least 1. Example: 3

instructions   string  optional    

Instruções visíveis ao aluno antes de iniciar. Example: Não é permitido o uso de calculadora.

passing_score   integer     

Nota de corte. Must be at least 0. Example: 7

grading_method   string     

Metodo de consideração de nota. Example: highest

Must be one of:
  • highest
  • latest
questions   object[]     

Lista de questões vinculadas ao questionário.

id   integer  optional    

ID da questão. Envie o ID para atualizar uma existente ou null (ou omita) para criar uma nova. Example: 3

statement   string     

O enunciado da pergunta. Example: Qual a capital do Brasil?

type   string     

Tipo da questão. Valores: multiple_choice, true_false, text. Example: multiple_choice

Must be one of:
  • multiple_choice
  • true_false
  • text
points   number     

Valor da questão na nota final. Must be at least 0. Example: 2.5

options   object[]  optional    

Lista de alternativas (opcional dependendo do tipo da questão).

id   integer  optional    

ID da opção. Envie ID para atualizar, null para criar. Example: 15

content   string     

Texto da alternativa. Example: Brasília

is_correct   boolean     

Indica se esta é a resposta correta. Example: false

Rota para listar seções de uma avaliação

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/quizzes/2/sections" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "X-Domain-Name: Obrigatório para identificação do contexto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/quizzes/2/sections"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "X-Domain-Name": "Obrigatório para identificação do contexto",
    "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
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request   

GET api/v1/quizzes/{id}/sections

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

X-Domain-Name        

Example: Obrigatório para identificação do contexto

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

Id da avaliacao Example: 2

Role

Listar todos as roles.

Retorna uma coleção simples contendo o ID e o nome de todos as roles (Cargos) cadastrados, ordenados alfabeticamente.

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

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

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

Example response (200):


[
    {
        "id": 1,
        "name": "Admin"
    },
    {
        "id": 2,
        "name": "Diretor"
    }
]
 

Request   

GET api/v1/roles

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Section

Rota para listar seções

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/curriculum-disciplines/1/sections" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "X-Domain-Name: faveni Identificador do Tenant/Domínio (Obrigatório para definir o contexto da requisição)." \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/curriculum-disciplines/1/sections"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "X-Domain-Name": "faveni Identificador do Tenant/Domínio (Obrigatório para definir o contexto da requisição).",
    "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
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request   

GET api/v1/curriculum-disciplines/{id}/sections

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

X-Domain-Name        

Example: faveni Identificador do Tenant/Domínio (Obrigatório para definir o contexto da requisição).

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string  optional    

O id da matriz_disciplina Example: 1

Rota para marcar a matriz-disciplina como concluida, registrando a data atual

requires authentication

Example request:
curl --request PATCH \
    "http://localhost/api/v1/curriculum-disciplines/1/finish" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "X-Domain-Name: faveni Identificador do Tenant/Domínio (Obrigatório para definir o contexto da requisição)." \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/curriculum-disciplines/1/finish"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "X-Domain-Name": "faveni Identificador do Tenant/Domínio (Obrigatório para definir o contexto da requisição).",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

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

Request   

PATCH api/v1/curriculum-disciplines/{id}/finish

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

X-Domain-Name        

Example: faveni Identificador do Tenant/Domínio (Obrigatório para definir o contexto da requisição).

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string  optional    

O id da matriz_disciplina Example: 1

Rota para criar uma sessão

requires authentication

Example request:
curl --request POST \
    "http://localhost/api/v1/sections" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "X-Domain-Name: faveni Identificador do Tenant/Domínio (Obrigatório para definir o contexto da requisição)." \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"John Doe\",
    \"description\": \"aaaaa\",
    \"curriculum_discipline_id\": 1,
    \"sort_order\": 1
}"
const url = new URL(
    "http://localhost/api/v1/sections"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "X-Domain-Name": "faveni Identificador do Tenant/Domínio (Obrigatório para definir o contexto da requisição).",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "John Doe",
    "description": "aaaaa",
    "curriculum_discipline_id": 1,
    "sort_order": 1
};

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

Request   

POST api/v1/sections

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

X-Domain-Name        

Example: faveni Identificador do Tenant/Domínio (Obrigatório para definir o contexto da requisição).

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

name   string     

Nome da seção. Example: John Doe

description   string  optional    

Descrição da Seção. Must not be greater than 1000 characters. Example: aaaaa

curriculum_discipline_id   integer     

Matriz disciplina. Example: 1

sort_order   integer  optional    

Ordem. Example: 1

Rota para atualizar uma seção

requires authentication

Example request:
curl --request PATCH \
    "http://localhost/api/v1/sections/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "X-Domain-Name: faveni Identificador do Tenant/Domínio (Obrigatório para definir o contexto da requisição)." \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"John Doe\",
    \"description\": \"aaaaa\"
}"
const url = new URL(
    "http://localhost/api/v1/sections/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "X-Domain-Name": "faveni Identificador do Tenant/Domínio (Obrigatório para definir o contexto da requisição).",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "John Doe",
    "description": "aaaaa"
};

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

Request   

PATCH api/v1/sections/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

X-Domain-Name        

Example: faveni Identificador do Tenant/Domínio (Obrigatório para definir o contexto da requisição).

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string  optional    

Id da seção Example: architecto

Body Parameters

name   string     

Nome da seção. Example: John Doe

description   string  optional    

Descrição da Seção. Must not be greater than 1000 characters. Example: aaaaa

Rota para ver uma seção

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/sections/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "X-Domain-Name: faveni Identificador do Tenant/Domínio (Obrigatório para definir o contexto da requisição)." \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/sections/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "X-Domain-Name": "faveni Identificador do Tenant/Domínio (Obrigatório para definir o contexto da requisição).",
    "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
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request   

GET api/v1/sections/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

X-Domain-Name        

Example: faveni Identificador do Tenant/Domínio (Obrigatório para definir o contexto da requisição).

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string  optional    

Id da seção Example: architecto

Rota para excluir uma seção

requires authentication

Example request:
curl --request DELETE \
    "http://localhost/api/v1/sections/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "X-Domain-Name: faveni Identificador do Tenant/Domínio (Obrigatório para definir o contexto da requisição)." \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/sections/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "X-Domain-Name": "faveni Identificador do Tenant/Domínio (Obrigatório para definir o contexto da requisição).",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

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

Request   

DELETE api/v1/sections/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

X-Domain-Name        

Example: faveni Identificador do Tenant/Domínio (Obrigatório para definir o contexto da requisição).

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the section. Example: architecto

int   string  optional    

$id Required Example: architecto

Rota para reordenar os recursos de uma seção

requires authentication

Example request:
curl --request PATCH \
    "http://localhost/api/v1/sections/1/order" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "X-Domain-Name: faveni Identificador do Tenant/Domínio (Obrigatório para definir o contexto da requisição)." \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"items\": [
        {
            \"sort_order\": 1,
            \"contentable_id\": 27,
            \"type\": \"document\"
        }
    ]
}"
const url = new URL(
    "http://localhost/api/v1/sections/1/order"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "X-Domain-Name": "faveni Identificador do Tenant/Domínio (Obrigatório para definir o contexto da requisição).",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "items": [
        {
            "sort_order": 1,
            "contentable_id": 27,
            "type": "document"
        }
    ]
};

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

Example response (204):

Empty response
 

Example response (422):


:{"message":"Existem itens duplicados na lista"}
 

Request   

PATCH api/v1/sections/{id}/order

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

X-Domain-Name        

Example: faveni Identificador do Tenant/Domínio (Obrigatório para definir o contexto da requisição).

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

ID da seção Example: 1

Body Parameters

items   object[]     

Lista contendo os itens que tiveram sua posição alterada.

sort_order   integer     

Nova posição visual do item. Example: 1

contentable_id   integer     

ID original do recurso (documento, vídeo, etc). Example: 27

type   string     

O discriminador do tipo de recurso. Example: document

Section Curriculum Discipline

Rota para reordenar as seções

requires authentication

Example request:
curl --request PATCH \
    "http://localhost/api/v1/section-curriculum-disciplines/123/sections/order" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "X-Domain-Name: Obrigatório para identificação do contexto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"items\": [
        {
            \"sort_order\": 16,
            \"section_id\": 16
        }
    ]
}"
const url = new URL(
    "http://localhost/api/v1/section-curriculum-disciplines/123/sections/order"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "X-Domain-Name": "Obrigatório para identificação do contexto",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "items": [
        {
            "sort_order": 16,
            "section_id": 16
        }
    ]
};

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

Example response (204):

Empty response
 

Example response (422):


{
    "errors": "campo invalido"
}
 

Request   

PATCH api/v1/section-curriculum-disciplines/{curriculum_discipline_id}/sections/order

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

X-Domain-Name        

Example: Obrigatório para identificação do contexto

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

curriculum_discipline_id   string     

vinculo da matriz disciplina Example: 123

Body Parameters

items   object[]     
sort_order   integer     

Example: 16

section_id   integer     

Example: 16

Section Document

Anexar Documento à Seção * Realiza o upload de um arquivo e cria o vínculo com a seção especificada.

requires authentication

O arquivo é enviado para o S3 e os metadados salvos no banco.

Example request:
curl --request POST \
    "http://localhost/api/v1/sections/architecto/documents" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "X-Domain-Name: Obrigatório para identificação do contexto" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "name=Material complementar aula de Cálculo 1.doc"\
    --form "sort_order=5"\
    --form "description=Material que complementa a aula de Cálculo 1"\
    --form "file=@/tmp/phpp90gib1oed57a6Qgl7I" 
const url = new URL(
    "http://localhost/api/v1/sections/architecto/documents"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "X-Domain-Name": "Obrigatório para identificação do contexto",
    "Content-Type": "multipart/form-data",
    "Accept": "application/json",
};

const body = new FormData();
body.append('name', 'Material complementar aula de Cálculo 1.doc');
body.append('sort_order', '5');
body.append('description', 'Material que complementa a aula de Cálculo 1');
body.append('file', document.querySelector('input[name="file"]').files[0]);

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

Request   

POST api/v1/sections/{id}/documents

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

X-Domain-Name        

Example: Obrigatório para identificação do contexto

Content-Type        

Example: multipart/form-data

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the section. Example: architecto

Body Parameters

file   file     

O arquivo binário para upload. Formatos permitidos: pdf, doc, docx. Tamanho máximo: 20480KB. Must be a file. Must not be greater than 5000 kilobytes. Example: /tmp/phpp90gib1oed57a6Qgl7I

name   string  optional    

O nome de exibição do documento. Se omitido, o sistema usará o nome original do arquivo. Must not be greater than 255 characters. Example: Material complementar aula de Cálculo 1.doc

sort_order   integer  optional    

Define a posição numérica deste item na lista da seção. Se omitido, será adicionado ao final. Example: 5

description   string  optional    

Descrição do documento. Must not be greater than 255 characters. Example: Material que complementa a aula de Cálculo 1

Rota para excluir um documento da seção

requires authentication

Example request:
curl --request DELETE \
    "http://localhost/api/v1/sections/1/documents/12" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "X-Domain-Name: Obrigatório para identificação do contexto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/sections/1/documents/12"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "X-Domain-Name": "Obrigatório para identificação do contexto",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

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

Request   

DELETE api/v1/sections/{id}/documents/{documentId}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

X-Domain-Name        

Example: Obrigatório para identificação do contexto

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

Id da seção Example: 1

documentId   integer     

Id do documento Example: 12

Rota para substituir um documento

requires authentication

Example request:
curl --request PUT \
    "http://localhost/api/v1/sections/architecto/documents/16" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "X-Domain-Name: Obrigatório para identificação do contexto" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "name=Apostila de Matemática V2"\
    --form "_method=PUT"\
    --form "description=Et animi quos velit et fugiat."\
    --form "file=@/tmp/php3a0p09tdqjnscfUvEcx" 
const url = new URL(
    "http://localhost/api/v1/sections/architecto/documents/16"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "X-Domain-Name": "Obrigatório para identificação do contexto",
    "Content-Type": "multipart/form-data",
    "Accept": "application/json",
};

const body = new FormData();
body.append('name', 'Apostila de Matemática V2');
body.append('_method', 'PUT');
body.append('description', 'Et animi quos velit et fugiat.');
body.append('file', document.querySelector('input[name="file"]').files[0]);

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

Example response (204):

Empty response
 

Request   

PUT api/v1/sections/{id}/documents/{documentId}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

X-Domain-Name        

Example: Obrigatório para identificação do contexto

Content-Type        

Example: multipart/form-data

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the section. Example: architecto

documentId   integer     

Id do documento antigo Example: 16

sectionId   integer     

Id da seção Example: 1

Body Parameters

file   file  optional    

O arquivo para substituição (opcional). Se enviado, substitui o anterior. Aceita PDF, DOC, DOCX. Máx: 5MB. Example: /tmp/php3a0p09tdqjnscfUvEcx

name   string  optional    

O novo nome de exibição do documento. Example: Apostila de Matemática V2

_method   string     

O truque para fazer upload via PUT/PATCH. Deve ser sempre "PUT" ou "PATCH". Example: PUT

description   string  optional    

Must not be greater than 255 characters. Example: Et animi quos velit et fugiat.

Section Quiz

Rota para criar avaliação

requires authentication

Example request:
curl --request POST \
    "http://localhost/api/v1/sections/16/quizzes" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "X-Domain-Name: Obrigatório para identificação do contexto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"Avaliação de Matemática - 1º Bimestre\",
    \"time_limit\": 60,
    \"max_attempts\": 3,
    \"instructions\": \"Leia com atenção. Não é permitido uso de calculadora.\",
    \"sort_order\": 1,
    \"passing_score\": 7,
    \"grading_method\": \"highest\",
    \"questions\": [
        {
            \"statement\": \"Quanto é a raiz quadrada de 144?\",
            \"points\": 2,
            \"options\": [
                {
                    \"content\": \"12\",
                    \"is_correct\": false
                }
            ]
        }
    ]
}"
const url = new URL(
    "http://localhost/api/v1/sections/16/quizzes"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "X-Domain-Name": "Obrigatório para identificação do contexto",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "Avaliação de Matemática - 1º Bimestre",
    "time_limit": 60,
    "max_attempts": 3,
    "instructions": "Leia com atenção. Não é permitido uso de calculadora.",
    "sort_order": 1,
    "passing_score": 7,
    "grading_method": "highest",
    "questions": [
        {
            "statement": "Quanto é a raiz quadrada de 144?",
            "points": 2,
            "options": [
                {
                    "content": "12",
                    "is_correct": false
                }
            ]
        }
    ]
};

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

Request   

POST api/v1/sections/{id}/quizzes

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

X-Domain-Name        

Example: Obrigatório para identificação do contexto

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

ID da seção Example: 16

Body Parameters

name   string     

O título principal do Quiz. Example: Avaliação de Matemática - 1º Bimestre

time_limit   integer     

Tempo limite para realização em minutos. Envie 0 para ilimitado. Must be at least 0. Example: 60

max_attempts   integer     

Número máximo de vezes que o aluno pode tentar. Must be at least 1. Example: 3

instructions   string     

Orientações gerais exibidas antes do início da prova. Example: Leia com atenção. Não é permitido uso de calculadora.

sort_order   integer  optional    

A posição numérica deste quiz na listagem da aula. Must be at least 0. Example: 1

passing_score   integer     

Nota de corte. Must be at least 0. Example: 7

grading_method   string     

Metodo de consideração de nota. Example: highest

Must be one of:
  • highest
  • latest
questions   object[]     

Lista contendo as questões da prova.

statement   string     

O enunciado da questão. Example: Quanto é a raiz quadrada de 144?

points   integer     

A pontuação desta questão específica. Must be at least 1. Example: 2

options   object[]     

Lista de alternativas para esta questão.

content   string     

O texto da alternativa. Example: 12

is_correct   boolean     

Define se esta é a alternativa correta (true) ou incorreta (false). Example: false

Rota para vincular um questionario

requires authentication

Example request:
curl --request POST \
    "http://localhost/api/v1/sections/16/quizzes/attach" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "X-Domain-Name: Obrigatório para identificação do contexto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"quiz_id\": 16,
    \"sort_order\": 16
}"
const url = new URL(
    "http://localhost/api/v1/sections/16/quizzes/attach"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "X-Domain-Name": "Obrigatório para identificação do contexto",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "quiz_id": 16,
    "sort_order": 16
};

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

Request   

POST api/v1/sections/{id}/quizzes/attach

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

X-Domain-Name        

Example: Obrigatório para identificação do contexto

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

Id da seção Example: 16

Body Parameters

quiz_id   integer     

Id da avaliação. Example: 16

sort_order   integer  optional    

Ordem da avaliação. Example: 16

Remover Quiz da Seção

requires authentication

Desvincula (ou remove) uma avaliação de uma seção específica.

Example request:
curl --request DELETE \
    "http://localhost/api/v1/sections/10/quizzes/55" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "X-Domain-Name: Obrigatório para identificação do contexto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/sections/10/quizzes/55"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "X-Domain-Name": "Obrigatório para identificação do contexto",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

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

Example response (204, Sucesso. O vínculo foi removido e não há conteúdo para retornar.):

Empty response
 

Example response (404, Seção ou Quiz não encontrado.):



 

Request   

DELETE api/v1/sections/{id}/quizzes/{quizId}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

X-Domain-Name        

Example: Obrigatório para identificação do contexto

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

O ID da seção onde o quiz está vinculado. Example: 10

quizId   integer     

O ID do quiz que será removido. Example: 55

Section Video

Rota para salvar um video na seção

requires authentication

Example request:
curl --request POST \
    "http://localhost/api/v1/sections/123/videos" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "X-Domain-Name: architecto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"sort_order\": 1,
    \"name\": \"calculo 2\",
    \"source\": \"spalla\",
    \"url\": \"https:\\/\\/minhaplataforma.com\\/watch?v=\",
    \"external_id\": \"cc14a649-46df-4e87-a9f7-81302492be8f\"
}"
const url = new URL(
    "http://localhost/api/v1/sections/123/videos"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "X-Domain-Name": "architecto",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "sort_order": 1,
    "name": "calculo 2",
    "source": "spalla",
    "url": "https:\/\/minhaplataforma.com\/watch?v=",
    "external_id": "cc14a649-46df-4e87-a9f7-81302492be8f"
};

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

Request   

POST api/v1/sections/{id}/videos

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

X-Domain-Name        

Example: architecto

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

Id da seção Example: 123

Body Parameters

sort_order   integer  optional    

A posição numérica deste video na listagem da aula. Must be at least 0. Example: 1

name   string     

O titulo do video. Example: calculo 2

source   string     

A plataforma de onde o vídeo vem. Example: spalla

Must be one of:
  • spalla
url   string     

O link do video. Must be a valid URL. Example: https://minhaplataforma.com/watch?v=

external_id   string     

O ID do video na plataforma (spalla/youtube/etc). Example: cc14a649-46df-4e87-a9f7-81302492be8f

Rota para atualizar o vídeo de uma seção

requires authentication

Example request:
curl --request PUT \
    "http://localhost/api/v1/sections/architecto/videos/123" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "X-Domain-Name: architecto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"url\": \"https:\\/\\/minhaplataforma.com\\/watch?v=\",
    \"name\": \"calculo 2\",
    \"external_id\": \"architecto\",
    \"source\": \"spalla\"
}"
const url = new URL(
    "http://localhost/api/v1/sections/architecto/videos/123"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "X-Domain-Name": "architecto",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "url": "https:\/\/minhaplataforma.com\/watch?v=",
    "name": "calculo 2",
    "external_id": "architecto",
    "source": "spalla"
};

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

Request   

PUT api/v1/sections/{id}/videos/{videoId}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

X-Domain-Name        

Example: architecto

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the section. Example: architecto

videoId   integer     

Id do video Example: 123

sectionId   integer     

Id da seção Example: 123

Body Parameters

url   string     

O link do video. Must be a valid URL. Example: https://minhaplataforma.com/watch?v=

name   string     

O titulo do video. Example: calculo 2

external_id   string     

Example: architecto

source   string     

A plataforma de onde o vídeo vem. Example: spalla

Must be one of:
  • spalla

Rota para remover um vídeo de uma seção

requires authentication

Example request:
curl --request DELETE \
    "http://localhost/api/v1/sections/architecto/videos/123" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "X-Domain-Name: architecto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/sections/architecto/videos/123"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "X-Domain-Name": "architecto",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

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

Request   

DELETE api/v1/sections/{id}/videos/{videoId}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

X-Domain-Name        

Example: architecto

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the section. Example: architecto

videoId   integer     

Id do video Example: 123

sectionId   integer     

Id da seção Example: 123

User

Lista usuários paginados.

requires authentication

Rota: GET /v1/users Descrição: Lista usuários paginados com filtros (status) e ordena mediante ao nome da coluna.

Example request:
curl --request GET \
    --get "http://localhost/api/v1/users?status=approved&order_by=name&direction=asc&page=1&limit=10&search=Jo%C3%A3o" \
    --header "Authorization: string required" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/users"
);

const params = {
    "status": "approved",
    "order_by": "name",
    "direction": "asc",
    "page": "1",
    "limit": "10",
    "search": "João",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

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

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

Example response (200):


{
 "data": [
   { "uuid":"...", "name":"...", "email":"...", "role":"admin", "department":"Tecnologia", "status":"active" }
 ],string
 "meta": { "current_page":1, "last_page":10, "per_page":15, "total":150 }
}
 

Request   

GET api/v1/users

Headers

Authorization        

Example: string required

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

status   string  optional    

optional Filtra por status. Example: approved

order_by   string  optional    

optional Campo para ordenação. Example: name

direction   string  optional    

optional Direção da ordenação. Example: asc

page   integer  optional    

optional Página atual. Example: 1

limit   integer  optional    

optional Itens por página. Example: 10

search   string  optional    

Filtra usuários pelo nome. Example: João

Obter perfil do usuário autenticado.

requires authentication

Este endpoint retorna os detalhes do usuário logado, incluindo o cargo (role) único e o nome do departamento vinculado ao seu registro de funcionário.

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

const headers = {
    "Authorization": "string required Exemplo: &quot;Bearer {token}&quot;",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

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

Example response (200):


{
    "uuid": "9b12e345-e89b-12d3-a456-426614174000",
    "name": "João Silva",
    "email": "joao.silva@empresa.com.br",
    "avatar_url": "lh3.googleusercontent.com...",
    "role": {
        "id": 2,
        "name": "gerente"
    },
    "department": {
        "id": 2,
        "name": "Marketing"
    },
    "status": "active",
    "created_at": "2025-12-19T16:10:00Z",
    "updated_at": "2025-12-19T16:10:00Z"
}
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Request   

GET api/v1/me

Headers

Authorization        

Example: string required Exemplo: "Bearer {token}"

Content-Type        

Example: application/json

Accept        

Example: application/json

Atualizar perfil do usuário autenticado.

requires authentication

Este endpoint permite que o usuário logado atualize suas informações pessoais. A operação é realizada de forma atômica (transação).

Example request:
curl --request PUT \
    "http://localhost/api/v1/me" \
    --header "Authorization: string required Exemplo: \&quot;Bearer {token}\&quot;" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"João Silva\",
    \"role_id\": 1,
    \"department_id\": 2,
    \"email\": \"joao.silva@empresa.com\"
}"
const url = new URL(
    "http://localhost/api/v1/me"
);

const headers = {
    "Authorization": "string required Exemplo: &quot;Bearer {token}&quot;",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "João Silva",
    "role_id": 1,
    "department_id": 2,
    "email": "joao.silva@empresa.com"
};

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

Example response (200):


{
    "uuid": "9b12e345-e89b-12d3-a456-426614174000",
    "name": "João Silva",
    "email": "joao.silva@empresa.com",
    "avatar_url": "lh3.googleusercontent.com...",
    "role_id": 1,
    "department": "Tecnologia",
    "status": "active",
    "created_at": "2025-12-19T16:15:00Z",
    "updated_at": "2025-12-19T16:20:00Z"
}
 

Example response (422):


{
    "message": "The given data was invalid.",
    "errors": {
        "department_id": [
            "O departamento selecionado é inválido."
        ],
        "role": [
            "O cargo selecionado é inválido."
        ]
    }
}
 

Example response (500):


{
    "message": "Erro interno ao atualizar perfil."
}
 

Request   

PUT api/v1/me

Headers

Authorization        

Example: string required Exemplo: "Bearer {token}"

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

name   string  optional    

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

role_id   integer  optional    

ID da role do funcionário a ser sincronizada. Example: 1

department_id   integer  optional    

ID do departamento vinculado ao funcionário. Example: 2

email   string  optional    

Endereço de e-mail. Example: joao.silva@empresa.com

Buscar alunos

requires authentication

Rota para retornar usuários que são alunos

Example request:
curl --request GET \
    --get "http://localhost/api/v1/users/students?order_by=name&direction=asc&page=1&limit=15&search=Kassio" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/users/students"
);

const params = {
    "order_by": "name",
    "direction": "asc",
    "page": "1",
    "limit": "15",
    "search": "Kassio",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "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
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request   

GET api/v1/users/students

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

order_by   string  optional    

Campo pelo qual a lista de alunos será ordenada. Valores permitidos: name, sga_student_id, created_at. Example: name

Must be one of:
  • name
  • sga_student_id
  • created_at
direction   string  optional    

Direção da ordenação. Valores permitidos: asc (crescente) ou desc (decrescente). Example: asc

Must be one of:
  • asc
  • desc
page   integer  optional    

Número da página que deseja visualizar na paginação. Must be at least 1. Example: 1

limit   integer  optional    

Quantidade de registros retornados por página. Máximo permitido: 100. Must be at least 1. Must not be greater than 100. Example: 15

search   string  optional    

Termo para busca livre. Pesquisa por nome do aluno, ID do SGA ou ID da matrícula. Example: Kassio

Obter perfil de determinado usuário.

requires authentication

Este endpoint permite que o adminstrador consiga as informações de um determinado usuário

Example request:
curl --request GET \
    --get "http://localhost/api/v1/users/1" \
    --header "Authorization: string required Exemplo: \&quot;Bearer {token}\&quot;" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/users/1"
);

const headers = {
    "Authorization": "string required Exemplo: &quot;Bearer {token}&quot;",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

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

Example response (200):


{
    "uuid": "d8933aba-2cb7-44d2-925b-7337226b4934",
    "name": "Juliana Paes",
    "email": "juliana.paes@empresa.com",
    "avatar_url": null,
    "role": {
        "id": 2,
        "name": "gerente"
    },
    "department": {
        "id": 2,
        "name": "Marketing"
    },
    "status": "pending",
    "is_active": false,
    "email_verified_at": "2025-12-31T08:43:10.000000Z",
    "created_at": "2025-12-31T08:43:10.000000Z",
    "updated_at": "2025-12-31T08:43:10.000000Z"
}
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (404):


{
    "message": "Usuário não encontrado."
}
 

Request   

GET api/v1/users/{user_uuid}

Headers

Authorization        

Example: string required Exemplo: "Bearer {token}"

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

user_uuid   integer     

Example: 1

Atualizar perfil de determinado usuário.

requires authentication

Este endpoint permite que o adminstrador atualize as informações de um usuário.

Example request:
curl --request PUT \
    "http://localhost/api/v1/users/1" \
    --header "Authorization: string required Exemplo: \&quot;Bearer {token}\&quot;" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"João Silva\",
    \"role_id\": 1,
    \"department_id\": 2,
    \"is_active\": true,
    \"email\": \"joao.silva@empresa.com\"
}"
const url = new URL(
    "http://localhost/api/v1/users/1"
);

const headers = {
    "Authorization": "string required Exemplo: &quot;Bearer {token}&quot;",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "João Silva",
    "role_id": 1,
    "department_id": 2,
    "is_active": true,
    "email": "joao.silva@empresa.com"
};

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

Example response (200):


{
'message': 'Usuário atualizado com sucesso.',
}
 

Example response (422):


{
    "message": "The given data was invalid.",
    "errors": {
        "department_id": [
            "O departamento selecionado é inválido."
        ],
        "role": [
            "O cargo selecionado é inválido."
        ]
    }
}
 

Example response (500):


{
    "message": "Erro interno ao atualizar usuário."
}
 

Request   

PUT api/v1/users/{user_uuid}

Headers

Authorization        

Example: string required Exemplo: "Bearer {token}"

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

user_uuid   integer     

Example: 1

Body Parameters

name   string  optional    

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

role_id   integer  optional    

ID da role do funcionário a ser sincronizada. Example: 1

department_id   integer  optional    

ID do departamento vinculado ao funcionário. Example: 2

is_active   boolean  optional    

informa se o usário está ativo ou não. Example: true

email   string  optional    

Endereço de e-mail. Example: joao.silva@empresa.com

Moderação de usuário (aprovar/rejeitar).

requires authentication

Este endpoit permite que um administrador aprove ou rejeite um usuário pendente. caso aprovado o campo 'approved_by' será preenchido com o id do administrador que realizou a ação. caso rejeitado o usuário será excluído.

Example request:
curl --request PATCH \
    "http://localhost/api/v1/users/1/moderation" \
    --header "Authorization: string required" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"status\": \"architecto\"
}"
const url = new URL(
    "http://localhost/api/v1/users/1/moderation"
);

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

let body = {
    "status": "architecto"
};

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

Example response (200):


{
'message' => 'Moderação realizada com sucesso.',
}
 

Example response (422):


{
    "message": "Este usuário já foi processado e não está mais pendente."
}
 

Example response (500):


{
'message' => 'Erro interno ao processar a moderação do usuário.',
'error' => 'Detalhes do erro',
}
 

Request   

PATCH api/v1/users/{user_uuid}/moderation

Headers

Authorization        

Example: string required

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

user_uuid   integer     

Example: 1

Body Parameters

status   string     

options: approved | rejected. Example: architecto

Video

Rota para listar Vídeos

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/videos?source=spalla&page=1&limit=15&title=Aula+Introdut%C3%B3ria&description=Eius+et+animi+quos+velit+et.&tags=educacao%2Cvideo&created_at=2023-10-01&sort=-created_at&directory_id=folder_123" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "X-Domain-Name: para identificação da instância" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"page\": 16,
    \"limit\": 16,
    \"created_at\": \"architecto\",
    \"sort\": \"architecto\",
    \"tags\": \"architecto\",
    \"title\": \"architecto\",
    \"description\": \"Eius et animi quos velit et.\",
    \"directory_id\": \"architecto\",
    \"source\": \"spalla\"
}"
const url = new URL(
    "http://localhost/api/v1/videos"
);

const params = {
    "source": "spalla",
    "page": "1",
    "limit": "15",
    "title": "Aula Introdutória",
    "description": "Eius et animi quos velit et.",
    "tags": "educacao,video",
    "created_at": "2023-10-01",
    "sort": "-created_at",
    "directory_id": "folder_123",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "X-Domain-Name": "para identificação da instância",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "page": 16,
    "limit": 16,
    "created_at": "architecto",
    "sort": "architecto",
    "tags": "architecto",
    "title": "architecto",
    "description": "Eius et animi quos velit et.",
    "directory_id": "architecto",
    "source": "spalla"
};

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

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request   

GET api/v1/videos

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

X-Domain-Name        

Example: para identificação da instância

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

source   string     

A plataforma de origem. Example: spalla

page   integer     

O número da página para paginação. Example: 1

limit   integer     

Quantidade de itens por página. Example: 15

title   string     

Filtrar pelo título. Example: Aula Introdutória

description   string     

Filtrar pela descrição. Example: Eius et animi quos velit et.

tags   string     

Filtrar por tags (separadas por vírgula). Example: educacao,video

created_at   string     

Filtrar pela data de criação. Example: 2023-10-01

sort   string     

Campo para ordenação. Example: -created_at

directory_id   string     

ID do diretório/pasta. Example: folder_123

Body Parameters

page   integer  optional    

Example: 16

limit   integer  optional    

Example: 16

created_at   string  optional    

Example: architecto

sort   string  optional    

Example: architecto

tags   string  optional    

Example: architecto

title   string  optional    

Example: architecto

description   string  optional    

Example: Eius et animi quos velit et.

directory_id   string  optional    

Example: architecto

source   string     

Example: spalla

Must be one of:
  • spalla

Rota para exibir um único vídeo

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/videos/2323423423?source=spalla" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "X-Domain-Name: para identificação da instância" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"source\": \"spalla\"
}"
const url = new URL(
    "http://localhost/api/v1/videos/2323423423"
);

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

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "X-Domain-Name": "para identificação da instância",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "source": "spalla"
};

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

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request   

GET api/v1/videos/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

X-Domain-Name        

Example: para identificação da instância

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

Id do vídeo na plataforma Example: 2323423423

Query Parameters

source   string     

A plataforma de origem. Example: spalla

Body Parameters

source   string     

Example: spalla

Must be one of:
  • spalla