[{"data":1,"prerenderedAt":2991},["ShallowReactive",2],{"navigation":3,"page:\u002Fguides\u002Fbyo-providers":1019,"surround:\u002Fguides\u002Fbyo-providers":2982},[4,21,82,133,154,1010],[5,6,7,8],"Getting started","\u002Fgetting-started","i-lucide-rocket",[9,12,15,18],[10,6,11,11],"What Kaabist is",0,[13,14,11,11],"API keys and modes","keys-and-modes",[16,17,11,11],"Your first job","first-job",[19,20,11,11],"Understanding the envelope","envelope",[22,23,24,25],"Concepts","\u002Fconcepts","i-lucide-book-open",[26,28,31,34,37,40,43,46,49,52,55,58,61,64,67,70,73,76,79],[27,23,11,11],"Overview",[29,30,11,11],"Programs and versions","programs-and-versions",[32,33,11,11],"Tiers and escalation","tiers-and-escalation",[35,36,11,11],"The http tier","http-tier",[38,39,11,11],"The browser tier","browser-tier",[41,42,11,11],"Sessions","sessions",[44,45,11,11],"Human in the loop","human-in-the-loop",[47,48,11,11],"How healing works","self-healing",[50,51,11,11],"Obstacles and captchas","obstacles",[53,54,11,11],"Validation and warnings","validation-and-warnings",[56,57,11,11],"Credits and billing","credits-and-billing",[59,60,11,11],"Limits","limits",[62,63,11,11],"Locators","locators",[65,66,11,11],"Snapshots","snapshots",[68,69,11,11],"Egress and proxies","egress-and-proxies",[71,72,11,11],"Queueing and fairness","queueing",[74,75,11,11],"Accounts, organisations and roles","accounts-and-roles",[77,78,11,11],"Data retention","data-retention",[80,81,11,11],"Documents and PDFs","documents-and-pdfs",[83,84,85,86],"Guides","\u002Fguides","i-lucide-map",[87,88,91,94,97,100,103,106,109,112,115,118,121,124,127,130],[27,84,11,11],[89,90,11,11],"Authenticated flows","authenticated-flows",[92,93,11,11],"Hosted resolve pages","hosted-resolve",[95,96,11,11],"Lists and pagination","lists-and-pagination",[98,99,11,11],"JSON and network locators","json-and-network-locators",[101,102,11,11],"Schedules and change detection","schedules-and-change-detection",[104,105,11,11],"Webhooks","webhooks",[107,108,11,11],"Bring your own providers","byo-providers",[110,111,11,11],"Testing: replay, dry-run and test mode","testing",[113,114,11,11],"Side-effect safety","side-effect-safety",[116,117,11,11],"Security & data handling","security-and-data",[119,120,11,11],"Migrating from other tools","migrating",[122,123,11,11],"Drift detection and canaries","drift-and-canaries",[125,126,11,11],"SDKs","sdks",[128,129,11,11],"The kaab CLI","cli",[131,132,11,11],"Coding agents (MCP)","mcp",[134,135,136,137],"Panel","\u002Fpanel","i-lucide-layout-dashboard",[138,139,142,145,148,151],[27,135,11,11],[140,141,11,11],"The program builder","builder",[143,144,11,11],"Picking and recording","picking-and-recording",[146,147,11,11],"Taking over a job","takeover",[149,150,11,11],"Getting help","support",[152,153,11,11],"Referrals","referrals",[155,156,157,158],"Reference","\u002Freference","i-lucide-library",[159,160,520,834,837,840,1006,1007],[27,156,11,11],[161,162,11,163],"API","api",[164,166,169,212,222,274,297,316,347,376,389,396,403,410,426,447,454],[27,165,11,11],"\u002Freference\u002Fapi",[167,168,11,11],"Interactive reference","explorer",[170,171,11,172],"Jobs","jobs",[173,176,179,182,185,188,191,194,197,200,203,206,209],[174,175,11,11],"Create job","create-job",[177,178,11,11],"List jobs","list-jobs",[180,181,11,11],"Create job batch","create-job-batch",[183,184,11,11],"Estimate job","estimate-job",[186,187,11,11],"Get job","get-job",[189,190,11,11],"List job steps","list-job-steps",[192,193,11,11],"Get job snapshot","get-job-snapshot",[195,196,11,11],"Get job screenshot","get-job-screenshot",[198,199,11,11],"Get job artifact","get-job-artifact",[201,202,11,11],"Submit job input","submit-job-input",[204,205,11,11],"Resume job","resume-job",[207,208,11,11],"Takeover job","takeover-job",[210,211,11,11],"Cancel job","cancel-job",[213,214,11,215],"Batches","batches",[216,219],[217,218,11,11],"Get batch","get-batch",[220,221,11,11],"List batch jobs","list-batch-jobs",[223,224,11,225],"Programs","programs",[226,229,232,235,238,241,244,247,250,253,256,259,262,265,268,271],[227,228,11,11],"Create program","create-program",[230,231,11,11],"List programs","list-programs",[233,234,11,11],"Lint program","lint-program",[236,237,11,11],"Get program","get-program",[239,240,11,11],"Update program","update-program",[242,243,11,11],"Delete program","delete-program",[245,246,11,11],"List program versions","list-program-versions",[248,249,11,11],"Create program version","create-program-version",[251,252,11,11],"Update program version","update-program-version",[254,255,11,11],"Delete program version","delete-program-version",[257,258,11,11],"Get program version","get-program-version",[260,261,11,11],"Publish program version","publish-program-version",[263,264,11,11],"Diff program version","diff-program-version",[266,267,11,11],"Replay program version","replay-program-version",[269,270,11,11],"Set program alias","set-program-alias",[272,273,11,11],"Delete program alias","delete-program-alias",[41,42,11,275],[276,279,282,285,288,291,294],[277,278,11,11],"Create session","create-session",[280,281,11,11],"List sessions","list-sessions",[283,284,11,11],"Get session","get-session",[286,287,11,11],"Update session","update-session",[289,290,11,11],"Delete session","delete-session",[292,293,11,11],"Verify session","verify-session",[295,296,11,11],"Refresh session","refresh-session",[298,299,11,300],"Proposals","proposals",[301,304,307,310,313],[302,303,11,11],"List proposals","list-proposals",[305,306,11,11],"Get proposal","get-proposal",[308,309,11,11],"Approve proposal","approve-proposal",[311,312,11,11],"Reject proposal","reject-proposal",[314,315,11,11],"Edit proposal","edit-proposal",[317,318,11,319],"Schedules","schedules",[320,323,326,329,332,335,338,341,344],[321,322,11,11],"Create schedule","create-schedule",[324,325,11,11],"List schedules","list-schedules",[327,328,11,11],"Get schedule","get-schedule",[330,331,11,11],"Update schedule","update-schedule",[333,334,11,11],"Delete schedule","delete-schedule",[336,337,11,11],"Pause schedule","pause-schedule",[339,340,11,11],"Resume schedule","resume-schedule",[342,343,11,11],"List schedule runs","list-schedule-runs",[345,346,11,11],"Get schedule run diff","get-schedule-run-diff",[104,105,11,348],[349,352,355,358,361,364,367,370,373],[350,351,11,11],"Create webhook","create-webhook",[353,354,11,11],"List webhooks","list-webhooks",[356,357,11,11],"Get webhook","get-webhook",[359,360,11,11],"Update webhook","update-webhook",[362,363,11,11],"Delete webhook","delete-webhook",[365,366,11,11],"Rotate webhook secret","rotate-webhook-secret",[368,369,11,11],"List webhook deliveries","list-webhook-deliveries",[371,372,11,11],"Resend webhook delivery","resend-webhook-delivery",[374,375,11,11],"Test webhook","test-webhook",[377,378,11,379],"Organisation","org",[380,383,386],[381,382,11,11],"Rotate org webhook secret","rotate-org-webhook-secret",[384,385,11,11],"Get org","get-org",[387,388,11,11],"Request data deletion","request-data-deletion",[390,391,11,392],"Credits","credits",[393],[394,395,11,11],"Get credits","get-credits",[397,398,11,399],"Ledger","ledger",[400],[401,402,11,11],"List ledger entries","list-ledger-entries",[404,405,11,406],"Usage","usage",[407],[408,409,11,11],"Get usage","get-usage",[411,412,11,413],"API keys","api-keys",[414,417,420,423],[415,416,11,11],"List API keys","list-api-keys",[418,419,11,11],"Create API key","create-api-key",[421,422,11,11],"Rotate API key","rotate-api-key",[424,425,11,11],"Revoke API key","revoke-api-key",[427,108,11,428],"BYO providers",[429,432,435,438,441,444],[430,431,11,11],"List BYO providers","list-byo-providers",[433,434,11,11],"Create BYO provider","create-byo-provider",[436,437,11,11],"Get BYO provider","get-byo-provider",[439,440,11,11],"Update BYO provider","update-byo-provider",[442,443,11,11],"Delete BYO provider","delete-byo-provider",[445,446,11,11],"Test BYO provider","test-byo-provider",[448,449,11,450],"Sites","sites",[451],[452,453,11,11],"Get site profile","get-site-profile",[455,456,11,457],"Objects","schemas",[458,460,463,466,469,470,473,476,479,482,485,487,490,493,496,499,502,505,508,511,514,517],[27,459,11,11],"\u002Freference\u002Fapi\u002Fschemas",[461,462,11,11],"ApiKey","api-key",[464,465,11,11],"Batch","batch",[467,468,11,11],"ByoProvider","byo-provider",[390,391,11,11],[471,472,11,11],"ErrorResponse","error-response",[474,475,11,11],"ExtractSchema","extract-schema",[477,478,11,11],"Job","job",[480,481,11,11],"LedgerEntry","ledger-entry",[483,484,11,11],"LintResult","lint-result",[486,378,11,11],"Org",[488,489,11,11],"Program","program",[491,492,11,11],"ProgramDefinition","program-definition",[494,495,11,11],"ProgramVersion","program-version",[497,498,11,11],"Proposal","proposal",[500,501,11,11],"Schedule","schedule",[503,504,11,11],"Session","session",[506,507,11,11],"SiteProfile","site-profile",[509,510,11,11],"StepRecord","step-record",[512,513,11,11],"Webhook","webhook",[515,516,11,11],"WebhookDelivery","webhook-delivery",[518,519,11,11],"WebhookEvent","webhook-event",[521,522,11,523],"DSL","dsl",[524,526,529,532,535,538,603,637,640,751,754,756],[27,525,11,11],"\u002Freference\u002Fdsl",[527,528,11,11],"Inputs","inputs",[530,531,11,11],"Options","options",[533,534,11,11],"Policies","policies",[536,537,11,11],"Steps","steps",[539,540,11,541],"Actions","actions",[542,544,546,548,550,552,554,556,558,560,562,565,568,570,573,575,577,579,582,585,587,589,591,594,596,598,600],[27,543,11,11],"\u002Freference\u002Fdsl\u002Factions",[545,545,11,11],"fill",[547,547,11,11],"click",[549,549,11,11],"press",[551,551,11,11],"hover",[553,553,11,11],"select",[555,555,11,11],"check",[557,557,11,11],"uncheck",[559,559,11,11],"upload",[561,561,11,11],"scroll",[563,564,11,11],"wait_for","wait-for",[566,567,11,11],"set_session","set-session",[569,569,11,11],"extract",[571,572,11,11],"capture_response","capture-response",[574,574,11,11],"evaluate",[576,576,11,11],"paginate",[578,578,11,11],"download",[580,581,11,11],"read_pdf","read-pdf",[583,584,11,11],"set_vars","set-vars",[586,586,11,11],"sleep",[588,588,11,11],"reload",[590,590,11,11],"goto",[592,593,11,11],"await_input","await-input",[595,595,11,11],"checkpoint",[597,597,11,11],"screenshot",[599,599,11,11],"when",[601,602,11,11],"loop_until","loop-until",[604,605,11,606],"Conditions","conditions",[607,609,611,613,615,617,619,621,623,625,627,629,631,633,635],[27,608,11,11],"\u002Freference\u002Fdsl\u002Fconditions",[610,610,11,11],"url",[612,612,11,11],"title",[614,614,11,11],"visible",[616,616,11,11],"hidden",[618,618,11,11],"exists",[620,620,11,11],"absent",[622,622,11,11],"text",[624,624,11,11],"count",[626,626,11,11],"network",[628,628,11,11],"var",[630,630,11,11],"landmark",[632,632,11,11],"all",[634,634,11,11],"any",[636,636,11,11],"not",[638,639,11,11],"Targets","targets",[641,642,11,643],"Fields","fields",[644,646,649,651,654,656,659,661,663,666,668,671,672,674,677,679,681,683,685,687,690,693,695,698,701,703,704,707,709,712,714,716,718,720,722,724,726,728,731,733,734,736,738,740,743,745,747,749],[27,645,11,11],"\u002Freference\u002Fdsl\u002Ffields",[647,648,11,11],"allow_suffix","allow-suffix",[650,650,11,11],"attr",[652,653,11,11],"base_url","base-url",[655,655,11,11],"candidates",[657,658,11,11],"case_insensitive","case-insensitive",[660,660,11,11],"country",[662,662,11,11],"currency",[664,665,11,11],"date_format","date-format",[667,667,11,11],"decimal",[669,670,11,11],"false_values","false-values",[642,642,11,11],[673,673,11,11],"flags",[675,676,11,11],"follow_redirects","follow-redirects",[678,678,11,11],"frame",[680,680,11,11],"json",[682,682,11,11],"locale",[684,684,11,11],"many",[686,686,11,11],"max",[688,689,11,11],"max_items","max-items",[691,692,11,11],"max_length","max-length",[694,694,11,11],"min",[696,697,11,11],"min_items","min-items",[699,700,11,11],"min_length","min-length",[702,702,11,11],"name",[626,626,11,11],[705,706,11,11],"null_markers","null-markers",[708,708,11,11],"nullable",[710,711,11,11],"on_invalid","on-invalid",[713,713,11,11],"pattern",[715,715,11,11],"presence",[717,717,11,11],"regex",[719,719,11,11],"required",[721,721,11,11],"role",[723,723,11,11],"sample",[725,725,11,11],"selector",[727,727,11,11],"source",[729,730,11,11],"strip_fragment","strip-fragment",[732,732,11,11],"testid",[622,622,11,11],[735,735,11,11],"thousands",[737,737,11,11],"timezone",[739,739,11,11],"transforms",[741,742,11,11],"true_values","true-values",[744,744,11,11],"type",[746,746,11,11],"unique",[748,748,11,11],"values",[750,750,11,11],"xpath",[752,753,11,11],"Assertions","assertions",[755,739,11,11],"Transforms",[757,758,11,759],"Lint codes","lint",[760,762,765,768,771,774,777,780,783,786,789,792,795,798,801,804,807,810,813,816,819,822,825,828,831],[27,761,11,11],"\u002Freference\u002Fdsl\u002Flint",[763,764,11,11],"E001","e001",[766,767,11,11],"E002","e002",[769,770,11,11],"E003","e003",[772,773,11,11],"E004","e004",[775,776,11,11],"E005","e005",[778,779,11,11],"E006","e006",[781,782,11,11],"E007","e007",[784,785,11,11],"E008","e008",[787,788,11,11],"E009","e009",[790,791,11,11],"E010","e010",[793,794,11,11],"E011","e011",[796,797,11,11],"E012","e012",[799,800,11,11],"E013","e013",[802,803,11,11],"E014","e014",[805,806,11,11],"W001","w001",[808,809,11,11],"W002","w002",[811,812,11,11],"W003","w003",[814,815,11,11],"W004","w004",[817,818,11,11],"W005","w005",[820,821,11,11],"W006","w006",[823,824,11,11],"W007","w007",[826,827,11,11],"W008","w008",[829,830,11,11],"W009","w009",[832,833,11,11],"W010","w010",[835,836,11,11],"Codes","codes",[838,839,11,11],"Events","events",[841,129,11,842],"CLI",[843,845,847,850,853,856,859,862,865,868,871,874,877,880,883,886,889,892,895,898,901,904,907,910,913,916,919,922,925,928,931,934,937,940,943,946,949,952,955,958,961,964,967,970,973,976,979,982,985,988,991,994,997,1000,1003],[27,844,11,11],"\u002Freference\u002Fcli",[846,846,11,11],"kaab",[848,849,11,11],"kaab auth","kaab-auth",[851,852,11,11],"kaab auth login","kaab-auth-login",[854,855,11,11],"kaab auth logout","kaab-auth-logout",[857,858,11,11],"kaab auth status","kaab-auth-status",[860,861,11,11],"kaab completion","kaab-completion",[863,864,11,11],"kaab completion bash","kaab-completion-bash",[866,867,11,11],"kaab completion fish","kaab-completion-fish",[869,870,11,11],"kaab completion powershell","kaab-completion-powershell",[872,873,11,11],"kaab completion zsh","kaab-completion-zsh",[875,876,11,11],"kaab credits","kaab-credits",[878,879,11,11],"kaab jobs","kaab-jobs",[881,882,11,11],"kaab jobs cancel","kaab-jobs-cancel",[884,885,11,11],"kaab jobs get","kaab-jobs-get",[887,888,11,11],"kaab jobs input","kaab-jobs-input",[890,891,11,11],"kaab jobs list","kaab-jobs-list",[893,894,11,11],"kaab jobs resume","kaab-jobs-resume",[896,897,11,11],"kaab jobs run","kaab-jobs-run",[899,900,11,11],"kaab jobs snapshot","kaab-jobs-snapshot",[902,903,11,11],"kaab jobs steps","kaab-jobs-steps",[905,906,11,11],"kaab jobs takeover","kaab-jobs-takeover",[908,909,11,11],"kaab open","kaab-open",[911,912,11,11],"kaab open job","kaab-open-job",[914,915,11,11],"kaab programs","kaab-programs",[917,918,11,11],"kaab programs alias","kaab-programs-alias",[920,921,11,11],"kaab programs alias set","kaab-programs-alias-set",[923,924,11,11],"kaab programs diff","kaab-programs-diff",[926,927,11,11],"kaab programs lint","kaab-programs-lint",[929,930,11,11],"kaab programs list","kaab-programs-list",[932,933,11,11],"kaab programs pull","kaab-programs-pull",[935,936,11,11],"kaab programs push","kaab-programs-push",[938,939,11,11],"kaab proposals","kaab-proposals",[941,942,11,11],"kaab proposals approve","kaab-proposals-approve",[944,945,11,11],"kaab proposals list","kaab-proposals-list",[947,948,11,11],"kaab proposals reject","kaab-proposals-reject",[950,951,11,11],"kaab proposals show","kaab-proposals-show",[953,954,11,11],"kaab schedules","kaab-schedules",[956,957,11,11],"kaab schedules create","kaab-schedules-create",[959,960,11,11],"kaab schedules list","kaab-schedules-list",[962,963,11,11],"kaab schedules pause","kaab-schedules-pause",[965,966,11,11],"kaab schedules resume","kaab-schedules-resume",[968,969,11,11],"kaab schedules runs","kaab-schedules-runs",[971,972,11,11],"kaab sessions","kaab-sessions",[974,975,11,11],"kaab sessions create","kaab-sessions-create",[977,978,11,11],"kaab sessions delete","kaab-sessions-delete",[980,981,11,11],"kaab sessions list","kaab-sessions-list",[983,984,11,11],"kaab sessions verify","kaab-sessions-verify",[986,987,11,11],"kaab usage","kaab-usage",[989,990,11,11],"kaab version","kaab-version",[992,993,11,11],"kaab webhooks","kaab-webhooks",[995,996,11,11],"kaab webhooks create","kaab-webhooks-create",[998,999,11,11],"kaab webhooks deliveries","kaab-webhooks-deliveries",[1001,1002,11,11],"kaab webhooks list","kaab-webhooks-list",[1004,1005,11,11],"kaab webhooks test","kaab-webhooks-test",[125,126,11,11],[1008,1009,11,11],"Plans and pricing","plans",[1011,1012,1013,1014],"Changelog","\u002Fchangelog","i-lucide-history",[1015,1016],[27,1012,11,11],[1017,1018,11,11],"Deprecations","deprecations",{"id":1020,"title":107,"body":1021,"breaking":2972,"date":2973,"description":2974,"extension":2975,"generated":2972,"meta":2976,"navigation":2977,"path":2978,"seo":2979,"stem":2980,"version":2973,"__hash__":2981},"docs\u002F3.guides\u002F07.byo-providers.md",{"type":1022,"value":1023,"toc":2953},"minimark",[1024,1041,1046,1049,1062,1074,1078,1171,1175,1190,1422,1425,1429,1432,1472,1475,1522,1525,1694,1697,1741,1754,1761,1765,2063,2084,2088,2181,2185,2188,2309,2325,2339,2347,2350,2376,2380,2399,2403,2412,2436,2597,2619,2641,2645,2677,2681,2684,2815,2819,2872,2875,2949],[1025,1026,1027,1028,1032,1033,1036,1037,1040],"p",{},"Kaabist buys three things on your behalf, each billed per use: ",[1029,1030,1031],"strong",{},"proxies"," to reach sites from\n(per megabyte), ",[1029,1034,1035],{},"language models"," that help heal broken locators and recognise unfamiliar pages\n(per token), and ",[1029,1038,1039],{},"captcha solvers"," (per solve). If you already have an account with a vendor, you\ncan register it with Kaabist and your jobs use it instead, and that item disappears from your bill.",[1042,1043,1045],"h2",{"id":1044},"when-to-use-it","When to use it",[1025,1047,1048],{},"Bring your own provider when:",[1050,1051,1052,1056,1059],"ul",{},[1053,1054,1055],"li",{},"you already pay a proxy vendor, or need exits in a network you control (an office address a site\nhas allow-listed, a residential pool you negotiated);",[1053,1057,1058],{},"your organisation has a contract with a model vendor, or a rule that page content may only be sent\nto the model you chose;",[1053,1060,1061],{},"you have a captcha-solving balance you want to use up.",[1025,1063,1064,1065,1069,1070,1073],{},"Stay on the platform's providers when you have no such account: they need no configuration, pick a\nproxy pool per site, and fall back automatically. Bring-your-own (BYO) providers are part of the\nDeveloper plan and above, and need a verified payment method (",[1066,1067,1068],"code",{},"403 plan_required"," or\n",[1066,1071,1072],{},"403 payment_method_required"," otherwise).",[1042,1075,1077],{"id":1076},"supported-vendors","Supported vendors",[1079,1080,1081,1094],"table",{},[1082,1083,1084],"thead",{},[1085,1086,1087,1091],"tr",{},[1088,1089,1090],"th",{},"Kind",[1088,1092,1093],{},"Vendors",[1095,1096,1097,1134,1158],"tbody",{},[1085,1098,1099,1103],{},[1100,1101,1102],"td",{},"Proxy",[1100,1104,1105,1106,1109,1110,1109,1113,1116,1117,1109,1120,1109,1123,1126,1127,1130,1131],{},"Any HTTP, HTTPS or SOCKS5 proxy (",[1066,1107,1108],{},"static",", ",[1066,1111,1112],{},"list",[1066,1114,1115],{},"gateway","), with presets for ",[1029,1118,1119],{},"Bright Data",[1029,1121,1122],{},"Oxylabs",[1029,1124,1125],{},"Decodo"," (Smartproxy), ",[1029,1128,1129],{},"IPRoyal"," and ",[1029,1132,1133],{},"Webshare",[1085,1135,1136,1139],{},[1100,1137,1138],{},"LLM",[1100,1140,1141,1109,1144,1109,1147,1109,1150,1153,1154,1157],{},[1029,1142,1143],{},"OpenAI",[1029,1145,1146],{},"Anthropic",[1029,1148,1149],{},"Google Gemini",[1029,1151,1152],{},"Azure OpenAI",", and any ",[1029,1155,1156],{},"OpenAI-compatible"," server",[1085,1159,1160,1163],{},[1100,1161,1162],{},"Captcha",[1100,1164,1165,1109,1168],{},[1029,1166,1167],{},"2Captcha",[1029,1169,1170],{},"CapSolver",[1042,1172,1174],{"id":1173},"registering-a-provider","Registering a provider",[1025,1176,1177,1178,1181,1182,1185,1186,1189],{},"Every provider is created with ",[1066,1179,1180],{},"POST \u002Fv1\u002Fbyo-providers"," and an ",[1066,1183,1184],{},"admin"," key, as\n",[1066,1187,1188],{},"{ \"kind\", \"name\", \"config\" }",". Creating it tests it straight away:",[1191,1192,1193],"code-group",{},[1194,1195,1201],"pre",{"className":1196,"code":1197,"filename":1198,"language":1199,"meta":1200,"style":1200},"language-ts shiki shiki-themes kaab-code kaab-code kaab-code","\u002F\u002F Credentials are write-only: sealed under your organisation's key, never returned or logged.\nconst provider = await kaab.byoProviders.create({\n  kind: \"proxy\",\n  name: `my-proxy-${Date.now().toString(36)}`,\n  config: { type: \"static\", url: proxyUrl, pool: \"datacenter\", country: \"DE\" },\n});\nconsole.log(`${provider.id}: ${provider.status} ${JSON.stringify(provider.config_public)}`);\n","TypeScript","ts","",[1066,1202,1203,1212,1246,1263,1306,1358,1364],{"__ignoreMap":1200},[1204,1205,1208],"span",{"class":1206,"line":1207},"line",1,[1204,1209,1211],{"class":1210},"sKog0","\u002F\u002F Credentials are write-only: sealed under your organisation's key, never returned or logged.\n",[1204,1213,1215,1219,1223,1226,1229,1232,1236,1239,1242],{"class":1206,"line":1214},2,[1204,1216,1218],{"class":1217},"sqn18","const",[1204,1220,1222],{"class":1221},"sHJIl"," provider",[1204,1224,1225],{"class":1217}," =",[1204,1227,1228],{"class":1217}," await",[1204,1230,1231],{"class":1221}," kaab",[1204,1233,1235],{"class":1234},"sJugJ",".",[1204,1237,1238],{"class":1221},"byoProviders",[1204,1240,1241],{"class":1234},".create",[1204,1243,1245],{"class":1244},"sTzsn","({\n",[1204,1247,1249,1252,1255,1259],{"class":1206,"line":1248},3,[1204,1250,1251],{"class":1244},"  kind",[1204,1253,1254],{"class":1217},":",[1204,1256,1258],{"class":1257},"suOy4"," \"proxy\"",[1204,1260,1262],{"class":1261},"sQm2-",",\n",[1204,1264,1266,1269,1271,1274,1277,1280,1283,1286,1289,1292,1295,1298,1301,1304],{"class":1206,"line":1265},4,[1204,1267,1268],{"class":1244},"  name",[1204,1270,1254],{"class":1217},[1204,1272,1273],{"class":1257}," `my-proxy-",[1204,1275,1276],{"class":1217},"${",[1204,1278,1279],{"class":1221},"Date",[1204,1281,1282],{"class":1234},".now",[1204,1284,1285],{"class":1244},"()",[1204,1287,1288],{"class":1234},".toString",[1204,1290,1291],{"class":1244},"(",[1204,1293,1294],{"class":1221},"36",[1204,1296,1297],{"class":1244},")",[1204,1299,1300],{"class":1217},"}",[1204,1302,1303],{"class":1257},"`",[1204,1305,1262],{"class":1261},[1204,1307,1309,1312,1314,1317,1319,1322,1325,1328,1330,1333,1335,1338,1340,1343,1345,1348,1350,1353,1356],{"class":1206,"line":1308},5,[1204,1310,1311],{"class":1244},"  config",[1204,1313,1254],{"class":1217},[1204,1315,1316],{"class":1244}," { type",[1204,1318,1254],{"class":1217},[1204,1320,1321],{"class":1257}," \"static\"",[1204,1323,1324],{"class":1261},",",[1204,1326,1327],{"class":1244}," url",[1204,1329,1254],{"class":1217},[1204,1331,1332],{"class":1244}," proxyUrl",[1204,1334,1324],{"class":1261},[1204,1336,1337],{"class":1244}," pool",[1204,1339,1254],{"class":1217},[1204,1341,1342],{"class":1257}," \"datacenter\"",[1204,1344,1324],{"class":1261},[1204,1346,1347],{"class":1244}," country",[1204,1349,1254],{"class":1217},[1204,1351,1352],{"class":1257}," \"DE\"",[1204,1354,1355],{"class":1244}," }",[1204,1357,1262],{"class":1261},[1204,1359,1361],{"class":1206,"line":1360},6,[1204,1362,1363],{"class":1244},"});\n",[1204,1365,1367,1370,1373,1375,1377,1379,1382,1385,1387,1390,1392,1394,1397,1399,1402,1405,1408,1410,1412,1415,1417,1419],{"class":1206,"line":1366},7,[1204,1368,1369],{"class":1221},"console",[1204,1371,1372],{"class":1234},".log",[1204,1374,1291],{"class":1244},[1204,1376,1303],{"class":1257},[1204,1378,1276],{"class":1217},[1204,1380,1381],{"class":1221},"provider",[1204,1383,1384],{"class":1244},".id",[1204,1386,1300],{"class":1217},[1204,1388,1389],{"class":1257},": ",[1204,1391,1276],{"class":1217},[1204,1393,1381],{"class":1221},[1204,1395,1396],{"class":1244},".status",[1204,1398,1300],{"class":1217},[1204,1400,1401],{"class":1217}," ${",[1204,1403,1404],{"class":1221},"JSON",[1204,1406,1407],{"class":1234},".stringify",[1204,1409,1291],{"class":1244},[1204,1411,1381],{"class":1221},[1204,1413,1414],{"class":1244},".config_public)",[1204,1416,1300],{"class":1217},[1204,1418,1303],{"class":1257},[1204,1420,1421],{"class":1244},");\n",[1025,1423,1424],{},"The examples on this page use placeholders: never paste a real credential into a ticket or a chat.",[1426,1427,1428],"h3",{"id":1031},"Proxies",[1025,1430,1431],{},"A single endpoint:",[1194,1433,1436],{"className":1434,"code":1435,"language":680,"meta":1200,"style":1200},"language-json shiki shiki-themes kaab-code kaab-code kaab-code","{ \"type\": \"static\", \"url\": \"http:\u002F\u002FUSER:PASSWORD@proxy.example.com:3128\", \"pool\": \"datacenter\" }\n",[1066,1437,1438],{"__ignoreMap":1200},[1204,1439,1440,1443,1446,1448,1450,1452,1455,1457,1460,1462,1465,1467,1469],{"class":1206,"line":1207},[1204,1441,1442],{"class":1244},"{ ",[1204,1444,1445],{"class":1217},"\"type\"",[1204,1447,1254],{"class":1261},[1204,1449,1321],{"class":1257},[1204,1451,1324],{"class":1261},[1204,1453,1454],{"class":1217}," \"url\"",[1204,1456,1254],{"class":1261},[1204,1458,1459],{"class":1257}," \"http:\u002F\u002FUSER:PASSWORD@proxy.example.com:3128\"",[1204,1461,1324],{"class":1261},[1204,1463,1464],{"class":1217}," \"pool\"",[1204,1466,1254],{"class":1261},[1204,1468,1342],{"class":1257},[1204,1470,1471],{"class":1244}," }\n",[1025,1473,1474],{},"A list. Each job sticks to one address for its whole run, and jobs spread across the list:",[1194,1476,1478],{"className":1434,"code":1477,"language":680,"meta":1200,"style":1200},"{ \"type\": \"list\", \"urls\": [\"http:\u002F\u002FUSER:PASSWORD@203.0.113.10:3128\", \"http:\u002F\u002FUSER:PASSWORD@203.0.113.11:3128\"], \"pool\": \"datacenter\" }\n",[1066,1479,1480],{"__ignoreMap":1200},[1204,1481,1482,1484,1486,1488,1491,1493,1496,1498,1501,1504,1506,1509,1512,1514,1516,1518,1520],{"class":1206,"line":1207},[1204,1483,1442],{"class":1244},[1204,1485,1445],{"class":1217},[1204,1487,1254],{"class":1261},[1204,1489,1490],{"class":1257}," \"list\"",[1204,1492,1324],{"class":1261},[1204,1494,1495],{"class":1217}," \"urls\"",[1204,1497,1254],{"class":1261},[1204,1499,1500],{"class":1244}," [",[1204,1502,1503],{"class":1257},"\"http:\u002F\u002FUSER:PASSWORD@203.0.113.10:3128\"",[1204,1505,1324],{"class":1261},[1204,1507,1508],{"class":1257}," \"http:\u002F\u002FUSER:PASSWORD@203.0.113.11:3128\"",[1204,1510,1511],{"class":1244},"]",[1204,1513,1324],{"class":1261},[1204,1515,1464],{"class":1217},[1204,1517,1254],{"class":1261},[1204,1519,1342],{"class":1257},[1204,1521,1471],{"class":1244},[1025,1523,1524],{},"A vendor's rotating gateway. With a preset, Kaabist writes the job's country and a per-job session\ninto the credential in that vendor's own format, so each job keeps one exit IP:",[1194,1526,1528],{"className":1434,"code":1527,"language":680,"meta":1200,"style":1200},"{ \"type\": \"gateway\", \"vendor\": \"brightdata\", \"url\": \"http:\u002F\u002Fbrd-customer-ID-zone-ZONE:PASSWORD@brd.superproxy.io:33335\", \"pool\": \"residential\", \"country\": \"DE\" }\n{ \"type\": \"gateway\", \"vendor\": \"oxylabs\", \"url\": \"http:\u002F\u002FUSER:PASSWORD@pr.oxylabs.io:7777\", \"pool\": \"residential\" }\n{ \"type\": \"gateway\", \"vendor\": \"decodo\", \"url\": \"http:\u002F\u002FUSER:PASSWORD@gate.decodo.com:7000\", \"pool\": \"residential\" }\n{ \"type\": \"gateway\", \"vendor\": \"iproyal\", \"url\": \"http:\u002F\u002FUSER:PASSWORD@geo.iproyal.com:12321\", \"pool\": \"residential\" }\n",[1066,1529,1530,1580,1618,1656],{"__ignoreMap":1200},[1204,1531,1532,1534,1536,1538,1541,1543,1546,1548,1551,1553,1555,1557,1560,1562,1564,1566,1569,1571,1574,1576,1578],{"class":1206,"line":1207},[1204,1533,1442],{"class":1244},[1204,1535,1445],{"class":1217},[1204,1537,1254],{"class":1261},[1204,1539,1540],{"class":1257}," \"gateway\"",[1204,1542,1324],{"class":1261},[1204,1544,1545],{"class":1217}," \"vendor\"",[1204,1547,1254],{"class":1261},[1204,1549,1550],{"class":1257}," \"brightdata\"",[1204,1552,1324],{"class":1261},[1204,1554,1454],{"class":1217},[1204,1556,1254],{"class":1261},[1204,1558,1559],{"class":1257}," \"http:\u002F\u002Fbrd-customer-ID-zone-ZONE:PASSWORD@brd.superproxy.io:33335\"",[1204,1561,1324],{"class":1261},[1204,1563,1464],{"class":1217},[1204,1565,1254],{"class":1261},[1204,1567,1568],{"class":1257}," \"residential\"",[1204,1570,1324],{"class":1261},[1204,1572,1573],{"class":1217}," \"country\"",[1204,1575,1254],{"class":1261},[1204,1577,1352],{"class":1257},[1204,1579,1471],{"class":1244},[1204,1581,1582,1584,1586,1588,1590,1592,1594,1596,1599,1601,1603,1605,1608,1610,1612,1614,1616],{"class":1206,"line":1214},[1204,1583,1442],{"class":1244},[1204,1585,1445],{"class":1217},[1204,1587,1254],{"class":1261},[1204,1589,1540],{"class":1257},[1204,1591,1324],{"class":1261},[1204,1593,1545],{"class":1217},[1204,1595,1254],{"class":1261},[1204,1597,1598],{"class":1257}," \"oxylabs\"",[1204,1600,1324],{"class":1261},[1204,1602,1454],{"class":1217},[1204,1604,1254],{"class":1261},[1204,1606,1607],{"class":1257}," \"http:\u002F\u002FUSER:PASSWORD@pr.oxylabs.io:7777\"",[1204,1609,1324],{"class":1261},[1204,1611,1464],{"class":1217},[1204,1613,1254],{"class":1261},[1204,1615,1568],{"class":1257},[1204,1617,1471],{"class":1244},[1204,1619,1620,1622,1624,1626,1628,1630,1632,1634,1637,1639,1641,1643,1646,1648,1650,1652,1654],{"class":1206,"line":1248},[1204,1621,1442],{"class":1244},[1204,1623,1445],{"class":1217},[1204,1625,1254],{"class":1261},[1204,1627,1540],{"class":1257},[1204,1629,1324],{"class":1261},[1204,1631,1545],{"class":1217},[1204,1633,1254],{"class":1261},[1204,1635,1636],{"class":1257}," \"decodo\"",[1204,1638,1324],{"class":1261},[1204,1640,1454],{"class":1217},[1204,1642,1254],{"class":1261},[1204,1644,1645],{"class":1257}," \"http:\u002F\u002FUSER:PASSWORD@gate.decodo.com:7000\"",[1204,1647,1324],{"class":1261},[1204,1649,1464],{"class":1217},[1204,1651,1254],{"class":1261},[1204,1653,1568],{"class":1257},[1204,1655,1471],{"class":1244},[1204,1657,1658,1660,1662,1664,1666,1668,1670,1672,1675,1677,1679,1681,1684,1686,1688,1690,1692],{"class":1206,"line":1265},[1204,1659,1442],{"class":1244},[1204,1661,1445],{"class":1217},[1204,1663,1254],{"class":1261},[1204,1665,1540],{"class":1257},[1204,1667,1324],{"class":1261},[1204,1669,1545],{"class":1217},[1204,1671,1254],{"class":1261},[1204,1673,1674],{"class":1257}," \"iproyal\"",[1204,1676,1324],{"class":1261},[1204,1678,1454],{"class":1217},[1204,1680,1254],{"class":1261},[1204,1682,1683],{"class":1257}," \"http:\u002F\u002FUSER:PASSWORD@geo.iproyal.com:12321\"",[1204,1685,1324],{"class":1261},[1204,1687,1464],{"class":1217},[1204,1689,1254],{"class":1261},[1204,1691,1568],{"class":1257},[1204,1693,1471],{"class":1244},[1025,1695,1696],{},"Webshare's proxy list is fetched from its API with your key:",[1194,1698,1700],{"className":1434,"code":1699,"language":680,"meta":1200,"style":1200},"{ \"type\": \"list\", \"vendor\": \"webshare\", \"api_key\": \"WEBSHARE_API_KEY\", \"pool\": \"datacenter\" }\n",[1066,1701,1702],{"__ignoreMap":1200},[1204,1703,1704,1706,1708,1710,1712,1714,1716,1718,1721,1723,1726,1728,1731,1733,1735,1737,1739],{"class":1206,"line":1207},[1204,1705,1442],{"class":1244},[1204,1707,1445],{"class":1217},[1204,1709,1254],{"class":1261},[1204,1711,1490],{"class":1257},[1204,1713,1324],{"class":1261},[1204,1715,1545],{"class":1217},[1204,1717,1254],{"class":1261},[1204,1719,1720],{"class":1257}," \"webshare\"",[1204,1722,1324],{"class":1261},[1204,1724,1725],{"class":1217}," \"api_key\"",[1204,1727,1254],{"class":1261},[1204,1729,1730],{"class":1257}," \"WEBSHARE_API_KEY\"",[1204,1732,1324],{"class":1261},[1204,1734,1464],{"class":1217},[1204,1736,1254],{"class":1261},[1204,1738,1342],{"class":1257},[1204,1740,1471],{"class":1244},[1025,1742,1743,1744,1130,1747,1750,1751,1235],{},"A gateway without a preset can still be steered: ",[1066,1745,1746],{},"{country}",[1066,1748,1749],{},"{session}"," in the URL are\nfilled in per job, for example ",[1066,1752,1753],{},"http:\u002F\u002Facme-{country}-{session}:PASSWORD@gw.example.com:8000",[1025,1755,1756,1757,1760],{},"Proxy hosts must be public addresses. A proxy on a private network is refused (",[1066,1758,1759],{},"422 ssrf_blocked",").",[1426,1762,1764],{"id":1763},"language-models","Language models",[1194,1766,1768],{"className":1434,"code":1767,"language":680,"meta":1200,"style":1200},"{ \"kind\": \"llm\", \"name\": \"openai\", \"config\": { \"vendor\": \"openai\", \"api_key\": \"sk-…\", \"model\": \"gpt-4.1\" } }\n{ \"kind\": \"llm\", \"name\": \"claude\", \"config\": { \"vendor\": \"anthropic\", \"api_key\": \"sk-ant-…\", \"model\": \"claude-sonnet-5-5\" } }\n{ \"kind\": \"llm\", \"name\": \"gemini\", \"config\": { \"vendor\": \"gemini\", \"api_key\": \"AIza…\", \"model\": \"gemini-2.5-flash\" } }\n{ \"kind\": \"llm\", \"name\": \"azure\", \"config\": { \"vendor\": \"azure_openai\", \"api_key\": \"…\", \"base_url\": \"https:\u002F\u002FRESOURCE.openai.azure.com\", \"model\": \"DEPLOYMENT\" } }\n{ \"kind\": \"llm\", \"name\": \"gateway\", \"config\": { \"vendor\": \"openai_compatible\", \"api_key\": \"…\", \"base_url\": \"https:\u002F\u002Fllm.example.com\u002Fv1\", \"model\": \"MODEL\" } }\n",[1066,1769,1770,1831,1885,1938,2002],{"__ignoreMap":1200},[1204,1771,1772,1774,1777,1779,1782,1784,1787,1789,1792,1794,1797,1799,1802,1805,1807,1809,1811,1813,1815,1818,1820,1823,1825,1828],{"class":1206,"line":1207},[1204,1773,1442],{"class":1244},[1204,1775,1776],{"class":1217},"\"kind\"",[1204,1778,1254],{"class":1261},[1204,1780,1781],{"class":1257}," \"llm\"",[1204,1783,1324],{"class":1261},[1204,1785,1786],{"class":1217}," \"name\"",[1204,1788,1254],{"class":1261},[1204,1790,1791],{"class":1257}," \"openai\"",[1204,1793,1324],{"class":1261},[1204,1795,1796],{"class":1217}," \"config\"",[1204,1798,1254],{"class":1261},[1204,1800,1801],{"class":1244}," { ",[1204,1803,1804],{"class":1217},"\"vendor\"",[1204,1806,1254],{"class":1261},[1204,1808,1791],{"class":1257},[1204,1810,1324],{"class":1261},[1204,1812,1725],{"class":1217},[1204,1814,1254],{"class":1261},[1204,1816,1817],{"class":1257}," \"sk-…\"",[1204,1819,1324],{"class":1261},[1204,1821,1822],{"class":1217}," \"model\"",[1204,1824,1254],{"class":1261},[1204,1826,1827],{"class":1257}," \"gpt-4.1\"",[1204,1829,1830],{"class":1244}," } }\n",[1204,1832,1833,1835,1837,1839,1841,1843,1845,1847,1850,1852,1854,1856,1858,1860,1862,1865,1867,1869,1871,1874,1876,1878,1880,1883],{"class":1206,"line":1214},[1204,1834,1442],{"class":1244},[1204,1836,1776],{"class":1217},[1204,1838,1254],{"class":1261},[1204,1840,1781],{"class":1257},[1204,1842,1324],{"class":1261},[1204,1844,1786],{"class":1217},[1204,1846,1254],{"class":1261},[1204,1848,1849],{"class":1257}," \"claude\"",[1204,1851,1324],{"class":1261},[1204,1853,1796],{"class":1217},[1204,1855,1254],{"class":1261},[1204,1857,1801],{"class":1244},[1204,1859,1804],{"class":1217},[1204,1861,1254],{"class":1261},[1204,1863,1864],{"class":1257}," \"anthropic\"",[1204,1866,1324],{"class":1261},[1204,1868,1725],{"class":1217},[1204,1870,1254],{"class":1261},[1204,1872,1873],{"class":1257}," \"sk-ant-…\"",[1204,1875,1324],{"class":1261},[1204,1877,1822],{"class":1217},[1204,1879,1254],{"class":1261},[1204,1881,1882],{"class":1257}," \"claude-sonnet-5-5\"",[1204,1884,1830],{"class":1244},[1204,1886,1887,1889,1891,1893,1895,1897,1899,1901,1904,1906,1908,1910,1912,1914,1916,1918,1920,1922,1924,1927,1929,1931,1933,1936],{"class":1206,"line":1248},[1204,1888,1442],{"class":1244},[1204,1890,1776],{"class":1217},[1204,1892,1254],{"class":1261},[1204,1894,1781],{"class":1257},[1204,1896,1324],{"class":1261},[1204,1898,1786],{"class":1217},[1204,1900,1254],{"class":1261},[1204,1902,1903],{"class":1257}," \"gemini\"",[1204,1905,1324],{"class":1261},[1204,1907,1796],{"class":1217},[1204,1909,1254],{"class":1261},[1204,1911,1801],{"class":1244},[1204,1913,1804],{"class":1217},[1204,1915,1254],{"class":1261},[1204,1917,1903],{"class":1257},[1204,1919,1324],{"class":1261},[1204,1921,1725],{"class":1217},[1204,1923,1254],{"class":1261},[1204,1925,1926],{"class":1257}," \"AIza…\"",[1204,1928,1324],{"class":1261},[1204,1930,1822],{"class":1217},[1204,1932,1254],{"class":1261},[1204,1934,1935],{"class":1257}," \"gemini-2.5-flash\"",[1204,1937,1830],{"class":1244},[1204,1939,1940,1942,1944,1946,1948,1950,1952,1954,1957,1959,1961,1963,1965,1967,1969,1972,1974,1976,1978,1981,1983,1986,1988,1991,1993,1995,1997,2000],{"class":1206,"line":1265},[1204,1941,1442],{"class":1244},[1204,1943,1776],{"class":1217},[1204,1945,1254],{"class":1261},[1204,1947,1781],{"class":1257},[1204,1949,1324],{"class":1261},[1204,1951,1786],{"class":1217},[1204,1953,1254],{"class":1261},[1204,1955,1956],{"class":1257}," \"azure\"",[1204,1958,1324],{"class":1261},[1204,1960,1796],{"class":1217},[1204,1962,1254],{"class":1261},[1204,1964,1801],{"class":1244},[1204,1966,1804],{"class":1217},[1204,1968,1254],{"class":1261},[1204,1970,1971],{"class":1257}," \"azure_openai\"",[1204,1973,1324],{"class":1261},[1204,1975,1725],{"class":1217},[1204,1977,1254],{"class":1261},[1204,1979,1980],{"class":1257}," \"…\"",[1204,1982,1324],{"class":1261},[1204,1984,1985],{"class":1217}," \"base_url\"",[1204,1987,1254],{"class":1261},[1204,1989,1990],{"class":1257}," \"https:\u002F\u002FRESOURCE.openai.azure.com\"",[1204,1992,1324],{"class":1261},[1204,1994,1822],{"class":1217},[1204,1996,1254],{"class":1261},[1204,1998,1999],{"class":1257}," \"DEPLOYMENT\"",[1204,2001,1830],{"class":1244},[1204,2003,2004,2006,2008,2010,2012,2014,2016,2018,2020,2022,2024,2026,2028,2030,2032,2035,2037,2039,2041,2043,2045,2047,2049,2052,2054,2056,2058,2061],{"class":1206,"line":1308},[1204,2005,1442],{"class":1244},[1204,2007,1776],{"class":1217},[1204,2009,1254],{"class":1261},[1204,2011,1781],{"class":1257},[1204,2013,1324],{"class":1261},[1204,2015,1786],{"class":1217},[1204,2017,1254],{"class":1261},[1204,2019,1540],{"class":1257},[1204,2021,1324],{"class":1261},[1204,2023,1796],{"class":1217},[1204,2025,1254],{"class":1261},[1204,2027,1801],{"class":1244},[1204,2029,1804],{"class":1217},[1204,2031,1254],{"class":1261},[1204,2033,2034],{"class":1257}," \"openai_compatible\"",[1204,2036,1324],{"class":1261},[1204,2038,1725],{"class":1217},[1204,2040,1254],{"class":1261},[1204,2042,1980],{"class":1257},[1204,2044,1324],{"class":1261},[1204,2046,1985],{"class":1217},[1204,2048,1254],{"class":1261},[1204,2050,2051],{"class":1257}," \"https:\u002F\u002Fllm.example.com\u002Fv1\"",[1204,2053,1324],{"class":1261},[1204,2055,1822],{"class":1217},[1204,2057,1254],{"class":1261},[1204,2059,2060],{"class":1257}," \"MODEL\"",[1204,2062,1830],{"class":1244},[1025,2064,2065,2067,2068,2071,2072,2075,2076,2079,2080,2083],{},[1066,2066,652],{}," is required for Azure OpenAI and OpenAI-compatible servers. Supported models are listed\nper vendor. Models marked ",[1029,2069,2070],{},"capable"," heal locators and classify pages; ",[1029,2073,2074],{},"basic"," models (smaller,\ncheaper ones, and any model behind an OpenAI-compatible server until it is listed) are accepted and\nmarked ",[1066,2077,2078],{},"unsupported_for_healing"," in ",[1066,2081,2082],{},"config_public",": they classify pages only. A model never decides\nanything by itself: every selector it suggests is checked against the page before it becomes a\ncandidate.",[1426,2085,2087],{"id":2086},"captcha-solvers","Captcha solvers",[1194,2089,2091],{"className":1434,"code":2090,"language":680,"meta":1200,"style":1200},"{ \"kind\": \"captcha\", \"name\": \"solver\", \"config\": { \"vendor\": \"2captcha\", \"api_key\": \"…\" } }\n{ \"kind\": \"captcha\", \"name\": \"solver\", \"config\": { \"vendor\": \"capsolver\", \"api_key\": \"…\" } }\n",[1066,2092,2093,2138],{"__ignoreMap":1200},[1204,2094,2095,2097,2099,2101,2104,2106,2108,2110,2113,2115,2117,2119,2121,2123,2125,2128,2130,2132,2134,2136],{"class":1206,"line":1207},[1204,2096,1442],{"class":1244},[1204,2098,1776],{"class":1217},[1204,2100,1254],{"class":1261},[1204,2102,2103],{"class":1257}," \"captcha\"",[1204,2105,1324],{"class":1261},[1204,2107,1786],{"class":1217},[1204,2109,1254],{"class":1261},[1204,2111,2112],{"class":1257}," \"solver\"",[1204,2114,1324],{"class":1261},[1204,2116,1796],{"class":1217},[1204,2118,1254],{"class":1261},[1204,2120,1801],{"class":1244},[1204,2122,1804],{"class":1217},[1204,2124,1254],{"class":1261},[1204,2126,2127],{"class":1257}," \"2captcha\"",[1204,2129,1324],{"class":1261},[1204,2131,1725],{"class":1217},[1204,2133,1254],{"class":1261},[1204,2135,1980],{"class":1257},[1204,2137,1830],{"class":1244},[1204,2139,2140,2142,2144,2146,2148,2150,2152,2154,2156,2158,2160,2162,2164,2166,2168,2171,2173,2175,2177,2179],{"class":1206,"line":1214},[1204,2141,1442],{"class":1244},[1204,2143,1776],{"class":1217},[1204,2145,1254],{"class":1261},[1204,2147,2103],{"class":1257},[1204,2149,1324],{"class":1261},[1204,2151,1786],{"class":1217},[1204,2153,1254],{"class":1261},[1204,2155,2112],{"class":1257},[1204,2157,1324],{"class":1261},[1204,2159,1796],{"class":1217},[1204,2161,1254],{"class":1261},[1204,2163,1801],{"class":1244},[1204,2165,1804],{"class":1217},[1204,2167,1254],{"class":1261},[1204,2169,2170],{"class":1257}," \"capsolver\"",[1204,2172,1324],{"class":1261},[1204,2174,1725],{"class":1217},[1204,2176,1254],{"class":1261},[1204,2178,1980],{"class":1257},[1204,2180,1830],{"class":1244},[1042,2182,2184],{"id":2183},"using-a-provider-in-a-job","Using a provider in a job",[1025,2186,2187],{},"Name it in the job's (or the program's) options:",[1194,2189,2191],{"className":1434,"code":2190,"language":680,"meta":1200,"style":1200},"{\n  \"program\": \"acme-prices\",\n  \"options\": {\n    \"proxy\": { \"mode\": \"byo\", \"byo_id\": \"byo_…\", \"fallback\": \"none\" },\n    \"llm\": { \"byo_id\": \"byo_…\" },\n    \"captcha\": { \"byo_id\": \"byo_…\" }\n  }\n}\n",[1066,2192,2193,2198,2210,2220,2261,2281,2298,2303],{"__ignoreMap":1200},[1204,2194,2195],{"class":1206,"line":1207},[1204,2196,2197],{"class":1244},"{\n",[1204,2199,2200,2203,2205,2208],{"class":1206,"line":1214},[1204,2201,2202],{"class":1217},"  \"program\"",[1204,2204,1254],{"class":1261},[1204,2206,2207],{"class":1257}," \"acme-prices\"",[1204,2209,1262],{"class":1261},[1204,2211,2212,2215,2217],{"class":1206,"line":1248},[1204,2213,2214],{"class":1217},"  \"options\"",[1204,2216,1254],{"class":1261},[1204,2218,2219],{"class":1244}," {\n",[1204,2221,2222,2225,2227,2229,2232,2234,2237,2239,2242,2244,2247,2249,2252,2254,2257,2259],{"class":1206,"line":1265},[1204,2223,2224],{"class":1217},"    \"proxy\"",[1204,2226,1254],{"class":1261},[1204,2228,1801],{"class":1244},[1204,2230,2231],{"class":1217},"\"mode\"",[1204,2233,1254],{"class":1261},[1204,2235,2236],{"class":1257}," \"byo\"",[1204,2238,1324],{"class":1261},[1204,2240,2241],{"class":1217}," \"byo_id\"",[1204,2243,1254],{"class":1261},[1204,2245,2246],{"class":1257}," \"byo_…\"",[1204,2248,1324],{"class":1261},[1204,2250,2251],{"class":1217}," \"fallback\"",[1204,2253,1254],{"class":1261},[1204,2255,2256],{"class":1257}," \"none\"",[1204,2258,1355],{"class":1244},[1204,2260,1262],{"class":1261},[1204,2262,2263,2266,2268,2270,2273,2275,2277,2279],{"class":1206,"line":1308},[1204,2264,2265],{"class":1217},"    \"llm\"",[1204,2267,1254],{"class":1261},[1204,2269,1801],{"class":1244},[1204,2271,2272],{"class":1217},"\"byo_id\"",[1204,2274,1254],{"class":1261},[1204,2276,2246],{"class":1257},[1204,2278,1355],{"class":1244},[1204,2280,1262],{"class":1261},[1204,2282,2283,2286,2288,2290,2292,2294,2296],{"class":1206,"line":1360},[1204,2284,2285],{"class":1217},"    \"captcha\"",[1204,2287,1254],{"class":1261},[1204,2289,1801],{"class":1244},[1204,2291,2272],{"class":1217},[1204,2293,1254],{"class":1261},[1204,2295,2246],{"class":1257},[1204,2297,1471],{"class":1244},[1204,2299,2300],{"class":1206,"line":1366},[1204,2301,2302],{"class":1244},"  }\n",[1204,2304,2306],{"class":1206,"line":2305},8,[1204,2307,2308],{"class":1244},"}\n",[1025,2310,2311,2312,2316,2317,2320,2321,2324],{},"Or set organisation defaults once in the panel (",[2313,2314,2315],"em",{},"Settings → Providers","), and jobs that name none\nuse them: ",[1066,2318,2319],{},"proxy.mode: \"byo\""," without a ",[1066,2322,2323],{},"byo_id"," uses the default proxy, and every job uses the\ndefault model and solver.",[1025,2326,2327,2328,2331,2332,2335,2336,1760],{},"A job naming a provider that is failing its health checks is refused with\n",[1066,2329,2330],{},"422 byo_provider_failing","; one naming a provider of another kind, or another organisation's, with\n",[1066,2333,2334],{},"422 validation_failed",". A schedule whose provider is failing skips that run (",[1066,2337,2338],{},"byo_unavailable",[1426,2340,2342,2343,2346],{"id":2341},"what-fallback-means","What ",[1066,2344,2345],{},"fallback"," means",[1025,2348,2349],{},"When your proxy cannot be reached:",[1050,2351,2352,2364],{},[1053,2353,2354,2359,2360,2363],{},[1029,2355,2356],{},[1066,2357,2358],{},"\"none\""," (the default): the job fails with ",[1066,2361,2362],{},"byo_proxy_unreachable",". Your traffic never\nleaves through an exit you did not choose.",[1053,2365,2366,2371,2372,2375],{},[1029,2367,2368],{},[1066,2369,2370],{},"\"platform\"",": the job continues through Kaabist's own proxies, the result carries the warning\n",[1066,2373,2374],{},"byo_fallback_used",", and that job's proxy traffic is billed at the platform's rate.",[1042,2377,2379],{"id":2378},"billing","Billing",[1025,2381,2382,2383,2386,2387,2390,2391,2394,2395,2398],{},"A BYO provider removes only its own item from the job's bill: a BYO proxy makes the ",[1066,2384,2385],{},"proxy"," line\nzero, a BYO model the ",[1066,2388,2389],{},"llm"," line, a BYO solver the ",[1066,2392,2393],{},"captcha"," line. Compute is always billed. The\nbreakdown in ",[1066,2396,2397],{},"meta.credits.breakdown"," shows each line, including the zeroed ones. You pay your\nvendor directly for what they served.",[1042,2400,2402],{"id":2401},"tests-and-health","Tests and health",[1025,2404,2405,2408,2409,1254],{},[1066,2406,2407],{},"POST \u002Fv1\u002Fbyo-providers\u002F{id}\u002Ftest"," tests a provider again on demand and answers\n",[1066,2410,2411],{},"{ ok, latency_ms, detail, egress_ip? }",[1050,2413,2414,2424,2430],{},[1053,2415,2416,2417,2419,2420,2423],{},"a ",[1029,2418,2385],{}," is dialled from Kaabist's egress network and fetches an echo page; the answer includes\nthe exit IP it saw (",[1066,2421,2422],{},"egress_ip",");",[1053,2425,2416,2426,2429],{},[1029,2427,2428],{},"model"," is asked to classify a small canned page;",[1053,2431,2416,2432,2435],{},[1029,2433,2434],{},"solver"," reports its balance.",[1191,2437,2438],{},[1194,2439,2441],{"className":1196,"code":2440,"filename":1198,"language":1199,"meta":1200,"style":1200},"\u002F\u002F Probes the proxy from Kaabist's egress network and stores the verdict.\nconst result = await kaab.byoProviders.test(provider.id);\nconsole.log(`ok=${result.ok} latency=${result.latency_ms} ms: ${result.detail}`);\nconst checked = await kaab.byoProviders.get(provider.id);\nconsole.log(`${checked.id} is ${checked.status} (checked ${checked.last_health_at})`);\n",[1066,2442,2443,2448,2475,2524,2550],{"__ignoreMap":1200},[1204,2444,2445],{"class":1206,"line":1207},[1204,2446,2447],{"class":1210},"\u002F\u002F Probes the proxy from Kaabist's egress network and stores the verdict.\n",[1204,2449,2450,2452,2455,2457,2459,2461,2463,2465,2468,2470,2472],{"class":1206,"line":1214},[1204,2451,1218],{"class":1217},[1204,2453,2454],{"class":1221}," result",[1204,2456,1225],{"class":1217},[1204,2458,1228],{"class":1217},[1204,2460,1231],{"class":1221},[1204,2462,1235],{"class":1234},[1204,2464,1238],{"class":1221},[1204,2466,2467],{"class":1234},".test",[1204,2469,1291],{"class":1244},[1204,2471,1381],{"class":1221},[1204,2473,2474],{"class":1244},".id);\n",[1204,2476,2477,2479,2481,2483,2486,2488,2491,2494,2496,2499,2501,2503,2506,2508,2511,2513,2515,2518,2520,2522],{"class":1206,"line":1248},[1204,2478,1369],{"class":1221},[1204,2480,1372],{"class":1234},[1204,2482,1291],{"class":1244},[1204,2484,2485],{"class":1257},"`ok=",[1204,2487,1276],{"class":1217},[1204,2489,2490],{"class":1221},"result",[1204,2492,2493],{"class":1244},".ok",[1204,2495,1300],{"class":1217},[1204,2497,2498],{"class":1257}," latency=",[1204,2500,1276],{"class":1217},[1204,2502,2490],{"class":1221},[1204,2504,2505],{"class":1244},".latency_ms",[1204,2507,1300],{"class":1217},[1204,2509,2510],{"class":1257}," ms: ",[1204,2512,1276],{"class":1217},[1204,2514,2490],{"class":1221},[1204,2516,2517],{"class":1244},".detail",[1204,2519,1300],{"class":1217},[1204,2521,1303],{"class":1257},[1204,2523,1421],{"class":1244},[1204,2525,2526,2528,2531,2533,2535,2537,2539,2541,2544,2546,2548],{"class":1206,"line":1265},[1204,2527,1218],{"class":1217},[1204,2529,2530],{"class":1221}," checked",[1204,2532,1225],{"class":1217},[1204,2534,1228],{"class":1217},[1204,2536,1231],{"class":1221},[1204,2538,1235],{"class":1234},[1204,2540,1238],{"class":1221},[1204,2542,2543],{"class":1234},".get",[1204,2545,1291],{"class":1244},[1204,2547,1381],{"class":1221},[1204,2549,2474],{"class":1244},[1204,2551,2552,2554,2556,2558,2560,2562,2565,2567,2569,2572,2574,2576,2578,2580,2583,2585,2587,2590,2592,2595],{"class":1206,"line":1308},[1204,2553,1369],{"class":1221},[1204,2555,1372],{"class":1234},[1204,2557,1291],{"class":1244},[1204,2559,1303],{"class":1257},[1204,2561,1276],{"class":1217},[1204,2563,2564],{"class":1221},"checked",[1204,2566,1384],{"class":1244},[1204,2568,1300],{"class":1217},[1204,2570,2571],{"class":1257}," is ",[1204,2573,1276],{"class":1217},[1204,2575,2564],{"class":1221},[1204,2577,1396],{"class":1244},[1204,2579,1300],{"class":1217},[1204,2581,2582],{"class":1257}," (checked ",[1204,2584,1276],{"class":1217},[1204,2586,2564],{"class":1221},[1204,2588,2589],{"class":1244},".last_health_at",[1204,2591,1300],{"class":1217},[1204,2593,2594],{"class":1257},")`",[1204,2596,1421],{"class":1244},[1025,2598,2599,2600,2603,2604,2607,2608,2611,2612,2615,2616,1760],{},"Kaabist repeats the check every hour. One failure makes a provider ",[1066,2601,2602],{},"degraded","; jobs still run.\nThree failures in a row make it ",[1066,2605,2606],{},"failing",": jobs naming it are refused, the event ",[1066,2609,2610],{},"byo.unhealthy","\nis sent to your webhooks and your organisation's owners and admins get an e-mail. Two passes in a\nrow make it ",[1066,2613,2614],{},"healthy"," again (",[1066,2617,2618],{},"byo.recovered",[1025,2620,2621,2622,1109,2625,2628,2629,2632,2633,2636,2637,2640],{},"When your own model fails (a refused key, an exhausted quota), healing continues without it, and\nthe proposal's evidence says why (",[1066,2623,2624],{},"byo_llm_auth_failed",[1066,2626,2627],{},"byo_llm_quota_exceeded",", …). When your\nown solver refuses its key or runs out of balance, a job with ",[1066,2630,2631],{},"policies.captcha: \"solve\""," fails\nwith ",[1066,2634,2635],{},"byo_captcha_auth_failed"," or ",[1066,2638,2639],{},"byo_captcha_balance",", because nobody but you can fix that.",[1042,2642,2644],{"id":2643},"how-your-credentials-are-kept","How your credentials are kept",[1050,2646,2647,2665,2668,2671],{},[1053,2648,2649,2650,2653,2654,2657,2658,2661,2662,2664],{},"Credentials are ",[1029,2651,2652],{},"write-only",". Kaabist encrypts them with your organisation's key the moment they\narrive and never returns them: not in ",[1066,2655,2656],{},"GET",", not in errors, not in logs. You can replace them\nwith ",[1066,2659,2660],{},"PATCH","; you cannot read them back. A ",[1066,2663,2660],{}," that changes only, say, the country keeps the\nstored credentials, and re-tests the provider.",[1053,2666,2667],{},"The plaintext exists only inside the processes that use it: the egress gateway, and the worker or\nhealer that calls your model or solver.",[1053,2669,2670],{},"What Kaabist learns about a site through your providers stays with your organisation: it never\nimproves the platform-wide site profile.",[1053,2672,2673,2674,1760],{},"A provider cannot be deleted while an organisation default or an active schedule still uses it\n(",[1066,2675,2676],{},"409 byo_in_use",[1042,2678,2680],{"id":2679},"worked-example","Worked example",[1025,2682,2683],{},"Send a job through your own proxy and check what the bill says:",[2685,2686,2687,2703,2715,2805],"ol",{},[1053,2688,2689,2690,2692,2693,2695,2696,1109,2698,1130,2701,1235],{},"Register the proxy as in the first snippet. The answer is the provider, ",[1066,2691,2614],{}," when its first\ntest passed, with your URL nowhere in it: ",[1066,2694,2082],{}," shows ",[1066,2697,744],{},[1066,2699,2700],{},"pool",[1066,2702,660],{},[1053,2704,2705,2706,2571,2709,1130,2712,2714],{},"Test it. ",[1066,2707,2708],{},"ok",[1066,2710,2711],{},"true",[1066,2713,2422],{}," is your proxy's exit address, not Kaabist's.",[1053,2716,2717,2718],{},"Run a job on a product page through it:",[1194,2719,2721],{"className":1434,"code":2720,"language":680,"meta":1200,"style":1200},"{ \"url\": \"https:\u002F\u002Fshop.example.com\u002Fp\u002F1\", \"extract\": { \"title\": \"h1\" },\n  \"options\": { \"max_tier\": \"http\", \"proxy\": { \"mode\": \"byo\", \"byo_id\": \"byo_…\", \"fallback\": \"none\" } } }\n",[1066,2722,2723,2756],{"__ignoreMap":1200},[1204,2724,2725,2727,2730,2732,2735,2737,2740,2742,2744,2747,2749,2752,2754],{"class":1206,"line":1207},[1204,2726,1442],{"class":1244},[1204,2728,2729],{"class":1217},"\"url\"",[1204,2731,1254],{"class":1261},[1204,2733,2734],{"class":1257}," \"https:\u002F\u002Fshop.example.com\u002Fp\u002F1\"",[1204,2736,1324],{"class":1261},[1204,2738,2739],{"class":1217}," \"extract\"",[1204,2741,1254],{"class":1261},[1204,2743,1801],{"class":1244},[1204,2745,2746],{"class":1217},"\"title\"",[1204,2748,1254],{"class":1261},[1204,2750,2751],{"class":1257}," \"h1\"",[1204,2753,1355],{"class":1244},[1204,2755,1262],{"class":1261},[1204,2757,2758,2760,2762,2764,2767,2769,2772,2774,2776,2778,2780,2782,2784,2786,2788,2790,2792,2794,2796,2798,2800,2802],{"class":1206,"line":1214},[1204,2759,2214],{"class":1217},[1204,2761,1254],{"class":1261},[1204,2763,1801],{"class":1244},[1204,2765,2766],{"class":1217},"\"max_tier\"",[1204,2768,1254],{"class":1261},[1204,2770,2771],{"class":1257}," \"http\"",[1204,2773,1324],{"class":1261},[1204,2775,1258],{"class":1217},[1204,2777,1254],{"class":1261},[1204,2779,1801],{"class":1244},[1204,2781,2231],{"class":1217},[1204,2783,1254],{"class":1261},[1204,2785,2236],{"class":1257},[1204,2787,1324],{"class":1261},[1204,2789,2241],{"class":1217},[1204,2791,1254],{"class":1261},[1204,2793,2246],{"class":1257},[1204,2795,1324],{"class":1261},[1204,2797,2251],{"class":1217},[1204,2799,1254],{"class":1261},[1204,2801,2256],{"class":1257},[1204,2803,2804],{"class":1244}," } } }\n",[1053,2806,2807,2808,2571,2811,2814],{},"The job succeeds, and ",[1066,2809,2810],{},"meta.credits.breakdown.proxy",[1066,2812,2813],{},"0",": you paid your vendor for those\nbytes, not Kaabist.",[1042,2816,2818],{"id":2817},"pitfalls","Pitfalls",[1050,2820,2821,2833,2845,2854,2864],{},[1053,2822,2823,2829,2830,2832],{},[1029,2824,2825,2828],{},[1066,2826,2827],{},"fallback: \"platform\""," changes where your traffic exits."," Choose it only when finishing the job\nmatters more than the exit; the warning ",[1066,2831,2374],{}," tells you when it happened.",[1053,2834,2835,2838,2839,2841,2842,2844],{},[1029,2836,2837],{},"One shared session per gateway."," A gateway without a preset or a ",[1066,2840,1749],{}," placeholder may\nrotate the exit IP mid-job, which logs a site out. Use a preset, or put ",[1066,2843,1749],{}," in the URL.",[1053,2846,2847,2850,2851,2853],{},[1029,2848,2849],{},"Basic models do not heal."," A provider marked ",[1066,2852,2078],{}," classifies pages but\nnever proposes a locator; pick a capable model if you rely on healing.",[1053,2855,2856,2859,2860,1130,2862,1235],{},[1029,2857,2858],{},"Failing providers block jobs."," After three failed checks, jobs that name the provider are\nrefused and schedules skip their runs. Subscribe to ",[1066,2861,2610],{},[1066,2863,2618],{},[1053,2865,2866,2869,2870,1760],{},[1029,2867,2868],{},"Deleting a provider in use."," Remove it from the organisation defaults and from active\nschedules first (",[1066,2871,2676],{},[1042,2873,155],{"id":2874},"reference",[1050,2876,2877,2900,2917,2938],{},[1053,2878,2879,2880,1262,2885,1262,2889,1262,2893,1262,2897],{},"API: ",[2881,2882,2884],"a",{"href":2883},"\u002Freference\u002Fapi\u002Fbyo-providers\u002Fcreate-byo-provider","create",[2881,2886,2888],{"href":2887},"\u002Freference\u002Fapi\u002Fbyo-providers\u002Ftest-byo-provider","test",[2881,2890,2892],{"href":2891},"\u002Freference\u002Fapi\u002Fbyo-providers\u002Fupdate-byo-provider","update",[2881,2894,2896],{"href":2895},"\u002Freference\u002Fapi\u002Fbyo-providers\u002Fdelete-byo-provider","delete",[2881,2898,1112],{"href":2899},"\u002Freference\u002Fapi\u002Fbyo-providers\u002Flist-byo-providers",[1053,2901,2902,2906,2907,2910,2911,1109,2913,1109,2915,1297],{},[2881,2903,2905],{"href":2904},"\u002Freference\u002Fapi\u002Fschemas\u002Fbyo-provider","BYO provider schema",", job ",[2881,2908,531],{"href":2909},"\u002Freference\u002Fdsl\u002Foptions","\n(",[1066,2912,2385],{},[1066,2914,2389],{},[1066,2916,2393],{},[1053,2918,2919,2923,2924,2927,2928,2923,2931,1262,2933,2927,2935],{},[2881,2920,2922],{"href":2921},"\u002Freference\u002Fcodes#errors","Error codes"," (",[1066,2925,2926],{},"byo_*","), ",[2881,2929,839],{"href":2930},"\u002Freference\u002Fevents",[1066,2932,2610],{},[1066,2934,2618],{},[2881,2936,1009],{"href":2937},"\u002Freference\u002Fplans",[1053,2939,2940,2941,1262,2945],{},"Concepts: ",[2881,2942,2944],{"href":2943},"\u002Fconcepts\u002Fegress-and-proxies","egress and proxies",[2881,2946,2948],{"href":2947},"\u002Fconcepts\u002Fcredits-and-billing","credits and billing",[2950,2951,2952],"style",{},"html pre.shiki code .sKog0, html code.shiki .sKog0{--shiki-light:var(--kaab-code-token-comment);--shiki-default:var(--kaab-code-token-comment);--shiki-dark:var(--kaab-code-token-comment)}html pre.shiki code .sqn18, html code.shiki .sqn18{--shiki-light:var(--kaab-code-token-keyword);--shiki-default:var(--kaab-code-token-keyword);--shiki-dark:var(--kaab-code-token-keyword)}html pre.shiki code .sHJIl, html code.shiki .sHJIl{--shiki-light:var(--kaab-code-token-constant);--shiki-default:var(--kaab-code-token-constant);--shiki-dark:var(--kaab-code-token-constant)}html pre.shiki code .sJugJ, html code.shiki .sJugJ{--shiki-light:var(--kaab-code-token-function);--shiki-default:var(--kaab-code-token-function);--shiki-dark:var(--kaab-code-token-function)}html pre.shiki code .sTzsn, html code.shiki .sTzsn{--shiki-light:var(--kaab-code-foreground);--shiki-default:var(--kaab-code-foreground);--shiki-dark:var(--kaab-code-foreground)}html pre.shiki code .suOy4, html code.shiki .suOy4{--shiki-light:var(--kaab-code-token-string-expression);--shiki-default:var(--kaab-code-token-string-expression);--shiki-dark:var(--kaab-code-token-string-expression)}html pre.shiki code .sQm2-, html code.shiki .sQm2-{--shiki-light:var(--kaab-code-token-punctuation);--shiki-default:var(--kaab-code-token-punctuation);--shiki-dark:var(--kaab-code-token-punctuation)}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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);}",{"title":1200,"searchDepth":1248,"depth":1248,"links":2954},[2955,2956,2957,2962,2966,2967,2968,2969,2970,2971],{"id":1044,"depth":1214,"text":1045},{"id":1076,"depth":1214,"text":1077},{"id":1173,"depth":1214,"text":1174,"children":2958},[2959,2960,2961],{"id":1031,"depth":1248,"text":1428},{"id":1763,"depth":1248,"text":1764},{"id":2086,"depth":1248,"text":2087},{"id":2183,"depth":1214,"text":2184,"children":2963},[2964],{"id":2341,"depth":1248,"text":2965},"What fallback means",{"id":2378,"depth":1214,"text":2379},{"id":2401,"depth":1214,"text":2402},{"id":2643,"depth":1214,"text":2644},{"id":2679,"depth":1214,"text":2680},{"id":2817,"depth":1214,"text":2818},{"id":2874,"depth":1214,"text":155},false,null,"Use your own proxies, language models and captcha solvers: configuration, fallback, billing, health checks and how credentials are kept.","md",{},true,"\u002Fguides\u002Fbyo-providers",{"title":107,"description":2974},"3.guides\u002F07.byo-providers","w48BfCyE1565DYqx5mOcn2wnfLAVKA_pEcpZESZYx-s",[2983,2987],{"title":104,"path":2984,"stem":2985,"description":2986,"children":-1},"\u002Fguides\u002Fwebhooks","3.guides\u002F06.webhooks","How Kaabist tells your systems that something happened: the events, the signature, retries, ordering and how to receive them safely.",{"title":110,"path":2988,"stem":2989,"description":2990,"children":-1},"\u002Fguides\u002Ftesting","3.guides\u002F08.testing","Test programs without spending credits or touching live data: test keys, cost estimates, lint, dry runs and replays against stored pages.",1793593417236]