[{"data":1,"prerenderedAt":2377},["ShallowReactive",2],{"navigation":3,"page:\u002Fconcepts\u002Flimits":1019,"surround:\u002Fconcepts\u002Flimits":2368},[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":59,"body":1021,"breaking":2358,"date":2359,"description":2360,"extension":2361,"generated":2358,"meta":2362,"navigation":2363,"path":2364,"seo":2365,"stem":2366,"version":2359,"__hash__":2367},"docs\u002F2.concepts\u002F11.limits.md",{"type":1022,"value":1023,"toc":2342},"minimark",[1024,1037,1042,1071,1075,1240,1243,1248,1251,1310,1317,1365,1388,1392,1399,1514,1525,1529,1556,1705,1708,1720,1724,1727,1860,1870,1880,1884,1899,1933,1939,1943,1946,2092,2100,2104,2107,2192,2216,2220,2274,2277,2338],[1025,1026,1027,1028,1032,1033,1036],"p",{},"Kaabist bounds how fast you may call the API, how many jobs run at once, and how much any one job may spend. Each limit has one answer you can program against: a ",[1029,1030,1031],"code",{},"429"," with ",[1029,1034,1035],{},"Retry-After",", a job that waits in the queue, or a job that fails with a code naming the limit it hit.",[1038,1039,1041],"h2",{"id":1040},"when-to-use-it","When to use it",[1025,1043,1044,1045,1047,1048,1051,1052,1047,1055,1047,1058,1061,1062,1065,1066,1070],{},"Read this page when you build a client that sends many requests, when you size a batch or a schedule, or when a response is ",[1029,1046,1031],{},", ",[1029,1049,1050],{},"403 plan_required"," or a job failed with ",[1029,1053,1054],{},"timeout",[1029,1056,1057],{},"max_steps_exceeded",[1029,1059,1060],{},"max_credits_exceeded"," or ",[1029,1063,1064],{},"max_tier_exceeded",". The numbers per plan are on ",[1067,1068,1008],"a",{"href":1069},"\u002Freference\u002Fplans",".",[1038,1072,1074],{"id":1073},"the-layers","The layers",[1076,1077,1078,1100],"table",{},[1079,1080,1081],"thead",{},[1082,1083,1084,1088,1091,1094,1097],"tr",{},[1085,1086,1087],"th",{},"Layer",[1085,1089,1090],{},"Counted per",[1085,1092,1093],{},"Rate",[1085,1095,1096],{},"Burst",[1085,1098,1099],{},"When it is exceeded",[1101,1102,1103,1126,1146,1166,1187,1205,1224],"tbody",{},[1082,1104,1105,1109,1112,1115,1118],{},[1106,1107,1108],"td",{},"API requests",[1106,1110,1111],{},"API key",[1106,1113,1114],{},"your plan's requests a minute",[1106,1116,1117],{},"a sixth of the minute, at least 10",[1106,1119,1120,1047,1123],{},[1029,1121,1122],{},"429 rate_limited",[1029,1124,1125],{},"error.details.scope: \"key\"",[1082,1127,1128,1130,1133,1136,1139],{},[1106,1129,1108],{},[1106,1131,1132],{},"coding agent's OAuth grant",[1106,1134,1135],{},"the plan's per-key rate",[1106,1137,1138],{},"the key's",[1106,1140,1141,1047,1143],{},[1029,1142,1122],{},[1029,1144,1145],{},"details.scope: \"key\"",[1082,1147,1148,1150,1153,1156,1159],{},[1106,1149,1108],{},[1106,1151,1152],{},"organisation",[1106,1154,1155],{},"three times the per-key rate",[1106,1157,1158],{},"three times the key's",[1106,1160,1161,1047,1163],{},[1029,1162,1122],{},[1029,1164,1165],{},"details.scope: \"org\"",[1082,1167,1168,1171,1174,1177,1180],{},[1106,1169,1170],{},"Unauthenticated requests",[1106,1172,1173],{},"client address",[1106,1175,1176],{},"120 a minute",[1106,1178,1179],{},"20",[1106,1181,1182,1047,1184],{},[1029,1183,1122],{},[1029,1185,1186],{},"details.scope: \"ip\"",[1082,1188,1189,1192,1194,1197,1200],{},[1106,1190,1191],{},"Programs that sign in",[1106,1193,1152],{},[1106,1195,1196],{},"60 runs an hour",[1106,1198,1199],{},"60",[1106,1201,1202],{},[1029,1203,1204],{},"429 login_flow_rate_limited",[1082,1206,1207,1210,1213,1216,1219],{},[1106,1208,1209],{},"Test-mode jobs",[1106,1211,1212],{},"organisation, per UTC day",[1106,1214,1215],{},"your plan's test jobs a day",[1106,1217,1218],{},"none",[1106,1220,1221],{},[1029,1222,1223],{},"429 test_quota_exceeded",[1082,1225,1226,1229,1232,1235,1237],{},[1106,1227,1228],{},"Concurrent jobs",[1106,1230,1231],{},"organisation and tier",[1106,1233,1234],{},"your plan's concurrency",[1106,1236,1218],{},[1106,1238,1239],{},"none: the job waits in the queue",[1025,1241,1242],{},"Only the first six ever refuse a request. Concurrency never does.",[1244,1245,1247],"h3",{"id":1246},"requests","Requests",[1025,1249,1250],{},"Every API key has a bucket of requests. It holds a sixth of your plan's per-minute rate (at least ten) and refills evenly across the minute, so you can burst briefly and then continue at the rate:",[1076,1252,1253,1265],{},[1079,1254,1255],{},[1082,1256,1257,1260,1263],{},[1085,1258,1259],{},"Plan",[1085,1261,1262],{},"Requests a minute, per key",[1085,1264,1096],{},[1101,1266,1267,1277,1288,1299],{},[1082,1268,1269,1272,1274],{},[1106,1270,1271],{},"Free",[1106,1273,1199],{},[1106,1275,1276],{},"10",[1082,1278,1279,1282,1285],{},[1106,1280,1281],{},"Developer",[1106,1283,1284],{},"600",[1106,1286,1287],{},"100",[1082,1289,1290,1293,1296],{},[1106,1291,1292],{},"Team",[1106,1294,1295],{},"1 200",[1106,1297,1298],{},"200",[1082,1300,1301,1304,1307],{},[1106,1302,1303],{},"Scale",[1106,1305,1306],{},"3 000",[1106,1308,1309],{},"500",[1025,1311,1312,1313,1316],{},"All of your organisation's keys also share a bucket three times that size, so more keys do not mean more requests. A request costs one token; ",[1029,1314,1315],{},"POST \u002Fv1\u002Fjobs\u002Fbatch"," costs five per started hundred items. Every response tells you where you stand:",[1318,1319,1324],"pre",{"className":1320,"code":1321,"language":1322,"meta":1323,"style":1323},"language-http shiki shiki-themes kaab-code kaab-code kaab-code","X-RateLimit-Limit: 60\nX-RateLimit-Remaining: 7\nX-RateLimit-Reset: 1790503261\n","http","",[1029,1325,1326,1343,1354],{"__ignoreMap":1323},[1327,1328,1331,1335,1339],"span",{"class":1329,"line":1330},"line",1,[1327,1332,1334],{"class":1333},"suOy4","X-RateLimit-Limit",[1327,1336,1338],{"class":1337},"sqn18",":",[1327,1340,1342],{"class":1341},"sx8Bj"," 60\n",[1327,1344,1346,1349,1351],{"class":1329,"line":1345},2,[1327,1347,1348],{"class":1333},"X-RateLimit-Remaining",[1327,1350,1338],{"class":1337},[1327,1352,1353],{"class":1341}," 7\n",[1327,1355,1357,1360,1362],{"class":1329,"line":1356},3,[1327,1358,1359],{"class":1333},"X-RateLimit-Reset",[1327,1361,1338],{"class":1337},[1327,1363,1364],{"class":1341}," 1790503261\n",[1025,1366,1367,1370,1371,1374,1375,1032,1377,1379,1380,1383,1384,1387],{},[1029,1368,1369],{},"Limit"," is requests a minute for the bucket that judged the request (the key's for an API key, the organisation's for a panel session), and ",[1029,1372,1373],{},"Reset"," is the Unix second at which that bucket is full again. Past the limit you get ",[1029,1376,1122],{},[1029,1378,1035],{}," in seconds and ",[1029,1381,1382],{},"error.details.retry_after_seconds","; ",[1029,1385,1386],{},"error.details.scope"," says which bucket refused. Wait that long and try again.",[1244,1389,1391],{"id":1390},"jobs-running-at-once","Jobs running at once",[1025,1393,1394,1395,1398],{},"Each plan runs a number of jobs at once per tier, counted separately: using all your browser slots does not stop http jobs. ",[1029,1396,1397],{},"GET \u002Fv1\u002Forg"," shows the limits and how many are running now:",[1318,1400,1403],{"className":1401,"code":1402,"language":680,"meta":1323,"style":1323},"language-json shiki shiki-themes kaab-code kaab-code kaab-code","\"quotas\": {\n  \"http\": { \"limit\": 20, \"in_use\": 3 },\n  \"browser\": { \"limit\": 4, \"in_use\": 4 },\n  \"stealth\": { \"limit\": 1, \"in_use\": 0 }\n}\n",[1029,1404,1405,1414,1451,1479,1508],{"__ignoreMap":1323},[1327,1406,1407,1410],{"class":1329,"line":1330},[1327,1408,1409],{"class":1333},"\"quotas\"",[1327,1411,1413],{"class":1412},"sTzsn",": {\n",[1327,1415,1416,1419,1422,1425,1428,1430,1434,1437,1440,1442,1445,1448],{"class":1329,"line":1345},[1327,1417,1418],{"class":1337},"  \"http\"",[1327,1420,1338],{"class":1421},"sQm2-",[1327,1423,1424],{"class":1412}," { ",[1327,1426,1427],{"class":1337},"\"limit\"",[1327,1429,1338],{"class":1421},[1327,1431,1433],{"class":1432},"sHJIl"," 20",[1327,1435,1436],{"class":1421},",",[1327,1438,1439],{"class":1337}," \"in_use\"",[1327,1441,1338],{"class":1421},[1327,1443,1444],{"class":1432}," 3",[1327,1446,1447],{"class":1412}," }",[1327,1449,1450],{"class":1421},",\n",[1327,1452,1453,1456,1458,1460,1462,1464,1467,1469,1471,1473,1475,1477],{"class":1329,"line":1356},[1327,1454,1455],{"class":1337},"  \"browser\"",[1327,1457,1338],{"class":1421},[1327,1459,1424],{"class":1412},[1327,1461,1427],{"class":1337},[1327,1463,1338],{"class":1421},[1327,1465,1466],{"class":1432}," 4",[1327,1468,1436],{"class":1421},[1327,1470,1439],{"class":1337},[1327,1472,1338],{"class":1421},[1327,1474,1466],{"class":1432},[1327,1476,1447],{"class":1412},[1327,1478,1450],{"class":1421},[1327,1480,1482,1485,1487,1489,1491,1493,1496,1498,1500,1502,1505],{"class":1329,"line":1481},4,[1327,1483,1484],{"class":1337},"  \"stealth\"",[1327,1486,1338],{"class":1421},[1327,1488,1424],{"class":1412},[1327,1490,1427],{"class":1337},[1327,1492,1338],{"class":1421},[1327,1494,1495],{"class":1432}," 1",[1327,1497,1436],{"class":1421},[1327,1499,1439],{"class":1337},[1327,1501,1338],{"class":1421},[1327,1503,1504],{"class":1432}," 0",[1327,1506,1507],{"class":1412}," }\n",[1327,1509,1511],{"class":1329,"line":1510},5,[1327,1512,1513],{"class":1412},"}\n",[1025,1515,1516,1517,1520,1521,1070],{},"This one never refuses anything. A job created while every slot is busy waits in ",[1029,1518,1519],{},"queued"," and starts when one of your own jobs finishes; the order among waiting jobs is described in ",[1067,1522,1524],{"href":1523},"\u002Fconcepts\u002Fqueueing","Queueing",[1244,1526,1528],{"id":1527},"test-keys","Test keys",[1025,1530,1531,1532,1535,1536,1032,1538,1540,1541,1544,1545,1047,1548,1551,1552,1555],{},"Jobs created with an ",[1029,1533,1534],{},"sk_test_"," key run for real and cost nothing. Instead, each plan allows a number of them a day, counted per UTC day; past it, creating one answers ",[1029,1537,1223],{},[1029,1539,1035],{}," until midnight UTC and ",[1029,1542,1543],{},"error.details"," holding ",[1029,1546,1547],{},"limit",[1029,1549,1550],{},"used"," and ",[1029,1553,1554],{},"resets_at",". Their results are kept for 24 hours.",[1557,1558,1559],"code-group",{},[1318,1560,1565],{"className":1561,"code":1562,"filename":1563,"language":1564,"meta":1323,"style":1323},"language-ts shiki shiki-themes kaab-code kaab-code kaab-code","\u002F\u002F The key decides the mode: an sk_test_ key runs test jobs, which the live data never sees.\nconst probe = await kaab.jobs.create({\n  url: `${site}\u002Fp\u002F1`,\n  extract: { title: \"h1\" },\n  wait: 30,\n});\nconsole.log(`${probe.id} ran in ${probe.mode} mode`);\n","TypeScript","ts",[1029,1566,1567,1573,1601,1625,1644,1656,1662],{"__ignoreMap":1323},[1327,1568,1569],{"class":1329,"line":1330},[1327,1570,1572],{"class":1571},"sKog0","\u002F\u002F The key decides the mode: an sk_test_ key runs test jobs, which the live data never sees.\n",[1327,1574,1575,1578,1581,1584,1587,1590,1593,1595,1598],{"class":1329,"line":1345},[1327,1576,1577],{"class":1337},"const",[1327,1579,1580],{"class":1432}," probe",[1327,1582,1583],{"class":1337}," =",[1327,1585,1586],{"class":1337}," await",[1327,1588,1589],{"class":1432}," kaab",[1327,1591,1070],{"class":1592},"sJugJ",[1327,1594,171],{"class":1432},[1327,1596,1597],{"class":1592},".create",[1327,1599,1600],{"class":1412},"({\n",[1327,1602,1603,1606,1608,1611,1614,1617,1620,1623],{"class":1329,"line":1356},[1327,1604,1605],{"class":1412},"  url",[1327,1607,1338],{"class":1337},[1327,1609,1610],{"class":1333}," `",[1327,1612,1613],{"class":1337},"${",[1327,1615,1616],{"class":1412},"site",[1327,1618,1619],{"class":1337},"}",[1327,1621,1622],{"class":1333},"\u002Fp\u002F1`",[1327,1624,1450],{"class":1421},[1327,1626,1627,1630,1632,1635,1637,1640,1642],{"class":1329,"line":1481},[1327,1628,1629],{"class":1412},"  extract",[1327,1631,1338],{"class":1337},[1327,1633,1634],{"class":1412}," { title",[1327,1636,1338],{"class":1337},[1327,1638,1639],{"class":1333}," \"h1\"",[1327,1641,1447],{"class":1412},[1327,1643,1450],{"class":1421},[1327,1645,1646,1649,1651,1654],{"class":1329,"line":1510},[1327,1647,1648],{"class":1412},"  wait",[1327,1650,1338],{"class":1337},[1327,1652,1653],{"class":1432}," 30",[1327,1655,1450],{"class":1421},[1327,1657,1659],{"class":1329,"line":1658},6,[1327,1660,1661],{"class":1412},"});\n",[1327,1663,1665,1668,1671,1674,1677,1679,1682,1685,1687,1690,1692,1694,1697,1699,1702],{"class":1329,"line":1664},7,[1327,1666,1667],{"class":1432},"console",[1327,1669,1670],{"class":1592},".log",[1327,1672,1673],{"class":1412},"(",[1327,1675,1676],{"class":1333},"`",[1327,1678,1613],{"class":1337},[1327,1680,1681],{"class":1432},"probe",[1327,1683,1684],{"class":1412},".id",[1327,1686,1619],{"class":1337},[1327,1688,1689],{"class":1333}," ran in ",[1327,1691,1613],{"class":1337},[1327,1693,1681],{"class":1432},[1327,1695,1696],{"class":1412},".mode",[1327,1698,1619],{"class":1337},[1327,1700,1701],{"class":1333}," mode`",[1327,1703,1704],{"class":1412},");\n",[1244,1706,1191],{"id":1707},"programs-that-sign-in",[1025,1709,1710,1711,1714,1715,1032,1717,1719],{},"A program that fills a password field or a ",[1029,1712,1713],{},"secret"," input runs at most sixty times an hour per organisation; past that, ",[1029,1716,1204],{},[1029,1718,1035],{},". It also needs a verified payment method.",[1038,1721,1723],{"id":1722},"limits-on-one-job","Limits on one job",[1025,1725,1726],{},"Every job runs inside a budget. Each limit fails the job with its own error code, so you can tell which one it hit:",[1076,1728,1729,1743],{},[1079,1730,1731],{},[1082,1732,1733,1735,1738,1741],{},[1085,1734,1369],{},[1085,1736,1737],{},"Default",[1085,1739,1740],{},"Set it with",[1085,1742,1099],{},[1101,1744,1745,1769,1787,1804,1822,1840],{},[1082,1746,1747,1750,1756,1762],{},[1106,1748,1749],{},"Duration",[1106,1751,1752,1753,1755],{},"120 s at the http tier, 300 s in a browser, 30 minutes for a program with an ",[1029,1754,592],{}," step",[1106,1757,1758,1761],{},[1029,1759,1760],{},"options.max_duration_ms"," (lowers it)",[1106,1763,1764,1047,1767],{},[1029,1765,1766],{},"failed",[1029,1768,1054],{},[1082,1770,1771,1773,1776,1781],{},[1106,1772,536],{},[1106,1774,1775],{},"200, which is also the ceiling",[1106,1777,1778],{},[1029,1779,1780],{},"options.max_steps",[1106,1782,1783,1047,1785],{},[1029,1784,1766],{},[1029,1786,1057],{},[1082,1788,1789,1792,1795,1798],{},[1106,1790,1791],{},"Response size",[1106,1793,1794],{},"64 MB for one response",[1106,1796,1797],{},"not configurable",[1106,1799,1800,1801],{},"the fetch is refused; the job fails with ",[1029,1802,1803],{},"blocked",[1082,1805,1806,1809,1814,1819],{},[1106,1807,1808],{},"Downloads",[1106,1810,1811,1812,1755],{},"64 MB per ",[1029,1813,578],{},[1106,1815,1816,1761],{},[1029,1817,1818],{},"download.max_bytes",[1106,1820,1821],{},"the step fails",[1082,1823,1824,1826,1829,1834],{},[1106,1825,390],{},[1106,1827,1828],{},"your plan's default",[1106,1830,1831],{},[1029,1832,1833],{},"options.max_credits",[1106,1835,1836,1047,1838],{},[1029,1837,1766],{},[1029,1839,1060],{},[1082,1841,1842,1845,1848,1853],{},[1106,1843,1844],{},"Tier",[1106,1846,1847],{},"the highest tier your plan includes",[1106,1849,1850],{},[1029,1851,1852],{},"options.max_tier",[1106,1854,1855,1047,1857,1859],{},[1029,1856,1766],{},[1029,1858,1064],{},", when the site needs a stronger tier than allowed",[1025,1861,1862,1863,1866,1867,1869],{},"Time a job spends parked, waiting for input or for you, does not count toward its duration. A single step is also bounded by its own ",[1029,1864,1865],{},"timeout_ms","; a step that runs past its budget fails with ",[1029,1868,1054],{}," even when the job has time left.",[1025,1871,1872,1875,1876,1879],{},[1029,1873,1874],{},"max_tier"," is a ceiling, not a demand: a job that allows the browser tier but does not need it still runs at http. A ",[1029,1877,1878],{},"cache"," option on a job that cannot be cached (it has inputs or a session) is ignored rather than refused.",[1038,1881,1883],{"id":1882},"what-your-plan-includes","What your plan includes",[1025,1885,1886,1887,1890,1891,1894,1895,1898],{},"Some requests are refused because of what they need rather than how often they come. These answer ",[1029,1888,1889],{},"403",", with ",[1029,1892,1893],{},"error.details.rule"," saying which rule applied and ",[1029,1896,1897],{},"error.details.upgrade_url"," pointing at your billing page:",[1900,1901,1902,1917],"ul",{},[1903,1904,1905,1909,1910,1913,1914,1916],"li",{},[1906,1907,1908],"strong",{},"A verified payment method"," (",[1029,1911,1912],{},"payment_method_required","). The free trial runs the http tier only. Browser and stealth runs, ",[1029,1915,574],{},", bring-your-own providers and programs that sign in need a payment method on file.",[1903,1918,1919,1909,1922,1925,1926,1928,1929,1932],{},[1906,1920,1921],{},"A plan that sells it",[1029,1923,1924],{},"plan_required","). A tier above your plan's highest tier, ",[1029,1927,574],{},", bring-your-own providers, and the ",[1029,1930,1931],{},"us"," region are not part of every plan.",[1025,1934,1935,1936,1070],{},"A schedule that fires more often than your plan allows is refused when you create it with ",[1029,1937,1938],{},"422 schedule_interval_too_small",[1038,1940,1942],{"id":1941},"worked-example","Worked example",[1025,1944,1945],{},"A script creates 500 jobs against a shop's product pages with a free-plan key: 60 requests a minute, a burst of 10.",[1947,1948,1949,1963,2089],"ol",{},[1903,1950,1951,1952,1955,1956,1959,1960,1962],{},"The first ten ",[1029,1953,1954],{},"POST \u002Fv1\u002Fjobs"," answer ",[1029,1957,1958],{},"202"," at once; ",[1029,1961,1348],{}," counts down from 9 to 0.",[1903,1964,1965,1966,2014],{},"The eleventh answers:",[1318,1967,1969],{"className":1320,"code":1968,"language":1322,"meta":1323,"style":1323},"HTTP\u002F1.1 429 Too Many Requests\nRetry-After: 1\nX-RateLimit-Limit: 60\nX-RateLimit-Remaining: 0\n",[1029,1970,1971,1988,1997,2005],{"__ignoreMap":1323},[1327,1972,1973,1976,1979,1982,1985],{"class":1329,"line":1330},[1327,1974,1975],{"class":1337},"HTTP",[1327,1977,1978],{"class":1412},"\u002F",[1327,1980,1981],{"class":1432},"1.1",[1327,1983,1984],{"class":1432}," 429",[1327,1986,1987],{"class":1341}," Too Many Requests\n",[1327,1989,1990,1992,1994],{"class":1329,"line":1345},[1327,1991,1035],{"class":1333},[1327,1993,1338],{"class":1337},[1327,1995,1996],{"class":1341}," 1\n",[1327,1998,1999,2001,2003],{"class":1329,"line":1356},[1327,2000,1334],{"class":1333},[1327,2002,1338],{"class":1337},[1327,2004,1342],{"class":1341},[1327,2006,2007,2009,2011],{"class":1329,"line":1481},[1327,2008,1348],{"class":1333},[1327,2010,1338],{"class":1337},[1327,2012,2013],{"class":1341}," 0\n",[1318,2015,2017],{"className":1401,"code":2016,"language":680,"meta":1323,"style":1323},"{ \"error\": { \"code\": \"rate_limited\", \"message\": \"…\", \"details\": { \"scope\": \"key\", \"retry_after_seconds\": 1 }, \"request_id\": \"…\" } }\n",[1029,2018,2019],{"__ignoreMap":1323},[1327,2020,2021,2024,2027,2029,2031,2034,2036,2039,2041,2044,2046,2049,2051,2054,2056,2058,2061,2063,2066,2068,2071,2073,2075,2077,2079,2082,2084,2086],{"class":1329,"line":1330},[1327,2022,2023],{"class":1412},"{ ",[1327,2025,2026],{"class":1337},"\"error\"",[1327,2028,1338],{"class":1421},[1327,2030,1424],{"class":1412},[1327,2032,2033],{"class":1337},"\"code\"",[1327,2035,1338],{"class":1421},[1327,2037,2038],{"class":1333}," \"rate_limited\"",[1327,2040,1436],{"class":1421},[1327,2042,2043],{"class":1337}," \"message\"",[1327,2045,1338],{"class":1421},[1327,2047,2048],{"class":1333}," \"…\"",[1327,2050,1436],{"class":1421},[1327,2052,2053],{"class":1337}," \"details\"",[1327,2055,1338],{"class":1421},[1327,2057,1424],{"class":1412},[1327,2059,2060],{"class":1337},"\"scope\"",[1327,2062,1338],{"class":1421},[1327,2064,2065],{"class":1333}," \"key\"",[1327,2067,1436],{"class":1421},[1327,2069,2070],{"class":1337}," \"retry_after_seconds\"",[1327,2072,1338],{"class":1421},[1327,2074,1495],{"class":1432},[1327,2076,1447],{"class":1412},[1327,2078,1436],{"class":1421},[1327,2080,2081],{"class":1337}," \"request_id\"",[1327,2083,1338],{"class":1421},[1327,2085,2048],{"class":1333},[1327,2087,2088],{"class":1412}," } }\n",[1903,2090,2091],{},"The bucket refills one request a second, so from then on the script can send about one request a second.",[1025,2093,2094,2095,2097,2098,1070],{},"Meanwhile the jobs themselves are a separate matter: the free plan runs one http job at a time, so the accepted jobs wait in ",[1029,2096,1519],{}," and run one after another. That never produces a ",[1029,2099,1031],{},[1244,2101,2103],{"id":2102},"what-the-sdks-do-for-you","What the SDKs do for you",[1025,2105,2106],{},"The TypeScript, Python and Go SDKs share one retry policy, so a script written with them handles the example above without extra code:",[1900,2108,2109,2129,2135,2145,2164],{},[1903,2110,2111,2112,1047,2115,1047,2117,1047,2119,1047,2122,1551,2125,2128],{},"they retry on ",[1029,2113,2114],{},"408",[1029,2116,1031],{},[1029,2118,1309],{},[1029,2120,2121],{},"502",[1029,2123,2124],{},"503",[1029,2126,2127],{},"504",", on a connection failure and on a per-attempt timeout, and on nothing else;",[1903,2130,2131,2132,2134],{},"they wait for the response's ",[1029,2133,1035],{}," when it has one, and otherwise back off exponentially from half a second up to eight seconds, with jitter;",[1903,2136,2137,2138,2140,2141,2144],{},"a ",[1029,2139,1035],{}," longer than a minute is not waited for: the SDK raises the error and leaves the decision to you. A ",[1029,2142,2143],{},"test_quota_exceeded"," that resets at midnight is the usual case;",[1903,2146,2147,2148,2151,2152,2155,2156,2159,2160,2163],{},"they retry at most twice by default (three attempts). Change it with ",[1029,2149,2150],{},"maxRetries"," in TypeScript and ",[1029,2153,2154],{},"max_retries"," in Python (on the client or on one call), or with ",[1029,2157,2158],{},"WithMaxRetries"," on a Go client and ",[1029,2161,2162],{},"WithRequestMaxRetries"," on one call;",[1903,2165,2166,2167,1047,2170,1047,2173,2176,2177,2180,2181,2184,2185,1551,2188,2191],{},"they retry only requests that are safe to repeat: ",[1029,2168,2169],{},"GET",[1029,2171,2172],{},"PUT",[1029,2174,2175],{},"DELETE",", and a ",[1029,2178,2179],{},"POST"," that carries an ",[1029,2182,2183],{},"Idempotency-Key",". ",[1029,2186,2187],{},"jobs.create",[1029,2189,2190],{},"jobs.batch"," always send one, so a retried create never runs a job twice.",[1025,2193,2194,2195,1909,2197,2200,2201,2204,2205,2208,2209,2212,2213,2215],{},"When the retries are used up, the error the SDK raises carries the API's ",[1029,2196,1029],{},[1029,2198,2199],{},"rate_limited",") and the wait the API asked for (",[1029,2202,2203],{},"retryAfter"," in TypeScript, ",[1029,2206,2207],{},"retry_after"," in Python, ",[1029,2210,2211],{},"RetryAfter"," in Go). For a large backlog, prefer ",[1029,2214,1315],{},": one request for up to 1 000 items costs five tokens per hundred.",[1038,2217,2219],{"id":2218},"pitfalls","Pitfalls",[1900,2221,2222,2228,2241,2250,2262],{},[1903,2223,2224,2227],{},[1906,2225,2226],{},"More keys do not mean more requests."," The organisation's bucket is shared by every key.",[1903,2229,2230,2233,2234,1032,2237,2240],{},[1906,2231,2232],{},"Do not poll in a tight loop."," ",[1029,2235,2236],{},"GET \u002Fv1\u002Fjobs\u002F{id}",[1029,2238,2239],{},"Prefer: wait=\u003Cseconds>"," waits for the job's next state change in one request, and webhooks cost no requests at all.",[1903,2242,2243,2249],{},[1906,2244,2245,2246,2248],{},"A ",[1029,2247,1035],{}," past a minute is a quota, not congestion."," Retrying sooner only gets the same answer.",[1903,2251,2252,2258,2259,2261],{},[1906,2253,2254,2257],{},[1029,2255,2256],{},"max_duration_ms"," only lowers the default."," A browser program that needs longer than five minutes should be split, or wait on ",[1029,2260,592],{}," where a person is involved.",[1903,2263,2264,2233,2267,2269,2270,2273],{},[1906,2265,2266],{},"A job waiting for a concurrency slot is not stuck.",[1029,2268,1519],{}," with no ",[1029,2271,2272],{},"meta.blocked_reason"," means it is waiting its turn.",[1038,2275,155],{"id":2276},"reference",[1900,2278,2279,2291,2302,2308,2324,2334],{},[1903,2280,2281,2285,2286,1551,2288,2290],{},[1067,2282,2284],{"href":2283},"\u002Freference\u002Fcodes#errors","Error codes",", including every ",[1029,2287,1031],{},[1029,2289,1889],{}," above",[1903,2292,2293,2297,2298,2301],{},[1067,2294,2296],{"href":2295},"\u002Freference\u002Fapi\u002Forg\u002Fget-org","Get the organisation"," (its ",[1029,2299,2300],{},"quotas",")",[1903,2303,2304],{},[1067,2305,2307],{"href":2306},"\u002Freference\u002Fapi\u002Fjobs\u002Fcreate-job-batch","Create a batch",[1903,2309,2310,2313,2314,1047,2316,1047,2319,1047,2322],{},[1067,2311,530],{"href":2312},"\u002Freference\u002Fdsl\u002Foptions",": ",[1029,2315,2256],{},[1029,2317,2318],{},"max_steps",[1029,2320,2321],{},"max_credits",[1029,2323,1874],{},[1903,2325,2326,2329,2330],{},[1067,2327,125],{"href":2328},"\u002Freference\u002Fsdks"," and the ",[1067,2331,2333],{"href":2332},"\u002Fguides\u002Fsdks","SDK guide",[1903,2335,2336],{},[1067,2337,1008],{"href":1069},[2339,2340,2341],"style",{},"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 .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 .sx8Bj, html code.shiki .sx8Bj{--shiki-light:var(--kaab-code-token-string);--shiki-default:var(--kaab-code-token-string);--shiki-dark:var(--kaab-code-token-string)}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);}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 .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 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 .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 .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)}",{"title":1323,"searchDepth":1356,"depth":1356,"links":2343},[2344,2345,2351,2352,2353,2356,2357],{"id":1040,"depth":1345,"text":1041},{"id":1073,"depth":1345,"text":1074,"children":2346},[2347,2348,2349,2350],{"id":1246,"depth":1356,"text":1247},{"id":1390,"depth":1356,"text":1391},{"id":1527,"depth":1356,"text":1528},{"id":1707,"depth":1356,"text":1191},{"id":1722,"depth":1345,"text":1723},{"id":1882,"depth":1345,"text":1883},{"id":1941,"depth":1345,"text":1942,"children":2354},[2355],{"id":2102,"depth":1356,"text":2103},{"id":2218,"depth":1345,"text":2219},{"id":2276,"depth":1345,"text":155},false,null,"Request rates, concurrent jobs, test-mode quotas, per-job budgets and plan gates: every limit Kaabist applies, and the error each one answers with.","md",{},true,"\u002Fconcepts\u002Flimits",{"title":59,"description":2360},"2.concepts\u002F11.limits","VaaNNpKOA8D5Csf-IncQ9d2bdVDbSpFd0XD4F6hCDWI",[2369,2373],{"title":56,"path":2370,"stem":2371,"description":2372,"children":-1},"\u002Fconcepts\u002Fcredits-and-billing","2.concepts\u002F10.credits-and-billing","What a job costs, how credits are reserved and settled, the pools they come from, running out, plans, packs, auto-recharge and overage.",{"title":62,"path":2374,"stem":2375,"description":2376,"children":-1},"\u002Fconcepts\u002Flocators","2.concepts\u002F12.locators","How Kaabist points at an element, why it stores several candidate selectors, which classes it refuses to use, and how frames and shadow DOM are reached.",1793593412950]