Weavn

API

One endpoint. Any URL. Instant intelligence.

POST a URL, get a weave back. Structured JSON, percentile benchmarks, ranked fixes.

curl -X POST \
  https://api.weavn.app/v1/scan \
  -H "Authorization: Bearer wdoc_live_••••" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://your-site.com"}'

No official SDK — curl, Node, and Python above are complete. Any HTTP client that supports Bearer auth and JSON POST works identically.

307 checks~90s mediancache hits free

Try live at /playground — no client setup needed. · Response size scales with finding_limit (1–20) and finding_depth. Use fields to omit unneeded top-level blocks.

HOW THE ENGINE WORKS

Three steps. One structured response.

One POST request. 307 checks fire in sequence across 27 categories. Structured JSON returns.

01
INPUT
02
PROCESSING
03
OUTPUT
terminal · curl
curl -X POST \
  https://api.weavn.app/v1/scan \
  -H "Authorization: Bearer wdoc_live_••••" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://your-site.com"}'
307 checks27 categories~90s median
SCANNINGai · 307 checks
hero_section
value_proposition
trust_credibility
cta_conversion
social_proof
benchmark_positioning
copy_effectiveness
mobile_experience
trust_signals
running 307 checks · 27 categories ···
response.json200 OK
{
"score": 61,
"severity": "critical",
"percentile": 63,
"findings": 23,
"industry": "B2B SaaS",
"cost_usd": 0.15
}

Build against this schema once. Every URL returns identical structure.

REQUEST PARAMETERS · POST /api/v1/scan

7 params · 1 required · body · application/json
urlstringrequiredURL to scan. Scheme added if absent.
asyncbooleanoptionalfalseReturn immediately; result POSTed to callback_url.
callback_urlstringoptionalDelivery endpoint. Required when async: true.
pagesnumber | string[]optional1Page count (1–5) or explicit path array.
fieldsstring[]optionalallsummary · findings · copy_rewrites · growth_blueprint · benchmark
finding_limitnumberoptional10Max findings returned. Range: 1–20.
finding_depth"brief" | "full"optional"full"Minimal vs. complete per-finding field set.

RESPONSE SCHEMA

One response object. Every time.

response · application/json · 200 OK
{
  "scan_id": "sc_a8d3f2c1",
  "url": "https://your-site.com",
  "score": 61,
  "severity": "critical",
  "percentile": 63,
  "benchmark_data": {
    "industry_avg": 58,
    "vertical": "B2B SaaS",
    "corpus_size": 4812
  },
  "findings": [
    { "priority": "P1", "category": "hero_section" }
    { "estimated_lift": "+12–18%", "priority": "P1" }
  ],
  "cost_usd": 0.15,
  "duration_ms": 87432
}
· Build against this schema once — it never changes· Every finding cites visible page evidence· Same structure regardless of site type· v1 is stable — breaking changes ship as v2
findings[0] · full object shape
{
"priority": 1,
"severity": "critical",
"category": "value_proposition",
"title": "Hero headline is feature-led, not outcome-led",
"evidence": "Found: 'Advanced analytics platform'",
"estimated_lift": "+12-18%",
"fix": "Rewrite to lead with customer outcome",
"rewritten_copy": "See revenue impact in one dashboard.",
"fix_effort": "low",
"impact_tier": "P1"
}

Every finding in every scan returns this exact shape.

CHECK CATEGORIES · 27 GROUPS · 307 CHECKS

Hero SectionTrust & CredibilityCTA & ConversionMessaging & ClaritySocial ProofSEO & MetadataOffer & PricingOffer ClarityObjection HandlingPsychology & PersuasionSpecificity & Claim QualityCompetitive DifferentiationNavigation & UXMobile ExperiencePage Speed & TechnicalNarrative FlowPage & Content GapsConversion Path ExpansionReturn Visitor & RetentionEmail & RetentionCheckout & Purchase FrictionProduct PageE-commerce SpecificSaaS-SpecificAgency & ServiceAccessibility & InclusionUniversal & Cross-Vertical

Category prefix visible in strengths[*].check_id — e.g. HERO_001, TRUST_013, CTA_016.

ERROR CONTRACT

All errors return the same envelope so your handler never needs to branch on response shape — only on error.code.

