{"openapi":"3.1.0","info":{"title":"Ollagraph API","description":"**Ollagraph** is web infrastructure for AI agents — 92 endpoints across fetch, extract, audit, intelligence, and AEO/SEO families, all behind one Bearer token and one MCP server.\n\nEvery endpoint authenticates the same way: `Authorization: Bearer osk_…`. Your API key is created at [app.ollagraph.com](https://app.ollagraph.com/) and is shown once at creation time.\n\nSuccessful calls cost one credit (some premium endpoints cost 3–5); server-side failures refund automatically. See the [capabilities page](https://ollagraph.com/capabilities) for the full catalog and [docs](https://ollagraph.com/docs) for the operational contract.\n\n## Response headers (every response)\n\n| Header | What it tells you | Standard |\n| --- | --- | --- |\n| `x-request-id` | Stable correlation ID; pass back to support, grep in your logs. | de-facto |\n| `traceparent` | Our server-side OTel trace + span ID, so you can correlate with your own trace. | W3C Trace Context |\n| `server-timing` | Wall-clock breakdown: at minimum `total;dur=<ms>`. Renders natively in Chrome DevTools. | W3C Server-Timing |\n| `x-credits-cost` / `x-credits-charged` / `x-credits-balance` | Sticker cost, what we actually deducted, what's left after this call. | — |\n| `x-tier-used` | Which fetch tier served the call (`qbrowser`, `cloudflare`, `hyperbrowser`, `spider`, `brightdata`, `direct`). | — |\n| `x-cascade-path` | Full ordered list of tiers we attempted before one succeeded. | — |\n| `x-ratelimit-limit` / `RateLimit-Limit` (and `-remaining` / `-reset`) | Token-bucket state for your plan. Both legacy GitHub-style and the IETF draft spelling are emitted. | IETF draft-ietf-httpapi-ratelimit-headers |\n| `Cache-Control: no-store` | Auto-set on every authenticated response so corporate proxies and CDNs don't cache your data. | RFC 7234 |\n| `Deprecation` + `Sunset` + `Link` | Set when you're calling a route scheduled for removal. Empty today; will surface here when we ever deprecate. | RFC 8594 + draft-ietf-httpapi-deprecation |\n| `Idempotency-Replayed: true` | Returned when an `Idempotency-Key` matched a cached response. | Stripe-style |\n\nFree tier: 1,000 credits on signup, every endpoint, no credit card.\n\n_Note: `api.qcrawl.com` continues to serve the same backend during the rebrand transition. New integrations should use `api.ollagraph.com`._","termsOfService":"https://ollagraph.com/legal/terms/","contact":{"name":"Ollagraph support","url":"https://ollagraph.com/contactus/","email":"support@ollagraph.com"},"license":{"name":"Commercial — see Terms of Service","url":"https://ollagraph.com/legal/terms/"},"version":"1.0.0"},"servers":[{"url":"https://api.ollagraph.com","description":"Production"},{"url":"https://api.qcrawl.com","description":"Legacy alias — same backend; new integrations should use api.ollagraph.com"}],"paths":{"/v1/scrape":{"post":{"summary":"Scrape Endpoint","operationId":"scrape_endpoint_v1_scrape_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScrapeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Scraping"]}},"/v1/scrape/batch":{"post":{"summary":"Batch Scrape Endpoint","operationId":"batch_scrape_endpoint_v1_scrape_batch_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchScrapeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Scraping"]}},"/v1/scrape/llm-ready":{"post":{"summary":"Scrape Llm Ready Endpoint","description":"Fetch a URL, extract the article body, chunk it for RAG ingest.\n\nReturns chunks sized for an embedding model's context window with\nconfigurable overlap. Each chunk carries byte offsets into the\nsource page so customers can attribute citations back to exact\npositions. The response shape is identical regardless of which fetch\npath was used; the `proxy_used` field carries a diagnostic label.","operationId":"scrape_llm_ready_endpoint_v1_scrape_llm_ready_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LlmReadyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Scraping"]}},"/v1/scrape/async":{"post":{"summary":"Scrape Async Endpoint","operationId":"scrape_async_endpoint_v1_scrape_async_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AsyncScrapeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Scraping"]}},"/v1/scrape/batch/async":{"post":{"summary":"Batch Scrape Async Endpoint","operationId":"batch_scrape_async_endpoint_v1_scrape_batch_async_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AsyncBatchScrapeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Scraping"]}},"/v1/jobs/{job_id}":{"get":{"summary":"Get Job Status","operationId":"get_job_status_v1_jobs__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Jobs"]}},"/v1/me":{"get":{"summary":"Get Me","operationId":"get_me_v1_me_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Account"]}},"/v1/me/webhook-secret/rotate":{"post":{"summary":"Rotate My Webhook Secret","description":"Generate a new webhook signing secret. The previous one becomes invalid\nimmediately - any signed callbacks already in-flight will verify against\nthe new secret, so callers should drain in-flight jobs before rotating.","operationId":"rotate_my_webhook_secret_v1_me_webhook_secret_rotate_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Account"]}},"/v1/me/webhooks/test":{"post":{"summary":"Test My Webhook","description":"Send a single signed test payload to `webhook_url` so the customer can\nverify their receiver before going live.\n\nUses the same signing scheme as production deliveries:\n  X-Ollagraph-Signature: t=<unix_ts>,v1=<hmac_sha256_hex>\nwhere the signed body is `<ts>.<exact_json_bytes>`. The customer recomputes\nthe HMAC with their webhook_secret (from `/v1/me`) and compares in\nconstant time. Reuses the same retry/timeout policy as the worker so the\nresult reflects what a real delivery would look like.","operationId":"test_my_webhook_v1_me_webhooks_test_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookTestRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Account"]}},"/v1/me/password":{"post":{"summary":"Change My Password","description":"Change the signed-in user's password. Verifies the current password\nfirst. Existing API keys are unaffected — only dashboard login changes.","operationId":"change_my_password_v1_me_password_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangePasswordRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Account"]}},"/v1/me/jobs":{"get":{"summary":"Get My Jobs","description":"Paginated async-job history for the dashboard Jobs view.","operationId":"get_my_jobs_v1_me_jobs_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Account"]}},"/v1/me/credits":{"get":{"summary":"Get My Credits","description":"Current credit balance + paginated credit ledger.","operationId":"get_my_credits_v1_me_credits_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Account"]}},"/v1/me/usage":{"get":{"summary":"Get My Usage","description":"Paginated request log for the dashboard Logs view. Filter by endpoint.\n\n`format=json` (default) returns the standard `{rows, limit, offset}` envelope.\n\n`format=csv` returns the same rows as a streaming `text/csv` response with\ncolumns: created_at, endpoint, url, status, time_ms, credits_charged,\ntier_used, request_id. The same `limit`, `offset`, and `endpoint` filters\napply. Closes the recurring \"compliance asked me to dump 30 days of API\ncalls\" ticket without forcing customers to hand-roll a paginated client.","operationId":"get_my_usage_v1_me_usage_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"endpoint","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Endpoint"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","default":"json","title":"Format"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Account"]}},"/v1/me/requests/{request_id}":{"get":{"summary":"Get My Request","description":"Look up a specific request by its X-Request-ID.\n\nCustomers paste the ID they grep-found in their own observability stack\n(Datadog, Better Stack, Honeycomb, etc.) and we return the billing-side\nrecord: endpoint, URL, status, latency, credit cost, timestamp.\n\nReturns 404 if the request_id isn't found for this user. That can mean:\n- the ID is from a different account\n- the Redis stream hasn't drained yet (within ~1s of the call completing)\n- the request was an unauthenticated /health hit which we don't log","operationId":"get_my_request_v1_me_requests__request_id__get","parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","title":"Request Id"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Account"]}},"/v1/me/cost-estimate":{"post":{"summary":"Cost Estimate","description":"Return what the next call to `endpoint` would cost this user.\n\nNo execution, no charge, no rate-limit consumption. Reads the same\n`ENDPOINT_CREDIT_COST` map the actual billing path uses, applies the\noptional residential-proxy surcharge, and honours BYPASS_PLANS\n(internal / superadmin → 0). Customers price-check before they commit.","operationId":"cost_estimate_v1_me_cost_estimate_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CostEstimateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Account"]}},"/v1/me/usage/summary":{"get":{"summary":"Get My Usage Summary","description":"Pre-aggregated chart data for the dashboard Overview.","operationId":"get_my_usage_summary_v1_me_usage_summary_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Account"]}},"/v1/me/forwarders":{"get":{"summary":"Get My Forwarders","description":"List the customer's configured OTel forwarders. Auth values are\nreturned masked (last 4 chars + asterisks); plaintext is never exposed.","operationId":"get_my_forwarders_v1_me_forwarders_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Account"]},"post":{"summary":"Create My Forwarder","description":"Add a new OTel destination. Auth value is encrypted at rest.\n\nKicks an immediate background refresh of the FanoutSpanProcessor's\nforwarder cache so spans start fanning out to the new destination\nwithin a few milliseconds rather than waiting for the next 30 s\nperiodic tick.","operationId":"create_my_forwarder_v1_me_forwarders_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForwarderCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Account"]}},"/v1/me/forwarders/{forwarder_id}":{"delete":{"summary":"Delete My Forwarder","description":"Remove a forwarder.\n\nKicks an immediate background refresh so the deleted destination\nstops receiving spans within a few milliseconds — no privacy concern\nof continuing to forward to an endpoint the customer just removed.\nSpans already buffered inside the soon-to-be-shut-down\nBatchSpanProcessor still flush; spans created after the refresh\ncompletes do not.","operationId":"delete_my_forwarder_v1_me_forwarders__forwarder_id__delete","parameters":[{"name":"forwarder_id","in":"path","required":true,"schema":{"type":"integer","title":"Forwarder Id"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Account"]}},"/v1/me/forwarders/{forwarder_id}/test":{"post":{"summary":"Test My Forwarder","description":"Emit a single test span to the configured destination. Returns\nwhether the endpoint accepted it. Updates last_test_at/status/detail\ncolumns so the dashboard can show the result inline.","operationId":"test_my_forwarder_v1_me_forwarders__forwarder_id__test_post","parameters":[{"name":"forwarder_id","in":"path","required":true,"schema":{"type":"integer","title":"Forwarder Id"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Account"]}},"/v1/keys":{"get":{"summary":"List My Keys","description":"List the user's API keys (prefixes only - raw keys are never recoverable).","operationId":"list_my_keys_v1_keys_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Account"]},"post":{"summary":"Create My Key","description":"Mint a new API key. The raw key is returned ONCE; we only store the hash.","operationId":"create_my_key_v1_keys_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateKeyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Account"]}},"/v1/keys/{key_id}":{"delete":{"summary":"Delete My Key","description":"Revoke an API key. Existing in-flight requests using it still complete;\nnew requests with the revoked key get 401.","operationId":"delete_my_key_v1_keys__key_id__delete","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"integer","title":"Key Id"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Account"]}},"/v1/extract/clean":{"post":{"summary":"Extract Clean Endpoint","operationId":"extract_clean_endpoint_v1_extract_clean_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtractRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Extraction"]}},"/v1/extract/structured":{"post":{"summary":"Extract Structured Endpoint","operationId":"extract_structured_endpoint_v1_extract_structured_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtractRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Extraction"]}},"/v1/extract/contacts":{"post":{"summary":"Extract Contacts Endpoint","description":"Pull emails, phone numbers, and social-profile URLs from a text/HTML\nblob the customer supplies. No fetch, no network — pure regex extraction.","operationId":"extract_contacts_endpoint_v1_extract_contacts_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtractContactsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Extraction"]}},"/v1/extract/tables":{"post":{"summary":"Extract Tables Endpoint","description":"Extract every <table> from an HTML blob as structured JSON.\nHeaders detected from <thead> or all-<th> first rows. Colspan/rowspan\nexpanded. No fetch — caller supplies the HTML.","operationId":"extract_tables_endpoint_v1_extract_tables_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtractTablesRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Extraction"]}},"/v1/aeo/freshness-signal":{"post":{"summary":"Aeo Freshness Signal Endpoint","description":"Audit a page's freshness signals from schema.org dateModified,\nOpenGraph article:modified_time, HTTP Last-Modified, visible 'Updated'\ntext, and copyright year. Returns a 0-100 freshness score + the\nmost-recent dated signal + any inconsistencies between them.","operationId":"aeo_freshness_signal_endpoint_v1_aeo_freshness_signal_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreshnessSignalRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["AEO"]}},"/v1/aeo/snippet-format-detect":{"post":{"summary":"Aeo Snippet Format Detect Endpoint","description":"Classify a page's content into the four featured-snippet shapes\nGoogle pulls from: paragraph, list, table, definition. Returns\ncounts + example snippets for each kind + a best-fit prediction.","operationId":"aeo_snippet_format_detect_endpoint_v1_aeo_snippet_format_detect_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SnippetFormatDetectRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["AEO"]}},"/v1/aeo/heading-hierarchy-score":{"post":{"summary":"Aeo Heading Hierarchy Endpoint","description":"Audit H1-H6 hierarchy on a page. Surfaces missing H1, multiple H1s,\nhierarchy skips (H2 -> H4 without H3 between), and the count of\nquestion-style headings — important for AI Overview eligibility.","operationId":"aeo_heading_hierarchy_endpoint_v1_aeo_heading_hierarchy_score_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadingHierarchyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["AEO"]}},"/v1/seo/redirect-chain-map":{"post":{"summary":"Seo Redirect Chain Endpoint","description":"Trace the full redirect chain from a URL to its final destination.\nReturns the hops + SEO-flavored scoring: too-long chain, HTTPS->HTTP\ndowngrade, 302/307 used where 301 would be appropriate.","operationId":"seo_redirect_chain_endpoint_v1_seo_redirect_chain_map_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedirectChainMapRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["SEO"]}},"/v1/seo/broken-links-audit":{"post":{"summary":"Seo Broken Links Endpoint","description":"Scan a single page for broken outbound + internal links. HEAD\nprobe with GET fallback, parallel, configurable cap. Returns\nfull status code + final URL per link, with broken ones flagged.","operationId":"seo_broken_links_endpoint_v1_seo_broken_links_audit_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrokenLinksAuditRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["SEO"]}},"/v1/seo/anchor-text-audit":{"post":{"summary":"Seo Anchor Text Audit Endpoint","description":"Audit every <a href> on the page. Flags generic anchors\n('click here', 'read more') and over-optimized repeats (same exact-\nmatch anchor used 3+ times pointing at the same URL).","operationId":"seo_anchor_text_audit_endpoint_v1_seo_anchor_text_audit_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnchorTextAuditRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["SEO"]}},"/v1/seo/schema-validate":{"post":{"summary":"Seo Schema Validate Endpoint","description":"Validate JSON-LD blocks against Google's required-field lists for\n20+ rich-result types (Product, Recipe, Article, Event, FAQPage,\nHowTo, JobPosting, LocalBusiness, Review, ...). Returns the list of\ntypes the page is rich-result-eligible for.","operationId":"seo_schema_validate_endpoint_v1_seo_schema_validate_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SchemaValidateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["SEO"]}},"/v1/seo/mixed-content":{"post":{"summary":"Seo Mixed Content Endpoint","description":"Find HTTP subresources loaded by an HTTPS page (mixed content).\nReports every <img>, <script>, <link>, <iframe>, <audio>, <video>,\n<source>, <embed>, <object> that uses http:// instead of https://.","operationId":"seo_mixed_content_endpoint_v1_seo_mixed_content_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MixedContentRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["SEO"]}},"/v1/intel/cert-transparency-history":{"post":{"summary":"Intel Cert Transparency Endpoint","description":"Query Certificate Transparency logs via crt.sh for every cert ever\nissued for the domain or any subdomain. Free, no auth needed.\nReturns deduplicated certs sorted newest-first.","operationId":"intel_cert_transparency_endpoint_v1_intel_cert_transparency_history_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CertTransparencyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Intelligence"]}},"/v1/seo/keyword-extract":{"post":{"summary":"Seo Keyword Extract Endpoint","description":"Extract top keywords + multi-word phrases from text or a URL.\nUses lightweight TextRank-style co-occurrence ranking; no LLM\ncalls, no paid keyword feeds. Bring your own text or let us\nfetch+clean the URL for you.","operationId":"seo_keyword_extract_endpoint_v1_seo_keyword_extract_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeywordExtractRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["SEO"]}},"/v1/intel/subdomain-enumerate":{"post":{"summary":"Intel Subdomain Enumerate Endpoint","description":"Enumerate subdomains for a domain via Certificate Transparency.\n\nPublic CT logs (crt.sh) — no DNS brute-forcing, no paid feeds. Returns the\ndeduplicated SAN list. Stale entries are possible since we don't resolve;\npair with a resolver if you need live-only hostnames.","operationId":"intel_subdomain_enumerate_endpoint_v1_intel_subdomain_enumerate_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubdomainEnumerateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Intelligence"]}},"/v1/enrich/company":{"post":{"summary":"Enrich Company Endpoint","description":"Lite company profile from a single page. Pulls Organization JSON-LD,\nog:* tags, social anchors, contact patterns. Best when pointed at a\nhomepage or /about — no paid company-data feeds involved.","operationId":"enrich_company_endpoint_v1_enrich_company_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnrichCompanyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Other"]}},"/v1/convert/ocr":{"post":{"summary":"Convert Ocr Endpoint","description":"OCR an image (PNG/JPEG/WebP/BMP/TIFF) to text. Proxies to the convert\nLXC running RapidOCR — CPU-only, no GPU. Optionally returns per-region\nbounding boxes and confidence scores.","operationId":"convert_ocr_endpoint_v1_convert_ocr_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConvertOcrRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Conversion"]}},"/v1/aeo/ai-bot-allowlist":{"post":{"summary":"Aeo Ai Bot Allowlist Endpoint","description":"For each of 14 named AI crawlers (GPTBot, ClaudeBot, PerplexityBot,\nGoogle-Extended, Applebot-Extended, CCBot, etc.), report whether the\nsite's robots.txt allows or blocks it.","operationId":"aeo_ai_bot_allowlist_endpoint_v1_aeo_ai_bot_allowlist_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AeoAiBotAllowlistRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["AEO"]}},"/v1/aeo/llms-txt-audit":{"post":{"summary":"Aeo Llms Txt Audit Endpoint","description":"Fetch /llms.txt at the given domain and audit it against the emerging\nAEO-readiness convention. Validates structure, scores section coverage,\nchecks for link rot (up to 50 links).","operationId":"aeo_llms_txt_audit_endpoint_v1_aeo_llms_txt_audit_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AeoLlmsTxtAuditRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["AEO"]}},"/v1/seo/meta-audit":{"post":{"summary":"Seo Meta Audit Endpoint","description":"Audit a page's SEO meta fields and grade them 0–100 / A–F.","operationId":"seo_meta_audit_endpoint_v1_seo_meta_audit_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeoMetaAuditRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["SEO"]}},"/v1/seo/readability":{"post":{"summary":"Seo Readability Endpoint","description":"Score readability via six standard formulas (Flesch, Flesch-Kincaid,\nGunning-Fog, SMOG, ARI, Coleman-Liau) plus reading time.","operationId":"seo_readability_endpoint_v1_seo_readability_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeoReadabilityRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["SEO"]}},"/v1/seo/snippet-candidates":{"post":{"summary":"Seo Snippet Candidates Endpoint","description":"Extract candidate featured-snippet paragraphs, lists, and tables\nfrom an HTML blob OR from a URL we fetch on your behalf. When `url` is\nsupplied with `use_residential_proxy=true`, fetches with JS rendering —\nfinds snippets on div-soup docs sites.","operationId":"seo_snippet_candidates_endpoint_v1_seo_snippet_candidates_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeoSnippetCandidatesRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["SEO"]}},"/v1/aeo/schema-coverage":{"post":{"summary":"Aeo Schema Coverage Endpoint","description":"Parse every JSON-LD block + Microdata + OpenGraph on a page; score\ncoverage against the 12 AEO-critical schema.org types. Opt-in residential\n+ JS-rendering captures schemas hydrated client-side on Next.js sites.","operationId":"aeo_schema_coverage_endpoint_v1_aeo_schema_coverage_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AeoSchemaCoverageRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["AEO"]}},"/v1/aeo/citation-readiness":{"post":{"summary":"Aeo Citation Readiness Endpoint","description":"Score a page against the post-ChatGPT EEAT signals: numerical specifics,\nnamed entities, authoritative outbound links, author byline, last-updated\ndate, content length. Mechanical scoring — no LLM call. Opt-in residential\nproxy is available for sites with strict access controls.","operationId":"aeo_citation_readiness_endpoint_v1_aeo_citation_readiness_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AeoCitationReadinessRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["AEO"]}},"/v1/aeo/llm-fetch-simulator":{"post":{"summary":"Aeo Llm Fetch Simulator Endpoint","description":"Fetch a URL as each of 11 named AI crawlers (plus a browser baseline).\nReport what each one actually received: status, content length, visible\ntext preview, plus cloaking + JS-only detection.","operationId":"aeo_llm_fetch_simulator_endpoint_v1_aeo_llm_fetch_simulator_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AeoLlmFetchSimulatorRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["AEO"]}},"/v1/aeo/page-audit":{"post":{"summary":"Aeo Page Audit Endpoint","description":"Full AEO audit — runs 9 component probes in parallel and returns one\nheadline 0–100 score, five category breakdowns, top issues, and ranked\nrecommendations. Bills 3 credits (premium orchestration).","operationId":"aeo_page_audit_endpoint_v1_aeo_page_audit_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AeoPageAuditRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["AEO"]}},"/v1/aeo/competitor-diff":{"post":{"summary":"Aeo Competitor Diff Endpoint","description":"Run page-audit on 2-5 URLs in parallel; return head-to-head rankings\nplus where the first URL wins and loses against the rest. Bills 3 credits\nregardless of URL count.","operationId":"aeo_competitor_diff_endpoint_v1_aeo_competitor_diff_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AeoCompetitorDiffRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["AEO"]}},"/v1/dns/lookup":{"post":{"summary":"Dns Lookup Endpoint","operationId":"dns_lookup_endpoint_v1_dns_lookup_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DnsLookupRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Intelligence"]}},"/v1/dns/intelligence":{"post":{"summary":"Dns Intel Endpoint","operationId":"dns_intel_endpoint_v1_dns_intelligence_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DnsIntelRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Intelligence"]}},"/v1/scrape/smart":{"post":{"summary":"Smart Scrape Endpoint","operationId":"smart_scrape_endpoint_v1_scrape_smart_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SmartScrapeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Scraping"]}},"/v1/verify/email":{"post":{"summary":"Email Verify Endpoint","operationId":"email_verify_endpoint_v1_verify_email_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailVerifyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Intelligence"]}},"/v1/captcha/solve":{"post":{"summary":"Captcha Solve Endpoint","operationId":"captcha_solve_endpoint_v1_captcha_solve_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CaptchaSolveRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Captcha"]}},"/v1/captcha/auto":{"post":{"summary":"Captcha Auto Endpoint","operationId":"captcha_auto_endpoint_v1_captcha_auto_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CaptchaAutoSolveRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Captcha"]}},"/v1/intel/ssl":{"post":{"summary":"Intel Ssl Endpoint","operationId":"intel_ssl_endpoint_v1_intel_ssl_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntelDomainRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Intelligence"]}},"/v1/intel/whois":{"post":{"summary":"Intel Whois Endpoint","operationId":"intel_whois_endpoint_v1_intel_whois_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntelDomainRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Intelligence"]}},"/v1/intel/page":{"post":{"summary":"Intel Page Endpoint","operationId":"intel_page_endpoint_v1_intel_page_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntelUrlRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Intelligence"]}},"/v1/intel/sitemap":{"post":{"summary":"Intel Sitemap Endpoint","operationId":"intel_sitemap_endpoint_v1_intel_sitemap_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntelUrlRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Intelligence"]}},"/v1/intel/robots":{"post":{"summary":"Intel Robots Endpoint","operationId":"intel_robots_endpoint_v1_intel_robots_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntelRobotsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Intelligence"]}},"/v1/intel/geoip":{"post":{"summary":"Intel Geoip Endpoint","description":"IP geolocation — country, city, lat/lon, timezone for any public IP.\nBacked by the DB-IP Lite database (CC-BY, db-ip.com). No SSRF guard\nneeded: the IP is only a key into a local DB read, never fetched.","operationId":"intel_geoip_endpoint_v1_intel_geoip_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeoIpRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Intelligence"]}},"/v1/intel/asn":{"post":{"summary":"Intel Asn Endpoint","description":"ASN → operator name + every routed CIDR prefix.\n\nReuses the same iptoasn.com data the geoip endpoint indexes. Read-only,\nno network. Useful for compiling per-network IP allow/deny lists, mapping\ncustomer infrastructure, or auditing ASN ownership claims.","operationId":"intel_asn_endpoint_v1_intel_asn_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AsnRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Intelligence"]}},"/v1/intel/geoip/bulk":{"post":{"summary":"Intel Geoip Bulk Endpoint","description":"Bulk IP geolocation — up to 100 IPs per call.\n\nBilled N credits per N IPs (handled via check_limits_batch). Wraps the\nsame `geoip.lookup()` used by /v1/intel/geoip — each IP gets the full\nenrichment (country/region/city/lat-lon/timezone/ASN/ISP/postal).","operationId":"intel_geoip_bulk_endpoint_v1_intel_geoip_bulk_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeoIpBulkRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Intelligence"]}},"/v1/intel/headers":{"post":{"summary":"Intel Headers Endpoint","description":"Fetch a URL and return all response headers plus a security-header grade.","operationId":"intel_headers_endpoint_v1_intel_headers_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntelHeadersRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Intelligence"]}},"/v1/intel/redirects":{"post":{"summary":"Intel Redirects Endpoint","description":"Trace a URL's full redirect chain, hop by hop.","operationId":"intel_redirects_endpoint_v1_intel_redirects_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntelRedirectsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Intelligence"]}},"/v1/intel/uptime":{"post":{"summary":"Intel Uptime Endpoint","description":"Quick is-it-up probe: status, latency, SSL expiry. One HTTP HEAD (or GET fallback).","operationId":"intel_uptime_endpoint_v1_intel_uptime_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntelUptimeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Intelligence"]}},"/v1/intel/security-txt":{"post":{"summary":"Intel Security Txt Endpoint","description":"Probe the target for its RFC 9116 security.txt. Checks\n/.well-known/security.txt then /security.txt. Returns parsed fields\nplus a `rfc9116_minimum_compliant` flag (Contact + Expires required).","operationId":"intel_security_txt_endpoint_v1_intel_security_txt_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntelSecurityTxtRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Intelligence"]}},"/v1/intel/social-tags":{"post":{"summary":"Intel Social Tags Endpoint","description":"Fetch a page and return everything a social card / link preview\nneeds: Open Graph, Twitter Card, canonical URL, title, description,\nicons, language, theme color, robots meta.","operationId":"intel_social_tags_endpoint_v1_intel_social_tags_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntelSocialTagsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Intelligence"]}},"/v1/intel/cookies":{"post":{"summary":"Intel Cookies Endpoint","description":"Set-Cookie header analysis: name, domain, path, SameSite, Secure,\nHttpOnly, Max-Age, Expires, is_session, third-party-or-not. Header\ncookies only — JS-set cookies need a real browser and are NOT\nvisible from server-side fetch.","operationId":"intel_cookies_endpoint_v1_intel_cookies_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntelCookiesRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Intelligence"]}},"/v1/intel/waf":{"post":{"summary":"Intel Waf Endpoint","description":"Detect which WAF/CDN/firewall is in front of a URL. Pattern matches\non response headers + (when the origin returns 403/429/503) the\nchallenge-page body. Covers Cloudflare, Akamai, Fastly, AWS WAF,\nImperva, Sucuri, F5, ModSecurity, BunnyCDN, StackPath, DDoS-Guard,\nWallarm, Varnish, Barracuda.","operationId":"intel_waf_endpoint_v1_intel_waf_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntelWafRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Intelligence"]}},"/v1/intel/sri-audit":{"post":{"summary":"Intel Sri Audit Endpoint","description":"Subresource Integrity audit. Lists every external <script src>\nand <link rel=stylesheet|preload> on the page, and reports how many\nare pinned with an `integrity` attribute. Supply-chain hygiene\ncheck — your CDN-hosted JS can be tampered with if you don't pin it.","operationId":"intel_sri_audit_endpoint_v1_intel_sri_audit_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntelSriAuditRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Intelligence"]}},"/v1/intel/wayback":{"post":{"summary":"Intel Wayback Endpoint","description":"Query the Wayback Machine for a URL's archive history. Returns\nthe first and last snapshots with direct wayback URLs. Free public\nWayback CDX API; no auth needed. Useful for OSINT and 'when did this\nsite first appear?'.","operationId":"intel_wayback_endpoint_v1_intel_wayback_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntelWaybackRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Intelligence"]}},"/v1/intel/email-auth":{"post":{"summary":"Intel Email Auth Endpoint","description":"Parse and score SPF, DKIM, DMARC, and BIMI for a domain. All-DNS, no SMTP.","operationId":"intel_email_auth_endpoint_v1_intel_email_auth_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntelEmailAuthRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Intelligence"]}},"/v1/intel/blacklist":{"post":{"summary":"Intel Blacklist Endpoint","description":"Check an IPv4 or domain against major DNSBLs in parallel.","operationId":"intel_blacklist_endpoint_v1_intel_blacklist_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntelBlacklistRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Intelligence"]}},"/v1/intel/dns-propagation":{"post":{"summary":"Intel Dns Propagation Endpoint","description":"Query the same record across N public resolvers; show consistency.","operationId":"intel_dns_propagation_endpoint_v1_intel_dns_propagation_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntelDnsPropagationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Intelligence"]}},"/v1/intel/dnssec":{"post":{"summary":"Intel Dnssec Endpoint","description":"DNSSEC posture: does the domain publish DNSKEY records, has the\nparent delegated DS, did the upstream resolver set AD on a fresh\nlookup? We surface the three discrete observations rather than try\nto give a single 'is it valid' verdict — chain validation has too\nmany edge cases (NSEC3, expired sigs, CDS conventions) to compress\ninto one bit honestly.","operationId":"intel_dnssec_endpoint_v1_intel_dnssec_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntelDnssecRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Intelligence"]}},"/v1/intel/nameservers":{"post":{"summary":"Intel Nameservers Endpoint","description":"Authoritative nameservers for a domain plus the IPv4/IPv6 each\nNS resolves to. Includes a `diversified` boolean — false means all\nNS sit in the same /16 (single-provider, single point of failure).","operationId":"intel_nameservers_endpoint_v1_intel_nameservers_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntelNameserversRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Intelligence"]}},"/v1/intel/caa":{"post":{"summary":"Intel Caa Endpoint","description":"CAA records for a domain: which CAs may issue certs (issue),\nwhich may issue wildcard certs (issuewild), and where security\nincidents should be reported (iodef). Absence = open default\n(any CA may issue). `issue ';'` = closed (no CA may issue).","operationId":"intel_caa_endpoint_v1_intel_caa_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntelCaaRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Intelligence"]}},"/v1/intel/reverse-dns":{"post":{"summary":"Intel Reverse Dns Endpoint","description":"Reverse-DNS (PTR) lookup. IP → hostname. Useful for log\nenrichment, abuse handling, and 'is this an AWS EC2 IP or a\nresidential ISP?' at a glance.","operationId":"intel_reverse_dns_endpoint_v1_intel_reverse_dns_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntelReverseDnsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Intelligence"]}},"/v1/dns/over-https":{"post":{"summary":"Dns Over Https Endpoint","description":"Forward a DNS query through Cloudflare 1.1.1.1 or Google 8.8.8.8\nvia DoH (RFC 8484 JSON encoding). Use when you want a DNS answer\nfrom a specific public resolver without running your own DoH\nclient — handy for privacy-aware lookups or 'what does Cloudflare\nsee vs Google'.","operationId":"dns_over_https_endpoint_v1_dns_over_https_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DnsOverHttpsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Intelligence"]}},"/v1/intel/ip-reputation":{"post":{"summary":"Intel Ip Reputation Endpoint","description":"Classify an IP — datacenter / Tor exit / cloud range. Local DB lookup.","operationId":"intel_ip_reputation_endpoint_v1_intel_ip_reputation_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntelIpReputationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Intelligence"]}},"/v1/intel/whoami":{"get":{"summary":"Intel Whoami Endpoint","description":"What does the internet see about you? Pure request-inspection — the\ncaller's public IP, IP family, geoIP, ASN, datacenter/Tor reputation,\nparsed User-Agent, and a curated echo of the most useful request\nheaders.\n\nAggregator of /v1/intel/geoip + /v1/intel/asn + /v1/intel/ip-reputation\n+ /v1/parse/useragent in one billed call. No outbound network — every\nlookup is against local databases or the request itself.","operationId":"intel_whoami_endpoint_v1_intel_whoami_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Intelligence"]}},"/v1/intel/http-versions":{"post":{"summary":"Intel Http Versions Endpoint","description":"Detect which HTTP versions a URL serves: HTTP/1.1, HTTP/2 (via TLS\nALPN), and HTTP/3 (via Alt-Svc advertisement). Also returns the\nnegotiated ALPN protocol, TLS version, cipher, and HSTS posture\n(max_age + includeSubDomains + preload).\n\nh3_advertised reflects the server's Alt-Svc header — we do not\nactively probe QUIC. h1 + h2 are confirmed at the handshake/HEAD\nlayer. Useful for origin audits (\"is my origin H/3-ready?\") and CDN\nposture checks.","operationId":"intel_http_versions_endpoint_v1_intel_http_versions_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntelHttpVersionsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Intelligence"]}},"/v1/parse/url":{"post":{"summary":"Parse Url Endpoint","operationId":"parse_url_endpoint_v1_parse_url_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParseUrlRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Parsing"]}},"/v1/parse/useragent":{"post":{"summary":"Parse Useragent Endpoint","operationId":"parse_useragent_endpoint_v1_parse_useragent_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParseUserAgentRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Parsing"]}},"/v1/parse/email":{"post":{"summary":"Parse Email Endpoint","operationId":"parse_email_endpoint_v1_parse_email_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParseEmailRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Parsing"]}},"/v1/convert/html-to-markdown":{"post":{"summary":"Html To Markdown Endpoint","description":"Convert raw HTML to clean Markdown. No fetch — the customer supplies\nthe HTML directly. Same converter as the scrape endpoint's markdown\noutput, exposed standalone for LLM/RAG pipelines that already have HTML.","operationId":"html_to_markdown_endpoint_v1_convert_html_to_markdown_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HtmlToMarkdownRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Conversion"]}},"/v1/convert/pdf-to-markdown":{"post":{"summary":"Pdf To Markdown Endpoint","description":"Convert a PDF to Markdown. Customer supplies base64-encoded PDF bytes.\nPage-per-section output. Image-only/scanned PDFs are flagged for OCR.","operationId":"pdf_to_markdown_endpoint_v1_convert_pdf_to_markdown_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PdfToMarkdownRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Conversion"]}},"/v1/convert/docx-to-markdown":{"post":{"summary":"Docx To Markdown Endpoint","description":"Convert a modern Word .docx to Markdown. Preserves heading levels,\nparagraphs, list bullets, table structure. Drops images + comments.","operationId":"docx_to_markdown_endpoint_v1_convert_docx_to_markdown_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocxToMarkdownRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Conversion"]}},"/v1/convert/xlsx-to-markdown":{"post":{"summary":"Xlsx To Markdown Endpoint","description":"Convert an Excel .xlsx workbook to Markdown — one section per sheet,\nformatted as Markdown tables.","operationId":"xlsx_to_markdown_endpoint_v1_convert_xlsx_to_markdown_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/XlsxToMarkdownRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Conversion"]}},"/v1/convert/pptx-to-markdown":{"post":{"summary":"Pptx To Markdown Endpoint","description":"Convert a PowerPoint .pptx deck to Markdown — one section per slide.\nExtracts titles, bullets, and speaker notes. Image-only slides are flagged.","operationId":"pptx_to_markdown_endpoint_v1_convert_pptx_to_markdown_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PptxToMarkdownRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Conversion"]}},"/v1/convert/csv-to-markdown":{"post":{"summary":"Csv To Markdown Endpoint","description":"Convert CSV text (already decoded) into a Markdown table. Delimiter\nauto-detected from , \\t ; | unless overridden.","operationId":"csv_to_markdown_endpoint_v1_convert_csv_to_markdown_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CsvToMarkdownRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Conversion"]}},"/v1/crawl":{"post":{"summary":"Crawl Endpoint","operationId":"crawl_endpoint_v1_crawl_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrawlRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Crawling"]}},"/v1/actors/amazon":{"post":{"summary":"Actor Amazon Endpoint","operationId":"actor_amazon_endpoint_v1_actors_amazon_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActorRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Actors (preview)"]}},"/v1/actors/google-maps":{"post":{"summary":"Actor Google Maps Endpoint","operationId":"actor_google_maps_endpoint_v1_actors_google_maps_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActorRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Actors (preview)"]}},"/v1/actors/markdown":{"post":{"summary":"Actor Markdown Endpoint","operationId":"actor_markdown_endpoint_v1_actors_markdown_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActorRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Actors (preview)"]}},"/v1/actors/zillow":{"post":{"summary":"Actor Zillow Endpoint","operationId":"actor_zillow_endpoint_v1_actors_zillow_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActorRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Actors (preview)"]}},"/v1/actors/ats/supported":{"get":{"tags":["Actors"],"summary":"Actor Ats Supported Endpoint","description":"List ATS providers the partner backend can parse (greenhouse, lever, ...).","operationId":"actor_ats_supported_endpoint_v1_actors_ats_supported_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/actors/ats":{"post":{"tags":["Actors"],"summary":"Actor Ats Endpoint","description":"Fetch a company's open jobs from a specific ATS (greenhouse/lever/...).","operationId":"actor_ats_endpoint_v1_actors_ats_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/actors/ats/detect":{"post":{"tags":["Actors"],"summary":"Actor Ats Detect Endpoint","description":"Probe a company across all supported ATS providers in parallel.","operationId":"actor_ats_detect_endpoint_v1_actors_ats_detect_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/actors/producthunt/daily":{"post":{"tags":["Actors"],"summary":"Actor Producthunt Daily Endpoint","description":"Today's ProductHunt frontpage launches.","operationId":"actor_producthunt_daily_endpoint_v1_actors_producthunt_daily_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/actors/producthunt/product":{"post":{"tags":["Actors"],"summary":"Actor Producthunt Product Endpoint","description":"Detail page for a single ProductHunt product (by slug or url).","operationId":"actor_producthunt_product_endpoint_v1_actors_producthunt_product_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/actors/scholar/search":{"post":{"tags":["Actors"],"summary":"Actor Scholar Search Endpoint","description":"Google Scholar search results for a query.","operationId":"actor_scholar_search_endpoint_v1_actors_scholar_search_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/actors/scholar/author":{"post":{"tags":["Actors"],"summary":"Actor Scholar Author Endpoint","description":"Author profile from Google Scholar (publications, citations, h-index).","operationId":"actor_scholar_author_endpoint_v1_actors_scholar_author_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/actors/scholar/publication":{"post":{"tags":["Actors"],"summary":"Actor Scholar Publication Endpoint","description":"Single publication detail from Google Scholar.","operationId":"actor_scholar_publication_endpoint_v1_actors_scholar_publication_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/actors/jobs/sites":{"get":{"tags":["Actors"],"summary":"Actor Jobs Sites Endpoint","description":"List supported job-board sites (indeed, linkedin, glassdoor, ...).","operationId":"actor_jobs_sites_endpoint_v1_actors_jobs_sites_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/actors/jobs/scrape":{"post":{"tags":["Actors"],"summary":"Actor Jobs Scrape Endpoint","description":"Scrape job listings across one or more sites.","operationId":"actor_jobs_scrape_endpoint_v1_actors_jobs_scrape_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/actors/jobs/sources":{"get":{"tags":["Actors"],"summary":"Actor Jobs Sources Endpoint","description":"List the 4 direct job-source integrations and which are env-configured.\n\nFree (metadata). Each entry shows id, country, configured flag, and\nthe env vars required to enable it. Adzuna additionally lists its\n17 supported country codes.","operationId":"actor_jobs_sources_endpoint_v1_actors_jobs_sources_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/actors/jobs/usajobs":{"post":{"tags":["Actors"],"summary":"Actor Jobs Usajobs Endpoint","description":"US federal jobs via data.usajobs.gov.\n\nBody params:\n  Keyword (str)              — search term\n  LocationName (str)         — e.g. \"Washington, DC\"\n  ResultsPerPage (int 1-500) — default 25\n\nRequires env: USAJOBS_USER_AGENT (email), USAJOBS_API_KEY.","operationId":"actor_jobs_usajobs_endpoint_v1_actors_jobs_usajobs_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/actors/jobs/jobbank":{"post":{"tags":["Actors"],"summary":"Actor Jobs Jobbank Endpoint","description":"Canadian government job listings via jobbank.gc.ca RSS.\n\nBody params:\n  searchstring (str)\n  locationstring (str)\n  limit (int 1-100)          — default 25\n\nNo auth required (public RSS feed).","operationId":"actor_jobs_jobbank_endpoint_v1_actors_jobs_jobbank_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/actors/jobs/reed":{"post":{"tags":["Actors"],"summary":"Actor Jobs Reed Endpoint","description":"UK jobs via Reed.co.uk.\n\nBody params:\n  keywords (str)\n  locationName (str)\n  distanceFromLocation (int) — miles, default 10\n  resultsToTake (int 1-100)  — default 25\n\nRequires env: REED_API_KEY.","operationId":"actor_jobs_reed_endpoint_v1_actors_jobs_reed_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/actors/jobs/adzuna":{"post":{"tags":["Actors"],"summary":"Actor Jobs Adzuna Endpoint","description":"Adzuna aggregator across 17 countries.\n\nBody params:\n  country (str)             — lowercase ISO 3166-1 alpha-2, default 'gb'\n                             (gb/us/ca/au/de/fr/nl/pl/at/ch/it/es/br/in/mx/za/sg)\n  what (str)\n  where (str)\n  results_per_page (int 1-50) — default 25\n\nRequires env: ADZUNA_APP_ID, ADZUNA_APP_KEY.","operationId":"actor_jobs_adzuna_endpoint_v1_actors_jobs_adzuna_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/render":{"post":{"tags":["Actors"],"summary":"Render Endpoint","description":"Render a URL through the qbrowser engine and return HTML + metadata.","operationId":"render_endpoint_v1_render_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/script":{"post":{"tags":["Actors"],"summary":"Script Endpoint","description":"Run a multi-step browser script (click/wait/extract) against a URL.","operationId":"script_endpoint_v1_script_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/session":{"post":{"tags":["Actors"],"summary":"Session Create Endpoint","description":"Open a persistent browser session. Free — billing happens on render/script.","operationId":"session_create_endpoint_v1_session_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/session/{session_id}":{"get":{"tags":["Actors"],"summary":"Session Get Endpoint","description":"Inspect a session's state (engine, age, idle_seconds, last_url).","operationId":"session_get_endpoint_v1_session__session_id__get","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Actors"],"summary":"Session Delete Endpoint","description":"Close a session and free its browser context.","operationId":"session_delete_endpoint_v1_session__session_id__delete","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/session/{session_id}/render":{"post":{"tags":["Actors"],"summary":"Session Render Endpoint","description":"Render a URL inside an existing session (keeps cookies/storage).","operationId":"session_render_endpoint_v1_session__session_id__render_post","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/session/{session_id}/script":{"post":{"tags":["Actors"],"summary":"Session Script Endpoint","description":"Run a script inside an existing session.","operationId":"session_script_endpoint_v1_session__session_id__script_post","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/billing/dodo/checkout":{"post":{"tags":["Billing"],"summary":"Create Dodo Checkout Session","description":"Create a subscription checkout session.\n\nReturns a hosted-page URL the customer should be redirected to. The\nsubscription is fulfilled asynchronously via our internal webhook.\n\nReturns a mock URL when OBSCURA_BILLING_MODE=mock so the dashboard wiring\ncan be tested before keys are minted.\n\nIdempotency: pass `Idempotency-Key: <uuid>` to make this safe to retry —\nreplays within 24 h return the cached checkout URL with\n`Idempotency-Replayed: true`. Without the header, every call creates a\nbrand-new Dodo checkout session.","operationId":"create_dodo_checkout_session_v1_billing_dodo_checkout_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DodoCheckoutRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/billing/dodo/credits/packs":{"get":{"tags":["Billing"],"summary":"List Dodo Credit Packs","description":"List configured pay-as-you-go credit packs (one-time purchases).\n\nReturned shape is purposefully minimal — the dashboard only needs\n{product_id, credits} to render a buy button; price + description\nlive in the Dodo dashboard.","operationId":"list_dodo_credit_packs_v1_billing_dodo_credits_packs_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/billing/dodo/credits/checkout":{"post":{"tags":["Billing"],"summary":"Create Dodo Credits Checkout","description":"Pay-as-you-go: buy a one-time credit pack via Dodo. Returns a\nhosted-page URL the customer is redirected to. Credits are granted\nby the webhook on payment.succeeded — NOT inline here.\n\nUnlike subscription checkout, this does not touch the user's plan.\nA free-tier user can buy a credit pack and stay on free.\n\nIdempotency: pass `Idempotency-Key: <uuid>` to make this safe to retry —\nreplays within 24 h return the cached checkout URL with\n`Idempotency-Replayed: true`.","operationId":"create_dodo_credits_checkout_v1_billing_dodo_credits_checkout_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DodoCreditsCheckoutRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/billing/dodo/subscription":{"get":{"tags":["Billing"],"summary":"Get Dodo Subscription State","description":"Return the user's current Dodo subscription state.\n\nUsed by the dashboard's BillingView to decide whether to render the\n\"Current subscription\" card with a Cancel button (when is_active=true).","operationId":"get_dodo_subscription_state_v1_billing_dodo_subscription_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/billing/dodo/subscription/cancel":{"post":{"tags":["Billing"],"summary":"Cancel Dodo Subscription","description":"Cancel the user's active Dodo subscription at the end of the current\nbilling period. Returns immediately; the plan downgrade is finalised by\nthe `subscription.cancelled` webhook when Dodo fires it.","operationId":"cancel_dodo_subscription_v1_billing_dodo_subscription_cancel_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/billing/dodo/subscription/change-plan":{"post":{"tags":["Billing"],"summary":"Change Dodo Subscription Plan","description":"Change the user's active Dodo subscription to a different plan.\n\n`effective_at=immediately` charges a prorated amount and applies now;\n`next_billing_date` defers the swap to renewal (preferred for\ndowngrades). Final plan state is reconciled via the webhook.","operationId":"change_dodo_subscription_plan_v1_billing_dodo_subscription_change_plan_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DodoChangePlanRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/billing/dodo/portal":{"post":{"tags":["Billing"],"summary":"Open Dodo Customer Portal","description":"Mint a Dodo customer-portal session URL for full self-service.\n\nThe portal is Dodo's hosted surface — supports cancel, plan change,\npayment-method update, and viewing invoices/receipts. Use this in the\ndashboard as the \"Manage billing\" link.","operationId":"open_dodo_customer_portal_v1_billing_dodo_portal_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/signup":{"post":{"summary":"Auth Signup","operationId":"auth_signup_v1_auth_signup_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Authentication"],"security":[]}},"/v1/auth/verify":{"get":{"summary":"Auth Verify Email","description":"Email-verification link target. Flips the account to verified so its\nAPI key starts working.","operationId":"auth_verify_email_v1_auth_verify_get","parameters":[{"name":"token","in":"query","required":false,"schema":{"type":"string","default":"","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Authentication"],"security":[]}},"/v1/auth/login":{"post":{"summary":"Auth Login","description":"Verify password. Returns the user's API key prefix as a hint —\nthe raw key is not recoverable (we only store its hash). Users who\nhave lost their key should rotate via a future /v1/keys/rotate\nendpoint.","operationId":"auth_login_v1_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Authentication"],"security":[]}},"/v1/auth/keys":{"post":{"summary":"Auth Login And Mint Key","description":"Verify email+password and mint a fresh API key tagged 'dashboard'.\n\nUsed by the dashboard login flow so users can sign in with their password\nrather than pasting an osk_ key. Each call mints a NEW key (we don't store\nraw keys, only hashes); the previous key remains valid until explicitly\nrevoked. Returns {api_key, user} on success.","operationId":"auth_login_and_mint_key_v1_auth_keys_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Authentication"]}},"/v1/auth/me":{"get":{"summary":"Auth Me","description":"Dashboard's account-info endpoint. Uses get_api_key (auth only) rather\nthan check_limits so the dashboard polling for stats doesn't burn the\nuser's monthly quota.","operationId":"auth_me_v1_auth_me_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Authentication"]}}},"components":{"schemas":{"ActorRequest":{"properties":{"url":{"type":"string","title":"Url"},"stealth":{"type":"boolean","title":"Stealth","default":true},"proxy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proxy"}},"type":"object","required":["url"],"title":"ActorRequest"},"AeoAiBotAllowlistRequest":{"properties":{"domain":{"type":"string","title":"Domain","description":"Domain or origin to inspect — qcrawl.com, https://ollagraph.com, or example.org all accepted."}},"type":"object","required":["domain"],"title":"AeoAiBotAllowlistRequest","examples":[{"domain":"ollagraph.com"},{"domain":"anthropic.com"}]},"AeoCitationReadinessRequest":{"properties":{"url":{"type":"string","title":"Url","description":"Page URL to score against the post-ChatGPT EEAT signals."},"use_residential_proxy":{"type":"boolean","title":"Use Residential Proxy","description":"When True, routes the fetch through our premium residential proxy pool. Use for sites with strict access controls. Bills +3 credits.","default":false}},"type":"object","required":["url"],"title":"AeoCitationReadinessRequest","examples":[{"url":"https://ollagraph.com/architecture/"},{"url":"https://www.nytimes.com/","use_residential_proxy":true}]},"AeoCompetitorDiffRequest":{"properties":{"urls":{"items":{"type":"string"},"type":"array","maxItems":5,"minItems":2,"title":"Urls","description":"2–5 URLs. First entry is treated as 'your' page; the rest are competitors. Bills 3 credits regardless of count."}},"type":"object","required":["urls"],"title":"AeoCompetitorDiffRequest","examples":[{"urls":["https://ollagraph.com/docs/intel-geoip/","https://ipinfo.io/","https://ipapi.co/"]}]},"AeoLlmFetchSimulatorRequest":{"properties":{"url":{"type":"string","title":"Url","description":"Page URL to fetch as each of 11 named AI crawlers (plus a browser baseline)."}},"type":"object","required":["url"],"title":"AeoLlmFetchSimulatorRequest","examples":[{"url":"https://ollagraph.com/"}]},"AeoLlmsTxtAuditRequest":{"properties":{"domain":{"type":"string","title":"Domain","description":"Domain to inspect for an llms.txt file at /llms.txt."}},"type":"object","required":["domain"],"title":"AeoLlmsTxtAuditRequest","examples":[{"domain":"ollagraph.com"}]},"AeoPageAuditRequest":{"properties":{"url":{"type":"string","title":"Url","description":"Page URL to run the full AEO audit on. Bills 3 credits — runs 9 component probes in parallel."}},"type":"object","required":["url"],"title":"AeoPageAuditRequest","examples":[{"url":"https://ollagraph.com/architecture/"}]},"AeoSchemaCoverageRequest":{"properties":{"url":{"type":"string","title":"Url","description":"Page URL to inspect for JSON-LD / OpenGraph / Microdata coverage."},"use_residential_proxy":{"type":"boolean","title":"Use Residential Proxy","description":"When True, fetches with JS rendering through our premium proxy pool — sees JSON-LD that's hydrated client-side on Next.js / SvelteKit sites. Bills +3 credits.","default":false}},"type":"object","required":["url"],"title":"AeoSchemaCoverageRequest","examples":[{"url":"https://ollagraph.com/architecture/"},{"url":"https://docs.stripe.com/api","use_residential_proxy":true}]},"AnchorTextAuditRequest":{"properties":{"url":{"type":"string","title":"Url","description":"Page to audit anchor text on."}},"type":"object","required":["url"],"title":"AnchorTextAuditRequest","examples":[{"url":"https://en.wikipedia.org/wiki/SEO"}]},"AsnRequest":{"properties":{"asn":{"type":"integer","exclusiveMinimum":0.0,"title":"Asn","description":"ASN number, without the 'AS' prefix. E.g. 15169 for Google."}},"type":"object","required":["asn"],"title":"AsnRequest","examples":[{"asn":15169},{"asn":13335}]},"AsyncBatchScrapeRequest":{"properties":{"urls":{"items":{"type":"string"},"type":"array","maxItems":100,"minItems":1,"title":"Urls"},"concurrency":{"type":"integer","title":"Concurrency","default":5},"format":{"type":"string","title":"Format","default":"markdown"},"js_eval":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Js Eval"},"actions":{"anyOf":[{"items":{"type":"object"},"type":"array","maxItems":50},{"type":"null"}],"title":"Actions"},"timeout":{"type":"integer","title":"Timeout","default":120},"stealth":{"type":"boolean","title":"Stealth","default":true},"proxy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proxy"},"webhook_url":{"anyOf":[{"type":"string","maxLength":2083,"minLength":1,"format":"uri"},{"type":"null"}],"title":"Webhook Url"}},"type":"object","required":["urls"],"title":"AsyncBatchScrapeRequest","examples":[{"format":"markdown","urls":["https://a.example.com","https://b.example.com"],"webhook_url":"https://yourapp.com/qcrawl-callback"}]},"AsyncScrapeRequest":{"properties":{"url":{"type":"string","title":"Url"},"webhook_url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"Webhook Url"},"format":{"type":"string","title":"Format","default":"markdown"},"js_eval":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Js Eval"},"actions":{"anyOf":[{"items":{"type":"object"},"type":"array","maxItems":50},{"type":"null"}],"title":"Actions"},"stealth":{"type":"boolean","title":"Stealth","default":true},"timeout":{"type":"integer","title":"Timeout","default":30},"proxy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proxy"}},"type":"object","required":["url","webhook_url"],"title":"AsyncScrapeRequest","examples":[{"format":"markdown","url":"https://example.com","webhook_url":"https://yourapp.com/qcrawl-callback"}]},"BatchScrapeRequest":{"properties":{"urls":{"items":{"type":"string"},"type":"array","maxItems":100,"minItems":1,"title":"Urls"},"concurrency":{"type":"integer","title":"Concurrency","default":5},"format":{"type":"string","title":"Format","default":"markdown"},"js_eval":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Js Eval"},"actions":{"anyOf":[{"items":{"type":"object"},"type":"array","maxItems":50},{"type":"null"}],"title":"Actions"},"timeout":{"type":"integer","title":"Timeout","default":120},"stealth":{"type":"boolean","title":"Stealth","default":true},"proxy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proxy"}},"type":"object","required":["urls"],"title":"BatchScrapeRequest","examples":[{"concurrency":5,"format":"markdown","urls":["https://a.example.com","https://b.example.com"]}]},"BrokenLinksAuditRequest":{"properties":{"url":{"type":"string","title":"Url","description":"Page to scan for broken outbound + internal links."},"max_links":{"type":"integer","maximum":200.0,"minimum":1.0,"title":"Max Links","description":"Cap on number of links probed.","default":50},"concurrency":{"type":"integer","maximum":24.0,"minimum":1.0,"title":"Concurrency","description":"Parallel HEAD probes.","default":8},"timeout_seconds":{"type":"number","maximum":30.0,"minimum":1.0,"title":"Timeout Seconds","default":8.0}},"type":"object","required":["url"],"title":"BrokenLinksAuditRequest","examples":[{"max_links":25,"url":"https://ollagraph.com/"}]},"CaptchaAutoSolveRequest":{"properties":{"url":{"type":"string","title":"Url"},"action":{"type":"string","title":"Action","default":"submit"},"proxy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proxy"}},"type":"object","required":["url"],"title":"CaptchaAutoSolveRequest","examples":[{"action":"submit","url":"https://example.com/protected"}]},"CaptchaSolveRequest":{"properties":{"site_key":{"type":"string","title":"Site Key"},"site_url":{"type":"string","title":"Site Url"},"action":{"type":"string","title":"Action","default":"submit"},"proxy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proxy"}},"type":"object","required":["site_key","site_url"],"title":"CaptchaSolveRequest","examples":[{"action":"submit","site_key":"6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI","site_url":"https://www.google.com/recaptcha/api2/demo"}]},"CertTransparencyRequest":{"properties":{"domain":{"type":"string","title":"Domain","description":"Domain to query for every cert ever issued (incl. subdomains)."}},"type":"object","required":["domain"],"title":"CertTransparencyRequest","examples":[{"domain":"ollagraph.com"},{"domain":"github.com"}]},"ChangePasswordRequest":{"properties":{"current_password":{"type":"string","title":"Current Password"},"new_password":{"type":"string","title":"New Password"}},"type":"object","required":["current_password","new_password"],"title":"ChangePasswordRequest"},"ConvertOcrRequest":{"properties":{"image_b64":{"type":"string","title":"Image B64","description":"Base64-encoded image bytes (PNG / JPEG / WebP / BMP / TIFF). Max 15 MB after decode."},"return_boxes":{"type":"boolean","title":"Return Boxes","description":"When True, return bounding boxes + per-region confidence scores alongside the text.","default":false}},"type":"object","required":["image_b64"],"title":"ConvertOcrRequest","examples":[{"image_b64":"iVBORw0KGgoAAAANSUhEUg...","return_boxes":false}]},"CostEstimateRequest":{"properties":{"endpoint":{"type":"string","title":"Endpoint","description":"API path, e.g. '/v1/scrape'."},"use_residential_proxy":{"type":"boolean","title":"Use Residential Proxy","description":"Adds the +3-credit residential-proxy surcharge applied to the AEO/SEO endpoints when the customer opts into Spider's residential pool.","default":false}},"type":"object","required":["endpoint"],"title":"CostEstimateRequest","examples":[{"endpoint":"/v1/scrape"},{"endpoint":"/v1/aeo/page-audit","use_residential_proxy":true}]},"CrawlRequest":{"properties":{"url":{"type":"string","title":"Url"},"max_pages":{"type":"integer","title":"Max Pages","default":500},"depth":{"type":"integer","title":"Depth","default":3},"concurrency":{"type":"integer","title":"Concurrency","default":10},"respect_robots":{"type":"boolean","title":"Respect Robots","default":true},"webhook_url":{"anyOf":[{"type":"string","maxLength":2083,"minLength":1,"format":"uri"},{"type":"null"}],"title":"Webhook Url"}},"type":"object","required":["url"],"title":"CrawlRequest","examples":[{"depth":3,"max_pages":500,"url":"https://docs.example.com"}]},"CreateKeyRequest":{"properties":{"label":{"type":"string","title":"Label","default":"user-created"}},"type":"object","title":"CreateKeyRequest"},"CsvToMarkdownRequest":{"properties":{"csv_text":{"type":"string","title":"Csv Text","description":"Raw CSV text (already decoded). Delimiter auto-detected from , \\t ; |"},"delimiter":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Delimiter","description":"Override delimiter. Default: auto-detect."},"max_rows":{"type":"integer","maximum":50000.0,"minimum":1.0,"title":"Max Rows","description":"Cap on rows rendered; past 5000 a Markdown table is rarely useful.","default":5000}},"type":"object","required":["csv_text"],"title":"CsvToMarkdownRequest","examples":[{"csv_text":"name,age,city\\nAlice,30,Bangalore\\nBob,25,Mumbai"}]},"DnsIntelRequest":{"properties":{"domain":{"type":"string","title":"Domain"}},"type":"object","required":["domain"],"title":"DnsIntelRequest","examples":[{"domain":"anthropic.com"}]},"DnsLookupRequest":{"properties":{"domain":{"type":"string","title":"Domain"},"records":{"items":{"type":"string"},"type":"array","title":"Records","default":["A","MX","TXT"]}},"type":"object","required":["domain"],"title":"DnsLookupRequest","examples":[{"domain":"anthropic.com","records":["A","MX","TXT"]}]},"DnsOverHttpsRequest":{"properties":{"domain":{"type":"string","title":"Domain","description":"Domain to resolve via DoH."},"record_type":{"type":"string","title":"Record Type","description":"DNS record type. A, AAAA, MX, TXT, NS, CNAME, SOA, CAA, PTR, SRV, DNSKEY, DS.","default":"A"},"resolver":{"type":"string","title":"Resolver","description":"Which DoH resolver to use: 'cloudflare' (1.1.1.1) or 'google' (8.8.8.8).","default":"cloudflare"}},"type":"object","required":["domain"],"title":"DnsOverHttpsRequest","examples":[{"domain":"anthropic.com","record_type":"A","resolver":"cloudflare"},{"domain":"anthropic.com","record_type":"MX","resolver":"google"}]},"DocxToMarkdownRequest":{"properties":{"docx_base64":{"type":"string","title":"Docx Base64","description":"Base64-encoded .docx (modern Word) bytes. Legacy .doc binary not supported."}},"type":"object","required":["docx_base64"],"title":"DocxToMarkdownRequest","examples":[{"docx_base64":"<base64-encoded-docx>"}]},"DodoChangePlanRequest":{"properties":{"plan":{"type":"string","enum":["tiny","small","medium","large"],"title":"Plan","description":"Target subscription plan"},"effective_at":{"type":"string","enum":["immediately","next_billing_date"],"title":"Effective At","description":"When the change takes effect","default":"immediately"}},"type":"object","required":["plan"],"title":"DodoChangePlanRequest","examples":[{"effective_at":"immediately","plan":"medium"}]},"DodoCheckoutRequest":{"properties":{"plan":{"type":"string","title":"Plan","description":"Plan to subscribe to. Must be a key in DODO_PLAN_PRODUCT_MAP (typically: tiny | small | medium | large).","default":"small","examples":["small"]},"country":{"anyOf":[{"type":"string","maxLength":2,"minLength":2,"pattern":"^[A-Z]{2}$"},{"type":"null"}],"title":"Country","description":"ISO 3166-1 alpha-2 country code (e.g. 'US', 'GB', 'DE'). Omit to let the customer fill it in on Dodo's hosted page."}},"type":"object","title":"DodoCheckoutRequest","examples":[{"plan":"small"},{"country":"US","plan":"medium"}]},"DodoCreditsCheckoutRequest":{"properties":{"product_id":{"type":"string","title":"Product Id","description":"Dodo product_id for the credit pack to purchase. Must be a key in DODO_PAYG_PRODUCT_MAP.","examples":["prod_aaa"]},"country":{"anyOf":[{"type":"string","maxLength":2,"minLength":2,"pattern":"^[A-Z]{2}$"},{"type":"null"}],"title":"Country","description":"ISO 3166-1 alpha-2 country code (e.g. 'US', 'GB', 'DE'). Omit to let the customer fill it in on Dodo's hosted page."}},"type":"object","required":["product_id"],"title":"DodoCreditsCheckoutRequest","examples":[{"product_id":"prod_aaa"},{"country":"GB","product_id":"prod_aaa"}]},"EmailVerifyRequest":{"properties":{"email":{"type":"string","title":"Email"}},"type":"object","required":["email"],"title":"EmailVerifyRequest","examples":[{"email":"you@example.com"}]},"EnrichCompanyRequest":{"properties":{"url":{"type":"string","title":"Url","description":"Company URL — typically a homepage or /about page. We extract JSON-LD Organization, og:* tags, social anchors, contact patterns."},"use_residential_proxy":{"type":"boolean","title":"Use Residential Proxy","description":"When True, fetches with JS rendering through our premium proxy pool. Use for sites whose JSON-LD is injected client-side. Bills +3 credits.","default":false}},"type":"object","required":["url"],"title":"EnrichCompanyRequest","examples":[{"url":"https://stripe.com/"},{"url":"https://www.anthropic.com/","use_residential_proxy":true}]},"ExtractContactsRequest":{"properties":{"text":{"type":"string","title":"Text","description":"Text or HTML blob. Auto-detected. Body limit is 1 MB."},"include_phones":{"type":"boolean","title":"Include Phones","default":true},"include_socials":{"type":"boolean","title":"Include Socials","default":true}},"type":"object","required":["text"],"title":"ExtractContactsRequest","examples":[{"text":"Reach us at sales@example.com or +1 (415) 555-0142. We're on https://twitter.com/example and https://linkedin.com/in/jane-doe."}]},"ExtractRequest":{"properties":{"url":{"type":"string","title":"Url"},"stealth":{"type":"boolean","title":"Stealth","default":true},"timeout":{"type":"integer","title":"Timeout","default":30},"proxy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proxy"}},"type":"object","required":["url"],"title":"ExtractRequest","examples":[{"url":"https://en.wikipedia.org/wiki/Web_scraping"}]},"ExtractTablesRequest":{"properties":{"html":{"type":"string","title":"Html","description":"HTML blob containing one or more <table> elements. Body limit is 1 MB."},"min_rows":{"type":"integer","minimum":0.0,"title":"Min Rows","description":"Skip tables with fewer rows than this.","default":1},"min_columns":{"type":"integer","minimum":0.0,"title":"Min Columns","description":"Skip tables with fewer columns than this.","default":1}},"type":"object","required":["html"],"title":"ExtractTablesRequest","examples":[{"html":"<table><thead><tr><th>City</th><th>Pop</th></tr></thead><tbody><tr><td>Bangalore</td><td>13M</td></tr><tr><td>Mumbai</td><td>20M</td></tr></tbody></table>"}]},"ForwarderCreateRequest":{"properties":{"vendor":{"type":"string","title":"Vendor","description":"One of: betterstack, logfire, honeycomb, axiom, grafana_cloud, datadog, newrelic, otlp"},"endpoint_url":{"type":"string","title":"Endpoint Url","description":"Full OTLP HTTP endpoint URL, e.g. https://in.logs.betterstack.com"},"auth_header_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auth Header Name","description":"HTTP header name to set (e.g. 'Authorization' or 'DD-API-KEY')"},"auth_header_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auth Header Value","description":"HTTP header value. Stored encrypted at rest. Never returned via the API."},"data_types":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Data Types","description":"Subset of ['traces','metrics','logs']. Defaults to ['traces']."}},"type":"object","required":["vendor","endpoint_url"],"title":"ForwarderCreateRequest","examples":[{"auth_header_name":"Authorization","auth_header_value":"Bearer xxx","endpoint_url":"https://in.logs.betterstack.com","vendor":"betterstack"},{"auth_header_name":"Authorization","auth_header_value":"Bearer pylf_v1_xxx","endpoint_url":"https://logfire-api.pydantic.dev","vendor":"logfire"},{"auth_header_name":"x-honeycomb-team","auth_header_value":"hcaik_xxx","endpoint_url":"https://api.honeycomb.io","vendor":"honeycomb"},{"auth_header_name":"Authorization","auth_header_value":"Bearer xaat-xxx","endpoint_url":"https://api.axiom.co","vendor":"axiom"}]},"FreshnessSignalRequest":{"properties":{"url":{"type":"string","title":"Url","description":"Page URL to audit for freshness signals."}},"type":"object","required":["url"],"title":"FreshnessSignalRequest","examples":[{"url":"https://en.wikipedia.org/wiki/Retrieval-augmented_generation"}]},"GeoIpBulkRequest":{"properties":{"ips":{"items":{"type":"string"},"type":"array","maxItems":100,"minItems":1,"title":"Ips","description":"List of IPv4/IPv6 addresses. Max 100 per request."}},"type":"object","required":["ips"],"title":"GeoIpBulkRequest","examples":[{"ips":["8.8.8.8","1.1.1.1","208.67.222.222"]}]},"GeoIpRequest":{"properties":{"ip":{"type":"string","title":"Ip"}},"type":"object","required":["ip"],"title":"GeoIpRequest","examples":[{"ip":"8.8.8.8"}]},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HeadingHierarchyRequest":{"properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url","description":"URL to fetch and analyse."},"html":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Html","description":"HTML to analyse in place of fetching a URL."}},"type":"object","title":"HeadingHierarchyRequest","examples":[{"url":"https://ollagraph.com/capabilities"}]},"HtmlToMarkdownRequest":{"properties":{"html":{"type":"string","title":"Html","description":"The HTML to convert. Max 1 MB body."},"heading_style":{"type":"string","title":"Heading Style","description":"ATX (#), ATX_CLOSED (# ... #), or UNDERLINED (===).","default":"ATX"},"strip_tags":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":50},{"type":"null"}],"title":"Strip Tags","description":"Extra tag names to drop entirely. script and style are always dropped."},"include_links":{"type":"boolean","title":"Include Links","default":true},"include_images":{"type":"boolean","title":"Include Images","default":false}},"type":"object","required":["html"],"title":"HtmlToMarkdownRequest","examples":[{"html":"<article><h1>Hello</h1><p>This is <a href=\"/x\">linked</a> text.</p><script>alert(1)</script></article>"},{"html":"<h2>Doc</h2><p>Drop links.</p><a href=\"/y\">y</a>","include_links":false}]},"IntelBlacklistRequest":{"properties":{"target":{"type":"string","title":"Target","description":"IPv4 address or domain to check."}},"type":"object","required":["target"],"title":"IntelBlacklistRequest","examples":[{"target":"8.8.8.8"},{"target":"spamhaus.org"}]},"IntelCaaRequest":{"properties":{"domain":{"type":"string","title":"Domain","description":"Apex domain. Returns its CAA records and which CAs may issue certs."}},"type":"object","required":["domain"],"title":"IntelCaaRequest","examples":[{"domain":"google.com"}]},"IntelCookiesRequest":{"properties":{"url":{"type":"string","title":"Url","description":"URL to fetch. Returns the Set-Cookie response headers parsed by RFC 6265 grammar."}},"type":"object","required":["url"],"title":"IntelCookiesRequest","examples":[{"url":"https://www.bbc.com/"}]},"IntelDnsPropagationRequest":{"properties":{"domain":{"type":"string","title":"Domain","description":"Domain to query across public resolvers."},"record_type":{"type":"string","title":"Record Type","description":"DNS record type: A, AAAA, MX, TXT, NS, CNAME, or SOA.","default":"A"}},"type":"object","required":["domain"],"title":"IntelDnsPropagationRequest","examples":[{"domain":"ollagraph.com","record_type":"A"}]},"IntelDnssecRequest":{"properties":{"domain":{"type":"string","title":"Domain","description":"Apex domain to probe for DNSSEC posture (DNSKEY + DS + AD-bit)."}},"type":"object","required":["domain"],"title":"IntelDnssecRequest","examples":[{"domain":"cloudflare.com"},{"domain":"example.com"},{"domain":"anthropic.com"}]},"IntelDomainRequest":{"properties":{"domain":{"type":"string","title":"Domain"}},"type":"object","required":["domain"],"title":"IntelDomainRequest","examples":[{"domain":"anthropic.com"}]},"IntelEmailAuthRequest":{"properties":{"domain":{"type":"string","title":"Domain","description":"Domain to inspect — e.g. example.com."}},"type":"object","required":["domain"],"title":"IntelEmailAuthRequest","examples":[{"domain":"google.com"},{"domain":"anthropic.com"}]},"IntelHeadersRequest":{"properties":{"url":{"type":"string","title":"Url","description":"URL to fetch. Must include scheme."}},"type":"object","required":["url"],"title":"IntelHeadersRequest","examples":[{"url":"https://anthropic.com"}]},"IntelHttpVersionsRequest":{"properties":{"url":{"type":"string","title":"Url","description":"An https:// URL to probe for HTTP/1.1, HTTP/2, and HTTP/3-advertised support."}},"type":"object","required":["url"],"title":"IntelHttpVersionsRequest","examples":[{"url":"https://cloudflare.com"},{"url":"https://example.com"}]},"IntelIpReputationRequest":{"properties":{"ip":{"type":"string","title":"Ip","description":"Public IPv4 or IPv6 address to classify."}},"type":"object","required":["ip"],"title":"IntelIpReputationRequest","examples":[{"ip":"8.8.8.8"},{"ip":"23.92.16.1"}]},"IntelNameserversRequest":{"properties":{"domain":{"type":"string","title":"Domain","description":"Apex domain. Returns its NS records plus the IPv4/IPv6 each NS resolves to."}},"type":"object","required":["domain"],"title":"IntelNameserversRequest","examples":[{"domain":"anthropic.com"}]},"IntelRedirectsRequest":{"properties":{"url":{"type":"string","title":"Url","description":"URL whose redirect chain you want to trace."}},"type":"object","required":["url"],"title":"IntelRedirectsRequest","examples":[{"url":"https://bit.ly/anthropic"}]},"IntelReverseDnsRequest":{"properties":{"ip":{"type":"string","title":"Ip","description":"An IPv4 or IPv6 address. Returns its PTR hostname if one is configured."}},"type":"object","required":["ip"],"title":"IntelReverseDnsRequest","examples":[{"ip":"1.1.1.1"},{"ip":"8.8.8.8"}]},"IntelRobotsRequest":{"properties":{"url":{"type":"string","title":"Url"},"user_agent":{"type":"string","title":"User Agent","default":"*"}},"type":"object","required":["url"],"title":"IntelRobotsRequest","examples":[{"url":"https://anthropic.com/pricing","user_agent":"*"}]},"IntelSecurityTxtRequest":{"properties":{"url":{"type":"string","title":"Url","description":"Any URL on the target — we derive the origin and probe /.well-known/security.txt then /security.txt."}},"type":"object","required":["url"],"title":"IntelSecurityTxtRequest","examples":[{"url":"https://google.com"}]},"IntelSocialTagsRequest":{"properties":{"url":{"type":"string","title":"Url","description":"Page to fetch. Returns Open Graph + Twitter Card + canonical + title + icons + lang + theme color."}},"type":"object","required":["url"],"title":"IntelSocialTagsRequest","examples":[{"url":"https://anthropic.com"}]},"IntelSriAuditRequest":{"properties":{"url":{"type":"string","title":"Url","description":"Page to fetch. Lists external scripts + stylesheets and flags which lack Subresource Integrity (SRI) pinning."}},"type":"object","required":["url"],"title":"IntelSriAuditRequest","examples":[{"url":"https://news.ycombinator.com"}]},"IntelUptimeRequest":{"properties":{"url":{"type":"string","title":"Url","description":"URL to probe."}},"type":"object","required":["url"],"title":"IntelUptimeRequest","examples":[{"url":"https://ollagraph.com"}]},"IntelUrlRequest":{"properties":{"url":{"type":"string","title":"Url"}},"type":"object","required":["url"],"title":"IntelUrlRequest","examples":[{"url":"https://anthropic.com"}]},"IntelWafRequest":{"properties":{"url":{"type":"string","title":"Url","description":"URL to probe. Detects Cloudflare/Akamai/Fastly/AWS WAF/Imperva/Sucuri/F5/ModSecurity/etc. from headers + body patterns."}},"type":"object","required":["url"],"title":"IntelWafRequest","examples":[{"url":"https://cloudflare.com"}]},"IntelWaybackRequest":{"properties":{"url":{"type":"string","title":"Url","description":"URL to look up in the Wayback Machine. Returns the first and last archived snapshot."}},"type":"object","required":["url"],"title":"IntelWaybackRequest","examples":[{"url":"https://anthropic.com"}]},"KeywordExtractRequest":{"properties":{"text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Text","description":"Plain text to extract keywords from. Provide either `text` or `url`."},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url","description":"URL to fetch — we'll extract the clean article body and run TextRank over it."},"top_k":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Top K","description":"How many top keywords + phrases to return.","default":20}},"type":"object","title":"KeywordExtractRequest","examples":[{"text":"Retrieval-augmented generation (RAG) is a technique that enables large language models (LLMs) to retrieve and incorporate new information from external data sources."},{"top_k":30,"url":"https://en.wikipedia.org/wiki/Retrieval-augmented_generation"}]},"LlmReadyRequest":{"properties":{"url":{"type":"string","title":"Url","description":"URL to fetch and chunk for RAG ingest."},"max_tokens":{"type":"integer","maximum":4096.0,"minimum":64.0,"title":"Max Tokens","description":"Target token budget per chunk. Default 512 (fits comfortably in embedding context windows).","default":512},"overlap_tokens":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Overlap Tokens","description":"Tokens to overlap between adjacent chunks. Default 15% of max_tokens."}},"type":"object","required":["url"],"title":"LlmReadyRequest","examples":[{"max_tokens":512,"url":"https://ollagraph.com/docs"},{"max_tokens":1024,"overlap_tokens":128,"url":"https://en.wikipedia.org/wiki/Retrieval-augmented_generation"}]},"LoginRequest":{"properties":{"email":{"type":"string","title":"Email"},"password":{"type":"string","title":"Password"}},"type":"object","required":["email","password"],"title":"LoginRequest"},"MixedContentRequest":{"properties":{"url":{"type":"string","title":"Url","description":"HTTPS URL to audit for HTTP subresources."}},"type":"object","required":["url"],"title":"MixedContentRequest","examples":[{"url":"https://ollagraph.com/"}]},"ParseEmailRequest":{"properties":{"email":{"type":"string","title":"Email"}},"type":"object","required":["email"],"title":"ParseEmailRequest","examples":[{"email":"Alex.B+work@gmail.com"}]},"ParseUrlRequest":{"properties":{"url":{"type":"string","title":"Url"}},"type":"object","required":["url"],"title":"ParseUrlRequest","examples":[{"url":"https://shop.example.co.uk/products/item?ref=ad&utm_source=fb#reviews"}]},"ParseUserAgentRequest":{"properties":{"user_agent":{"type":"string","title":"User Agent"}},"type":"object","required":["user_agent"],"title":"ParseUserAgentRequest","examples":[{"user_agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 17_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4 Mobile/15E148 Safari/604.1"}]},"PdfToMarkdownRequest":{"properties":{"pdf_base64":{"type":"string","title":"Pdf Base64","description":"Base64-encoded PDF bytes. 1 MB body cap = ~750 KB raw PDF."},"max_pages":{"type":"integer","maximum":500.0,"minimum":1.0,"title":"Max Pages","description":"Maximum pages to process; defaults to 200.","default":200}},"type":"object","required":["pdf_base64"],"title":"PdfToMarkdownRequest","examples":[{"max_pages":50,"pdf_base64":"<base64-encoded-pdf>"}]},"PptxToMarkdownRequest":{"properties":{"pptx_base64":{"type":"string","title":"Pptx Base64","description":"Base64-encoded .pptx PowerPoint bytes. Extracts titles, bullets, speaker notes. Image-only slides are flagged."}},"type":"object","required":["pptx_base64"],"title":"PptxToMarkdownRequest","examples":[{"pptx_base64":"<base64-encoded-pptx>"}]},"RedirectChainMapRequest":{"properties":{"url":{"type":"string","title":"Url","description":"Starting URL. We trace the full chain to the final destination."}},"type":"object","required":["url"],"title":"RedirectChainMapRequest","examples":[{"url":"http://github.com"},{"url":"https://bit.ly/3xyz"}]},"SchemaValidateRequest":{"properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url","description":"URL to fetch and validate JSON-LD on."},"html":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Html","description":"HTML to validate in place of fetching a URL."}},"type":"object","title":"SchemaValidateRequest","examples":[{"url":"https://schema.org/Product"}]},"ScrapeRequest":{"properties":{"url":{"type":"string","title":"Url"},"format":{"type":"string","title":"Format","default":"markdown"},"js_eval":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Js Eval"},"actions":{"anyOf":[{"items":{"type":"object"},"type":"array","maxItems":50},{"type":"null"}],"title":"Actions"},"wait_until":{"type":"string","title":"Wait Until","default":"load"},"stealth":{"type":"boolean","title":"Stealth","default":true},"timeout":{"type":"integer","title":"Timeout","default":30},"proxy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proxy"},"user_agent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Agent"},"solve_captcha":{"type":"boolean","title":"Solve Captcha","default":false},"captcha_action":{"type":"string","title":"Captcha Action","default":"submit"}},"type":"object","required":["url"],"title":"ScrapeRequest","examples":[{"format":"markdown","url":"https://example.com"},{"actions":[{"selector":".load-more","type":"click"},{"ms":1500,"type":"wait"}],"format":"html","url":"https://example.com/spa","wait_until":"networkidle0"}]},"SeoMetaAuditRequest":{"properties":{"url":{"type":"string","title":"Url","description":"Page URL to audit."},"use_residential_proxy":{"type":"boolean","title":"Use Residential Proxy","description":"When True, routes through our premium residential proxy pool to reach sites that block standard datacenter fetches. Bills +3 credits.","default":false}},"type":"object","required":["url"],"title":"SeoMetaAuditRequest","examples":[{"url":"https://ollagraph.com/architecture/"}]},"SeoReadabilityRequest":{"properties":{"text":{"type":"string","title":"Text","description":"Plain text (or text content extracted from HTML) to score for readability. Minimum 5 words."}},"type":"object","required":["text"],"title":"SeoReadabilityRequest","examples":[{"text":"Qcrawl returns clean structured data from any URL. Send a URL, pick a format, get back markdown, HTML, plain text, or links. Free tier covers 1,000 requests every month with no credit card required."}]},"SeoSnippetCandidatesRequest":{"properties":{"html":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Html","description":"HTML to extract candidates from. Provide either `html` or `url`. Body limit 1 MB."},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url","description":"Alternative: page URL to fetch and analyse. When supplied with `use_residential_proxy=true`, fetches with JS rendering — finds snippet candidates on JS-hydrated docs sites that have 0 <p> tags in their server-rendered HTML."},"use_residential_proxy":{"type":"boolean","title":"Use Residential Proxy","description":"Only meaningful when `url` is supplied. Routes the fetch through our premium proxy pool with JS rendering. Bills +3 credits.","default":false},"max_per_kind":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Max Per Kind","description":"Cap per kind (paragraphs / lists / tables).","default":5}},"type":"object","title":"SeoSnippetCandidatesRequest","examples":[{"html":"<article><h2>How big is the free tier?</h2><p>The free tier covers 1,000 requests per month across every endpoint. No credit card is required at signup, and credits do not roll over between billing periods. Upgrade only when you need more.</p></article>"},{"url":"https://docs.stripe.com/api","use_residential_proxy":true}]},"SignupRequest":{"properties":{"email":{"type":"string","title":"Email"},"password":{"type":"string","title":"Password"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","default":""}},"type":"object","required":["email","password"],"title":"SignupRequest"},"SmartScrapeRequest":{"properties":{"url":{"type":"string","title":"Url"},"format":{"type":"string","title":"Format","default":"markdown"},"stealth":{"type":"boolean","title":"Stealth","default":true},"timeout":{"type":"integer","title":"Timeout","default":30},"proxy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proxy"},"actions":{"anyOf":[{"items":{"type":"object"},"type":"array","maxItems":50},{"type":"null"}],"title":"Actions"}},"type":"object","required":["url"],"title":"SmartScrapeRequest","examples":[{"format":"markdown","url":"https://example.com"}]},"SnippetFormatDetectRequest":{"properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url","description":"URL to fetch and analyse. Provide either `url` or `html`."},"html":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Html","description":"HTML to analyse in place of fetching a URL."}},"type":"object","title":"SnippetFormatDetectRequest","examples":[{"url":"https://ollagraph.com/docs"}]},"SubdomainEnumerateRequest":{"properties":{"domain":{"type":"string","title":"Domain","description":"Apex domain to enumerate. We query Certificate Transparency logs (crt.sh) for every cert ever issued under it, then dedupe the SAN list."},"max_results":{"type":"integer","maximum":5000.0,"minimum":1.0,"title":"Max Results","description":"Hard cap on returned subdomains. Most companies fit under 500; large orgs (google, microsoft) need a higher cap.","default":500}},"type":"object","required":["domain"],"title":"SubdomainEnumerateRequest","examples":[{"domain":"stripe.com"},{"domain":"vercel.com","max_results":1000}]},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WebhookTestRequest":{"properties":{"webhook_url":{"type":"string","title":"Webhook Url","description":"HTTPS URL to receive the signed test payload."}},"type":"object","required":["webhook_url"],"title":"WebhookTestRequest","examples":[{"webhook_url":"https://example.com/hooks/ollagraph"}]},"XlsxToMarkdownRequest":{"properties":{"xlsx_base64":{"type":"string","title":"Xlsx Base64","description":"Base64-encoded .xlsx Excel bytes. Each sheet rendered as a Markdown table."},"max_rows_per_sheet":{"type":"integer","maximum":10000.0,"minimum":1.0,"title":"Max Rows Per Sheet","description":"Cap per sheet; past 1000 rows raw CSV is more useful than Markdown.","default":1000}},"type":"object","required":["xlsx_base64"],"title":"XlsxToMarkdownRequest","examples":[{"max_rows_per_sheet":500,"xlsx_base64":"<base64-encoded-xlsx>"}]}},"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"osk_… API key","description":"Pass your API key as `Authorization: Bearer osk_…`. Create or rotate keys at [app.ollagraph.com](https://app.ollagraph.com/)."},"AdminToken":{"type":"apiKey","in":"header","name":"X-Admin-Token","description":"Operator-only token. Not for customer use."}}},"tags":[{"name":"Scraping","description":"Fetch single URLs or batches. Smart routing picks fast HTTP for static pages, full stealth browser for dynamic ones."},{"name":"Extraction","description":"Turn raw HTML into clean article content or structured metadata (JSON-LD, OpenGraph, Microdata)."},{"name":"Intelligence","description":"Domain and IP intelligence: DNS, WHOIS, SSL certificates, IP geolocation, page tech stack, sitemap, robots.txt, email verification."},{"name":"Crawling","description":"Full-site crawl with depth, budget, and robots.txt controls. Results delivered via webhook or polled with the jobs endpoint."},{"name":"Captcha","description":"Solve reCAPTCHA v3 invisible challenges. v3 only — by design."},{"name":"Parsing","description":"Stateless, offline parsers: URL decomposition, User-Agent breakdown, email syntax + role/disposable/free-provider flags. No network calls."},{"name":"Conversion","description":"Pure HTML → Markdown transformation. No fetch — caller supplies the HTML."},{"name":"SEO","description":"On-page SEO audit: meta scoring, readability, candidate snippet extraction."},{"name":"AEO","description":"Answer Engine Optimization: AI-crawler allowlist audit, llms.txt validation for the post-ChatGPT search era."},{"name":"Account","description":"Identity, usage, credits, API keys, password, and webhook secret for the authenticated user."},{"name":"Authentication","description":"Sign up, log in, verify email, mint a session-scoped API key."},{"name":"Billing","description":"Subscribe, buy credit packs, manage the active subscription, and open the hosted billing portal."},{"name":"Jobs","description":"Poll the status of any async job (scrape, batch, crawl)."},{"name":"Health","description":"Liveness probe for monitoring."},{"name":"Admin","description":"Operator-only endpoints. Requires X-Admin-Token header."}],"security":[{"BearerAuth":[]}]}