REST API reference
JSON over HTTPS. Authenticate with Authorization: Bearer cb_live_… (or x-api-key). Limit: 300 requests/min per key. Submission endpoints only validate and enqueue, so they respond in milliseconds — every response carries an x-response-time header.
Quick start
curl -X POST http://localhost:3000/api/v1/submit \
-H "Authorization: Bearer $CRAWLBEAM_KEY" \
-H "Content-Type: application/json" \
-d '{"urls":["https://example.com/new-post"],"strategy":"fresh"}'// Node 18+ / Next.js route handler — notify Crawlbeam when a post is published
await fetch("http://localhost:3000/api/v1/submit", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.CRAWLBEAM_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({ urls: [post.url], strategy: "fresh" }),
});Strategies
autoPer-URL: owned → fresh rules, external → guest rules.freshAll channels now; checks at 10m, 1h, 6h, 24h, 72h; one re-push at 48h.agedAll channels now; re-push at 24h and 72h; checks to day 7.guestDiscovery feed + WebSub + pings; re-push at 12h and 48h.Endpoints
/api/v1/submitEnqueue up to 10,000 URLs. Returns 202 immediately with a batch id.
{
"urls": ["https://example.com/a", "https://example.com/b"], // or one newline-separated string
"strategy": "auto", // auto | fresh | aged | guest
"project_id": "p_…", // optional — inferred from the URL host
"name": "Product reviews" // optional
}{ "data": { "batch_id": "b_…", "project_id": "p_…", "strategy": "auto", "accepted": 2,
"status_url": "http://localhost:3000/api/v1/batches/b_…", "dashboard_url": "…" } }/api/v1/batchesList recent batches with submitted / crawled / indexed counts. ?limit=25
/api/v1/batches/:idFull batch: every URL, its status, first bot visit and per-channel results.
/api/v1/url-status?url=…Latest tracked state for a single URL.
/api/v1/checkIndexability check for up to 50 URLs (+ Google URL Inspection for connected properties).
{ "urls": ["https://example.com/a"] }/api/v1/statsTotals, avg. bot visit time, channel acceptance and a 14-day series. ?project_id=
/api/v1/projectsList projects with IndexNow key location and credential status.
/api/v1/projectsCreate a project.
{ "domain": "example.com", "name": "Example" }/api/v1/crawl-eventsCrawl beacon ingest. Auth with the x-crawlbeam-beacon header (per-project secret), not an API key.
{ "url": "https://example.com/a", "user_agent": "Mozilla/5.0 (compatible; Googlebot/2.1…)", "ip": "66.249.66.1" }Errors
{ "error": { "code": "no_valid_urls", "message": "No valid http(s) URLs found" } }
400 invalid_body · 401 unauthorized · 404 not_found / no_project
413 too_many_urls · 429 rate_limited · 500 internal_error