Reformulação, correção gramatical, resumos, tradução e verificação de plágio em 56 línguas, incluindo o português europeu. REST simples, servida a partir da rede de periferia da Cloudflare.
Mesma origem
Atualmente a API serve apenas pedidos do próprio adeptwrite.com (sem cabeçalhos CORS). O acesso externo com chaves API está previsto a par do plano Pro. Esta documentação é publicada antecipadamente para que o contrato seja aberto e possa preparar-se.
Resumo
A API v1 da AdeptWrite tem três endpoints ativos. POST /api/v1/run recebe JSON com task, mode, lang e text (até 6000 caracteres) e devolve texto simples de um modelo do Cloudflare Workers AI escolhido consoante a língua; POST /api/v1/plagiarism compara um texto com fontes abertas e lista todas as fontes pesquisadas; GET /api/v1/health devolve o estado do serviço. O texto nunca é guardado nem registado, e os pedidos de IA estão limitados a 30 por minuto por IP.
Noções básicas
URL base:https://adeptwrite.com/api/v1
Formato: pedidos e respostas em JSON (Content-Type: application/json, UTF-8).
Autenticação: ainda não existe; os pedidos têm de vir de páginas de adeptwrite.com (mesma origem). As chaves API chegam com o plano Pro.
Privacidade: o campo text nunca é guardado nem registado; as respostas levam Cache-Control: no-store.
Versões: o caminho /v1/ não mudará de forma incompatível; alterações 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 Markdown).
Pedido
Field
Type
Required
Notes
task
string
✓
Nome da tarefa; veja a lista de tarefas mais abaixo.
text
string
✓
Texto de entrada, de 1 a 6000 caracteres.
lang
string
✓
Língua do resultado: um dos 56 códigos de língua do sítio (pt-pt, en, id, ja, zh-hant…; as etiquetas BCP 47 como pt-BR são mapeadas) ou auto para «a mesma língua do texto de entrada».
mode
string
—
Um modo disponível para essa ferramenta, por exemplo Formal, Akademik, Ringkas, Poin-poin (os nomes dos modos são as etiquetas indonésias do registo). Ignorado nas tarefas sem modos.
options
object
—
Opções específicas da tarefa: from / to para translate (qualquer língua suportada para qualquer outra; from pode ser auto; sr-Cyrl pede sérvio em cirílico), platform (instagram / tiktok / linkedin) para caption, e fields opcionais com rótulos para bio, coverletter e meta. As restantes chaves são ignoradas.
POST /api/v1/run HTTP/1.1
Content-Type: application/json
{
"task": "paraphrase",
"mode": "Formal",
"lang": "pt-pt",
"text": "Escrever bem é muito importante para os estudantes.",
"options": {}
}
Resposta
Estado 200 com ok: true, o resultado em output, o modelo que realmente respondeu em model (difere quando um modelo de recurso entrou em ação) e o tempo de processamento em milissegundos. Acrescenta-se truncated: true 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-pt","text":"Eles foram ao mercado e comprarão fruta."}'
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-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 4 a 8 expressões distintivas do texto, pesquisa fontes abertas na língua do texto (Wikipédia, Wikisource, texto integral do Internet Archive, Europe PMC, DOAJ, arXiv; um fornecedor de pesquisa na web só quando configurado e pedido) e calcula a sobreposição. Só essas expressões curtas saem do servidor.
Pedido
Field
Type
Required
Notes
text
string
✓
No mínimo 30 palavras, no máximo 6000 caracteres.
lang
string
✓
Um código de língua do sítio ou auto.
options
object
—
web: true consulta também o fornecedor de pesquisa na web, quando o operador tiver configurado um; webSearched na resposta indica se ele realmente respondeu.
POST /api/v1/plagiarism HTTP/1.1
Content-Type: application/json
{ "text": "…pelo menos 30 palavras…", "lang": "pt-pt", "options": { "web": false } }
Resposta
Estado 200 com score (palavras coincidentes ÷ palavras, de 0 a 1), matches por fonte com passages destacadas (deslocamentos de caracteres no seu texto), sourcesSearched (exatamente as fontes cujas respostas constam do resultado), sourcesSkipped com o motivo, e webSearched.
curl -X POST https://adeptwrite.com/api/v1/plagiarism \
-H "Content-Type: application/json" \
-d '{"lang":"pt-pt","text":"…pelo menos 30 palavras…"}'
GET/api/v1/health
Indica que serviços estão ligados. Não leva corpo e não conta para a quota.
Resposta
Estado 200. ai é falso enquanto o interruptor de emergência da IA estiver ligado; plagiarism lista as fontes que o verificador pode consultar; aidetect descreve a análise profunda do detetor de IA no servidor, que ainda não está em produção (POST /api/v1/aidetect responde 503 disabled; o detetor do sítio corre no seu navegador).
No máximo 6000 caracteres por pedido (413 too_long acima disso).
Por endereço IP
30 pedidos por minuto.
Global
100 pedidos por minuto em todo o serviço, além de um limite diário para as funcionalidades 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.
Resultado
Um limite de tamanho por tarefa, nunca superior a 2048 tokens; uma resposta cortada leva truncated: true.
Modelo
Escolhido por língua: o inglês e o indonésio correm em @cf/aisingapore/gemma-sea-lion-v4-27b-it, todas as outras línguas em @cf/qwen/qwen3-30b-a3b-fp8. Quando um modelo está ocupado, limitado, lento ou falha, o pedido passa ao modelo seguinte 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 indica sempre o modelo que respondeu.
Códigos de erro
Estado
Código
Quando acontece
400
invalid_request
JSON inválido, campo obrigatório em falta, ou task ou lang desconhecidos.
413
too_long
text excede os 6000 caracteres.
403
forbidden
O pedido não veio de uma página de adeptwrite.com.
429
rate_limited
Foi excedido o limite por IP ou o limite global por minuto. Aguarde o número de segundos indicado em Retry-After.
429
quota_exceeded
O limite diário das funcionalidades de IA esgotou-se. Tente de novo no dia seguinte (UTC).
502
upstream
Nenhum modelo da cadeia respondeu a tempo.
502
empty_output
Os modelos responderam, mas com um resultado vazio.
503
disabled
O serviço foi desligado temporariamente pelo operador ou (no caso de /api/v1/aidetect) ainda não está em produção.
Formato dos erros
Todos os erros são devolvidos em JSON, com o código de estado HTTP correspondente e sempre com a mesma forma:
{ "ok": false, "error": { "code": "rate_limited", "message": "Too many requests. Please try again shortly." } }
Verifique primeiro ok e depois leia error.code para o tratamento programático; error.message pode ser mostrado com segurança aos utilizadores.
Boas práticas
Envie o texto por partes (por exemplo, por parágrafo) em vez de um documento longo; os resultados chegam mais depressa e são mais fáceis de rever.
Trate o erro 429 com recuo exponencial, não com novas tentativas imediatas.
Não envie dados pessoais ou confidenciais de que não precise: mesmo não os guardando, o princípio da minimização de dados continua a aplicar-se.
O resultado da IA pode estar errado; apresente-o como uma sugestão a rever, não como verdade final.
Perguntas frequentes
Posso chamar a API a partir da minha aplicação ou do meu domínio?
Ainda não. O Worker não envia atualmente cabeçalhos CORS e só serve páginas de adeptwrite.com. O acesso externo com chaves API está previsto a par do plano Pro; esta documentação será atualizada quando estiver disponível.
O texto enviado para a API é guardado?
Não. O texto é reencaminhado para o modelo para produzir a resposta e depois descartado. Os registos contêm apenas metadados (código de estado, tarefa, duração). Consulte a política de privacidade para todos os pormenores.
Porque é que o resultado é texto simples e não JSON estruturado?
Cada tarefa produz um único texto pronto a usar, sem preâmbulo nem blocos Markdown, para poder ser mostrado diretamente no editor. Está prevista para uma versão posterior uma estrutura adicional (por exemplo, uma lista de alterações), sem alterar a v1.
Quanto custa a API?
A partir de adeptwrite.com é gratuita, limitada a 30 pedidos de IA por minuto por IP. Os preços do acesso externo serão anunciados com o plano Pro; até lá, não se cobra nada.
Que modelo responde ao meu pedido?
Depende da língua: o inglês e o indonésio vão para o SEA-LION, as outras línguas para o Qwen3-30B. Se esse modelo estiver ocupado ou falhar, responde o modelo seguinte da cadeia de recurso, e o campo model da resposta indica qual foi.