Postman
Arquivo Postman Collection
Baixar Configuração para Postman - Arquivo pronto para importação contendo todos os endpoints da API para testar a integração rapidamente, com variáveis pré-configuradas e exemplos de requisições.
Documentação
Autenticação
Todas as chamadas à API devem incluir um token de autenticação no cabeçalho Authorization.
Authorization: Bearer SEU_TOKEN_AQUI
Substitua SEU_TOKEN_AQUI pelo token fornecido.
Endpoints da API
1. Criar Correção de Redação (ENEM)
Este endpoint permite o envio de uma nova redação para correção no modelo ENEM.
- Método:
POST - URL:
https://os.corrigir.ai/api/correcao-enem - Headers:
Authorization: Bearer SEU_TOKEN_AQUIContent-Type: application/json
Corpo da Requisição (Request Body):
Campos obrigatórios:
aluno_id: Identificador do aluno.atividade_id: Identificador da atividade.payload.textos_apoio: Textos de apoio para a correção (string, pode ser vazia se não houver textos de apoio, mas o campo deve existir).payload.resposta_aluno: A resposta do aluno. Pode ser enviada em três formatos diferentes:- Formato Texto: Uma string simples com o texto da redação.
- Formato Objeto com URL da imagem: Um objeto com campos
tipoeurlpara imagens. - Formato Objeto com Base64: Um objeto com campos
tipoebase64para imagens codificadas.
Campo opcional:
custom_id: Um identificador único opcional para controle interno do cliente. Se fornecido, este valor deve ser único em todas as correções.
Importante sobre Caching: O campo atividade_id é usado como chave de cache para a análise dos textos_apoio. Para garantir a consistência, uma vez enviado um atividade_id com um determinado conteúdo de textos_apoio, esse conteúdo deve permanecer o mesmo em todas as requisições futuras com o mesmo atividade_id, pois o sistema poderá utilizar a análise em cache.
Exemplo 1: Resposta em formato texto
{
"custom_id": "ExemploID-001",
"aluno_id": "alunoExemplo-123",
"atividade_id": "atividadeExemplo-456",
"payload": {
"textos_apoio": "Texto de apoio e proposta de redação aqui...",
"resposta_aluno": "A redação do aluno vai aqui.\\nCom múltiplas linhas se necessário."
}
}
Exemplo 2: Resposta em formato de URL de imagem
{
"custom_id": "ExemploID-002",
"aluno_id": "alunoExemplo-123",
"atividade_id": "atividadeExemplo-456",
"payload": {
"textos_apoio": "Texto de apoio e proposta de redação aqui...",
"resposta_aluno": {
"tipo": "imagem",
"url": "https://exemplo.com/imagens/redacao-aluno-123.jpg"
}
}
}
Exemplo 3: Resposta em formato Base64
{
"custom_id": "ExemploID-003",
"aluno_id": "alunoExemplo-123",
"atividade_id": "atividadeExemplo-456",
"payload": {
"textos_apoio": "Texto de apoio e proposta de redação aqui...",
"resposta_aluno": {
"tipo": "imagem",
"base64": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAIBAQIBAQ..."
}
}
}
Resposta em Caso de Sucesso (200 OK):
Retorna o objeto da correção criada.
{
"id": "a1b2c3d4-e5f6-7890-1234-567890abcdef",
"cliente": "c1d2e3f4-g5h6-7890-1234-567890abcdef",
"payload": {
"textos_apoio": "Texto de apoio e proposta de redação aqui...",
"resposta_aluno": "A redação do aluno vai aqui.\\nCom múltiplas linhas se necessário."
},
"resultado": null,
"status": "new",
"user_created": "u1v2w3x4-y5z6-7890-1234-567890abcdef",
"date_updated": null,
"metodo": "m1n2o3p4-q5r6-7890-1234-567890abcdef",
"custom_id": "ExemploID-001",
"aluno_id": "alunoExemplo-123",
"atividade_id": "atividadeExemplo-456",
"date_created": "2024-07-30T10:00:00.000Z"
}
2. Criar Correção de Questão Discursiva
Este endpoint permite o envio de uma nova questão discursiva para correção.
- Método:
POST - URL:
https://os.corrigir.ai/api/questao-discursiva - Headers:
Authorization: Bearer SEU_TOKEN_AQUIContent-Type: application/json
Corpo da Requisição (Request Body):
Campos obrigatórios:
aluno_id: Identificador do aluno.atividade_id: Identificador da atividade.questao_id: Identificador da questão.payload.enunciado_questao: O enunciado da questão.payload.gabarito: O gabarito ou critério de correção para a questão.payload.resposta_aluno: A resposta do aluno (suporta os mesmos formatos de texto, URL de imagem e Base64 da correção de redação).
Campo opcional:
custom_id: Um identificador único opcional.
Importante sobre Caching: A combinação dos campos atividade_id e questao_id é usada como chave de cache para a análise do enunciado_questao e do gabarito. Para garantir a consistência, uma vez enviada uma combinação de atividade_id e questao_id com determinados conteúdos, esses conteúdos devem permanecer os mesmos em todas as requisições futuras com a mesma combinação, pois o sistema poderá utilizar a análise em cache.
Exemplo: Resposta em formato texto
{
"custom_id": "ExemploDiscursiva-001",
"aluno_id": "alunoExemplo-123",
"atividade_id": "atividadeExemplo-789",
"questao_id": "questaoExemplo-101",
"payload": {
"enunciado_questao": "Qual o impacto da Revolução Industrial na sociedade moderna?",
"gabarito": "A resposta deve abordar os seguintes pontos: urbanização, novas classes sociais, e mudanças nas condições de trabalho.",
"resposta_aluno": "A Revolução Industrial foi um divisor de águas, transformando fundamentalmente a estrutura social e econômica."
}
}
Resposta em Caso de Sucesso (200 OK):
Retorna o objeto da correção criada, similar à correção de redação, com o status inicial new.
3. Buscar Correção por ID
Este endpoint permite buscar uma correção específica pelo seu ID único (gerado pelo sistema).
- Método:
GET - URL:
https://os.corrigir.ai/items/mc_correcoes/{id_da_correcao}
Resposta em Caso de Sucesso (200 OK):
Retorna o objeto da correção encontrada. O conteúdo do campo resultado varia conforme o tipo de correção.
Nota: O campo resultado terá uma estrutura diferente dependendo se a correção é de uma Redação ENEM ou de uma Questão Discursiva.
Exemplo de Resposta (Redação ENEM):
{
"data": {
"id": "a1b2c3d4-e5f6-7890-1234-567890abcdef",
"status": "success",
"custom_id": "ExemploID-001",
"aluno_id": "alunoExemplo-123",
"atividade_id": "atividadeExemplo-456",
"resultado": {
"nota_final": 960,
"feedback": "Sua redação apresenta bom domínio do tema...",
"lista_de_marcacoes": [
{
"trecho": "prevaricação real",
"competencia": "C1",
"tipo": "DESVIO",
"comentario": "Uso inadequado do termo 'prevaricação'"
}
],
"resposta_aluno_marcada": "Texto... com as devidas <span class='marcacao'>marcações</span>..."
}
// ... outros campos ...
}
}
Exemplo de Resposta (Questão Discursiva):
{
"data": {
"id": "f1g2h3i4-j5k6-7890-1234-567890lmnpq",
"status": "success",
"custom_id": "ExemploDiscursiva-001",
"aluno_id": "alunoExemplo-123",
"atividade_id": "atividadeExemplo-789",
"resultado": {
"feedback": "Olá! ❗\\n\\n⚠️ AVALIAÇÃO\\nSua resposta à questão sobre \"\" não atingiu pontuação...",
"nota_final": "0"
}
// ... outros campos ...
}
}
Se nenhuma correção for encontrada com o ID fornecido, o campo data será null.
4. Buscar Correção por custom_id
- Método:
GET - URL:
https://os.corrigir.ai/items/mc_correcoes?filter[custom_id]={seu_custom_id}
Retorna um array de objetos de correção que correspondem ao custom_id.
5. Buscar Correções por aluno_id
- Método:
GET - URL:
https://os.corrigir.ai/items/mc_correcoes?filter[aluno_id]={id_do_aluno}
Retorna um array de objetos de correção para o aluno especificado.
6. Buscar Correções por atividade_id
- Método:
GET - URL:
https://os.corrigir.ai/items/mc_correcoes?filter[atividade_id]={id_da_atividade}
Retorna um array de objetos de correção para a atividade especificada.
Fluxo de Processamento da Correção
Visão Geral do Fluxo
Etapas do Processamento
- Criação e Enfileiramento: Ao criar uma correção, ela recebe o status
new. - Espera em Fila: A correção pode aguardar com o status
waiting. - Início do Processamento: O status é atualizado para
running. - Conclusão do Processamento: O status final será
successouerror.
O tempo estimado para processamento é de aproximadamente 5 minutos. Recomenda-se implementar um mecanismo de polling para consultar periodicamente o status.
Tipos de Status da Correção
| Status | Descrição |
|---|---|
new |
New - A correção foi recebida e está na fila. |
waiting |
Waiting - A correção está aguardando para ser processada. |
running |
Running - A correção está sendo processada. |
success |
Success - A correção foi concluída com sucesso. |
error |
Error - Ocorreu um erro durante o processamento. |
Respostas de Erro Comuns
400 Bad Request (Erro de Validação)
Ocorre quando os dados enviados são inválidos, por exemplo, um custom_id duplicado.
{
"errors": [
{
"message": "Value for field \\"custom_id\\" in collection \\"mc_correcoes\\" has to be unique.",
"extensions": {
"collection": "mc_correcoes",
"field": "custom_id",
"code": "RECORD_NOT_UNIQUE"
}
}
]
}
403 Forbidden (Erro de Permissão)
Ocorre quando o token é inválido, expirado ou não tem permissão.
{
"errors": [
{
"message": "You don't have permission to access this.",
"extensions": {
"code": "FORBIDDEN"
}
}
]
}Sequência de Integração sugerida
Boas Práticas para Envio de Redações
Orientações para alunos e desenvolvedores
Seguir estas recomendações garante uma correção mais precisa e evita problemas técnicos que podem comprometer sua pontuação final.
1. Orientação da Digitalização
2. Respeito ao Limite de Linhas
- 4-5 linhas para a introdução
- 20-22 linhas para o desenvolvimento (2 parágrafos)
- 4-5 linhas para a conclusão
3. Qualidade da Caligrafia
- ✅ Letra em tamanho confortável - não muito pequena, não muito grande
- ✅ Espaçamento adequado entre palavras e linhas
- ✅ Evite texto comprimido ou letras corridas
- ✅ Mantenha consistência no tamanho e estilo da letra
4. Formato de Envio Recomendado
5. Como Digitalizar Corretamente
Aplicativo Recomendado
- ✅ Use CamScanner ou aplicativo similar de digitalização
- ✅ Configure para captura automática quando disponível
- ✅ Ative o modo documento para melhor contraste
Condições Ideais de Captura
- ✅ Boa iluminação - prefira luz natural ou luz branca uniforme
- ✅ Enquadramento adequado - toda a folha deve aparecer
- ✅ Contraste adequado entre tinta e papel
- ❌ Evite sombras sobre o texto
- ❌ Evite reflexos de luz direta
- ❌ Evite fotos tremidas - mantenha o celular firme
6. Conferência Final Antes do Envio
⚠️ ATENÇÃO MÁXIMA
CONFIRA O TEMA SELECIONADO
Tema incorreto = nota zero automática por fuga ao tema
Checklist final obrigatório:
- O tema selecionado no sistema corresponde exatamente ao texto que você desenvolveu?
- A digitalização está em orientação vertical (retrato)?
- A imagem está nítida e legível em toda sua extensão?
- Todo o conteúdo está dentro das 30 linhas oficiais?
- Não há sombras ou reflexos atrapalhando a leitura?
- O arquivo está no formato correto (PNG ou JPG de preferência)?
💡 Dica Extra
Sempre que possível, prefira digitar sua redação!
Redações digitadas têm:
- ✅ Correção mais rápida
- ✅ Maior precisão nos resultados
- ✅ Não há problemas com caligrafia
- ✅ Mais facilidade para revisões
Envie manuscrita apenas quando for obrigatório (simulados oficiais, provas presenciais, etc.)
Este documento apresenta as melhores práticas para integração com a API Corrigir, ajudando você a evitar problemas comuns, otimizar performance e reduzir custos operacionais.
1. 🚫 Polling de Status: Como Fazer Corretamente
Nossa API atualiza o status das correções a cada 15 minutos. Consultar com mais frequência sobrecarrega o sistema desnecessariamente e não traz informações novas.
// ❌ Polling muito frequente
setInterval(() => {
consultarStatus(redacaoId);
}, 60000); // A cada 1 minuto
// ✅ Polling otimizado
const INTERVALO_MINIMO = 600000; // 10 minutos
setInterval(() => {
consultarStatus(redacaoId);
}, INTERVALO_MINIMO);
2. ✅ Sistema de Cache: Reutilize Dados
Para economizar processamento, nossa API mantém em cache a análise de propostas de redação e enunciados de questões. Aproveite essa funcionalidade!
Como funciona o cache:
- Redações ENEM: Mesmo
atividade_id= mesma proposta em cache - Questões Discursivas: Mesmo
atividade_id+questao_id= mesmo enunciado em cache
atividade_id com determinado conteúdo de textos_apoio, esse conteúdo deve permanecer consistente em todas as requisições futuras com o mesmo atividade_id. O sistema utilizará a análise em cache para otimização.
Exemplo de uso eficiente:
// ❌ Buscando proposta para cada aluno
for (const aluno of alunos) {
const proposta = await api.consultarProposta(atividadeId);
await processarRedacao(aluno, proposta);
}
// ✅ Busca única + reutilização
const proposta = await api.consultarProposta(atividadeId);
for (const aluno of alunos) {
await processarRedacao(aluno, proposta);
}
3. 🎯 Filtros de Status: Otimize suas Consultas
Ao consultar correções por atividade_id ou aluno_id, sempre adicione um filtro de status. Isso reduz drasticamente o tráfego de rede e melhora a performance.
GET /items/mc_correcoes?filter[atividade_id]=123
// ❌ Retorna: new, waiting, running, success, error...
// ✅ Apenas sucessos
GET /items/mc_correcoes?filter[atividade_id]=123&filter[status][_eq]=success
// ✅ Sucessos e erros (finalizadas)
GET /items/mc_correcoes?filter[atividade_id]=123&filter[status][_in]=success,error
Operadores disponíveis:
| Operador | Descrição | Exemplo |
|---|---|---|
_eq |
Igual a | filter[status][_eq]=success |
_neq |
Diferente de | filter[status][_neq]=new |
_in |
Está em (lista) | filter[status][_in]=success,error |
_nin |
Não está em (lista) | filter[status][_nin]=new,waiting |
Casos de uso comuns:
- Listar apenas sucessos:
filter[status][_eq]=success - Excluir em processamento:
filter[status][_nin]=new,waiting,running - Combinar filtros:
filter[aluno_id]=456&filter[status][_eq]=success
4. 💰 Texto Digitado vs. Manuscritas
Sempre que possível, incentive os alunos a digitarem suas redações em vez de enviá-las manuscritas. Isso traz benefícios significativos para ambas as partes.
Comparativo de custos e precisão:
| Aspecto | Texto Digitado | Imagem/PDF (Manuscrita) |
|---|---|---|
| Custo de processamento | 💰 Menor | 💰💰💰 Significativamente maior |
| Precisão | ✅ 100% (sem OCR) | ⚠️ Depende de OCR e qualidade |
| Velocidade | ⚡ Processamento imediato | 🐌 Requer OCR + processamento |
| Problemas técnicos | ❌ Raros | ⚠️ OCR, orientação, qualidade |
| Taxa de erro | ~0% | ~5-15% (dependendo da qualidade) |
Ofereça um editor de texto como opção principal na sua interface, deixando o upload de manuscritas como alternativa secundária. Quando o aluno escolher manuscrita, mostre um aviso amigável sugerindo o uso do editor para melhor experiência.
Quando manuscrita é realmente necessária:
- Simulados oficiais que replicam o ENEM
- Provas presenciais
- Quando exigido por regulamento específico
5. 📊 Resumo das Boas Práticas
| Prática | ✅ Faça | ❌ Evite |
|---|---|---|
| Polling de Status | Consultar a cada 10-15 minutos | Consultar a cada 1-2 minutos |
| Sistema de Cache | Reutilizar propostas e questões | Buscar repetidamente o mesmo conteúdo |
| Filtros de Status | Usar filter[status][_in] |
Buscar todos os status sem filtro |
| Formato de Envio | Incentivar texto digitado | Focar apenas em manuscritas |
6. 📋 Problemas Mais Comuns
Com base em centenas de revisões técnicas, identificamos os problemas mais frequentes e suas soluções:
| Problema | Frequência | Impacto | Solução Recomendada |
|---|---|---|---|
| Orientação horizontal da imagem | Alta | 🔴 Crítico | Validação no momento do upload |
| Texto além das 30 linhas | Média | 🟡 Alto | Orientação educativa preventiva |
| Problemas de extração em PDF | Alta | 🟡 Médio | Preferir imagens PNG/JPG |
| Caligrafia comprimida/ilegível | Média | 🟡 Médio | Guia de boas práticas para alunos |
| Tema incorreto selecionado | Baixa | 🔴 Crítico | Checkpoint de confirmação obrigatório |
🚀 Próximos Passos
Documentação completa da API:
Para detalhes sobre endpoints, autenticação, exemplos de payload e respostas, consulte nossa documentação completa da API.
Precisa de ajuda?
Entre em contato com nosso time técnico para suporte na integração.
Postman
Arquivo Postman Collection
Baixar Configuração para Postman - Arquivo pronto para importação contendo todos os endpoints da API para testar a integração rapidamente, com variáveis pré-configuradas e exemplos de requisições.