boolean
Endpoints
POST /crawl
Crawl BFS a partir de uma semente (até 50 páginas).
POST
/
crawl
POST /crawl
Inicia um crawl BFS a partir de uma URL semente e retorna202 com job_id.
O request aceita o contrato avançado completo do crawl; parsing de PDF e OCR
continuam dentro do mesmo orçamento max_pages × 1.
Autenticação
HeaderX-API-Key obrigatório.
Parâmetros
string
obrigatório
URL semente. SSRF guard aplicado na seed e em cada link descoberto.
integer
obrigatório
Número máximo de páginas. Faixa da API pública:
1–50. Valor recomendado: 10.integer
Limite opcional de profundidade. Padrão:
null. Quando fornecido, deve ser >= 0.boolean
Segue subdomínios do host semente. Padrão:
false.string
Regex RE2 opcional para filtrar URLs absolutas descobertas. Padrão:
"".
Tamanho máximo: 512 caracteres.Extrai apenas o conteúdo principal. Padrão:
true.boolean
Mantém links no Markdown final. Padrão:
true.boolean
Mantém imagens no Markdown final. Padrão:
true.boolean
Mantém referências de frames no Markdown final. Padrão:
false.boolean
Remove ou substitui URLs
data: longas de forma determinística. Padrão: false.boolean
Habilita parsing de PDF. Padrão:
true.boolean
Fallback de OCR para PDFs sem texto útil. Padrão:
false.
Requer parse_pdf=true.integer
Espera após o carregamento, em milissegundos. Padrão:
0. Faixa: 0–30000.
Deve ser menor que timeout_ms.boolean
Desativa animações e transições antes da espera configurada. Padrão:
false.integer
Timeout total por página, em milissegundos. Padrão:
60000. Faixa: 1000–300000.string[]
Tags normalizadas e persistidas nos usage records cobrados. Padrão:
[].Custo
1 crédito por página bem-sucedida. Parsing de PDF e OCR não adicionam tarifa separada. O teto continuamax_pages × 1.
Resultados parciais e razões
Faça polling deGET /jobs/{job_id} para acompanhar o progresso. Crawls podem
terminar cedo com um conjunto parcial de resultados. stopped_reason documenta
a razão terminal: frontier_empty, max_pages, timeout,
insufficient_credits ou invalid_seed.
Itens individuais também podem expor um reason estável, como
pdf_parse_disabled, pdf_ocr_timeout ou pdf_ocr_resource_limit.
Exemplo
curl -X POST https://api.messora.dev/crawl \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-d '{
"url": "https://docs.messora.dev/pt-BR/introduction",
"max_pages": 10,
"url_regex": "^https://docs\\.messora\\.dev/pt-BR(/.*)?$",
"parse_pdf": true,
"pdf_ocr": false,
"wait_for_ms": 0,
"tags": ["crawl", "api-reference"]
}'
import requests
response = requests.post(
"https://api.messora.dev/crawl",
headers={
"Content-Type": "application/json",
"X-API-Key": "YOUR_API_KEY",
},
json={
"url": "https://docs.messora.dev/pt-BR/introduction",
"max_pages": 10,
"url_regex": "^https://docs\\.messora\\.dev/pt-BR(/.*)?$",
"parse_pdf": True,
"pdf_ocr": False,
"wait_for_ms": 0,
"tags": ["crawl", "api-reference"],
},
)
job_id = response.json()["job_id"]
print(job_id)
const res = await fetch("https://api.messora.dev/crawl", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": "YOUR_API_KEY",
},
body: JSON.stringify({
url: "https://docs.messora.dev/pt-BR/introduction",
max_pages: 10,
url_regex: "^https://docs\\.messora\\.dev/pt-BR(/.*)?$",
parse_pdf: true,
pdf_ocr: false,
wait_for_ms: 0,
tags: ["crawl", "api-reference"],
}),
});
const { job_id } = await res.json();
console.log(job_id);
Respostas
202 retorna job_id. O polling via GET /jobs/{job_id} retorna resultados
parciais ou finais. Páginas bem-sucedidas consomem credits_used: 1 cada.
Erros
401:X-API-Keyausente403: API key inválida ou revogada422:max_pagesausente/fora da faixa, seed interna ou parâmetros inválidos429: rate limit excedido