[{"data":1,"prerenderedAt":928},["ShallowReactive",2],{"docs-navigation":3,"docs-\u002Fdocs\u002Fcrawler-logs\u002Fplatform-log-drains":213},[4],{"title":5,"path":6,"stem":7,"children":8,"page":30},"Docs","\u002Fdocs","docs",[9,31,56,98,118,138,163],{"title":10,"description":11,"group":11,"path":12,"stem":13,"children":14,"page":30},"Getting started",null,"\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started",[15,20,25],{"title":16,"path":17,"stem":18,"description":19,"group":11},"Overview","\u002Fdocs\u002Fgetting-started\u002Foverview","docs\u002F1.getting-started\u002F1.overview","What Shruwd does and what you get out of it.",{"title":21,"path":22,"stem":23,"description":24,"group":11},"Quickstart","\u002Fdocs\u002Fgetting-started\u002Fquickstart","docs\u002F1.getting-started\u002F2.quickstart","From an empty account to your first measurement.",{"title":26,"path":27,"stem":28,"description":29,"group":11},"Reading your results","\u002Fdocs\u002Fgetting-started\u002Freading-your-results","docs\u002F1.getting-started\u002F3.reading-your-results","What the four numbers mean, and when to trust them.",false,{"title":32,"description":11,"group":11,"path":33,"stem":34,"children":35,"page":30},"What you track","\u002Fdocs\u002Ftracking","docs\u002F2.tracking",[36,41,46,51],{"title":37,"path":38,"stem":39,"description":40,"group":11},"Brands","\u002Fdocs\u002Ftracking\u002Fbrands","docs\u002F2.tracking\u002F1.brands","Add, rename and archive the brands you measure.",{"title":42,"path":43,"stem":44,"description":45,"group":11},"Prompts","\u002Fdocs\u002Ftracking\u002Fprompts","docs\u002F2.tracking\u002F2.prompts","Choose and manage the questions Shruwd asks each engine.",{"title":47,"path":48,"stem":49,"description":50,"group":11},"Competitors","\u002Fdocs\u002Ftracking\u002Fcompetitors","docs\u002F2.tracking\u002F3.competitors","Track the brands you are compared against, and how they are matched.",{"title":52,"path":53,"stem":54,"description":55,"group":11},"Connecting Search Console","\u002Fdocs\u002Ftracking\u002Fconnecting-search-console","docs\u002F2.tracking\u002F4.connecting-search-console","Add per-page search demand so two diagnostics can run.",{"title":57,"description":11,"group":11,"path":58,"stem":59,"children":60,"page":30},"Crawler logs","\u002Fdocs\u002Fcrawler-logs","docs\u002F3.crawler-logs",[61,66,72,77,82,87,93],{"title":62,"path":63,"stem":64,"description":65,"group":11},"Choosing a log path","\u002Fdocs\u002Fcrawler-logs\u002Fchoosing-a-log-path","docs\u002F3.crawler-logs\u002F1.choosing-a-log-path","Pick the way of sending crawler logs that matches your hosting.",{"title":67,"path":68,"stem":69,"description":70,"group":71},"Platform log drains","\u002Fdocs\u002Fcrawler-logs\u002Fplatform-log-drains","docs\u002F3.crawler-logs\u002F2.platform-log-drains","Send logs from Vercel, Netlify, Fly and similar. No code.","Setup guides",{"title":73,"path":74,"stem":75,"description":76,"group":71},"Cloudflare Worker","\u002Fdocs\u002Fcrawler-logs\u002Fcloudflare-worker","docs\u002F3.crawler-logs\u002F3.cloudflare-worker","Forward crawler hits from behind Cloudflare, on any plan.",{"title":78,"path":79,"stem":80,"description":81,"group":71},"Cloudflare Logpush","\u002Fdocs\u002Fcrawler-logs\u002Fcloudflare-logpush","docs\u002F3.crawler-logs\u002F4.cloudflare-logpush","Send zone request logs straight to Shruwd. Enterprise zones, no code.",{"title":83,"path":84,"stem":85,"description":86,"group":71},"Server middleware","\u002Fdocs\u002Fcrawler-logs\u002Fserver-middleware","docs\u002F3.crawler-logs\u002F5.server-middleware","Forward crawler hits from a Nuxt or Nitro origin. Last resort.",{"title":88,"path":89,"stem":90,"description":91,"group":92},"Crawlers tracked","\u002Fdocs\u002Fcrawler-logs\u002Fcrawlers-tracked","docs\u002F3.crawler-logs\u002F6.crawlers-tracked","Which bots Shruwd recognises, and how a hit is verified.","Reference",{"title":94,"path":95,"stem":96,"description":97,"group":92},"Ingest not arriving","\u002Fdocs\u002Fcrawler-logs\u002Fingest-not-arriving","docs\u002F3.crawler-logs\u002F7.ingest-not-arriving","Diagnose a log drain that is not delivering.",{"title":99,"description":11,"group":11,"path":100,"stem":101,"children":102,"page":30},"Findings and fixes","\u002Fdocs\u002Ffindings","docs\u002F4.findings",[103,108,113],{"title":104,"path":105,"stem":106,"description":107,"group":11},"How findings work","\u002Fdocs\u002Ffindings\u002Fhow-findings-work","docs\u002F4.findings\u002F1.how-findings-work","What a finding is, how much to trust it, and how to prove your fix worked.",{"title":109,"path":110,"stem":111,"description":112,"group":11},"Rechecks","\u002Fdocs\u002Ffindings\u002Frechecks","docs\u002F4.findings\u002F2.rechecks","How Shruwd proves whether your fix moved the number.",{"title":114,"path":115,"stem":116,"description":117,"group":11},"Findings reference","\u002Fdocs\u002Ffindings\u002Ffindings-reference","docs\u002F4.findings\u002F3.findings-reference","Every diagnostic Shruwd runs, what triggers it and what to do.",{"title":119,"description":11,"group":11,"path":120,"stem":121,"children":122,"page":30},"Metrics","\u002Fdocs\u002Fmetrics","docs\u002F5.metrics",[123,128,133],{"title":124,"path":125,"stem":126,"description":127,"group":11},"Metric definitions","\u002Fdocs\u002Fmetrics\u002Fmetric-definitions","docs\u002F5.metrics\u002F1.metric-definitions","Exactly what each number counts, and when it is undefined.",{"title":129,"path":130,"stem":131,"description":132,"group":11},"Confidence and sample size","\u002Fdocs\u002Fmetrics\u002Fconfidence-and-sample-size","docs\u002F5.metrics\u002F2.confidence-and-sample-size","Why every number has a range, and why some are withheld.",{"title":134,"path":135,"stem":136,"description":137,"group":11},"When a number has moved","\u002Fdocs\u002Fmetrics\u002Fwhen-a-number-has-moved","docs\u002F5.metrics\u002F3.when-a-number-has-moved","The rule Shruwd uses before calling a change real.",{"title":139,"description":11,"group":11,"path":140,"stem":141,"children":142,"page":30},"Account","\u002Fdocs\u002Faccount","docs\u002F6.account",[143,148,153,158],{"title":144,"path":145,"stem":146,"description":147,"group":11},"Plans and limits","\u002Fdocs\u002Faccount\u002Fplans-and-limits","docs\u002F6.account\u002F1.plans-and-limits","What each plan includes and what happens when you reach a limit.",{"title":149,"path":150,"stem":151,"description":152,"group":11},"Team and roles","\u002Fdocs\u002Faccount\u002Fteam-and-roles","docs\u002F6.account\u002F2.team-and-roles","Invite people, set what they can change, and remove access.",{"title":154,"path":155,"stem":156,"description":157,"group":11},"Billing","\u002Fdocs\u002Faccount\u002Fbilling","docs\u002F6.account\u002F3.billing","Change plan, read your usage, and handle a failed payment.",{"title":159,"path":160,"stem":161,"description":162,"group":11},"Email notifications","\u002Fdocs\u002Faccount\u002Femail-notifications","docs\u002F6.account\u002F4.email-notifications","What Shruwd emails you, and how to turn it off.",{"title":164,"description":11,"group":11,"path":165,"stem":166,"children":167,"page":30},"Build on Shruwd","\u002Fdocs\u002Fapi","docs\u002F7.api",[168,173,178,182,187,192,197,203,208],{"title":169,"path":170,"stem":171,"description":172,"group":11},"API overview","\u002Fdocs\u002Fapi\u002Fapi-overview","docs\u002F7.api\u002F1.api-overview","Authentication, errors, limits and the rules every endpoint follows.",{"title":37,"path":174,"stem":175,"description":176,"group":177},"\u002Fdocs\u002Fapi\u002Fbrands","docs\u002F7.api\u002F2.brands","Create, read, rename and archive brands over the API.","Endpoints",{"title":42,"path":179,"stem":180,"description":181,"group":177},"\u002Fdocs\u002Fapi\u002Fprompts","docs\u002F7.api\u002F3.prompts","Add, edit and retire the questions asked every cycle.",{"title":183,"path":184,"stem":185,"description":186,"group":177},"Entities","\u002Fdocs\u002Fapi\u002Fentities","docs\u002F7.api\u002F4.entities","Manage the brand and its competitors, and the aliases that count.",{"title":188,"path":189,"stem":190,"description":191,"group":177},"Measurement","\u002Fdocs\u002Fapi\u002Fmeasurement","docs\u002F7.api\u002F5.measurement","Run cycles and read visibility, crawlers and individual answers.",{"title":193,"path":194,"stem":195,"description":196,"group":177},"Findings","\u002Fdocs\u002Fapi\u002Ffindings","docs\u002F7.api\u002F6.findings","Read diagnosed findings and move them through their lifecycle.",{"title":198,"path":199,"stem":200,"description":201,"group":202},"TypeScript SDK","\u002Fdocs\u002Fapi\u002Ftypescript-sdk","docs\u002F7.api\u002F7.typescript-sdk","A typed client for the Shruwd API.","Clients and agents",{"title":204,"path":205,"stem":206,"description":207,"group":202},"MCP server","\u002Fdocs\u002Fapi\u002Fmcp-server","docs\u002F7.api\u002F8.mcp-server","Give Claude or Cursor tools to run Shruwd.",{"title":209,"path":210,"stem":211,"description":212,"group":202},"For AI agents","\u002Fdocs\u002Fapi\u002Ffor-ai-agents","docs\u002F7.api\u002F9.for-ai-agents","Machine-readable versions of everything here.",{"id":214,"title":67,"body":215,"description":922,"extension":923,"group":71,"meta":924,"navigation":925,"path":68,"section":57,"seo":926,"stem":69,"__hash__":927},"docs\u002Fdocs\u002F3.crawler-logs\u002F2.platform-log-drains.md",{"type":216,"value":217,"toc":910},"minimark",[218,222,226,231,245,249,275,286,290,293,353,358,366,436,445,449,466,576,579,582,684,688,695,787,793,797,816,820,887,891,906],[219,220,67],"h1",{"id":221},"platform-log-drains",[223,224,225],"p",{},"If your host can forward request logs to an HTTP endpoint — Vercel, Netlify, Fly and\nmost others — this is the whole setup. No code, and the logs are edge logs, so they\ninclude requests your CDN answered without touching your origin.",[227,228,230],"h2",{"id":229},"prerequisites","Prerequisites",[232,233,234,242],"ul",{},[235,236,237,241],"li",{},[238,239,240],"strong",{},"Permissions:"," admin or owner.",[235,243,244],{},"A host with an HTTP log drain feature. These are often on a paid tier; check your\nplatform's current pricing.",[227,246,248],{"id":247},"_1-get-your-endpoint-and-token","1. Get your endpoint and token",[250,251,252,259,265],"ol",{},[235,253,254,255,258],{},"Open the brand's ",[238,256,257],{},"Settings → Crawler logs",".",[235,260,261,262,258],{},"Select ",[238,263,264],{},"Create token",[235,266,267,268,271,272,258],{},"Copy the ",[238,269,270],{},"endpoint"," and the ",[238,273,274],{},"token",[276,277,279],"callout",{"type":278},"warning",[223,280,281,282,285],{},"The token is shown ",[238,283,284],{},"once",". It cannot be retrieved later, only replaced — and creating a\nnew one immediately revokes the old one, which will stop a drain that is already working.",[227,287,289],{"id":288},"_2-add-the-drain-on-your-platform","2. Add the drain on your platform",[223,291,292],{},"Point your platform's log drain at the endpoint with the token as a header.",[294,295,296,309],"table",{},[297,298,299],"thead",{},[300,301,302,306],"tr",{},[303,304,305],"th",{},"Setting",[303,307,308],{},"Value",[310,311,312,324,335,345],"tbody",{},[300,313,314,318],{},[315,316,317],"td",{},"URL",[315,319,320,321,323],{},"the ",[238,322,270],{}," from step 1",[300,325,326,329],{},[315,327,328],{},"Header",[315,330,331],{},[332,333,334],"code",{},"X-Shruwd-Ingest-Token: YOUR_TOKEN",[300,336,337,340],{},[315,338,339],{},"Content type",[315,341,342],{},[332,343,344],{},"application\u002Fx-ndjson",[300,346,347,350],{},[315,348,349],{},"Format",[315,351,352],{},"NDJSON, one JSON object per line, or one JSON array of objects",[354,355,357],"h3",{"id":356},"on-vercel","On Vercel",[223,359,360,361,365],{},"Drains need a Pro or Enterprise team. On Hobby with Cloudflare in front of the site, use\nthe ",[362,363,364],"a",{"href":74},"forwarder Worker"," instead. Hobby without\nCloudflare in front has no log path yet.",[250,367,368,378,381,408,415,427],{},[235,369,370,371,374,375,258],{},"Open ",[238,372,373],{},"Team Settings → Drains → Add Drain"," and choose ",[238,376,377],{},"Logs",[235,379,380],{},"Name the drain and select the project.",[235,382,383,384,387,388,387,391,387,394,387,397,400,401,404,405,407],{},"Select the sources ",[332,385,386],{},"static",", ",[332,389,390],{},"lambda",[332,392,393],{},"edge",[332,395,396],{},"external",[332,398,399],{},"redirect"," and ",[332,402,403],{},"firewall",".\n",[332,406,403],{}," is the one that records the requests Vercel's firewall refused.",[235,409,410,411,414],{},"Select the ",[332,412,413],{},"production"," environment. Add no sampling rule, so every request is sent.",[235,416,417,418,421,422,424,425,258],{},"Choose ",[238,419,420],{},"Custom Endpoint",": the ",[238,423,270],{}," from step 1, format NDJSON or JSON, and\nthe custom header ",[332,426,334],{},[235,428,261,429,432,433,258],{},[238,430,431],{},"Create Drain",". Vercel tests the endpoint, which answers ",[332,434,435],{},"200",[276,437,438],{"type":278},[223,439,440,441,444],{},"Keep ",[238,442,443],{},"Team Settings → Security & Privacy → IP Address Visibility"," on. With IP\naddresses hidden, Vercel sends no client IP, and no hit can be verified.",[227,446,448],{"id":447},"_3-check-the-fields","3. Check the fields",[223,450,451,452,455,456,387,459,462,463,258],{},"Shruwd reads these fields per line. Common alternative spellings — ",[332,453,454],{},"ClientIP",",\n",[332,457,458],{},"clientip",[332,460,461],{},"remote_addr"," — are understood, so most platforms work as they come.\nVercel's format works as it is, including the request details it nests under ",[332,464,465],{},"proxy",[294,467,468,481],{},[297,469,470],{},[300,471,472,475,478],{},[303,473,474],{},"Field",[303,476,477],{},"Required",[303,479,480],{},"Used for",[310,482,483,498,512,525,537,549,561],{},[300,484,485,490,495],{},[315,486,487],{},[332,488,489],{},"client_ip",[315,491,492],{},[238,493,494],{},"Yes",[315,496,497],{},"Verifying the hit is really from the crawler it claims to be",[300,499,500,505,509],{},[315,501,502],{},[332,503,504],{},"user_agent",[315,506,507],{},[238,508,494],{},[315,510,511],{},"Identifying which bot. Lines without one are dropped",[300,513,514,519,522],{},[315,515,516],{},[332,517,518],{},"timestamp",[315,520,521],{},"No",[315,523,524],{},"Defaults to arrival time. ISO 8601",[300,526,527,532,534],{},[315,528,529],{},[332,530,531],{},"host",[315,533,521],{},[315,535,536],{},"Telling your domains apart",[300,538,539,544,546],{},[315,540,541],{},[332,542,543],{},"path",[315,545,521],{},[315,547,548],{},"Per-page diagnostics",[300,550,551,556,558],{},[315,552,553],{},[332,554,555],{},"status",[315,557,521],{},[315,559,560],{},"Detecting crawlers being refused",[300,562,563,571,573],{},[315,564,565,387,568],{},[332,566,567],{},"method",[332,569,570],{},"bytes",[315,572,521],{},[315,574,575],{},"Filtering and volume",[223,577,578],{},"If your host offers drain sampling, keep it at 100%. Crawler numbers are presented as\nexact counts, and a sampled drain would make them partial.",[223,580,581],{},"A single line looks like this:",[583,584,589],"pre",{"className":585,"code":586,"language":587,"meta":588,"style":588},"language-json shiki shiki-themes github-light github-dark","{\"timestamp\":\"2026-09-09T10:00:00Z\",\"host\":\"example.com\",\"path\":\"\u002Fpricing\",\"user_agent\":\"Mozilla\u002F5.0 (compatible; GPTBot\u002F1.2; +https:\u002F\u002Fopenai.com\u002Fgptbot)\",\"status\":200,\"client_ip\":\"23.98.142.176\",\"method\":\"GET\",\"bytes\":18234}\n","json","",[332,590,591],{"__ignoreMap":588},[592,593,596,600,604,607,611,614,617,619,622,624,627,629,632,634,637,639,642,644,647,649,651,653,656,658,661,663,666,668,671,673,676,678,681],"span",{"class":594,"line":595},"line",1,[592,597,599],{"class":598},"sVt8B","{",[592,601,603],{"class":602},"sj4cs","\"timestamp\"",[592,605,606],{"class":598},":",[592,608,610],{"class":609},"sZZnC","\"2026-09-09T10:00:00Z\"",[592,612,613],{"class":598},",",[592,615,616],{"class":602},"\"host\"",[592,618,606],{"class":598},[592,620,621],{"class":609},"\"example.com\"",[592,623,613],{"class":598},[592,625,626],{"class":602},"\"path\"",[592,628,606],{"class":598},[592,630,631],{"class":609},"\"\u002Fpricing\"",[592,633,613],{"class":598},[592,635,636],{"class":602},"\"user_agent\"",[592,638,606],{"class":598},[592,640,641],{"class":609},"\"Mozilla\u002F5.0 (compatible; GPTBot\u002F1.2; +https:\u002F\u002Fopenai.com\u002Fgptbot)\"",[592,643,613],{"class":598},[592,645,646],{"class":602},"\"status\"",[592,648,606],{"class":598},[592,650,435],{"class":602},[592,652,613],{"class":598},[592,654,655],{"class":602},"\"client_ip\"",[592,657,606],{"class":598},[592,659,660],{"class":609},"\"23.98.142.176\"",[592,662,613],{"class":598},[592,664,665],{"class":602},"\"method\"",[592,667,606],{"class":598},[592,669,670],{"class":609},"\"GET\"",[592,672,613],{"class":598},[592,674,675],{"class":602},"\"bytes\"",[592,677,606],{"class":598},[592,679,680],{"class":602},"18234",[592,682,683],{"class":598},"}\n",[227,685,687],{"id":686},"_4-test-before-relying-on-it","4. Test before relying on it",[223,689,690,691,694],{},"Add ",[332,692,693],{},"?validate=1"," to the endpoint to parse a sample and report on it without writing\nanything.",[696,697,698,753],"code-group",{},[583,699,704],{"className":700,"code":701,"filename":702,"language":703,"meta":588,"style":588},"language-bash shiki shiki-themes github-light github-dark","curl -X POST \"YOUR_ENDPOINT?validate=1\" \\\n  -H \"X-Shruwd-Ingest-Token: YOUR_TOKEN\" \\\n  -H \"Content-Type: application\u002Fx-ndjson\" \\\n  -d '{\"timestamp\":\"2026-01-01T00:00:00Z\",\"host\":\"example.com\",\"path\":\"\u002F\",\"user_agent\":\"GPTBot\",\"status\":200,\"client_ip\":\"1.2.3.4\"}'\n","curl","bash",[332,705,706,723,734,744],{"__ignoreMap":588},[592,707,708,711,714,717,720],{"class":594,"line":595},[592,709,702],{"class":710},"sScJk",[592,712,713],{"class":602}," -X",[592,715,716],{"class":609}," POST",[592,718,719],{"class":609}," \"YOUR_ENDPOINT?validate=1\"",[592,721,722],{"class":602}," \\\n",[592,724,726,729,732],{"class":594,"line":725},2,[592,727,728],{"class":602},"  -H",[592,730,731],{"class":609}," \"X-Shruwd-Ingest-Token: YOUR_TOKEN\"",[592,733,722],{"class":602},[592,735,737,739,742],{"class":594,"line":736},3,[592,738,728],{"class":602},[592,740,741],{"class":609}," \"Content-Type: application\u002Fx-ndjson\"",[592,743,722],{"class":602},[592,745,747,750],{"class":594,"line":746},4,[592,748,749],{"class":602},"  -d",[592,751,752],{"class":609}," '{\"timestamp\":\"2026-01-01T00:00:00Z\",\"host\":\"example.com\",\"path\":\"\u002F\",\"user_agent\":\"GPTBot\",\"status\":200,\"client_ip\":\"1.2.3.4\"}'\n",[583,754,759],{"className":755,"code":756,"filename":757,"language":758,"meta":588,"style":588},"language-powershell shiki shiki-themes github-light github-dark","Invoke-RestMethod -Method Post `\n  -Uri \"YOUR_ENDPOINT?validate=1\" `\n  -Headers @{ \"X-Shruwd-Ingest-Token\" = \"YOUR_TOKEN\" } `\n  -Body '{\"timestamp\":\"2026-01-01T00:00:00Z\",\"host\":\"example.com\",\"path\":\"\u002F\",\"user_agent\":\"GPTBot\",\"status\":200,\"client_ip\":\"1.2.3.4\"}' `\n  -ContentType \"application\u002Fx-ndjson\"\n","PowerShell","powershell",[332,760,761,766,771,776,781],{"__ignoreMap":588},[592,762,763],{"class":594,"line":595},[592,764,765],{},"Invoke-RestMethod -Method Post `\n",[592,767,768],{"class":594,"line":725},[592,769,770],{},"  -Uri \"YOUR_ENDPOINT?validate=1\" `\n",[592,772,773],{"class":594,"line":736},[592,774,775],{},"  -Headers @{ \"X-Shruwd-Ingest-Token\" = \"YOUR_TOKEN\" } `\n",[592,777,778],{"class":594,"line":746},[592,779,780],{},"  -Body '{\"timestamp\":\"2026-01-01T00:00:00Z\",\"host\":\"example.com\",\"path\":\"\u002F\",\"user_agent\":\"GPTBot\",\"status\":200,\"client_ip\":\"1.2.3.4\"}' `\n",[592,782,784],{"class":594,"line":783},5,[592,785,786],{},"  -ContentType \"application\u002Fx-ndjson\"\n",[223,788,789,792],{},[332,790,791],{},"usable: true"," means the endpoint and token are both good. Anything else names what is\nmissing.",[227,794,796],{"id":795},"_5-confirm-it-is-live","5. Confirm it is live",[223,798,799,800,802,803,807,808,811,812,815],{},"Within a few minutes of real traffic, ",[238,801,257],{}," moves from ",[804,805,806],"em",{},"awaiting\nfirst logs"," to ",[804,809,810],{},"active",", and ",[238,813,814],{},"Last received"," fills in.",[227,817,819],{"id":818},"response-codes","Response codes",[294,821,822,832],{},[297,823,824],{},[300,825,826,829],{},[303,827,828],{},"Code",[303,830,831],{},"Meaning",[310,833,834,850,860,870],{},[300,835,836,841],{},[315,837,838],{},[332,839,840],{},"202",[315,842,843,844,846,847,849],{},"Accepted (",[332,845,435],{}," to Vercel, which asks for it). Parsing happens afterwards, so this does not mean the lines were usable — use ",[332,848,693],{}," to check that",[300,851,852,857],{},[315,853,854],{},[332,855,856],{},"401",[315,858,859],{},"Wrong or revoked token",[300,861,862,867],{},[315,863,864],{},[332,865,866],{},"413",[315,868,869],{},"Batch over the size cap",[300,871,872,877],{},[315,873,874],{},[332,875,876],{},"422",[315,878,879,880,882,883,886],{},"Only with ",[332,881,693],{},": the sample can't be used, and ",[332,884,885],{},"reason"," says why",[227,888,890],{"id":889},"next-steps","Next steps",[232,892,893,901],{},[235,894,895,897,898],{},[362,896,94],{"href":95}," — if the card stays on ",[804,899,900],{},"awaiting first logs",[235,902,903,905],{},[362,904,88],{"href":89}," — what gets recognised",[907,908,909],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":588,"searchDepth":736,"depth":736,"links":911},[912,913,914,917,918,919,920,921],{"id":229,"depth":725,"text":230},{"id":247,"depth":725,"text":248},{"id":288,"depth":725,"text":289,"children":915},[916],{"id":356,"depth":736,"text":357},{"id":447,"depth":725,"text":448},{"id":686,"depth":725,"text":687},{"id":795,"depth":725,"text":796},{"id":818,"depth":725,"text":819},{"id":889,"depth":725,"text":890},"Paste an endpoint and a token into your hosting platform log-drain settings. No code to deploy.","md",{},{"title":67,"description":70},{"title":67,"description":922},"R8x8EPboUypvk5Alnv7zHiylC5NtFSUdeccMS6jfWzc",1790003438752]