PromptEval/ docs
🇧🇷🇺🇸
← voltar
referência da api

API

Avalie prompts, trave regressão no CI e sirva versões de produção via HTTP. Aberta a todos os planos.

Ver planos →Gerar minha API key →

Autenticação

Toda requisição precisa de uma API key no header Authorization.

Authorization: Bearer pe_live_your_key_here
Gere e revogue keys no dashboard, em API. Disponível em qualquer plano — o que muda por plano é a quota managed (veja abaixo).

Planos & quota

A Eval API é aberta a todos os planos. Cada plano tem uma quota managed mensal (avaliações rodadas na nossa infra). BYOK não consome quota.

PlanoQuota managed/mêsModos
free10lint
basic30lint
pro75lint + full
team250lint + full
BYOKilimitado (sua chave)lint + full em qualquer plano
lint = score + 4 dimensões + conflitos + benchmark + pass (barato). full = + grafo + problemas + recomendações + prompt melhorado (precisa de Pro/Team OU BYOK). Cache de score não consome quota (mesmo prompt = mesmo resultado, grátis). Rate limit: 5 req/min em todos os planos.

Endpoint

POSThttps://prompt-eval.com/api/v1/eval

Body da requisição

json{
  "prompt": "Your prompt text here",
  "mode": "lint",
  "language": "en"
}

Parâmetros

ParâmetroTipoObrig.PadrãoDescrição
promptstringSimO prompt a avaliar (10–20.000 caracteres)
modestringNão"lint""lint" ou "full" (full precisa de Pro/Team ou BYOK)
languagestringNão"en""en" ou "pt" — idioma da análise
min_scoreintegerNãoseu limite / 75Bar do campo pass
fail_on_conflictbooleanNãofalseReprova se houver contradição
baseline_slugstringNãoTrava regressão vs a versão de produção do slug (Pro+)
max_dropnumberNão0Queda de score tolerada vs baseline
provider_keystringNãoBYOK — chave Anthropic (prefira o header X-Provider-Key)

Restrições

prompt mínimo: 10 caracteres · prompt máximo: 20.000 caracteres

Resposta

mode "lint" (padrão)

json{
  "mode": "lint",
  "score": 74,
  "dimensions": {
    "clarity": 68,
    "specificity": 81,
    "structure": 77,
    "robustness": 70
  },
  "conflicts": [
    { "a": "Be concise", "b": "Explain in full detail", "type": "contradiction" }
  ],
  "benchmark": { "top_percent": 22, "total": 1840 },
  "pass": false,
  "min_score": 75,
  "meta": {
    "prompt_chars": 1240,
    "evaluated_at": "2026-06-04T14:32:00Z",
    "plan": "pro",
    "byok": false,
    "calls_month": 12,
    "quota_month": 75,
    "quota_remaining": 63
  }
}

Campos da resposta

CampoTipoDescrição
modestring"lint" ou "full" (ecoa o modo usado)
scoreintegerScore geral de qualidade, 0–100
dimensions.clarityintegerClareza da instrução
dimensions.specificityintegerPrecisão do output esperado
dimensions.structureintegerOrganização lógica do prompt
dimensions.robustnessintegerResistência a casos extremos
conflictsobject[]Conflitos detectados: { a, b, type }. type: contradiction | tension | redundancy
benchmarkobject | null{ top_percent, total } — percentil vs todas as avaliações; null até ter dados
passbooleanVeredito do gate de CI (ver seção)
min_scoreintegerO limite efetivamente usado
meta.planstringPlano da key
meta.byokbooleanSe rodou com chave própria
meta.calls_monthintegerChamadas managed neste mês
meta.quota_monthintegerQuota managed do plano
meta.quota_remainingintegerQuota managed restante

mode "full" — adiciona grafo, problemas, recomendações e prompt melhorado