status codes · error.code reference
400INVALID_URL / INVALID_REQUESTurl missing, malformed, or no valid domain
401AUTH_INVALIDBearer token absent, malformed, or revoked
402INSUFFICIENT_CREDITSmulti-page scan requested with no remaining credits
422BOT_BLOCKEDsite uses Cloudflare Enterprise or equivalent bot protection
422EXTRACTION_FAILEDscanner could not extract content after two attempts
429TRIAL_EXHAUSTEDfree 25-scan trial exhausted — upgrade plan to continue
500SCAN_FAILED / INTERNAL_ERRORanalysis or infrastructure error — safe to retry
error response · all non-2xx422 BOT_BLOCKED example
{
"error": {
"code": "BOT_BLOCKED",
"message": "This URL uses bot protection that prevents automated access.",
"status": 422
},
"blocked": true
}

Retry 5xx. Do not retry 400/401/422 — the error is structural, not transient.

WEBHOOK PAYLOAD

Every async and batch scan delivers a POST to your registered endpoint when complete. Three delivery attempts: immediate, +5 min, +30 min. Verify with the X-WebDoc-Signature header (HMAC-SHA256 of body, keyed with your webhook secret).

scan.completed
{
"event": "scan.completed",
"scan_id": "sc_a8d3f2c1",
"url": "https://your-site.com",
"score": 74,
"data": {
"domain": "your-site.com",
"verdict": "Good"
}
}
scan.failed
{
"event": "scan.failed",
"scan_id": "sc_a8d3f2c1",
"url": "https://your-site.com",
"score": null,
"data": {
"domain": "your-site.com",
"error": "bot_blocked",
"blocked": true,
"code": "BOT_BLOCKED"
}
}
X-WebDoc-Eventscan.completed | scan.failed
X-WebDoc-SignatureHMAC-SHA256 hex of body
X-WebDoc-Attempt1 | 2 | 3

BUILT FOR AGENTS AND AUTOMATION

Deterministic output. Every call.

An agent can only act on output it can parse identically every time. The same URL always returns the same schema — scores, findings, severity, and copy rewrites — whether it runs at 3am in a batch or inline in a user flow.

AGENT LOOP PATTERN

01BATCH SUBMIT

POST /api/v1/scan/batch

Up to 10 URLs in a single request. All scan in parallel. Returns immediately with a batch_id.

02ASYNC PROCESSING

status: pending

The engine runs 307 checks per URL. Parallel execution — a 10-URL batch completes in roughly the same wall time as one.

03WEBHOOK DELIVERY

event: scan.completed

Single structured payload delivered to your endpoint. Three delivery attempts with exponential backoff.

POST/api/v1/scan/batch· up to 10 URLs, parallel
GET/api/v1/webhooks· list registered endpoints
POST/api/v1/webhooks· register endpoint, secret returned once
DELETE/api/v1/webhooks· remove endpoint by id

WHAT YOU CAN BUILD

Five integrations. One endpoint.

CMS / site builder score badge

Embed a live conversion score for any page in Webflow, Framer, or a custom CMS. Re-scan on publish; surface the delta.

POST /api/v1/scan on deploy hook

CRM lead audit on creation

When a lead record is created, auto-scan their website. Attach the score and top findings to the deal before the first call.

triggered from CRM webhook

Agency white-label reporting

Batch-scan client sites on a schedule. Feed findings into your own branded report template. Deliver to clients without exposing the underlying engine.

POST /api/v1/scan/batch

AI agent decision loop

Feed scores and structured findings directly into an LLM agent. The JSON schema is stable — the agent parses it the same way every run.

structured JSON → agent context

Prospect list bulk audit

Upload a CSV of target domains. Batch-scan in parallel. Filter by score threshold to prioritise outreach on sites with the highest lift potential.

POST /api/v1/scan/batch → filter by score

API PLANS · RATE DECREASES WITH VOLUME

PLAYGROUND

25 free

then $0.25/scan

Developers evaluating the API before building. No commitment required.

GET API KEY →
trial scans25
overage rate$0.25/scan
scans / month
async mode
batch endpoint
webhooks
rate limits5/min
JSON response
cache hits free
supportdocs only
dedicated limits
SLA guarantee
invoice billing

DEV

$29

