Paráfrase, correção de gramática, resumos, tradução e verificação de plágio em 56 idiomas. REST simples, servida na borda da Cloudflare.
Mesma origem
No momento a API atende apenas solicitações do próprio adeptwrite.com (sem cabeçalhos CORS). O acesso externo com chaves de API está previsto junto com o plano Pro. Publicamos esta documentação com antecedência para que o contrato fique aberto e você possa se preparar.
Resumo
A API v1 do AdeptWrite tem três endpoints ativos. POST /api/v1/run recebe um JSON com task, mode, lang e text (até 6.000 caracteres) e devolve o resultado em texto simples, gerado por um modelo do Cloudflare Workers AI escolhido conforme o idioma; POST /api/v1/plagiarism compara um texto com fontes abertas e lista todas as fontes consultadas; GET /api/v1/health informa o estado do serviço. O texto nunca é armazenado nem registrado, e as solicitações de IA são limitadas a 30 por minuto por IP.
Informações básicas
URL base:https://adeptwrite.com/api/v1
Formato: solicitações e respostas em JSON (Content-Type: application/json, UTF-8).
Autenticação: ainda não há; as solicitações precisam vir de páginas do adeptwrite.com (mesma origem). As chaves de API chegam com o plano Pro.
Privacidade: o campo text nunca é armazenado nem registrado; as respostas levam Cache-Control: no-store.
Versionamento: o caminho /v1/ não mudará de forma incompatível; mudanças que quebrem a compatibilidade usarão /v2/.
POST/api/v1/run
Executa uma tarefa de IA sobre um texto e devolve o resultado em texto simples (sem preâmbulo e sem blocos de código em Markdown).
Requisição
Field
Type
Required
Notes
task
string
✓
Nome da tarefa; veja a lista de tarefas abaixo.
text
string
✓
Texto de entrada, de 1 a 6.000 caracteres.
lang
string
✓
Idioma do resultado: um dos 56 códigos de locale do site (en, id, pt para o português do Brasil, pt-pt, zh-hant…; tags BCP 47 como pt-BR são convertidas) ou auto para "o mesmo idioma do texto de entrada".
mode
string
—
Um modo disponível para a ferramenta, como Formal, Akademik, Ringkas ou Poin-poin (os nomes de modo são os rótulos do registro, em indonésio). Ignorado nas tarefas sem modos.
options
object
—
Opções específicas da tarefa: from / to em translate (qualquer idioma compatível para qualquer outro; from pode ser auto; sr-Cyrl pede sérvio em cirílico), platform (instagram / tiktok / linkedin) em caption e fields opcionais, com rótulos, em bio, coverletter e meta. As demais chaves são ignoradas.
POST /api/v1/run HTTP/1.1
Content-Type: application/json
{
"task": "paraphrase",
"mode": "Formal",
"lang": "pt",
"text": "Escrever bem faz muita diferença para os estudantes.",
"options": {}
}
Resposta
Status 200 com ok: true, o resultado em output, o modelo que de fato respondeu em model (ele muda quando um modelo de reserva assume) e o tempo de processamento em milissegundos. truncated: true é acrescentado quando a resposta atingiu o limite de tamanho ou de tempo e foi cortada.
{
"ok": true,
"output": "A qualidade da escrita é essencial para os estudantes.",
"model": "@cf/qwen/qwen3-30b-a3b-fp8",
"ms": 812
}
Exemplo: curl
curl -X POST https://adeptwrite.com/api/v1/run \
-H "Content-Type: application/json" \
-d '{"task":"grammar","lang":"pt","text":"Nós vai na biblioteca amanha."}'
Exemplo: JavaScript (fetch)
const res = await fetch('/api/v1/run', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ task: 'summarize', mode: 'Poin-poin', lang: 'pt', text }),
});
const data = await res.json();
if (!data.ok) throw new Error(data.error.code + ': ' + data.error.message);
console.log(data.output);
POST/api/v1/plagiarism
Escolhe de 4 a 8 trechos característicos do texto, busca em fontes abertas no idioma do texto (Wikipédia, Wikisource, texto completo do Internet Archive, Europe PMC, DOAJ, arXiv; um provedor de busca na web só quando configurado e solicitado) e pontua a sobreposição. Somente esses trechos curtos saem do servidor.
Requisição
Field
Type
Required
Notes
text
string
✓
No mínimo 30 palavras e no máximo 6.000 caracteres.
lang
string
✓
Um código de locale do site ou auto.
options
object
—
web: true também consulta o provedor de busca na web, se o operador tiver configurado um; webSearched na resposta informa se ele realmente respondeu.
POST /api/v1/plagiarism HTTP/1.1
Content-Type: application/json
{ "text": "…pelo menos 30 palavras…", "lang": "pt", "options": { "web": false } }
Resposta
Status 200 com score (palavras coincidentes ÷ palavras, de 0 a 1), matches por fonte com passages destacados (posições de caracteres no seu texto), sourcesSearched (exatamente as fontes cujas respostas estão no resultado), sourcesSkipped com o motivo e webSearched.
curl -X POST https://adeptwrite.com/api/v1/plagiarism \
-H "Content-Type: application/json" \
-d '{"lang":"pt","text":"…pelo menos 30 palavras…"}'
GET/api/v1/health
Informa quais serviços estão ligados. Não leva corpo e não conta para a cota.
Resposta
Status 200. ai fica falso enquanto a chave geral de desligamento da IA estiver ativa; plagiarism lista as fontes que o verificador pode consultar; aidetect descreve a análise profunda do detector de IA no servidor, que ainda não foi implantada (POST /api/v1/aidetect responde 503 disabled; o detector do site roda no seu navegador).
No máximo 6.000 caracteres por solicitação (413 too_long acima disso).
Por endereço IP
30 solicitações por minuto.
Global
100 solicitações por minuto em todo o serviço, mais um limite diário para os recursos de IA.
Plágio
5 verificações por minuto por IP e 60 por minuto em todo o serviço; mínimo de 30 palavras.
Saída
Um limite de tamanho por tarefa, nunca acima de 2.048 tokens; uma resposta cortada leva truncated: true.
Modelo
Escolhido por idioma: inglês e indonésio rodam em @cf/aisingapore/gemma-sea-lion-v4-27b-it; todos os outros idiomas, incluindo o português, em @cf/qwen/qwen3-30b-a3b-fp8. Quando um modelo está ocupado, limitado, lento ou falha, a solicitação passa ao próximo modelo da cadeia (Qwen3-30B, depois @cf/google/gemma-4-26b-a4b-it, depois @cf/meta/llama-3.3-70b-instruct-fp8-fast). O campo model sempre nomeia o modelo que respondeu.
Códigos de erro
Status
Código
Quando acontece
400
invalid_request
JSON inválido, campo obrigatório ausente, ou task ou lang desconhecido.
413
too_long
text passa de 6.000 caracteres.
403
forbidden
A solicitação não veio de uma página do adeptwrite.com.
429
rate_limited
O limite por IP ou o limite global por minuto foi excedido. Aguarde o número de segundos indicado em Retry-After.
429
quota_exceeded
O limite diário dos recursos de IA se esgotou. Tente de novo no dia seguinte (UTC).
502
upstream
Nenhum modelo da cadeia respondeu a tempo.
502
empty_output
Os modelos responderam, mas com resultado vazio.
503
disabled
O serviço foi desligado temporariamente pelo operador ou (em /api/v1/aidetect) ainda não foi implantado.
Formato de erro
Todo erro é devolvido em JSON, com o código de status HTTP correspondente e sempre no mesmo formato:
{ "ok": false, "error": { "code": "rate_limited", "message": "Too many requests. Please try again shortly." } }
Confira primeiro ok e depois leia error.code para o tratamento por programa; error.message pode ser mostrada a usuários com segurança.
Boas práticas
Envie o texto em partes (por exemplo, um parágrafo por vez) em vez de um documento longo; os resultados voltam mais rápido e são mais fáceis de revisar.
Trate o 429 com espera crescente (backoff exponencial), sem repetir de imediato.
Não envie dados pessoais ou confidenciais de que você não precise: mesmo que não os armazenemos, vale o princípio da minimização de dados.
O texto de IA pode estar errado; apresente-o como uma sugestão a revisar, não como verdade final.
Perguntas frequentes
Posso chamar a API a partir do meu aplicativo ou domínio?
Ainda não. O Worker não envia cabeçalhos CORS e só atende páginas do adeptwrite.com. O acesso externo com chaves de API está previsto junto com o plano Pro; esta documentação será atualizada quando ele estiver disponível.
O texto enviado à API é armazenado?
Não. O texto é repassado ao modelo para gerar a resposta e depois descartado. Os logs contêm só metadados (código de status, tarefa, duração). Veja todos os detalhes na política de privacidade.
Por que a saída é texto simples e não JSON estruturado?
Cada tarefa produz um único texto pronto para uso, sem preâmbulo nem blocos de Markdown, para ser exibido direto no editor. Estrutura extra (por exemplo, uma lista de alterações) está prevista para uma versão futura, sem mudar a v1.
Quanto custa a API?
Pelo adeptwrite.com ela é gratuita, limitada a 30 solicitações de IA por minuto por IP. O preço do acesso externo será anunciado com o plano Pro; nada é cobrado antes disso.
Qual modelo responde à minha solicitação?
Depende do idioma: inglês e indonésio vão para o SEA-LION, os demais idiomas, inclusive o português, para o Qwen3-30B. Se esse modelo estiver ocupado ou falhar, o próximo da cadeia de reserva responde, e o campo model da resposta nomeia o que respondeu.