[{"data":1,"prerenderedAt":3867},["ShallowReactive",2],{"navigation":3,"page:\u002Fgetting-started\u002Ffirst-job":1019,"surround:\u002Fgetting-started\u002Ffirst-job":3860},[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":16,"body":1021,"breaking":3851,"date":3852,"description":3853,"extension":3854,"generated":3851,"meta":3855,"navigation":1299,"path":3856,"seo":3857,"stem":3858,"version":3852,"__hash__":3859},"docs\u002F1.getting-started\u002F03.first-job.md",{"type":1022,"value":1023,"toc":3834},"minimark",[1024,1032,1037,1059,1063,1078,1106,1110,1116,1120,1123,1141,1192,1196,1211,1226,1260,1264,1267,1282,1328,1335,1339,1355,1382,1393,1397,1400,2429,2440,2444,2451,2928,2932,2935,3457,3460,3533,3539,3543,3549,3699,3727,3731,3791,3794,3830],[1025,1026,1027,1028,1031],"p",{},"This page runs one job against a shop's product page in curl, TypeScript, Python, Go or the ",[1029,1030,846],"code",{}," CLI, and shows the envelope it returns. It takes a test key and a few minutes, and every later page builds on the request you send here.",[1033,1034,1036],"h2",{"id":1035},"when-to-use-it","When to use it",[1025,1038,1039,1040,1043,1044,1048,1049,1051,1052,1054,1055,1058],{},"Start here once you have an ",[1029,1041,1042],{},"sk_test_"," key (",[1045,1046,13],"a",{"href":1047},"\u002Fgetting-started\u002Fkeys-and-modes","). The request is the ",[1029,1050,610],{}," + ",[1029,1053,569],{}," shorthand, the simplest form a job takes. When you need a login, a click or a schedule, the same call takes a stored program instead; see ",[1045,1056,29],{"href":1057},"\u002Fconcepts\u002Fprograms-and-versions",".",[1033,1060,1062],{"id":1061},"install-and-configure","Install and configure",[1025,1064,1065,1066,1069,1070,1073,1074,1077],{},"Every client reads your key from ",[1029,1067,1068],{},"KAAB_API_KEY",", and the API address from ",[1029,1071,1072],{},"KAAB_BASE_URL"," when you set it (the default is ",[1029,1075,1076],{},"https:\u002F\u002Fapi.kaab.ist\u002Fv1",").",[1079,1080,1085],"pre",{"className":1081,"code":1082,"language":1083,"meta":1084,"style":1084},"language-bash shiki shiki-themes kaab-code kaab-code kaab-code","export KAAB_API_KEY=sk_test_…\n","bash","",[1029,1086,1087],{"__ignoreMap":1084},[1088,1089,1092,1096,1100,1103],"span",{"class":1090,"line":1091},"line",1,[1088,1093,1095],{"class":1094},"sqn18","export",[1088,1097,1099],{"class":1098},"sTzsn"," KAAB_API_KEY",[1088,1101,1102],{"class":1094},"=",[1088,1104,1105],{"class":1098},"sk_test_…\n",[1107,1108,1109],"h3",{"id":1109},"curl",[1025,1111,1112,1113,1058],{},"Nothing to install. Send the key as ",[1029,1114,1115],{},"Authorization: Bearer $KAAB_API_KEY",[1107,1117,1119],{"id":1118},"typescript","TypeScript",[1025,1121,1122],{},"Node 18 or later, ESM or CommonJS:",[1079,1124,1126],{"className":1081,"code":1125,"language":1083,"meta":1084,"style":1084},"npm install @kaabist\u002Fsdk\n",[1029,1127,1128],{"__ignoreMap":1084},[1088,1129,1130,1134,1138],{"class":1090,"line":1091},[1088,1131,1133],{"class":1132},"sJugJ","npm",[1088,1135,1137],{"class":1136},"sx8Bj"," install",[1088,1139,1140],{"class":1136}," @kaabist\u002Fsdk\n",[1079,1142,1146],{"className":1143,"code":1144,"language":1145,"meta":1084,"style":1084},"language-ts shiki shiki-themes kaab-code kaab-code kaab-code","import { Kaab } from \"@kaabist\u002Fsdk\";\nconst kaab = new Kaab(); \u002F\u002F reads KAAB_API_KEY; or new Kaab({ apiKey, baseUrl })\n","ts",[1029,1147,1148,1166],{"__ignoreMap":1084},[1088,1149,1150,1153,1156,1159,1163],{"class":1090,"line":1091},[1088,1151,1152],{"class":1094},"import",[1088,1154,1155],{"class":1098}," { Kaab } ",[1088,1157,1158],{"class":1094},"from",[1088,1160,1162],{"class":1161},"suOy4"," \"@kaabist\u002Fsdk\"",[1088,1164,1165],{"class":1098},";\n",[1088,1167,1169,1172,1176,1179,1182,1185,1188],{"class":1090,"line":1168},2,[1088,1170,1171],{"class":1094},"const",[1088,1173,1175],{"class":1174},"sHJIl"," kaab",[1088,1177,1178],{"class":1094}," =",[1088,1180,1181],{"class":1094}," new",[1088,1183,1184],{"class":1132}," Kaab",[1088,1186,1187],{"class":1098},"(); ",[1088,1189,1191],{"class":1190},"sKog0","\u002F\u002F reads KAAB_API_KEY; or new Kaab({ apiKey, baseUrl })\n",[1107,1193,1195],{"id":1194},"python","Python",[1025,1197,1198,1199,1202,1203,1206,1207,1210],{},"Python 3.11 or later, blocking (",[1029,1200,1201],{},"Kaab",") or ",[1029,1204,1205],{},"asyncio"," (",[1029,1208,1209],{},"AsyncKaab","):",[1079,1212,1214],{"className":1081,"code":1213,"language":1083,"meta":1084,"style":1084},"pip install kaabist\n",[1029,1215,1216],{"__ignoreMap":1084},[1088,1217,1218,1221,1223],{"class":1090,"line":1091},[1088,1219,1220],{"class":1132},"pip",[1088,1222,1137],{"class":1136},[1088,1224,1225],{"class":1136}," kaabist\n",[1079,1227,1230],{"className":1228,"code":1229,"language":1194,"meta":1084,"style":1084},"language-python shiki shiki-themes kaab-code kaab-code kaab-code","from kaabist import Kaab\nkaab = Kaab()  # reads KAAB_API_KEY; or Kaab(\"sk_test_…\", base_url=...)\n",[1029,1231,1232,1244],{"__ignoreMap":1084},[1088,1233,1234,1236,1239,1241],{"class":1090,"line":1091},[1088,1235,1158],{"class":1094},[1088,1237,1238],{"class":1098}," kaabist ",[1088,1240,1152],{"class":1094},[1088,1242,1243],{"class":1098}," Kaab\n",[1088,1245,1246,1249,1251,1253,1257],{"class":1090,"line":1168},[1088,1247,1248],{"class":1098},"kaab ",[1088,1250,1102],{"class":1094},[1088,1252,1184],{"class":1132},[1088,1254,1256],{"class":1255},"sQm2-","()",[1088,1258,1259],{"class":1190},"  # reads KAAB_API_KEY; or Kaab(\"sk_test_…\", base_url=...)\n",[1107,1261,1263],{"id":1262},"go","Go",[1025,1265,1266],{},"Go 1.24 or later. The Go SDK is published as its own module:",[1079,1268,1270],{"className":1081,"code":1269,"language":1083,"meta":1084,"style":1084},"go get github.com\u002Fkaabist\u002Fkaab-go\n",[1029,1271,1272],{"__ignoreMap":1084},[1088,1273,1274,1276,1279],{"class":1090,"line":1091},[1088,1275,1262],{"class":1132},[1088,1277,1278],{"class":1136}," get",[1088,1280,1281],{"class":1136}," github.com\u002Fkaabist\u002Fkaab-go\n",[1079,1283,1286],{"className":1284,"code":1285,"language":1262,"meta":1084,"style":1084},"language-go shiki shiki-themes kaab-code kaab-code kaab-code","import \"github.com\u002Fkaabist\u002Fkaab-go\u002Fkaab\"\n\nc := kaab.New(\"\") \u002F\u002F reads KAAB_API_KEY; kaab.WithBaseURL(...) to override\n",[1029,1287,1288,1295,1301],{"__ignoreMap":1084},[1088,1289,1290,1292],{"class":1090,"line":1091},[1088,1291,1152],{"class":1094},[1088,1293,1294],{"class":1161}," \"github.com\u002Fkaabist\u002Fkaab-go\u002Fkaab\"\n",[1088,1296,1297],{"class":1090,"line":1168},[1088,1298,1300],{"emptyLinePlaceholder":1299},true,"\n",[1088,1302,1304,1307,1310,1313,1316,1319,1322,1325],{"class":1090,"line":1303},3,[1088,1305,1306],{"class":1098},"c ",[1088,1308,1309],{"class":1094},":=",[1088,1311,1312],{"class":1098}," kaab.",[1088,1314,1315],{"class":1132},"New",[1088,1317,1318],{"class":1098},"(",[1088,1320,1321],{"class":1161},"\"\"",[1088,1323,1324],{"class":1098},") ",[1088,1326,1327],{"class":1190},"\u002F\u002F reads KAAB_API_KEY; kaab.WithBaseURL(...) to override\n",[1025,1329,1330,1331,1334],{},"Request and response types are in the ",[1029,1332,1333],{},"client"," package of the same module.",[1107,1336,1338],{"id":1337},"the-cli","The CLI",[1025,1340,1341,1343,1344,1206,1347,1350,1351,1354],{},[1029,1342,846],{}," is a single binary for Linux, macOS and Windows on amd64 and arm64, built on the Go SDK. Release archives are named ",[1029,1345,1346],{},"kaab_\u003Cversion>_\u003Cos>_\u003Carch>",[1029,1348,1349],{},".tar.gz",", ",[1029,1352,1353],{},".zip"," on Windows); with a Go toolchain you can also build it from the module:",[1079,1356,1358],{"className":1081,"code":1357,"language":1083,"meta":1084,"style":1084},"go install github.com\u002Fkaabist\u002Fkaab-go\u002Fcmd\u002Fkaab@latest\nkaab auth login            # paste your sk_test_ key\n",[1029,1359,1360,1369],{"__ignoreMap":1084},[1088,1361,1362,1364,1366],{"class":1090,"line":1091},[1088,1363,1262],{"class":1132},[1088,1365,1137],{"class":1136},[1088,1367,1368],{"class":1136}," github.com\u002Fkaabist\u002Fkaab-go\u002Fcmd\u002Fkaab@latest\n",[1088,1370,1371,1373,1376,1379],{"class":1090,"line":1168},[1088,1372,846],{"class":1132},[1088,1374,1375],{"class":1136}," auth",[1088,1377,1378],{"class":1136}," login",[1088,1380,1381],{"class":1190},"            # paste your sk_test_ key\n",[1025,1383,1384,1386,1387,1389,1390,1058],{},[1029,1385,851],{}," checks the key and keeps it in your operating system's keychain. ",[1029,1388,1068],{}," overrides it, which is what CI should use. See ",[1045,1391,1338],{"href":1392},"\u002Fguides\u002Fcli",[1033,1394,1396],{"id":1395},"run-the-job","Run the job",[1025,1398,1399],{},"The job reads a shop's first product page and asks for its title and price, waiting up to 30 seconds for the result:",[1401,1402,1403,1545,1806,2043,2360],"code-group",{},[1079,1404,1406],{"className":1081,"code":1405,"filename":1109,"language":1083,"meta":1084,"style":1084},"response=$(curl -sS --fail-with-body \"${KAAB_BASE_URL:-https:\u002F\u002Fapi.kaab.ist\u002Fv1}\u002Fjobs\" \\\n  -H \"Authorization: Bearer $KAAB_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -H \"Prefer: wait=30\" \\\n  -d '{\n    \"url\": \"'\"${SITE_URL:-https:\u002F\u002Fshop.example.com}\"'\u002Fp\u002F1\",\n    \"extract\": {\n      \"title\": \"h1\",\n      \"price\": { \"selector\": \".price\", \"type\": \"money\", \"locale\": \"tr\", \"currency\": \"TRY\" }\n    }\n  }')\necho \"$response\"\n",[1029,1407,1408,1450,1460,1469,1479,1488,1503,1509,1515,1521,1527,1536],{"__ignoreMap":1084},[1088,1409,1410,1413,1415,1418,1420,1423,1426,1429,1432,1435,1438,1441,1444,1447],{"class":1090,"line":1091},[1088,1411,1412],{"class":1098},"response",[1088,1414,1102],{"class":1094},[1088,1416,1417],{"class":1098},"$(",[1088,1419,1109],{"class":1132},[1088,1421,1422],{"class":1136}," -sS",[1088,1424,1425],{"class":1136}," --fail-with-body",[1088,1427,1428],{"class":1161}," \"${KAAB_BASE_URL",[1088,1430,1431],{"class":1094},":-",[1088,1433,1434],{"class":1161},"https",[1088,1436,1437],{"class":1094},":\u002F\u002F",[1088,1439,1440],{"class":1161},"api.kaab.ist",[1088,1442,1443],{"class":1094},"\u002F",[1088,1445,1446],{"class":1161},"v1}\u002Fjobs\"",[1088,1448,1449],{"class":1098}," \\\n",[1088,1451,1452,1455,1458],{"class":1090,"line":1168},[1088,1453,1454],{"class":1136},"  -H",[1088,1456,1457],{"class":1161}," \"Authorization: Bearer $KAAB_API_KEY\"",[1088,1459,1449],{"class":1098},[1088,1461,1462,1464,1467],{"class":1090,"line":1303},[1088,1463,1454],{"class":1136},[1088,1465,1466],{"class":1161}," \"Content-Type: application\u002Fjson\"",[1088,1468,1449],{"class":1098},[1088,1470,1472,1474,1477],{"class":1090,"line":1471},4,[1088,1473,1454],{"class":1136},[1088,1475,1476],{"class":1161}," \"Prefer: wait=30\"",[1088,1478,1449],{"class":1098},[1088,1480,1482,1485],{"class":1090,"line":1481},5,[1088,1483,1484],{"class":1136},"  -d",[1088,1486,1487],{"class":1161}," '{\n",[1088,1489,1491,1494,1496,1498,1500],{"class":1090,"line":1490},6,[1088,1492,1493],{"class":1161},"    \"url\": \"'\"${SITE_URL",[1088,1495,1431],{"class":1094},[1088,1497,1434],{"class":1161},[1088,1499,1437],{"class":1094},[1088,1501,1502],{"class":1161},"shop.example.com}\"'\u002Fp\u002F1\",\n",[1088,1504,1506],{"class":1090,"line":1505},7,[1088,1507,1508],{"class":1161},"    \"extract\": {\n",[1088,1510,1512],{"class":1090,"line":1511},8,[1088,1513,1514],{"class":1161},"      \"title\": \"h1\",\n",[1088,1516,1518],{"class":1090,"line":1517},9,[1088,1519,1520],{"class":1161},"      \"price\": { \"selector\": \".price\", \"type\": \"money\", \"locale\": \"tr\", \"currency\": \"TRY\" }\n",[1088,1522,1524],{"class":1090,"line":1523},10,[1088,1525,1526],{"class":1161},"    }\n",[1088,1528,1530,1533],{"class":1090,"line":1529},11,[1088,1531,1532],{"class":1161},"  }'",[1088,1534,1535],{"class":1098},")\n",[1088,1537,1539,1542],{"class":1090,"line":1538},12,[1088,1540,1541],{"class":1132},"echo",[1088,1543,1544],{"class":1161}," \"$response\"\n",[1079,1546,1548],{"className":1143,"code":1547,"filename":1119,"language":1145,"meta":1084,"style":1084},"\u002F\u002F One call: create the job and hold the request up to 30 s for its result (`Prefer: wait`).\nconst job = await kaab.jobs.create({\n  url: `${site}\u002Fp\u002F1`,\n  extract: {\n    title: \"h1\",\n    price: { selector: \".price\", type: \"money\", locale: \"tr\", currency: \"TRY\" },\n  },\n  wait: 30,\n});\nif (job.status !== \"succeeded\") throw new Error(`job ${job.id} is ${job.status}`);\nconsole.log(`${job.id}: ${JSON.stringify(job.data)}`);\n",[1029,1549,1550,1555,1579,1605,1615,1627,1678,1685,1697,1702,1762],{"__ignoreMap":1084},[1088,1551,1552],{"class":1090,"line":1091},[1088,1553,1554],{"class":1190},"\u002F\u002F One call: create the job and hold the request up to 30 s for its result (`Prefer: wait`).\n",[1088,1556,1557,1559,1562,1564,1567,1569,1571,1573,1576],{"class":1090,"line":1168},[1088,1558,1171],{"class":1094},[1088,1560,1561],{"class":1174}," job",[1088,1563,1178],{"class":1094},[1088,1565,1566],{"class":1094}," await",[1088,1568,1175],{"class":1174},[1088,1570,1058],{"class":1132},[1088,1572,171],{"class":1174},[1088,1574,1575],{"class":1132},".create",[1088,1577,1578],{"class":1098},"({\n",[1088,1580,1581,1584,1587,1590,1593,1596,1599,1602],{"class":1090,"line":1303},[1088,1582,1583],{"class":1098},"  url",[1088,1585,1586],{"class":1094},":",[1088,1588,1589],{"class":1161}," `",[1088,1591,1592],{"class":1094},"${",[1088,1594,1595],{"class":1098},"site",[1088,1597,1598],{"class":1094},"}",[1088,1600,1601],{"class":1161},"\u002Fp\u002F1`",[1088,1603,1604],{"class":1255},",\n",[1088,1606,1607,1610,1612],{"class":1090,"line":1471},[1088,1608,1609],{"class":1098},"  extract",[1088,1611,1586],{"class":1094},[1088,1613,1614],{"class":1098}," {\n",[1088,1616,1617,1620,1622,1625],{"class":1090,"line":1481},[1088,1618,1619],{"class":1098},"    title",[1088,1621,1586],{"class":1094},[1088,1623,1624],{"class":1161}," \"h1\"",[1088,1626,1604],{"class":1255},[1088,1628,1629,1632,1634,1637,1639,1642,1645,1648,1650,1653,1655,1658,1660,1663,1665,1668,1670,1673,1676],{"class":1090,"line":1490},[1088,1630,1631],{"class":1098},"    price",[1088,1633,1586],{"class":1094},[1088,1635,1636],{"class":1098}," { selector",[1088,1638,1586],{"class":1094},[1088,1640,1641],{"class":1161}," \".price\"",[1088,1643,1644],{"class":1255},",",[1088,1646,1647],{"class":1098}," type",[1088,1649,1586],{"class":1094},[1088,1651,1652],{"class":1161}," \"money\"",[1088,1654,1644],{"class":1255},[1088,1656,1657],{"class":1098}," locale",[1088,1659,1586],{"class":1094},[1088,1661,1662],{"class":1161}," \"tr\"",[1088,1664,1644],{"class":1255},[1088,1666,1667],{"class":1098}," currency",[1088,1669,1586],{"class":1094},[1088,1671,1672],{"class":1161}," \"TRY\"",[1088,1674,1675],{"class":1098}," }",[1088,1677,1604],{"class":1255},[1088,1679,1680,1683],{"class":1090,"line":1505},[1088,1681,1682],{"class":1098},"  }",[1088,1684,1604],{"class":1255},[1088,1686,1687,1690,1692,1695],{"class":1090,"line":1511},[1088,1688,1689],{"class":1098},"  wait",[1088,1691,1586],{"class":1094},[1088,1693,1694],{"class":1174}," 30",[1088,1696,1604],{"class":1255},[1088,1698,1699],{"class":1090,"line":1517},[1088,1700,1701],{"class":1098},"});\n",[1088,1703,1704,1707,1709,1711,1714,1717,1720,1722,1725,1727,1730,1732,1735,1737,1739,1742,1744,1747,1749,1751,1754,1756,1759],{"class":1090,"line":1523},[1088,1705,1706],{"class":1094},"if",[1088,1708,1206],{"class":1098},[1088,1710,478],{"class":1174},[1088,1712,1713],{"class":1098},".status ",[1088,1715,1716],{"class":1094},"!==",[1088,1718,1719],{"class":1161}," \"succeeded\"",[1088,1721,1324],{"class":1098},[1088,1723,1724],{"class":1094},"throw",[1088,1726,1181],{"class":1094},[1088,1728,1729],{"class":1132}," Error",[1088,1731,1318],{"class":1098},[1088,1733,1734],{"class":1161},"`job ",[1088,1736,1592],{"class":1094},[1088,1738,478],{"class":1174},[1088,1740,1741],{"class":1098},".id",[1088,1743,1598],{"class":1094},[1088,1745,1746],{"class":1161}," is ",[1088,1748,1592],{"class":1094},[1088,1750,478],{"class":1174},[1088,1752,1753],{"class":1098},".status",[1088,1755,1598],{"class":1094},[1088,1757,1758],{"class":1161},"`",[1088,1760,1761],{"class":1098},");\n",[1088,1763,1764,1767,1770,1772,1774,1776,1778,1780,1782,1785,1787,1790,1793,1795,1797,1800,1802,1804],{"class":1090,"line":1529},[1088,1765,1766],{"class":1174},"console",[1088,1768,1769],{"class":1132},".log",[1088,1771,1318],{"class":1098},[1088,1773,1758],{"class":1161},[1088,1775,1592],{"class":1094},[1088,1777,478],{"class":1174},[1088,1779,1741],{"class":1098},[1088,1781,1598],{"class":1094},[1088,1783,1784],{"class":1161},": ",[1088,1786,1592],{"class":1094},[1088,1788,1789],{"class":1174},"JSON",[1088,1791,1792],{"class":1132},".stringify",[1088,1794,1318],{"class":1098},[1088,1796,478],{"class":1174},[1088,1798,1799],{"class":1098},".data)",[1088,1801,1598],{"class":1094},[1088,1803,1758],{"class":1161},[1088,1805,1761],{"class":1098},[1079,1807,1809],{"className":1228,"code":1808,"filename":1195,"language":1194,"meta":1084,"style":1084},"# One call: create the job and hold the request up to 30 s for its result (Prefer: wait).\njob = kaab.jobs.create(\n    url=f\"{site}\u002Fp\u002F1\",\n    extract={\"title\": \"h1\", \"price\": {\"selector\": \".price\", \"type\": \"money\", \"locale\": \"tr\", \"currency\": \"TRY\"}},\n    wait=30,\n)\nif job.status != \"succeeded\":\n    raise SystemExit(f\"job {job.id} is {job.status}\")\nprint(f\"{job.id}: {job.data.to_dict() if job.data else None}\")\n",[1029,1810,1811,1816,1837,1862,1928,1940,1944,1963,1998],{"__ignoreMap":1084},[1088,1812,1813],{"class":1090,"line":1091},[1088,1814,1815],{"class":1190},"# One call: create the job and hold the request up to 30 s for its result (Prefer: wait).\n",[1088,1817,1818,1821,1823,1825,1827,1829,1831,1834],{"class":1090,"line":1168},[1088,1819,1820],{"class":1098},"job ",[1088,1822,1102],{"class":1094},[1088,1824,1175],{"class":1098},[1088,1826,1058],{"class":1255},[1088,1828,171],{"class":1098},[1088,1830,1058],{"class":1255},[1088,1832,1833],{"class":1132},"create",[1088,1835,1836],{"class":1255},"(\n",[1088,1838,1839,1842,1844,1847,1850,1853,1855,1857,1860],{"class":1090,"line":1303},[1088,1840,1841],{"class":1255},"    url",[1088,1843,1102],{"class":1094},[1088,1845,1846],{"class":1094},"f",[1088,1848,1849],{"class":1161},"\"",[1088,1851,1852],{"class":1174},"{",[1088,1854,1595],{"class":1255},[1088,1856,1598],{"class":1174},[1088,1858,1859],{"class":1161},"\u002Fp\u002F1\"",[1088,1861,1604],{"class":1255},[1088,1863,1864,1867,1869,1871,1874,1876,1879,1881,1884,1887,1890,1892,1895,1897,1900,1902,1905,1907,1910,1912,1915,1917,1920,1922,1925],{"class":1090,"line":1471},[1088,1865,1866],{"class":1255},"    extract",[1088,1868,1102],{"class":1094},[1088,1870,1852],{"class":1255},[1088,1872,1873],{"class":1161},"\"title\"",[1088,1875,1784],{"class":1255},[1088,1877,1878],{"class":1161},"\"h1\"",[1088,1880,1350],{"class":1255},[1088,1882,1883],{"class":1161},"\"price\"",[1088,1885,1886],{"class":1255},": {",[1088,1888,1889],{"class":1161},"\"selector\"",[1088,1891,1784],{"class":1255},[1088,1893,1894],{"class":1161},"\".price\"",[1088,1896,1350],{"class":1255},[1088,1898,1899],{"class":1161},"\"type\"",[1088,1901,1784],{"class":1255},[1088,1903,1904],{"class":1161},"\"money\"",[1088,1906,1350],{"class":1255},[1088,1908,1909],{"class":1161},"\"locale\"",[1088,1911,1784],{"class":1255},[1088,1913,1914],{"class":1161},"\"tr\"",[1088,1916,1350],{"class":1255},[1088,1918,1919],{"class":1161},"\"currency\"",[1088,1921,1784],{"class":1255},[1088,1923,1924],{"class":1161},"\"TRY\"",[1088,1926,1927],{"class":1255},"}},\n",[1088,1929,1930,1933,1935,1938],{"class":1090,"line":1481},[1088,1931,1932],{"class":1255},"    wait",[1088,1934,1102],{"class":1094},[1088,1936,1937],{"class":1174},"30",[1088,1939,1604],{"class":1255},[1088,1941,1942],{"class":1090,"line":1490},[1088,1943,1535],{"class":1255},[1088,1945,1946,1948,1950,1952,1955,1958,1960],{"class":1090,"line":1505},[1088,1947,1706],{"class":1094},[1088,1949,1561],{"class":1098},[1088,1951,1058],{"class":1255},[1088,1953,1954],{"class":1098},"status ",[1088,1956,1957],{"class":1094},"!=",[1088,1959,1719],{"class":1161},[1088,1961,1962],{"class":1255},":\n",[1088,1964,1965,1968,1971,1973,1975,1978,1980,1983,1985,1987,1989,1992,1994,1996],{"class":1090,"line":1511},[1088,1966,1967],{"class":1094},"    raise",[1088,1969,1970],{"class":1174}," SystemExit",[1088,1972,1318],{"class":1255},[1088,1974,1846],{"class":1094},[1088,1976,1977],{"class":1161},"\"job ",[1088,1979,1852],{"class":1174},[1088,1981,1982],{"class":1255},"job.id",[1088,1984,1598],{"class":1174},[1088,1986,1746],{"class":1161},[1088,1988,1852],{"class":1174},[1088,1990,1991],{"class":1255},"job.status",[1088,1993,1598],{"class":1174},[1088,1995,1849],{"class":1161},[1088,1997,1535],{"class":1255},[1088,1999,2000,2003,2005,2007,2009,2011,2013,2015,2017,2019,2022,2025,2028,2030,2033,2036,2039,2041],{"class":1090,"line":1517},[1088,2001,2002],{"class":1132},"print",[1088,2004,1318],{"class":1255},[1088,2006,1846],{"class":1094},[1088,2008,1849],{"class":1161},[1088,2010,1852],{"class":1174},[1088,2012,1982],{"class":1255},[1088,2014,1598],{"class":1174},[1088,2016,1784],{"class":1161},[1088,2018,1852],{"class":1174},[1088,2020,2021],{"class":1255},"job.data.",[1088,2023,2024],{"class":1132},"to_dict",[1088,2026,2027],{"class":1255},"() ",[1088,2029,1706],{"class":1094},[1088,2031,2032],{"class":1255}," job.data ",[1088,2034,2035],{"class":1094},"else",[1088,2037,2038],{"class":1174}," None}",[1088,2040,1849],{"class":1161},[1088,2042,1535],{"class":1255},[1079,2044,2046],{"className":1284,"code":2045,"filename":1263,"language":1262,"meta":1084,"style":1084},"\u002F\u002F One call: create the job and hold the request up to 30 s for its result (Prefer: wait).\nbody, err := kaab.Body[client.CreateJobJSONBody](map[string]any{\n    \"url\": site + \"\u002Fp\u002F1\",\n    \"extract\": map[string]any{\n        \"title\": \"h1\",\n        \"price\": map[string]any{\"selector\": \".price\", \"type\": \"money\", \"locale\": \"tr\", \"currency\": \"TRY\"},\n    },\n})\nif err != nil {\n    log.Fatal(err)\n}\njob, err := c.Jobs.Create(ctx, body, kaab.WithWait(30))\nif err != nil {\n    log.Fatal(err)\n}\nif job.Status != \"succeeded\" {\n    log.Fatalf(\"job %s is %s\", job.ID, job.Status)\n}\nfmt.Printf(\"%s: %v\\n\", job.ID, *job.Data)\n",[1029,2047,2048,2053,2094,2110,2129,2140,2192,2197,2202,2216,2227,2232,2258,2271,2280,2285,2299,2323,2328],{"__ignoreMap":1084},[1088,2049,2050],{"class":1090,"line":1091},[1088,2051,2052],{"class":1190},"\u002F\u002F One call: create the job and hold the request up to 30 s for its result (Prefer: wait).\n",[1088,2054,2055,2058,2060,2062,2065,2068,2070,2072,2075,2078,2081,2083,2086,2089,2091],{"class":1090,"line":1168},[1088,2056,2057],{"class":1098},"body, err ",[1088,2059,1309],{"class":1094},[1088,2061,1312],{"class":1098},[1088,2063,2064],{"class":1132},"Body",[1088,2066,2067],{"class":1098},"[",[1088,2069,1333],{"class":1132},[1088,2071,1058],{"class":1098},[1088,2073,2074],{"class":1132},"CreateJobJSONBody",[1088,2076,2077],{"class":1098},"](",[1088,2079,2080],{"class":1094},"map",[1088,2082,2067],{"class":1098},[1088,2084,2085],{"class":1094},"string",[1088,2087,2088],{"class":1098},"]",[1088,2090,634],{"class":1132},[1088,2092,2093],{"class":1098},"{\n",[1088,2095,2096,2099,2102,2105,2108],{"class":1090,"line":1303},[1088,2097,2098],{"class":1161},"    \"url\"",[1088,2100,2101],{"class":1098},": site ",[1088,2103,2104],{"class":1094},"+",[1088,2106,2107],{"class":1161}," \"\u002Fp\u002F1\"",[1088,2109,1604],{"class":1098},[1088,2111,2112,2115,2117,2119,2121,2123,2125,2127],{"class":1090,"line":1471},[1088,2113,2114],{"class":1161},"    \"extract\"",[1088,2116,1784],{"class":1098},[1088,2118,2080],{"class":1094},[1088,2120,2067],{"class":1098},[1088,2122,2085],{"class":1094},[1088,2124,2088],{"class":1098},[1088,2126,634],{"class":1132},[1088,2128,2093],{"class":1098},[1088,2130,2131,2134,2136,2138],{"class":1090,"line":1481},[1088,2132,2133],{"class":1161},"        \"title\"",[1088,2135,1784],{"class":1098},[1088,2137,1878],{"class":1161},[1088,2139,1604],{"class":1098},[1088,2141,2142,2145,2147,2149,2151,2153,2155,2157,2159,2161,2163,2165,2167,2169,2171,2173,2175,2177,2179,2181,2183,2185,2187,2189],{"class":1090,"line":1490},[1088,2143,2144],{"class":1161},"        \"price\"",[1088,2146,1784],{"class":1098},[1088,2148,2080],{"class":1094},[1088,2150,2067],{"class":1098},[1088,2152,2085],{"class":1094},[1088,2154,2088],{"class":1098},[1088,2156,634],{"class":1132},[1088,2158,1852],{"class":1098},[1088,2160,1889],{"class":1161},[1088,2162,1784],{"class":1098},[1088,2164,1894],{"class":1161},[1088,2166,1350],{"class":1098},[1088,2168,1899],{"class":1161},[1088,2170,1784],{"class":1098},[1088,2172,1904],{"class":1161},[1088,2174,1350],{"class":1098},[1088,2176,1909],{"class":1161},[1088,2178,1784],{"class":1098},[1088,2180,1914],{"class":1161},[1088,2182,1350],{"class":1098},[1088,2184,1919],{"class":1161},[1088,2186,1784],{"class":1098},[1088,2188,1924],{"class":1161},[1088,2190,2191],{"class":1098},"},\n",[1088,2193,2194],{"class":1090,"line":1505},[1088,2195,2196],{"class":1098},"    },\n",[1088,2198,2199],{"class":1090,"line":1511},[1088,2200,2201],{"class":1098},"})\n",[1088,2203,2204,2206,2209,2211,2214],{"class":1090,"line":1517},[1088,2205,1706],{"class":1094},[1088,2207,2208],{"class":1098}," err ",[1088,2210,1957],{"class":1094},[1088,2212,2213],{"class":1174}," nil",[1088,2215,1614],{"class":1098},[1088,2217,2218,2221,2224],{"class":1090,"line":1523},[1088,2219,2220],{"class":1098},"    log.",[1088,2222,2223],{"class":1132},"Fatal",[1088,2225,2226],{"class":1098},"(err)\n",[1088,2228,2229],{"class":1090,"line":1529},[1088,2230,2231],{"class":1098},"}\n",[1088,2233,2234,2237,2239,2242,2245,2248,2251,2253,2255],{"class":1090,"line":1538},[1088,2235,2236],{"class":1098},"job, err ",[1088,2238,1309],{"class":1094},[1088,2240,2241],{"class":1098}," c.Jobs.",[1088,2243,2244],{"class":1132},"Create",[1088,2246,2247],{"class":1098},"(ctx, body, kaab.",[1088,2249,2250],{"class":1132},"WithWait",[1088,2252,1318],{"class":1098},[1088,2254,1937],{"class":1174},[1088,2256,2257],{"class":1098},"))\n",[1088,2259,2261,2263,2265,2267,2269],{"class":1090,"line":2260},13,[1088,2262,1706],{"class":1094},[1088,2264,2208],{"class":1098},[1088,2266,1957],{"class":1094},[1088,2268,2213],{"class":1174},[1088,2270,1614],{"class":1098},[1088,2272,2274,2276,2278],{"class":1090,"line":2273},14,[1088,2275,2220],{"class":1098},[1088,2277,2223],{"class":1132},[1088,2279,2226],{"class":1098},[1088,2281,2283],{"class":1090,"line":2282},15,[1088,2284,2231],{"class":1098},[1088,2286,2288,2290,2293,2295,2297],{"class":1090,"line":2287},16,[1088,2289,1706],{"class":1094},[1088,2291,2292],{"class":1098}," job.Status ",[1088,2294,1957],{"class":1094},[1088,2296,1719],{"class":1161},[1088,2298,1614],{"class":1098},[1088,2300,2302,2304,2307,2309,2311,2314,2316,2318,2320],{"class":1090,"line":2301},17,[1088,2303,2220],{"class":1098},[1088,2305,2306],{"class":1132},"Fatalf",[1088,2308,1318],{"class":1098},[1088,2310,1977],{"class":1161},[1088,2312,2313],{"class":1174},"%s",[1088,2315,1746],{"class":1161},[1088,2317,2313],{"class":1174},[1088,2319,1849],{"class":1161},[1088,2321,2322],{"class":1098},", job.ID, job.Status)\n",[1088,2324,2326],{"class":1090,"line":2325},18,[1088,2327,2231],{"class":1098},[1088,2329,2331,2334,2337,2339,2341,2343,2345,2348,2351,2354,2357],{"class":1090,"line":2330},19,[1088,2332,2333],{"class":1098},"fmt.",[1088,2335,2336],{"class":1132},"Printf",[1088,2338,1318],{"class":1098},[1088,2340,1849],{"class":1161},[1088,2342,2313],{"class":1174},[1088,2344,1784],{"class":1161},[1088,2346,2347],{"class":1174},"%v",[1088,2349,2350],{"class":1161},"\\n\"",[1088,2352,2353],{"class":1098},", job.ID, ",[1088,2355,2356],{"class":1094},"*",[1088,2358,2359],{"class":1098},"job.Data)\n",[1079,2361,2363],{"className":1081,"code":2362,"filename":841,"language":1083,"meta":1084,"style":1084},"data=$(kaab jobs run \\\n  --url \"${SITE_URL:-https:\u002F\u002Fshop.example.com}\u002Fp\u002F1\" \\\n  --extract '{\"title\": \"h1\", \"price\": {\"selector\": \".price\", \"type\": \"money\", \"locale\": \"tr\", \"currency\": \"TRY\"}}' \\\n  --wait 30)\necho \"$data\"\n",[1029,2364,2365,2384,2403,2413,2422],{"__ignoreMap":1084},[1088,2366,2367,2370,2372,2374,2376,2379,2382],{"class":1090,"line":1091},[1088,2368,2369],{"class":1098},"data",[1088,2371,1102],{"class":1094},[1088,2373,1417],{"class":1098},[1088,2375,846],{"class":1132},[1088,2377,2378],{"class":1136}," jobs",[1088,2380,2381],{"class":1136}," run",[1088,2383,1449],{"class":1098},[1088,2385,2386,2389,2392,2394,2396,2398,2401],{"class":1090,"line":1168},[1088,2387,2388],{"class":1136},"  --url",[1088,2390,2391],{"class":1161}," \"${SITE_URL",[1088,2393,1431],{"class":1094},[1088,2395,1434],{"class":1161},[1088,2397,1437],{"class":1094},[1088,2399,2400],{"class":1161},"shop.example.com}\u002Fp\u002F1\"",[1088,2402,1449],{"class":1098},[1088,2404,2405,2408,2411],{"class":1090,"line":1303},[1088,2406,2407],{"class":1136},"  --extract",[1088,2409,2410],{"class":1161}," '{\"title\": \"h1\", \"price\": {\"selector\": \".price\", \"type\": \"money\", \"locale\": \"tr\", \"currency\": \"TRY\"}}'",[1088,2412,1449],{"class":1098},[1088,2414,2415,2418,2420],{"class":1090,"line":1471},[1088,2416,2417],{"class":1136},"  --wait",[1088,2419,1694],{"class":1174},[1088,2421,1535],{"class":1098},[1088,2423,2424,2426],{"class":1090,"line":1481},[1088,2425,1541],{"class":1132},[1088,2427,2428],{"class":1161}," \"$data\"\n",[1025,2430,2431,2432,2435,2436,2439],{},"Each client sends ",[1029,2433,2434],{},"POST \u002Fv1\u002Fjobs"," with ",[1029,2437,2438],{},"Prefer: wait=30",". If the job finishes inside those 30 seconds you get the result in the same response; if it does not, you get the job as it is, and you wait for it separately.",[1107,2441,2443],{"id":2442},"waiting-separately","Waiting separately",[1025,2445,2446,2447,2450],{},"For a job that may take longer, create it without waiting and follow it to the end. Each SDK's wait helper long-polls ",[1029,2448,2449],{},"GET \u002Fv1\u002Fjobs\u002F{id}",", so a job that is not moving costs about one request a minute:",[1401,2452,2453,2612,2730],{},[1079,2454,2456],{"className":1143,"code":2455,"filename":1119,"language":1145,"meta":1084,"style":1084},"\u002F\u002F Or start it and wait separately: `jobs.wait` long-polls until the job ends.\nconst started = await kaab.jobs.create({\n  url: `${site}\u002Fp\u002F2`,\n  extract: { title: \"h1\" },\n});\nconst done = await kaab.jobs.wait(started.id, { timeoutMs: 120_000 });\nconsole.log(`${done.id}: ${done.status} ${JSON.stringify(done.data)}`);\n",[1029,2457,2458,2463,2484,2503,2520,2524,2564],{"__ignoreMap":1084},[1088,2459,2460],{"class":1090,"line":1091},[1088,2461,2462],{"class":1190},"\u002F\u002F Or start it and wait separately: `jobs.wait` long-polls until the job ends.\n",[1088,2464,2465,2467,2470,2472,2474,2476,2478,2480,2482],{"class":1090,"line":1168},[1088,2466,1171],{"class":1094},[1088,2468,2469],{"class":1174}," started",[1088,2471,1178],{"class":1094},[1088,2473,1566],{"class":1094},[1088,2475,1175],{"class":1174},[1088,2477,1058],{"class":1132},[1088,2479,171],{"class":1174},[1088,2481,1575],{"class":1132},[1088,2483,1578],{"class":1098},[1088,2485,2486,2488,2490,2492,2494,2496,2498,2501],{"class":1090,"line":1303},[1088,2487,1583],{"class":1098},[1088,2489,1586],{"class":1094},[1088,2491,1589],{"class":1161},[1088,2493,1592],{"class":1094},[1088,2495,1595],{"class":1098},[1088,2497,1598],{"class":1094},[1088,2499,2500],{"class":1161},"\u002Fp\u002F2`",[1088,2502,1604],{"class":1255},[1088,2504,2505,2507,2509,2512,2514,2516,2518],{"class":1090,"line":1471},[1088,2506,1609],{"class":1098},[1088,2508,1586],{"class":1094},[1088,2510,2511],{"class":1098}," { title",[1088,2513,1586],{"class":1094},[1088,2515,1624],{"class":1161},[1088,2517,1675],{"class":1098},[1088,2519,1604],{"class":1255},[1088,2521,2522],{"class":1090,"line":1481},[1088,2523,1701],{"class":1098},[1088,2525,2526,2528,2531,2533,2535,2537,2539,2541,2544,2546,2549,2551,2553,2556,2558,2561],{"class":1090,"line":1490},[1088,2527,1171],{"class":1094},[1088,2529,2530],{"class":1174}," done",[1088,2532,1178],{"class":1094},[1088,2534,1566],{"class":1094},[1088,2536,1175],{"class":1174},[1088,2538,1058],{"class":1132},[1088,2540,171],{"class":1174},[1088,2542,2543],{"class":1132},".wait",[1088,2545,1318],{"class":1098},[1088,2547,2548],{"class":1174},"started",[1088,2550,1741],{"class":1098},[1088,2552,1644],{"class":1255},[1088,2554,2555],{"class":1098}," { timeoutMs",[1088,2557,1586],{"class":1094},[1088,2559,2560],{"class":1174}," 120_000",[1088,2562,2563],{"class":1098}," });\n",[1088,2565,2566,2568,2570,2572,2574,2576,2579,2581,2583,2585,2587,2589,2591,2593,2596,2598,2600,2602,2604,2606,2608,2610],{"class":1090,"line":1505},[1088,2567,1766],{"class":1174},[1088,2569,1769],{"class":1132},[1088,2571,1318],{"class":1098},[1088,2573,1758],{"class":1161},[1088,2575,1592],{"class":1094},[1088,2577,2578],{"class":1174},"done",[1088,2580,1741],{"class":1098},[1088,2582,1598],{"class":1094},[1088,2584,1784],{"class":1161},[1088,2586,1592],{"class":1094},[1088,2588,2578],{"class":1174},[1088,2590,1753],{"class":1098},[1088,2592,1598],{"class":1094},[1088,2594,2595],{"class":1094}," ${",[1088,2597,1789],{"class":1174},[1088,2599,1792],{"class":1132},[1088,2601,1318],{"class":1098},[1088,2603,2578],{"class":1174},[1088,2605,1799],{"class":1098},[1088,2607,1598],{"class":1094},[1088,2609,1758],{"class":1161},[1088,2611,1761],{"class":1098},[1079,2613,2615],{"className":1228,"code":2614,"filename":1195,"language":1194,"meta":1084,"style":1084},"# Or start it and wait separately: jobs.wait long-polls until the job ends.\nstarted = kaab.jobs.create(url=f\"{site}\u002Fp\u002F2\", extract={\"title\": \"h1\"})\ndone = kaab.jobs.wait(started.id, timeout=120)\nprint(f\"{done.id}: {done.status}\")\n",[1029,2616,2617,2622,2672,2700],{"__ignoreMap":1084},[1088,2618,2619],{"class":1090,"line":1091},[1088,2620,2621],{"class":1190},"# Or start it and wait separately: jobs.wait long-polls until the job ends.\n",[1088,2623,2624,2627,2629,2631,2633,2635,2637,2639,2642,2644,2646,2648,2650,2652,2654,2657,2660,2662,2664,2666,2668,2670],{"class":1090,"line":1168},[1088,2625,2626],{"class":1098},"started ",[1088,2628,1102],{"class":1094},[1088,2630,1175],{"class":1098},[1088,2632,1058],{"class":1255},[1088,2634,171],{"class":1098},[1088,2636,1058],{"class":1255},[1088,2638,1833],{"class":1132},[1088,2640,2641],{"class":1255},"(url",[1088,2643,1102],{"class":1094},[1088,2645,1846],{"class":1094},[1088,2647,1849],{"class":1161},[1088,2649,1852],{"class":1174},[1088,2651,1595],{"class":1255},[1088,2653,1598],{"class":1174},[1088,2655,2656],{"class":1161},"\u002Fp\u002F2\"",[1088,2658,2659],{"class":1255},", extract",[1088,2661,1102],{"class":1094},[1088,2663,1852],{"class":1255},[1088,2665,1873],{"class":1161},[1088,2667,1784],{"class":1255},[1088,2669,1878],{"class":1161},[1088,2671,2201],{"class":1255},[1088,2673,2674,2677,2679,2681,2683,2685,2687,2690,2693,2695,2698],{"class":1090,"line":1303},[1088,2675,2676],{"class":1098},"done ",[1088,2678,1102],{"class":1094},[1088,2680,1175],{"class":1098},[1088,2682,1058],{"class":1255},[1088,2684,171],{"class":1098},[1088,2686,1058],{"class":1255},[1088,2688,2689],{"class":1132},"wait",[1088,2691,2692],{"class":1255},"(started.id, timeout",[1088,2694,1102],{"class":1094},[1088,2696,2697],{"class":1174},"120",[1088,2699,1535],{"class":1255},[1088,2701,2702,2704,2706,2708,2710,2712,2715,2717,2719,2721,2724,2726,2728],{"class":1090,"line":1471},[1088,2703,2002],{"class":1132},[1088,2705,1318],{"class":1255},[1088,2707,1846],{"class":1094},[1088,2709,1849],{"class":1161},[1088,2711,1852],{"class":1174},[1088,2713,2714],{"class":1255},"done.id",[1088,2716,1598],{"class":1174},[1088,2718,1784],{"class":1161},[1088,2720,1852],{"class":1174},[1088,2722,2723],{"class":1255},"done.status",[1088,2725,1598],{"class":1174},[1088,2727,1849],{"class":1161},[1088,2729,1535],{"class":1255},[1079,2731,2733],{"className":1284,"code":2732,"filename":1263,"language":1262,"meta":1084,"style":1084},"\u002F\u002F Or start it and wait separately: Jobs.Wait long-polls until the job ends.\nbody, _ = kaab.Body[client.CreateJobJSONBody](map[string]any{\"url\": site + \"\u002Fp\u002F2\", \"extract\": map[string]any{\"title\": \"h1\"}})\nstarted, err := c.Jobs.Create(ctx, body)\nif err != nil {\n    log.Fatal(err)\n}\ndone, err := c.Jobs.Wait(ctx, started.ID, kaab.WaitOptions{Timeout: 2 * time.Minute})\nif err != nil {\n    log.Fatal(err)\n}\nfmt.Printf(\"%s: %s\\n\", done.ID, done.Status)\n",[1029,2734,2735,2740,2811,2825,2837,2845,2849,2883,2895,2903,2907],{"__ignoreMap":1084},[1088,2736,2737],{"class":1090,"line":1091},[1088,2738,2739],{"class":1190},"\u002F\u002F Or start it and wait separately: Jobs.Wait long-polls until the job ends.\n",[1088,2741,2742,2745,2747,2749,2751,2753,2755,2757,2759,2761,2763,2765,2767,2769,2771,2773,2776,2778,2780,2783,2785,2788,2790,2792,2794,2796,2798,2800,2802,2804,2806,2808],{"class":1090,"line":1168},[1088,2743,2744],{"class":1098},"body, _ ",[1088,2746,1102],{"class":1094},[1088,2748,1312],{"class":1098},[1088,2750,2064],{"class":1132},[1088,2752,2067],{"class":1098},[1088,2754,1333],{"class":1132},[1088,2756,1058],{"class":1098},[1088,2758,2074],{"class":1132},[1088,2760,2077],{"class":1098},[1088,2762,2080],{"class":1094},[1088,2764,2067],{"class":1098},[1088,2766,2085],{"class":1094},[1088,2768,2088],{"class":1098},[1088,2770,634],{"class":1132},[1088,2772,1852],{"class":1098},[1088,2774,2775],{"class":1161},"\"url\"",[1088,2777,2101],{"class":1098},[1088,2779,2104],{"class":1094},[1088,2781,2782],{"class":1161}," \"\u002Fp\u002F2\"",[1088,2784,1350],{"class":1098},[1088,2786,2787],{"class":1161},"\"extract\"",[1088,2789,1784],{"class":1098},[1088,2791,2080],{"class":1094},[1088,2793,2067],{"class":1098},[1088,2795,2085],{"class":1094},[1088,2797,2088],{"class":1098},[1088,2799,634],{"class":1132},[1088,2801,1852],{"class":1098},[1088,2803,1873],{"class":1161},[1088,2805,1784],{"class":1098},[1088,2807,1878],{"class":1161},[1088,2809,2810],{"class":1098},"}})\n",[1088,2812,2813,2816,2818,2820,2822],{"class":1090,"line":1303},[1088,2814,2815],{"class":1098},"started, err ",[1088,2817,1309],{"class":1094},[1088,2819,2241],{"class":1098},[1088,2821,2244],{"class":1132},[1088,2823,2824],{"class":1098},"(ctx, body)\n",[1088,2826,2827,2829,2831,2833,2835],{"class":1090,"line":1471},[1088,2828,1706],{"class":1094},[1088,2830,2208],{"class":1098},[1088,2832,1957],{"class":1094},[1088,2834,2213],{"class":1174},[1088,2836,1614],{"class":1098},[1088,2838,2839,2841,2843],{"class":1090,"line":1481},[1088,2840,2220],{"class":1098},[1088,2842,2223],{"class":1132},[1088,2844,2226],{"class":1098},[1088,2846,2847],{"class":1090,"line":1490},[1088,2848,2231],{"class":1098},[1088,2850,2851,2854,2856,2858,2861,2864,2866,2868,2871,2874,2877,2880],{"class":1090,"line":1505},[1088,2852,2853],{"class":1098},"done, err ",[1088,2855,1309],{"class":1094},[1088,2857,2241],{"class":1098},[1088,2859,2860],{"class":1132},"Wait",[1088,2862,2863],{"class":1098},"(ctx, started.ID, ",[1088,2865,846],{"class":1132},[1088,2867,1058],{"class":1098},[1088,2869,2870],{"class":1132},"WaitOptions",[1088,2872,2873],{"class":1098},"{Timeout: ",[1088,2875,2876],{"class":1174},"2",[1088,2878,2879],{"class":1094}," *",[1088,2881,2882],{"class":1098}," time.Minute})\n",[1088,2884,2885,2887,2889,2891,2893],{"class":1090,"line":1511},[1088,2886,1706],{"class":1094},[1088,2888,2208],{"class":1098},[1088,2890,1957],{"class":1094},[1088,2892,2213],{"class":1174},[1088,2894,1614],{"class":1098},[1088,2896,2897,2899,2901],{"class":1090,"line":1517},[1088,2898,2220],{"class":1098},[1088,2900,2223],{"class":1132},[1088,2902,2226],{"class":1098},[1088,2904,2905],{"class":1090,"line":1523},[1088,2906,2231],{"class":1098},[1088,2908,2909,2911,2913,2915,2917,2919,2921,2923,2925],{"class":1090,"line":1529},[1088,2910,2333],{"class":1098},[1088,2912,2336],{"class":1132},[1088,2914,1318],{"class":1098},[1088,2916,1849],{"class":1161},[1088,2918,2313],{"class":1174},[1088,2920,1784],{"class":1161},[1088,2922,2313],{"class":1174},[1088,2924,2350],{"class":1161},[1088,2926,2927],{"class":1098},", done.ID, done.Status)\n",[1033,2929,2931],{"id":2930},"what-comes-back","What comes back",[1025,2933,2934],{},"A finished job is one envelope. This is the one the request above returns, trimmed to the keys that matter here (ids and timings differ on your run):",[1079,2936,2939],{"className":2937,"code":2938,"language":680,"meta":1084,"style":1084},"language-json shiki shiki-themes kaab-code kaab-code kaab-code","{\n  \"id\": \"job_01j9zqk3q7m4n5p6r7s8t9v0wx\",\n  \"object\": \"job\",\n  \"mode\": \"test\",\n  \"status\": \"succeeded\",\n  \"reason\": null,\n  \"program\": { \"id\": null, \"name\": null, \"version\": null, \"version_id\": null },\n  \"data\": {\n    \"title\": \"Kulaklık Klasik 101\",\n    \"price\": { \"amount\": 1337.4, \"currency\": \"TRY\" }\n  },\n  \"raw\": null,\n  \"warnings\": [],\n  \"meta\": {\n    \"tier\": \"http\",\n    \"tier_requested\": \"http\",\n    \"escalations\": [],\n    \"region\": \"eu\",\n    \"final_url\": \"https:\u002F\u002Fshop.example.com\u002Fp\u002F1\",\n    \"cache\": \"miss\",\n    \"duration_ms\": 412,\n    \"parked_ms\": 0,\n    \"steps\": [\n      { \"path\": \"steps[0]\", \"action\": \"goto\", \"status\": \"ok\", \"duration_ms\": 380, \"healed\": false },\n      { \"path\": \"steps[1]\", \"action\": \"extract\", \"status\": \"ok\", \"duration_ms\": 12, \"healed\": false }\n    ],\n    \"snapshot\": \"\u002Fv1\u002Fjobs\u002Fjob_01j9zqk3q7m4n5p6r7s8t9v0wx\u002Fsnapshot\"\n  },\n  \"error\": null,\n  \"input_request\": null,\n  \"attention\": null,\n  \"progress\": null,\n  \"created_at\": \"2026-09-18T10:00:00Z\",\n  \"finished_at\": \"2026-09-18T10:00:01Z\"\n}\n",[1029,2940,2941,2945,2957,2969,2981,2992,3004,3052,3061,3073,3102,3108,3119,3131,3140,3152,3163,3174,3186,3198,3211,3224,3237,3248,3306,3354,3362,3373,3380,3392,3404,3416,3428,3441,3452],{"__ignoreMap":1084},[1088,2942,2943],{"class":1090,"line":1091},[1088,2944,2093],{"class":1098},[1088,2946,2947,2950,2952,2955],{"class":1090,"line":1168},[1088,2948,2949],{"class":1094},"  \"id\"",[1088,2951,1586],{"class":1255},[1088,2953,2954],{"class":1161}," \"job_01j9zqk3q7m4n5p6r7s8t9v0wx\"",[1088,2956,1604],{"class":1255},[1088,2958,2959,2962,2964,2967],{"class":1090,"line":1303},[1088,2960,2961],{"class":1094},"  \"object\"",[1088,2963,1586],{"class":1255},[1088,2965,2966],{"class":1161}," \"job\"",[1088,2968,1604],{"class":1255},[1088,2970,2971,2974,2976,2979],{"class":1090,"line":1471},[1088,2972,2973],{"class":1094},"  \"mode\"",[1088,2975,1586],{"class":1255},[1088,2977,2978],{"class":1161}," \"test\"",[1088,2980,1604],{"class":1255},[1088,2982,2983,2986,2988,2990],{"class":1090,"line":1481},[1088,2984,2985],{"class":1094},"  \"status\"",[1088,2987,1586],{"class":1255},[1088,2989,1719],{"class":1161},[1088,2991,1604],{"class":1255},[1088,2993,2994,2997,2999,3002],{"class":1090,"line":1490},[1088,2995,2996],{"class":1094},"  \"reason\"",[1088,2998,1586],{"class":1255},[1088,3000,3001],{"class":1174}," null",[1088,3003,1604],{"class":1255},[1088,3005,3006,3009,3011,3014,3017,3019,3021,3023,3026,3028,3030,3032,3035,3037,3039,3041,3044,3046,3048,3050],{"class":1090,"line":1505},[1088,3007,3008],{"class":1094},"  \"program\"",[1088,3010,1586],{"class":1255},[1088,3012,3013],{"class":1098}," { ",[1088,3015,3016],{"class":1094},"\"id\"",[1088,3018,1586],{"class":1255},[1088,3020,3001],{"class":1174},[1088,3022,1644],{"class":1255},[1088,3024,3025],{"class":1094}," \"name\"",[1088,3027,1586],{"class":1255},[1088,3029,3001],{"class":1174},[1088,3031,1644],{"class":1255},[1088,3033,3034],{"class":1094}," \"version\"",[1088,3036,1586],{"class":1255},[1088,3038,3001],{"class":1174},[1088,3040,1644],{"class":1255},[1088,3042,3043],{"class":1094}," \"version_id\"",[1088,3045,1586],{"class":1255},[1088,3047,3001],{"class":1174},[1088,3049,1675],{"class":1098},[1088,3051,1604],{"class":1255},[1088,3053,3054,3057,3059],{"class":1090,"line":1511},[1088,3055,3056],{"class":1094},"  \"data\"",[1088,3058,1586],{"class":1255},[1088,3060,1614],{"class":1098},[1088,3062,3063,3066,3068,3071],{"class":1090,"line":1517},[1088,3064,3065],{"class":1094},"    \"title\"",[1088,3067,1586],{"class":1255},[1088,3069,3070],{"class":1161}," \"Kulaklık Klasik 101\"",[1088,3072,1604],{"class":1255},[1088,3074,3075,3078,3080,3082,3085,3087,3090,3092,3095,3097,3099],{"class":1090,"line":1523},[1088,3076,3077],{"class":1094},"    \"price\"",[1088,3079,1586],{"class":1255},[1088,3081,3013],{"class":1098},[1088,3083,3084],{"class":1094},"\"amount\"",[1088,3086,1586],{"class":1255},[1088,3088,3089],{"class":1174}," 1337.4",[1088,3091,1644],{"class":1255},[1088,3093,3094],{"class":1094}," \"currency\"",[1088,3096,1586],{"class":1255},[1088,3098,1672],{"class":1161},[1088,3100,3101],{"class":1098}," }\n",[1088,3103,3104,3106],{"class":1090,"line":1529},[1088,3105,1682],{"class":1098},[1088,3107,1604],{"class":1255},[1088,3109,3110,3113,3115,3117],{"class":1090,"line":1538},[1088,3111,3112],{"class":1094},"  \"raw\"",[1088,3114,1586],{"class":1255},[1088,3116,3001],{"class":1174},[1088,3118,1604],{"class":1255},[1088,3120,3121,3124,3126,3129],{"class":1090,"line":2260},[1088,3122,3123],{"class":1094},"  \"warnings\"",[1088,3125,1586],{"class":1255},[1088,3127,3128],{"class":1098}," []",[1088,3130,1604],{"class":1255},[1088,3132,3133,3136,3138],{"class":1090,"line":2273},[1088,3134,3135],{"class":1094},"  \"meta\"",[1088,3137,1586],{"class":1255},[1088,3139,1614],{"class":1098},[1088,3141,3142,3145,3147,3150],{"class":1090,"line":2282},[1088,3143,3144],{"class":1094},"    \"tier\"",[1088,3146,1586],{"class":1255},[1088,3148,3149],{"class":1161}," \"http\"",[1088,3151,1604],{"class":1255},[1088,3153,3154,3157,3159,3161],{"class":1090,"line":2287},[1088,3155,3156],{"class":1094},"    \"tier_requested\"",[1088,3158,1586],{"class":1255},[1088,3160,3149],{"class":1161},[1088,3162,1604],{"class":1255},[1088,3164,3165,3168,3170,3172],{"class":1090,"line":2301},[1088,3166,3167],{"class":1094},"    \"escalations\"",[1088,3169,1586],{"class":1255},[1088,3171,3128],{"class":1098},[1088,3173,1604],{"class":1255},[1088,3175,3176,3179,3181,3184],{"class":1090,"line":2325},[1088,3177,3178],{"class":1094},"    \"region\"",[1088,3180,1586],{"class":1255},[1088,3182,3183],{"class":1161}," \"eu\"",[1088,3185,1604],{"class":1255},[1088,3187,3188,3191,3193,3196],{"class":1090,"line":2330},[1088,3189,3190],{"class":1094},"    \"final_url\"",[1088,3192,1586],{"class":1255},[1088,3194,3195],{"class":1161}," \"https:\u002F\u002Fshop.example.com\u002Fp\u002F1\"",[1088,3197,1604],{"class":1255},[1088,3199,3201,3204,3206,3209],{"class":1090,"line":3200},20,[1088,3202,3203],{"class":1094},"    \"cache\"",[1088,3205,1586],{"class":1255},[1088,3207,3208],{"class":1161}," \"miss\"",[1088,3210,1604],{"class":1255},[1088,3212,3214,3217,3219,3222],{"class":1090,"line":3213},21,[1088,3215,3216],{"class":1094},"    \"duration_ms\"",[1088,3218,1586],{"class":1255},[1088,3220,3221],{"class":1174}," 412",[1088,3223,1604],{"class":1255},[1088,3225,3227,3230,3232,3235],{"class":1090,"line":3226},22,[1088,3228,3229],{"class":1094},"    \"parked_ms\"",[1088,3231,1586],{"class":1255},[1088,3233,3234],{"class":1174}," 0",[1088,3236,1604],{"class":1255},[1088,3238,3240,3243,3245],{"class":1090,"line":3239},23,[1088,3241,3242],{"class":1094},"    \"steps\"",[1088,3244,1586],{"class":1255},[1088,3246,3247],{"class":1098}," [\n",[1088,3249,3251,3254,3257,3259,3262,3264,3267,3269,3272,3274,3277,3279,3282,3284,3287,3289,3292,3294,3297,3299,3302,3304],{"class":1090,"line":3250},24,[1088,3252,3253],{"class":1098},"      { ",[1088,3255,3256],{"class":1094},"\"path\"",[1088,3258,1586],{"class":1255},[1088,3260,3261],{"class":1161}," \"steps[0]\"",[1088,3263,1644],{"class":1255},[1088,3265,3266],{"class":1094}," \"action\"",[1088,3268,1586],{"class":1255},[1088,3270,3271],{"class":1161}," \"goto\"",[1088,3273,1644],{"class":1255},[1088,3275,3276],{"class":1094}," \"status\"",[1088,3278,1586],{"class":1255},[1088,3280,3281],{"class":1161}," \"ok\"",[1088,3283,1644],{"class":1255},[1088,3285,3286],{"class":1094}," \"duration_ms\"",[1088,3288,1586],{"class":1255},[1088,3290,3291],{"class":1174}," 380",[1088,3293,1644],{"class":1255},[1088,3295,3296],{"class":1094}," \"healed\"",[1088,3298,1586],{"class":1255},[1088,3300,3301],{"class":1174}," false",[1088,3303,1675],{"class":1098},[1088,3305,1604],{"class":1255},[1088,3307,3309,3311,3313,3315,3318,3320,3322,3324,3327,3329,3331,3333,3335,3337,3339,3341,3344,3346,3348,3350,3352],{"class":1090,"line":3308},25,[1088,3310,3253],{"class":1098},[1088,3312,3256],{"class":1094},[1088,3314,1586],{"class":1255},[1088,3316,3317],{"class":1161}," \"steps[1]\"",[1088,3319,1644],{"class":1255},[1088,3321,3266],{"class":1094},[1088,3323,1586],{"class":1255},[1088,3325,3326],{"class":1161}," \"extract\"",[1088,3328,1644],{"class":1255},[1088,3330,3276],{"class":1094},[1088,3332,1586],{"class":1255},[1088,3334,3281],{"class":1161},[1088,3336,1644],{"class":1255},[1088,3338,3286],{"class":1094},[1088,3340,1586],{"class":1255},[1088,3342,3343],{"class":1174}," 12",[1088,3345,1644],{"class":1255},[1088,3347,3296],{"class":1094},[1088,3349,1586],{"class":1255},[1088,3351,3301],{"class":1174},[1088,3353,3101],{"class":1098},[1088,3355,3357,3360],{"class":1090,"line":3356},26,[1088,3358,3359],{"class":1098},"    ]",[1088,3361,1604],{"class":1255},[1088,3363,3365,3368,3370],{"class":1090,"line":3364},27,[1088,3366,3367],{"class":1094},"    \"snapshot\"",[1088,3369,1586],{"class":1255},[1088,3371,3372],{"class":1161}," \"\u002Fv1\u002Fjobs\u002Fjob_01j9zqk3q7m4n5p6r7s8t9v0wx\u002Fsnapshot\"\n",[1088,3374,3376,3378],{"class":1090,"line":3375},28,[1088,3377,1682],{"class":1098},[1088,3379,1604],{"class":1255},[1088,3381,3383,3386,3388,3390],{"class":1090,"line":3382},29,[1088,3384,3385],{"class":1094},"  \"error\"",[1088,3387,1586],{"class":1255},[1088,3389,3001],{"class":1174},[1088,3391,1604],{"class":1255},[1088,3393,3395,3398,3400,3402],{"class":1090,"line":3394},30,[1088,3396,3397],{"class":1094},"  \"input_request\"",[1088,3399,1586],{"class":1255},[1088,3401,3001],{"class":1174},[1088,3403,1604],{"class":1255},[1088,3405,3407,3410,3412,3414],{"class":1090,"line":3406},31,[1088,3408,3409],{"class":1094},"  \"attention\"",[1088,3411,1586],{"class":1255},[1088,3413,3001],{"class":1174},[1088,3415,1604],{"class":1255},[1088,3417,3419,3422,3424,3426],{"class":1090,"line":3418},32,[1088,3420,3421],{"class":1094},"  \"progress\"",[1088,3423,1586],{"class":1255},[1088,3425,3001],{"class":1174},[1088,3427,1604],{"class":1255},[1088,3429,3431,3434,3436,3439],{"class":1090,"line":3430},33,[1088,3432,3433],{"class":1094},"  \"created_at\"",[1088,3435,1586],{"class":1255},[1088,3437,3438],{"class":1161}," \"2026-09-18T10:00:00Z\"",[1088,3440,1604],{"class":1255},[1088,3442,3444,3447,3449],{"class":1090,"line":3443},34,[1088,3445,3446],{"class":1094},"  \"finished_at\"",[1088,3448,1586],{"class":1255},[1088,3450,3451],{"class":1161}," \"2026-09-18T10:00:01Z\"\n",[1088,3453,3455],{"class":1090,"line":3454},35,[1088,3456,2231],{"class":1098},[1025,3458,3459],{},"What to read in it:",[3461,3462,3463,3480,3499,3510,3525],"ul",{},[3464,3465,3466,3472,3473,3476,3477,3479],"li",{},[3467,3468,3469],"strong",{},[1029,3470,3471],{},"status"," is the one key to switch on. Here it is ",[1029,3474,3475],{},"succeeded",", so ",[1029,3478,2369],{}," is present.",[3464,3481,3482,3486,3487,3490,3491,3494,3495,3498],{},[3467,3483,3484],{},[1029,3485,2369],{}," is typed: ",[1029,3488,3489],{},"price"," is a number and a currency because the field said ",[1029,3492,3493],{},"type: \"money\""," with a Turkish locale, so ",[1029,3496,3497],{},"1.337,40 TL"," was parsed rather than returned as text.",[3464,3500,3501,3505,3506,3509],{},[3467,3502,3503],{},[1029,3504,489],{}," is all ",[1029,3507,3508],{},"null"," because the job used the shorthand rather than a stored program. A job that names a program carries its id, name and version here.",[3464,3511,3512,1746,3517,3520,3521,3524],{},[3467,3513,3514],{},[1029,3515,3516],{},"meta.tier",[1029,3518,3519],{},"http",": the page is server-rendered, so no browser was needed. ",[1029,3522,3523],{},"meta.steps"," shows the two steps the shorthand compiled to.",[3464,3526,3527,3532],{},[3467,3528,3529],{},[1029,3530,3531],{},"warnings"," is empty. A field that came back empty or unreadable would be listed here, with its path.",[1025,3534,3535,3538],{},[1045,3536,19],{"href":3537},"\u002Fgetting-started\u002Fenvelope"," covers every status and what it carries.",[1033,3540,3542],{"id":3541},"worked-example","Worked example",[1025,3544,3545,3546,1586],{},"Extend the schema with two more locator kinds the same page supports: a regular expression over an element's text, and a JSONPath over the JSON the page embeds in ",[1029,3547,3548],{},"\u003Cscript id=\"__NEXT_DATA__\">",[1079,3550,3552],{"className":2937,"code":3551,"language":680,"meta":1084,"style":1084},"{\n  \"url\": \"https:\u002F\u002Fshop.example.com\u002Fp\u002F1\",\n  \"extract\": {\n    \"title\": \"h1\",\n    \"price\": { \"selector\": \".price\", \"type\": \"money\", \"locale\": \"tr\", \"currency\": \"TRY\" },\n    \"sku\": { \"selector\": \".sku\", \"regex\": \"SKU:\\\\s*([A-Z0-9-]+)\" },\n    \"stock\": { \"json\": \"$.props.pageProps.product.stock\", \"type\": \"integer\" }\n  }\n}\n",[1029,3553,3554,3558,3569,3578,3588,3632,3662,3690,3695],{"__ignoreMap":1084},[1088,3555,3556],{"class":1090,"line":1091},[1088,3557,2093],{"class":1098},[1088,3559,3560,3563,3565,3567],{"class":1090,"line":1168},[1088,3561,3562],{"class":1094},"  \"url\"",[1088,3564,1586],{"class":1255},[1088,3566,3195],{"class":1161},[1088,3568,1604],{"class":1255},[1088,3570,3571,3574,3576],{"class":1090,"line":1303},[1088,3572,3573],{"class":1094},"  \"extract\"",[1088,3575,1586],{"class":1255},[1088,3577,1614],{"class":1098},[1088,3579,3580,3582,3584,3586],{"class":1090,"line":1471},[1088,3581,3065],{"class":1094},[1088,3583,1586],{"class":1255},[1088,3585,1624],{"class":1161},[1088,3587,1604],{"class":1255},[1088,3589,3590,3592,3594,3596,3598,3600,3602,3604,3607,3609,3611,3613,3616,3618,3620,3622,3624,3626,3628,3630],{"class":1090,"line":1481},[1088,3591,3077],{"class":1094},[1088,3593,1586],{"class":1255},[1088,3595,3013],{"class":1098},[1088,3597,1889],{"class":1094},[1088,3599,1586],{"class":1255},[1088,3601,1641],{"class":1161},[1088,3603,1644],{"class":1255},[1088,3605,3606],{"class":1094}," \"type\"",[1088,3608,1586],{"class":1255},[1088,3610,1652],{"class":1161},[1088,3612,1644],{"class":1255},[1088,3614,3615],{"class":1094}," \"locale\"",[1088,3617,1586],{"class":1255},[1088,3619,1662],{"class":1161},[1088,3621,1644],{"class":1255},[1088,3623,3094],{"class":1094},[1088,3625,1586],{"class":1255},[1088,3627,1672],{"class":1161},[1088,3629,1675],{"class":1098},[1088,3631,1604],{"class":1255},[1088,3633,3634,3637,3639,3641,3643,3645,3648,3650,3653,3655,3658,3660],{"class":1090,"line":1490},[1088,3635,3636],{"class":1094},"    \"sku\"",[1088,3638,1586],{"class":1255},[1088,3640,3013],{"class":1098},[1088,3642,1889],{"class":1094},[1088,3644,1586],{"class":1255},[1088,3646,3647],{"class":1161}," \".sku\"",[1088,3649,1644],{"class":1255},[1088,3651,3652],{"class":1094}," \"regex\"",[1088,3654,1586],{"class":1255},[1088,3656,3657],{"class":1161}," \"SKU:\\\\s*([A-Z0-9-]+)\"",[1088,3659,1675],{"class":1098},[1088,3661,1604],{"class":1255},[1088,3663,3664,3667,3669,3671,3674,3676,3679,3681,3683,3685,3688],{"class":1090,"line":1505},[1088,3665,3666],{"class":1094},"    \"stock\"",[1088,3668,1586],{"class":1255},[1088,3670,3013],{"class":1098},[1088,3672,3673],{"class":1094},"\"json\"",[1088,3675,1586],{"class":1255},[1088,3677,3678],{"class":1161}," \"$.props.pageProps.product.stock\"",[1088,3680,1644],{"class":1255},[1088,3682,3606],{"class":1094},[1088,3684,1586],{"class":1255},[1088,3686,3687],{"class":1161}," \"integer\"",[1088,3689,3101],{"class":1098},[1088,3691,3692],{"class":1090,"line":1511},[1088,3693,3694],{"class":1098},"  }\n",[1088,3696,3697],{"class":1090,"line":1517},[1088,3698,2231],{"class":1098},[1025,3700,3701,3703,3704,3707,3708,3711,3712,3714,3715,3718,3719,3722,3723,3726],{},[1029,3702,2369],{}," now carries ",[1029,3705,3706],{},"\"sku\": \"HP-1037\""," and ",[1029,3709,3710],{},"\"stock\": 8"," beside the title and price. The job still runs at the ",[1029,3713,3519],{}," tier: both locators read the document that one request returned. Change the URL to ",[1029,3716,3717],{},"\u002Fp\u002F2"," and the same schema reads the second product. When a page needs a browser instead, the job moves up a tier by itself and says so in ",[1029,3720,3721],{},"meta.escalations","; ",[1045,3724,32],{"href":3725},"\u002Fconcepts\u002Ftiers-and-escalation"," follows such a job step by step.",[1033,3728,3730],{"id":3729},"pitfalls","Pitfalls",[3461,3732,3733,3763,3776],{},[3464,3734,3735,3743,3744,3746,3747,3750,3751,3754,3755,3758,3759,3762],{},[3467,3736,3737,3738,3740,3741,1058],{},"Reading ",[1029,3739,2369],{}," without checking ",[1029,3742,3471],{}," A job that has not succeeded has no ",[1029,3745,2369],{},". A request with ",[1029,3748,3749],{},"Prefer: wait"," that ran out of time answers ",[1029,3752,3753],{},"202"," with a ",[1029,3756,3757],{},"queued"," or ",[1029,3760,3761],{},"running"," job.",[3464,3764,3765,3771,3772,3775],{},[3467,3766,3767,3770],{},[1029,3768,3769],{},"localhost"," URLs."," Jobs run on Kaabist's workers, which cannot reach your machine or private addresses; such a request fails ",[1029,3773,3774],{},"ssrf_blocked",". Use a public URL.",[3464,3777,3778,3784,3785,3787,3788,1058],{},[3467,3779,3780,3781,3783],{},"A ",[1029,3782,2689],{}," above 60."," ",[1029,3786,3749],{}," accepts 1 to 60 seconds. For longer jobs, use the wait helper or a ",[1045,3789,513],{"href":3790},"\u002Fguides\u002Fwebhooks",[1033,3792,155],{"id":3793},"reference",[3461,3795,3796,3806,3812,3823],{},[3464,3797,3798,3707,3802],{},[1045,3799,3801],{"href":3800},"\u002Freference\u002Fapi\u002Fjobs\u002Fcreate-job","Create a job",[1045,3803,3805],{"href":3804},"\u002Freference\u002Fapi\u002Fjobs\u002Fget-job","get a job",[3464,3807,3808],{},[1045,3809,3811],{"href":3810},"\u002Freference\u002Fapi\u002Fschemas\u002Fjob","The job object",[3464,3813,3814,3818,3819],{},[1045,3815,3817],{"href":3816},"\u002Freference\u002Fsdks","SDK reference"," and the ",[1045,3820,3822],{"href":3821},"\u002Fguides\u002Fsdks","SDKs guide",[3464,3824,3825],{},[1045,3826,3828],{"href":3827},"\u002Freference\u002Fcli\u002Fkaab-jobs-run",[1029,3829,896],{},[3831,3832,3833],"style",{},"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 .sTzsn, html code.shiki .sTzsn{--shiki-light:var(--kaab-code-foreground);--shiki-default:var(--kaab-code-foreground);--shiki-dark:var(--kaab-code-foreground)}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 .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 .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 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 .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 .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)}",{"title":1084,"searchDepth":1303,"depth":1303,"links":3835},[3836,3837,3844,3847,3848,3849,3850],{"id":1035,"depth":1168,"text":1036},{"id":1061,"depth":1168,"text":1062,"children":3838},[3839,3840,3841,3842,3843],{"id":1109,"depth":1303,"text":1109},{"id":1118,"depth":1303,"text":1119},{"id":1194,"depth":1303,"text":1195},{"id":1262,"depth":1303,"text":1263},{"id":1337,"depth":1303,"text":1338},{"id":1395,"depth":1168,"text":1396,"children":3845},[3846],{"id":2442,"depth":1303,"text":2443},{"id":2930,"depth":1168,"text":2931},{"id":3541,"depth":1168,"text":3542},{"id":3729,"depth":1168,"text":3730},{"id":3793,"depth":1168,"text":155},false,null,"Install an SDK or the kaab CLI, run one job against a product page, and read the envelope that comes back.","md",{},"\u002Fgetting-started\u002Ffirst-job",{"title":16,"description":3853},"1.getting-started\u002F03.first-job","g-n5gSYveCBZzLPLt2Emm7Dw833QIYMZ-mVW-iOBUVk",[3861,3864],{"title":13,"path":1047,"stem":3862,"description":3863,"children":-1},"1.getting-started\u002F02.keys-and-modes","API keys, their scopes and rotation, live and test mode, and the conventions every Kaabist endpoint shares: errors, pagination, idempotency and waiting.",{"title":19,"path":3537,"stem":3865,"description":3866,"children":-1},"1.getting-started\u002F04.envelope","The one shape every job read returns, which keys each status carries, a worked example of every status, and how each SDK waits for a job.",1793591003125]