/mo · 300 scans

Solo developers integrating conversion intelligence into their first product.

START DEV →
trial scans
overage rate$0.19/scan
scans / month300
async mode
batch endpoint
webhooks
rate limits60/min
JSON response
cache hits free
supportemail
dedicated limits
SLA guarantee
invoice billing

BUILDER

$99

/mo · 1,000 scans

Teams building audit pipelines or integrating webdoc into client workflows.

START BUILDER →
trial scans
overage rate$0.17/scan
scans / month1,000
async mode
batch endpoint
webhooks
rate limits200/min
JSON response
cache hits free
supportemail
dedicated limits
SLA guarantee
invoice billing

SCALE

$249

/mo · 3,000 scans · best value

High-volume integrations and teams that need dedicated infrastructure and rate limits.

START SCALE →
trial scans
overage rate$0.15/scan
scans / month3,000
async mode
batch endpoint
webhooks
rate limits500/min
JSON response
cache hits free
supportpriority email
dedicated limits
SLA guarantee
invoice billing

ENTERPRISE

Custom

from $0.11/scan · SLA

Organizations requiring custom volume, SLA guarantees, and dedicated support.

TALK TO US →
trial scans
overage ratefrom $0.11
scans / monthcustom
async mode
batch endpoint
webhooks
rate limitsdedicated
JSON response
cache hits free
supportdedicated
dedicated limits
SLA guarantee
invoice billing

INCLUDED ON ALL PLANS

CACHE POLICY

Cache policy

Identical URL rescanned within 24h returns cached result at zero cost.

Scan the same URL multiple times in your pipeline for free.

cache_hit: true · cost_usd: 0.00

ASYNC MODE

Async mode

POST with async: true. Result delivered to your endpoint when ready.

Don't block your process waiting 90 seconds — fire and forget.

async: true · webhook_url: your-endpoint

BATCH ENDPOINT

Batch endpoint

POST /api/v1/scan/batch — parallel execution, single webhook response.

Audit a full site's key pages in one request.

POST /api/v1/scan/batch · up to 10 URLs

RESPONSE TIME

Response time

p50: 87s · p95: 142s · measured across 30-day rolling window.

p95 is 142s — plan timeouts accordingly.

p50: 87s · p95: 142s

TECHNICAL QUESTIONS

How does authentication work?

Every request requires a Bearer token in the Authorization header. Keys start with wdoc_live_ and are scoped to your account and plan. Get your key from the developer portal. Do not expose keys in client-side code — requests must originate server-side.

Authorization: Bearer wdoc_live_••••

Sync or async — which should I use?

Sync holds the connection and returns the full response when the scan completes (~90s). Use it for single scans where you can wait. Async returns immediately with a scan_id and POSTs the result to your webhook_url when ready — use it for batch processing or to avoid timeouts.

async: false (sync) · async: true + webhook_url

How does caching work?

Identical URLs rescanned within 24 hours return the cached result at zero cost. Cache is invalidated when page content changes significantly — detected via fingerprint comparison. Force a fresh scan with force_refresh: true.

cache_hit: true · cost_usd: 0.00

What's in the batch endpoint?

POST up to 10 URLs in one request to /api/v1/scan/batch. All URLs scan in parallel. Results are delivered to your webhook_url as a single structured payload when all scans complete. Each URL in the batch consumes one scan credit.

POST /api/v1/scan/batch · max 10 URLs

What if a site blocks the scanner?

webdoc uses Browserless Pro with stealth mode and a real Chrome user agent. Most sites scan cleanly. Cloudflare Enterprise with aggressive bot detection occasionally blocks — the API returns a structured error with block_reason: "automated_access_blocked".

error: automated_access_blocked

Is there an uptime SLA?

Enterprise plans include a formal SLA. All other plans target 99.5% uptime. Status and incident history available at status.webdocai.com. Planned maintenance is announced 48 hours in advance via dashboard notification.

target_uptime: 99.5% · SLA: enterprise_only

Want to understand what fires under the hood? See the engine →

Need results without code?

The dashboard surface gives non-technical users the same scan data in a visual report.

Go to dashboard →

Ready to build?

25 free scans. No subscription. Start in minutes.

Same engine on every plan. Build against the schema once.

GET API KEY →