json{
  "mode": "full",
  "score": 74,
  "dimensions": { "clarity": 68, "specificity": 81, "structure": 77, "robustness": 70 },
  "conflicts": [ /* ... */ ],
  "benchmark": { "top_percent": 22, "total": 1840 },
  "pass": false,
  "min_score": 75,
  "graph": { "nodes": [ /* ... */ ], "edges": [ /* ... */ ] },
  "problems": {
    "critical": ["Output format is underspecified."],
    "warnings": ["Persona may conflict with the tone constraint."]
  },
  "recommendations": [
    "Add an explicit output-format section with an example.",
    "Reconcile the tone constraint with the persona."
  ],
  "improved_prompt": "You are a customer support agent...",
  "meta": { "plan": "pro", "byok": false, "calls_month": 13, "quota_month": 75, "quota_remaining": 62 }
}
CampoTipoDescrição
graphobject{ nodes, edges } — grafo de instruções do prompt
problems.criticalstring[]Problemas críticos
problems.warningsstring[]Avisos
recommendationsstring[]Melhorias acionáveis
improved_promptstringVersão reescrita do prompt
regressionobjectPresente só quando baseline_slug é passado (ver gate)

Gate de CI (campo pass)

O campo pass é o veredito booleano pra usar no CI. É true quando TODAS as condições abaixo são satisfeitas:

1. score ≥ min_score — precedência: min_score do body > seu limite de produção salvo > 75
2. sem contradição — OU fail_on_conflict não está ligado (só contradições reprovam, não tensões/redundâncias)
3. sem regressão — se baseline_slug foi passado e a queda excede max_drop, regressed=true e pass=false

Regressão vs produção

Passe baseline_slug para comparar o score atual com a versão em PRODUÇÃO daquele slug (Pro+, precisa de slug + versão de produção). max_drop define a queda tolerada (0 = qualquer queda reprova). O objeto regression vem na resposta:

json"regression": {
  "baseline": { "slug": "support-agent" },
  "baseline_score": 82,
  "current_score": 74,
  "delta": -8,
  "max_drop": 0,
  "regressed": true
}

Erros

StatusCódigoQuando acontece
400Bad Requestprompt ausente/curto, mode/language inválido, provider_key malformada
401UnauthorizedAPI key ausente/revogada, ou chave BYOK rejeitada
402Quota ExhaustedQuota managed do mês esgotada (resposta traz CTA de upgrade)
403Forbiddenmode "full" sem Pro/Team e sem BYOK
404Not Foundbaseline_slug sem prompt ou sem versão de produção
413Payload Too LargePrompt acima de 20.000 caracteres
422UnprocessableVersão de produção do baseline ainda sem score
429Too Many RequestsRate limit de 5 req/min atingido
500Server ErrorFalha na avaliação — tente novamente

Todos os erros retornam um corpo JSON:

json{ "error": "machine_code", "message": "Human-readable description." }

BYOK — sua própria chave

Envie o header X-Provider-Key com uma chave Anthropic (sk-ant-...). A inferência roda na sua chave: não consome quota managed, custo zero pra você no nosso lado, e destrava o mode full em qualquer plano (inclusive free).

bash# BYOK: run on your own Anthropic key.
# No managed quota is consumed, and it unlocks "full" on any plan.
curl -X POST https://prompt-eval.com/api/v1/eval \
  -H "Authorization: Bearer pe_live_your_key_here" \
  -H "X-Provider-Key: sk-ant-your-anthropic-key" \
  -H "Content-Type: application/json" \
  -d '{ "prompt": "You are a customer support agent...", "mode": "full" }'
A chave BYOK nunca é armazenada — é usada só naquela requisição. Prefira o header X-Provider-Key ao campo provider_key do body.

Exemplos

bashcurl -X POST https://prompt-eval.com/api/v1/eval \
  -H "Authorization: Bearer pe_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "You are a customer support agent. Answer clearly and concisely. Always end by asking if there is anything else you can help with.",
    "mode": "lint"
  }'

Integração com CI/CD

O jeito recomendado é a GitHub Action oficial — ela monta a requisição, reprova o build por score, conflito ou regressão, e renderiza um resumo no job.

