{"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\nRate limits and quotas are returned on every response in the `x-ratelimit-*` headers. Successful 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\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/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.","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":"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/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.","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. The FanoutSpanProcessor's per-user cache picks\nup the deletion within 60 seconds; spans in flight at the moment of\ndeletion still go through.","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/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/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/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/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}]},"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"]}]},"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"}]},"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"}]},"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"}]},"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"}]},"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"}]},"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":"*"}]},"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"}]},"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"},"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":[]}]}