# Prova Fácil - API de Integração com Parceiros > API REST (JSON) para integração de parceiros com a plataforma de gestão de avaliação Prova Fácil (Starline). Autenticação via token; escopo hierárquico Cliente -> Grupo Empresarial -> Polo via `client_group`/`client_unit`. Especificação completa e máquina-legível: [openapi.yaml](./openapi.yaml) ## Autenticação `POST /api/v1/rest/auth_token/` com `{"username":..., "password":...}` retorna `token`. Enviar em todas as chamadas: header `Authorization: Token `. ## Autenticação - `POST /api/v1/rest/auth_token/` — Autenticar e obter token ## ClientGroup - `GET /api/v1/a/rest/api/clientgroup/` — Listar client groups - `POST /api/v1/a/rest/api/clientgroup/` — Criar client group - `GET /api/v1/a/rest/api/clientgroup/{key}/` — Obter client group por key - `PUT /api/v1/a/rest/api/clientgroup/{key}/` — Atualizar (todos os campos) client group ## ClientUnit - `GET /api/v1/a/rest/api/clientunit/` — Listar client units - `POST /api/v1/a/rest/api/clientunit/` — Criar client unit - `GET /api/v1/a/rest/api/clientunit/{key}/` — Obter client unit por key - `PUT /api/v1/a/rest/api/clientunit/{key}/` — Atualizar client unit ## User - `GET /api/v1/a/rest/user/` — Listar usuários (ou obter um específico via user_name) - `POST /api/v1/a/rest/user/post/` — Criar usuário - `GET /api/v1/a/rest/user/{key}/` — Obter usuário por id - `PUT /api/v1/a/rest/user/{key}/` — Atualizar usuário (todos os campos) - `PATCH /api/v1/a/rest/user/{key}/` — Atualizar usuário (campos parciais) - `DELETE /api/v1/a/rest/user/{key}/` — Excluir usuário ## PlaceConfig - `GET /api/v1/tm/rest/placeconfig/` — Listar configurações de local de aplicação - `GET /api/v1/tm/rest/placeconfig/{key}/` — Obter configuração de local por key ## Place - `GET /api/v1/tm/rest/place/` — Listar locais de aplicação - `POST /api/v1/tm/rest/place/` — Criar local de aplicação - `GET /api/v1/tm/rest/place/{key}/` — Obter local por key - `PUT /api/v1/tm/rest/place/{key}/` — Atualizar local (todos os campos) - `PATCH /api/v1/tm/rest/place/{key}/` — Atualizar local (campos parciais) - `DELETE /api/v1/tm/rest/place/{key}/` — Excluir local ## ContentConfig - `GET /api/v1/str/rest/api/config/content/` — Listar configurações de conteúdo - `GET /api/v1/str/rest/api/config/content/{key}/` — Obter configuração de conteúdo por key ## Content - `GET /api/v1/str/rest/api/content/` — Listar itens da estrutura de conteúdo - `POST /api/v1/str/rest/api/content/` — Criar item de conteúdo - `GET /api/v1/str/rest/api/content/{key}/` — Obter conteúdo por key - `PUT /api/v1/str/rest/api/content/{key}/` — Atualizar conteúdo (todos os campos) - `PATCH /api/v1/str/rest/api/content/{key}/` — Atualizar conteúdo (campos parciais) - `DELETE /api/v1/str/rest/api/content/{key}/` — Excluir conteúdo ## Candidate - `GET /api/v1/tm/rest/candidate/` — Listar candidatos - `POST /api/v1/tm/rest/candidate/` — Criar candidato - `GET /api/v1/tm/rest/candidate/{key}/` — Obter candidato por key - `PUT /api/v1/tm/rest/candidate/{key}/` — Atualizar candidato (todos os campos) - `PATCH /api/v1/tm/rest/candidate/{key}/` — Atualizar candidato (campos parciais) - `DELETE /api/v1/tm/rest/candidate/{key}/` — Excluir candidato - `POST /api/v1/tm/rest/candidategenerate/` — Criar candidato em um agendamento e gerar sua prova ## CandidateLogin - `GET /api/v1/tm/rest/candidatelogin/` — Listar candidate logins - `POST /api/v1/tm/rest/candidatelogin/` — Criar candidate login - `GET /api/v1/tm/rest/candidatelogin/{key}/` — Obter candidate login por key - `PUT /api/v1/tm/rest/candidatelogin/{key}/` — Atualizar candidate login - `PATCH /api/v1/tm/rest/candidatelogin/{key}/` — Atualizar candidate login (parcial) - `DELETE /api/v1/tm/rest/candidatelogin/{key}/` — Excluir candidate login ## ContentXCandidate - `GET /api/v1/str/rest/api/contentxcandidate/` — Listar relações Content x Candidate - `POST /api/v1/str/rest/api/contentxcandidate/` — Criar relação Content x Candidate - `GET /api/v1/str/rest/api/contentxcandidate/{key}/` — Obter relação por key - `PUT /api/v1/str/rest/api/contentxcandidate/{key}/` — Atualizar relação (todos os campos) - `PATCH /api/v1/str/rest/api/contentxcandidate/{key}/` — Atualizar relação (parcial) - `DELETE /api/v1/str/rest/api/contentxcandidate/{key}/` — Excluir relação ## QuestionXContent - `GET /api/v1/str/rest/api/questioncontents/{schedule_key}/` — Listar questões e conteúdos vinculados a um agendamento ## ContentXUser - `GET /api/v1/str/rest/api/contentxuser/{key}/` — Listar donos (owners) de um conteúdo - `POST /api/v1/str/rest/api/contentxuser/{key}/` — Vincular usuários como donos do conteúdo - `DELETE /api/v1/str/rest/api/contentxuser/{key}/` — Remover usuários como donos do conteúdo ## Regulation - `GET /api/v1/tpl/rest/regulation/` — Listar regras de modelo de prova - `GET /api/v1/tpl/rest/regulation/{key}/` — Obter regra por key ## Instruction - `GET /api/v1/tm/rest/instruction/` — Listar instruções - `GET /api/v1/tm/rest/instruction/{key}/` — Obter instrução por key ## AcademicConfig - `GET /api/v1/str/rest/api/config/academic/` — Listar configurações de acadêmico - `GET /api/v1/str/rest/api/config/academic/{key}/` — Obter configuração de acadêmico por key ## Academic - `GET /api/v1/str/rest/api/academic/` — Listar estrutura acadêmica - `POST /api/v1/str/rest/api/academic/` — Criar item da estrutura acadêmica - `GET /api/v1/str/rest/api/academic/{key}/` — Obter acadêmico por key - `PUT /api/v1/str/rest/api/academic/{key}/` — Atualizar acadêmico (todos os campos) - `PATCH /api/v1/str/rest/api/academic/{key}/` — Atualizar acadêmico (parcial) - `DELETE /api/v1/str/rest/api/academic/{key}/` — Excluir acadêmico ## AcademicXOwners - `POST /api/v1/str/rest/academicsowners/` — Inserir donos na estrutura acadêmica - `DELETE /api/v1/str/rest/academicsowners/` — Excluir donos da estrutura acadêmica ## AcademicXCandidate - `GET /api/v1/str/rest/api/academicxcandidate/` — Listar relações Academic x Candidate - `POST /api/v1/str/rest/api/academicxcandidate/` — Criar relação Academic x Candidate - `GET /api/v1/str/rest/api/academicxcandidate/{id}/` — Obter relação por id - `PUT /api/v1/str/rest/api/academicxcandidate/{id}/` — Atualizar relação (todos os campos) - `PATCH /api/v1/str/rest/api/academicxcandidate/{id}/` — Atualizar relação (parcial) - `DELETE /api/v1/str/rest/api/academicxcandidate/{id}/` — Excluir relação ## TemplateTest - `GET /api/v1/tpl/rest/templatetest/` — Listar modelos de prova - `GET /api/v1/tpl/rest/templatetest/{key}/` — Obter modelo de prova por key - `GET /api/v1/tpl/rest/templatetestdynamic/` — Listar modelos de prova dinâmicos - `POST /api/v1/tpl/rest/templatetestdynamic/` — Criar modelo de prova dinâmico - `GET /api/v1/tpl/rest/templatetestdynamic/{key}/` — Obter modelo dinâmico por key - `PUT /api/v1/tpl/rest/templatetestdynamic/{key}/` — Atualizar modelo dinâmico (todos os campos) - `PATCH /api/v1/tpl/rest/templatetestdynamic/{key}/` — Atualizar modelo dinâmico (parcial) - `DELETE /api/v1/tpl/rest/templatetestdynamic/{key}/` — Excluir modelo dinâmico - `GET /api/v1/tpl/rest/templateteststatic/` — Listar modelos de prova estáticos - `POST /api/v1/tpl/rest/templateteststatic/` — Criar modelo de prova estático - `GET /api/v1/tpl/rest/templateteststatic/{key}/` — Obter modelo estático por key - `PUT /api/v1/tpl/rest/templateteststatic/{key}/` — Atualizar modelo estático (todos os campos) - `PATCH /api/v1/tpl/rest/templateteststatic/{key}/` — Atualizar modelo estático (parcial) - `DELETE /api/v1/tpl/rest/templateteststatic/{key}/` — Excluir modelo estático ## TypeAssessment - `GET /api/v1/s/rest/typeassessment/` — Listar tipos de avaliação - `POST /api/v1/s/rest/typeassessment/` — Criar tipo de avaliação - `GET /api/v1/s/rest/typeassessment/{key}/` — Obter tipo de avaliação por key - `PUT /api/v1/s/rest/typeassessment/{key}/` — Atualizar tipo de avaliação - `PATCH /api/v1/s/rest/typeassessment/{key}/` — Atualizar tipo de avaliação (parcial) - `DELETE /api/v1/s/rest/typeassessment/{key}/` — Excluir tipo de avaliação ## GroupAssessment - `GET /api/v1/s/rest/groupassessment/` — Listar grupos de agendamento - `POST /api/v1/s/rest/groupassessment/` — Criar grupo de agendamento - `GET /api/v1/s/rest/groupassessment/{key}/` — Obter grupo de agendamento por key - `PUT /api/v1/s/rest/groupassessment/{key}/` — Atualizar grupo de agendamento - `PATCH /api/v1/s/rest/groupassessment/{key}/` — Atualizar grupo de agendamento (parcial) - `DELETE /api/v1/s/rest/groupassessment/{key}/` — Excluir grupo de agendamento ## ScheduleSetup - `GET /api/v1/s/rest/schedulesetup/` — Listar configurações de agendamento ## Schedule - `GET /api/v1/s/rest/schedule/` — Listar agendamentos - `POST /api/v1/s/rest/schedule/` — Criar agendamento - `POST /api/v1/s/rest/schedulewithperiod/` — Criar agendamento (ambientes com conceito de período) - `GET /api/v1/s/rest/schedule/{key}/` — Obter agendamento por key - `PUT /api/v1/s/rest/schedule/{key}/` — Atualizar agendamento (todos os campos) - `PATCH /api/v1/s/rest/schedule/{key}/` — Atualizar agendamento (parcial) - `DELETE /api/v1/s/rest/schedule/{key}/` — Excluir agendamento ## CandidateWaitingPlace - `GET /api/v1/s/rest/candidateswaitingplace/` — Listar candidatos aguardando distribuição por sala - `POST /api/v1/s/rest/candidateswaitingplace/` — Inserir candidato para distribuição por sala - `GET /api/v1/s/rest/candidateswaitingplace/{key}/` — Obter por key - `PUT /api/v1/s/rest/candidateswaitingplace/{key}/` — Atualizar (todos os campos) - `PATCH /api/v1/s/rest/candidateswaitingplace/{key}/` — Atualizar (parcial) - `DELETE /api/v1/s/rest/candidateswaitingplace/{key}/` — Excluir ## ScheduleCandidatePlace - `GET /api/v1/s/rest/schedulecandidatexplace/` — Listar Schedule Candidate Place - `POST /api/v1/s/rest/schedulecandidatexplace/` — Criar Schedule Candidate Place - `GET /api/v1/s/rest/schedulecandidatexplace/{key}/` — Obter por key - `PUT /api/v1/s/rest/schedulecandidatexplace/{key}/` — Atualizar (todos os campos) - `PATCH /api/v1/s/rest/schedulecandidatexplace/{key}/` — Atualizar (parcial) - `DELETE /api/v1/s/rest/schedulecandidatexplace/{key}/` — Excluir ## GroupAssessmentSchedules - `GET /api/v1/s/rest/schedulegroupassessment/{key}/` — Listar agendamentos de um grupo de agendamento ## ScheduleAllCandidates - `GET /api/v1/s/rest/scheduleallcandidates/{key}/` — Listar candidatos de um agendamento (presença/notas) ## ScheduleCandidate - `GET /api/v1/s/rest/schedulecandidate/{schedule_key}/{candidate_key}/` — Detalhe do candidato em um agendamento (questões, notas) ## ScheduleNotNominal - `GET /api/v1/s/rest/schedulenotnominal/{schedule_key}/` — Listar provas não nominais de um agendamento - `POST /api/v1/s/rest/schedulenotnominal/{schedule_key}/` — Criar provas não nominais - `DELETE /api/v1/s/rest/schedulenotnominal/{schedule_key}/` — Remover Schedule Not Nominal do agendamento - `DELETE /api/v1/s/rest/schedulenotnominal/{schedule_key}/{place}/` — Remover Schedule Not Nominal por agendamento e local ## BatchSchedule - `POST /api/v1/s/rest/batch_schedule_create/` — Criar agendamentos em lote (máx. 1500) - `POST /api/v1/s/rest/batch_schedulecandidatexplace/` — Criar vínculo Schedule x Candidate x Place em lote (máx. 5000) ## ScoreXCandidateXContent - `GET /api/v1/s/rest/schedule/{schedule_key}/candidate/score_by_content/` — Resultados dos candidatos de um agendamento agrupados por conteúdo ## WorkflowStep - `GET /api/v1/wfl/rest/workflow/step/` — Listar passos por workflow ## WorkflowUserXContent - `GET /api/v1/wfl/rest/workflow/userxcontent/` — Listar vínculos Workflow x Usuário x Conteúdo - `POST /api/v1/wfl/rest/workflow/userxcontent/` — Criar vínculos Workflow x Usuário x Conteúdo - `GET /api/v1/wfl/rest/workflow/userxcontent/{workflow}/{legacy_key}/` — Obter vínculo específico - `DELETE /api/v1/wfl/rest/workflow/userxcontent/{workflow}/{legacy_key}/` — Excluir vínculo - `GET /api/v1/wfl/rest/workflow/userxcontent/{workflow}/` — Listar vínculos filtrados por step, content e user ## Period - `GET /api/v1/tm/rest/period/` — Listar períodos letivos - `POST /api/v1/tm/rest/period/` — Criar período letivo - `GET /api/v1/tm/rest/period/{key}/` — Obter período por key - `PUT /api/v1/tm/rest/period/{key}/` — Atualizar período (todos os campos) - `PATCH /api/v1/tm/rest/period/{key}/` — Atualizar período (parcial) - `DELETE /api/v1/tm/rest/period/{key}/` — Excluir período ## APIs V2 - `POST /api/v2/clientunit/add-user/` — Vincular usuário a um client unit - `POST /api/v2/clientunit/remove-user/` — Desvincular usuário de um client unit - `POST /api/v2/tm/candidate/` — Criar candidato (com username/password) - `POST /api/v2/candidate/remove-candidate/` — Excluir candidato - `POST /api/v2/content/add-owner/` — Adicionar usuário como dono de um conteúdo - `POST /api/v2/content/remove-owner/` — Remover usuário como dono de um conteúdo