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

API de Integração de Correções

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_AQUI
    • Content-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 tipo e url para imagens.
    • Formato Objeto com Base64: Um objeto com campos tipo e base64 para 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_AQUI
    • Content-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

  1. Criação e Enfileiramento: Ao criar uma correção, ela recebe o status new.
  2. Espera em Fila: A correção pode aguardar com o status waiting.
  3. Início do Processamento: O status é atualizado para running.
  4. Conclusão do Processamento: O status final será success ou error.

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

Fluxo para integração entre sistema cliente e Corrigir
Boas Práticas - Corrigir.ai

Boas Práticas para Envio de Redações

Orientações para alunos e desenvolvedores

📝 Por que estas orientações são importantes?
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

✅ SEMPRE digitalize em orientação vertical (retrato)
❌ NUNCA digitalize em orientação horizontal (paisagem)
Por quê? A orientação horizontal comprime o texto, tornando as letras minúsculas e dificultando o reconhecimento automático. Isso pode resultar em erros na transcrição e afetar sua nota.

2. Respeito ao Limite de Linhas

✅ Planeje seu texto para caber nas 30 linhas da folha oficial
❌ Não escreva além do limite - conteúdo fora da área oficial não é avaliado
Dica prática: Organize mentalmente sua redação antes de começar a escrever. Reserve aproximadamente:
  • 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
Por quê? Palavras muito próximas ou letra muito pequena dificultam a transcrição automática pelo sistema de OCR (Optical Character Recognition), podendo gerar interpretações incorretas.

4. Formato de Envio Recomendado

✅ Preferência: IMAGEM (PNG, JPG)
⚠️ Evitar quando possível: PDF
Por quê? Imagens têm processamento mais direto e confiável. PDFs podem apresentar problemas na extração de dados, especialmente se contiverem múltiplas páginas ou formatações complexas.

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.)

🔧 Objetivo deste guia
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.

❌ Evite: Consultar a cada 1-2 minutos
// ❌ Polling muito frequente
setInterval(() => {
    consultarStatus(redacaoId);
}, 60000); // A cada 1 minuto
✅ Recomendado: Consultar no máximo 1x a cada 10-15 minutos
// ✅ Polling otimizado
const INTERVALO_MINIMO = 600000; // 10 minutos

setInterval(() => {
    consultarStatus(redacaoId);
}, INTERVALO_MINIMO);
💡 Dica: Se possível, implemente um sistema de webhooks ou callbacks para receber notificações automáticas quando as correções forem concluídas, eliminando a necessidade de polling.

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
⚠️ Importante: Uma vez que você enviar um 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:

❌ Ineficiente: Buscar a mesma proposta repetidamente
// ❌ Buscando proposta para cada aluno
for (const aluno of alunos) {
    const proposta = await api.consultarProposta(atividadeId);
    await processarRedacao(aluno, proposta);
}
✅ Eficiente: Buscar uma vez e reutilizar
// ✅ 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.

❌ Ineficiente: Buscar todos os status
GET /items/mc_correcoes?filter[atividade_id]=123

// ❌ Retorna: new, waiting, running, success, error...
✅ Otimizado: Filtrar apenas correções finalizadas
// ✅ 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)
💡 Sugestão de implementação:

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.