yaml# .github/workflows/prompt-check.yml
name: Prompt Check
on:
  pull_request:
    paths: ['prompts/**']   # adjust to your prompts directory
jobs:
  eval:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: FranciscoFerreiraff/prompteval-action@v1
        with:
          api_key: ${{ secrets.PROMPTEVAL_API_KEY }}
          prompt_file: prompts/support-agent.md
          min_score: 75
          fail_on_conflict: true
          baseline_slug: support-agent   # gate regression vs production
Salve sua API key como secret do GitHub Actions chamado PROMPTEVAL_API_KEY. Nunca comite keys no repositório.

Prompts API (serving)

Busca a versão em produção de um prompt pelo slug. Sem chamada à IA — leitura pura da biblioteca. Seguro pra chamar a cada requisição. Pro+.

GEThttps://prompt-eval.com/api/v1/prompts/{slug}
Como usar este endpoint
1. Abra a Biblioteca
2. Defina um slug no prompt (ex: "customer-support")
3. Marque uma versão como produção (score ≥ seu limite)
4. Chame o endpoint com sua API key (Pro ou Team)
Respostas são cacheadas no edge por 60 segundos. Times podem chamar este endpoint a cada requisição — o CDN absorve a carga. Este endpoint não consome quota.

Exemplos

bashcurl https://prompt-eval.com/api/v1/prompts/customer-support \
  -H "Authorization: Bearer pe_live_your_key_here"

Mitigação de risco

O Supabase tem SLA de 99,9% — isso significa até ~8h de indisponibilidade por ano. Não deixe sua aplicação parar por causa disso.

Nunca dependa 100% de uma API externa em código de produção. Sempre tenha um fallback local.

Sem fallback — para se a API cair

python# ❌ NÃO faça isso — você depende 100% do PromptEval em produção
def handle_request(user_input):
    prompt = get_from_prompteval("customer-support")  # falha se a API cair
    return call_llm(prompt, user_input)

Com fallback — nunca para de funcionar

python# ✅ Faça isso — fallback local garante uptime
FALLBACK_PROMPT = "You are a helpful assistant..."  # versão hardcoded de emergência

def handle_request(user_input):
    try:
        prompt = get_from_prompteval("customer-support")
    except Exception:
        prompt = FALLBACK_PROMPT  # nunca para de funcionar
    return call_llm(prompt, user_input)
javascript// ✅ JavaScript — fallback local
const FALLBACK_PROMPT = "You are a helpful assistant...";

async function getPrompt(slug) {
  try {
    const res = await fetch(
      `https://prompt-eval.com/api/v1/prompts/${slug}`,
      { headers: { Authorization: `Bearer ${process.env.PROMPTEVAL_API_KEY}` } }
    );
    if (!res.ok) throw new Error(`HTTP ${res.status}`);
    const data = await res.json();
    return data.content;
  } catch {
    return FALLBACK_PROMPT; // nunca para de funcionar
  }
}
O fallback não precisa ser perfeito — só precisa existir. Hardcode a última versão estável do prompt e atualize-o de vez em quando.

Resposta — 200

json{
  "slug": "customer-support",
  "name": "Customer Support Agent",
  "version": 3,
  "content": "You are a customer support agent...",
  "score": 82,
  "production_set_at": "2026-05-14T10:00:00Z"
}
CampoTipoDescrição
slugstringSlug definido na biblioteca
namestringNome do prompt na biblioteca
versionintegerNúmero da versão em produção
contentstringConteúdo do prompt (use como system prompt)
scoreinteger | nullScore da versão (0–100), ou null se não avaliada
production_set_atstringISO 8601 — quando foi marcado como produção

Erros

StatusQuando acontece
400Slug com formato inválido na URL
401API key ausente, malformada ou revogada
403Key válida, mas conta não está no plano Pro/Team
404Slug não encontrado, ou prompt sem versão em produção
405Método não permitido (use GET)

Precisa de quota maior? Fale com a gente — temos planos customizados pra times de alto volume. → francisco@prompt-eval.com

Faltou algo na documentação? Abra uma issue ou envie um feedback →