[{"data":1,"prerenderedAt":3116},["ShallowReactive",2],{"navigation":3,"page:\u002Fguides\u002Fsdks":1019,"surround:\u002Fguides\u002Fsdks":3108},[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":125,"body":1021,"breaking":3098,"date":3099,"description":3100,"extension":3101,"generated":3098,"meta":3102,"navigation":3103,"path":3104,"seo":3105,"stem":3106,"version":3099,"__hash__":3107},"docs\u002F3.guides\u002F13.sdks.md",{"type":1022,"value":1023,"toc":3088},"minimark",[1024,1033,1038,1057,1061,1129,1144,1167,1171,2239,2251,2255,2731,2737,2774,2781,2785,2896,2913,2917,2931,2979,2983,3037,3040,3084],[1025,1026,1027,1028,1032],"p",{},"Kaabist has three official clients, generated from the same OpenAPI document as the API reference\nand sharing one behaviour: the same retries, the same idempotency keys, the same errors. Use one\ninstead of raw HTTP to get typed requests and responses, safe retries and a ",[1029,1030,1031],"code",{},"wait"," helper that\nanswers parked jobs for you.",[1034,1035,1037],"h2",{"id":1036},"when-to-use-it","When to use it",[1025,1039,1040,1041,1048,1049,1052,1053,1056],{},"Use an SDK whenever your code talks to Kaabist from TypeScript, Python or Go. From a shell script\nor CI, the ",[1042,1043,1045,1047],"a",{"href":1044},"\u002Fguides\u002Fcli",[1029,1046,846],{}," CLI"," is usually shorter; from another language, call the\n",[1042,1050,1051],{"href":165},"HTTP API"," directly, sending your own ",[1029,1054,1055],{},"Idempotency-Key"," on job creation.",[1034,1058,1060],{"id":1059},"install-and-configure","Install and configure",[1062,1063,1064,1080],"table",{},[1065,1066,1067],"thead",{},[1068,1069,1070,1074,1077],"tr",{},[1071,1072,1073],"th",{},"Language",[1071,1075,1076],{},"Package",[1071,1078,1079],{},"Install",[1081,1082,1083,1099,1114],"tbody",{},[1068,1084,1085,1089,1094],{},[1086,1087,1088],"td",{},"TypeScript (Node 18+)",[1086,1090,1091],{},[1029,1092,1093],{},"@kaabist\u002Fsdk",[1086,1095,1096],{},[1029,1097,1098],{},"npm install @kaabist\u002Fsdk",[1068,1100,1101,1104,1109],{},[1086,1102,1103],{},"Python (3.11+)",[1086,1105,1106],{},[1029,1107,1108],{},"kaabist",[1086,1110,1111],{},[1029,1112,1113],{},"pip install kaabist",[1068,1115,1116,1119,1124],{},[1086,1117,1118],{},"Go (1.24+)",[1086,1120,1121],{},[1029,1122,1123],{},"github.com\u002Fkaabist\u002Fkaab-go",[1086,1125,1126],{},[1029,1127,1128],{},"go get github.com\u002Fkaabist\u002Fkaab-go",[1025,1130,1131,1132,1135,1136,1139,1140,1143],{},"The Go client is in the package ",[1029,1133,1134],{},"github.com\u002Fkaabist\u002Fkaab-go\u002Fkaab",", its request and response types\nin ",[1029,1137,1138],{},"github.com\u002Fkaabist\u002Fkaab-go\u002Fclient",", and webhook verification in\n",[1029,1141,1142],{},"github.com\u002Fkaabist\u002Fkaab-go\u002Fwebhooks",".",[1025,1145,1146,1147,1150,1151,1154,1155,1158,1159,1162,1163,1143],{},"Each client reads ",[1029,1148,1149],{},"KAAB_API_KEY"," (and ",[1029,1152,1153],{},"KAAB_BASE_URL",", for a deployment other than\n",[1029,1156,1157],{},"https:\u002F\u002Fapi.kaab.ist\u002Fv1",") when you pass no key. Use an ",[1029,1160,1161],{},"sk_test_"," key while you build; see\n",[1042,1164,1166],{"href":1165},"\u002Fgetting-started\u002Fkeys-and-modes","keys and modes",[1034,1168,1170],{"id":1169},"run-a-job","Run a job",[1172,1173,1174,1332,1606,1847,2170],"code-group",{},[1175,1176,1182],"pre",{"className":1177,"code":1178,"filename":1179,"language":1180,"meta":1181,"style":1181},"language-bash shiki shiki-themes kaab-code kaab-code kaab-code","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","curl","bash","",[1029,1183,1184,1235,1246,1256,1266,1275,1290,1296,1302,1308,1314,1323],{"__ignoreMap":1181},[1185,1186,1189,1193,1197,1200,1203,1207,1210,1214,1217,1220,1223,1226,1229,1232],"span",{"class":1187,"line":1188},"line",1,[1185,1190,1192],{"class":1191},"sTzsn","response",[1185,1194,1196],{"class":1195},"sqn18","=",[1185,1198,1199],{"class":1191},"$(",[1185,1201,1179],{"class":1202},"sJugJ",[1185,1204,1206],{"class":1205},"sx8Bj"," -sS",[1185,1208,1209],{"class":1205}," --fail-with-body",[1185,1211,1213],{"class":1212},"suOy4"," \"${KAAB_BASE_URL",[1185,1215,1216],{"class":1195},":-",[1185,1218,1219],{"class":1212},"https",[1185,1221,1222],{"class":1195},":\u002F\u002F",[1185,1224,1225],{"class":1212},"api.kaab.ist",[1185,1227,1228],{"class":1195},"\u002F",[1185,1230,1231],{"class":1212},"v1}\u002Fjobs\"",[1185,1233,1234],{"class":1191}," \\\n",[1185,1236,1238,1241,1244],{"class":1187,"line":1237},2,[1185,1239,1240],{"class":1205},"  -H",[1185,1242,1243],{"class":1212}," \"Authorization: Bearer $KAAB_API_KEY\"",[1185,1245,1234],{"class":1191},[1185,1247,1249,1251,1254],{"class":1187,"line":1248},3,[1185,1250,1240],{"class":1205},[1185,1252,1253],{"class":1212}," \"Content-Type: application\u002Fjson\"",[1185,1255,1234],{"class":1191},[1185,1257,1259,1261,1264],{"class":1187,"line":1258},4,[1185,1260,1240],{"class":1205},[1185,1262,1263],{"class":1212}," \"Prefer: wait=30\"",[1185,1265,1234],{"class":1191},[1185,1267,1269,1272],{"class":1187,"line":1268},5,[1185,1270,1271],{"class":1205},"  -d",[1185,1273,1274],{"class":1212}," '{\n",[1185,1276,1278,1281,1283,1285,1287],{"class":1187,"line":1277},6,[1185,1279,1280],{"class":1212},"    \"url\": \"'\"${SITE_URL",[1185,1282,1216],{"class":1195},[1185,1284,1219],{"class":1212},[1185,1286,1222],{"class":1195},[1185,1288,1289],{"class":1212},"shop.example.com}\"'\u002Fp\u002F1\",\n",[1185,1291,1293],{"class":1187,"line":1292},7,[1185,1294,1295],{"class":1212},"    \"extract\": {\n",[1185,1297,1299],{"class":1187,"line":1298},8,[1185,1300,1301],{"class":1212},"      \"title\": \"h1\",\n",[1185,1303,1305],{"class":1187,"line":1304},9,[1185,1306,1307],{"class":1212},"      \"price\": { \"selector\": \".price\", \"type\": \"money\", \"locale\": \"tr\", \"currency\": \"TRY\" }\n",[1185,1309,1311],{"class":1187,"line":1310},10,[1185,1312,1313],{"class":1212},"    }\n",[1185,1315,1317,1320],{"class":1187,"line":1316},11,[1185,1318,1319],{"class":1212},"  }'",[1185,1321,1322],{"class":1191},")\n",[1185,1324,1326,1329],{"class":1187,"line":1325},12,[1185,1327,1328],{"class":1202},"echo",[1185,1330,1331],{"class":1212}," \"$response\"\n",[1175,1333,1338],{"className":1334,"code":1335,"filename":1336,"language":1337,"meta":1181,"style":1181},"language-ts shiki shiki-themes kaab-code kaab-code kaab-code","\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","TypeScript","ts",[1029,1339,1340,1346,1374,1401,1411,1423,1474,1481,1493,1498,1562],{"__ignoreMap":1181},[1185,1341,1342],{"class":1187,"line":1188},[1185,1343,1345],{"class":1344},"sKog0","\u002F\u002F One call: create the job and hold the request up to 30 s for its result (`Prefer: wait`).\n",[1185,1347,1348,1351,1355,1358,1361,1364,1366,1368,1371],{"class":1187,"line":1237},[1185,1349,1350],{"class":1195},"const",[1185,1352,1354],{"class":1353},"sHJIl"," job",[1185,1356,1357],{"class":1195}," =",[1185,1359,1360],{"class":1195}," await",[1185,1362,1363],{"class":1353}," kaab",[1185,1365,1143],{"class":1202},[1185,1367,171],{"class":1353},[1185,1369,1370],{"class":1202},".create",[1185,1372,1373],{"class":1191},"({\n",[1185,1375,1376,1379,1382,1385,1388,1391,1394,1397],{"class":1187,"line":1248},[1185,1377,1378],{"class":1191},"  url",[1185,1380,1381],{"class":1195},":",[1185,1383,1384],{"class":1212}," `",[1185,1386,1387],{"class":1195},"${",[1185,1389,1390],{"class":1191},"site",[1185,1392,1393],{"class":1195},"}",[1185,1395,1396],{"class":1212},"\u002Fp\u002F1`",[1185,1398,1400],{"class":1399},"sQm2-",",\n",[1185,1402,1403,1406,1408],{"class":1187,"line":1258},[1185,1404,1405],{"class":1191},"  extract",[1185,1407,1381],{"class":1195},[1185,1409,1410],{"class":1191}," {\n",[1185,1412,1413,1416,1418,1421],{"class":1187,"line":1268},[1185,1414,1415],{"class":1191},"    title",[1185,1417,1381],{"class":1195},[1185,1419,1420],{"class":1212}," \"h1\"",[1185,1422,1400],{"class":1399},[1185,1424,1425,1428,1430,1433,1435,1438,1441,1444,1446,1449,1451,1454,1456,1459,1461,1464,1466,1469,1472],{"class":1187,"line":1277},[1185,1426,1427],{"class":1191},"    price",[1185,1429,1381],{"class":1195},[1185,1431,1432],{"class":1191}," { selector",[1185,1434,1381],{"class":1195},[1185,1436,1437],{"class":1212}," \".price\"",[1185,1439,1440],{"class":1399},",",[1185,1442,1443],{"class":1191}," type",[1185,1445,1381],{"class":1195},[1185,1447,1448],{"class":1212}," \"money\"",[1185,1450,1440],{"class":1399},[1185,1452,1453],{"class":1191}," locale",[1185,1455,1381],{"class":1195},[1185,1457,1458],{"class":1212}," \"tr\"",[1185,1460,1440],{"class":1399},[1185,1462,1463],{"class":1191}," currency",[1185,1465,1381],{"class":1195},[1185,1467,1468],{"class":1212}," \"TRY\"",[1185,1470,1471],{"class":1191}," }",[1185,1473,1400],{"class":1399},[1185,1475,1476,1479],{"class":1187,"line":1292},[1185,1477,1478],{"class":1191},"  }",[1185,1480,1400],{"class":1399},[1185,1482,1483,1486,1488,1491],{"class":1187,"line":1298},[1185,1484,1485],{"class":1191},"  wait",[1185,1487,1381],{"class":1195},[1185,1489,1490],{"class":1353}," 30",[1185,1492,1400],{"class":1399},[1185,1494,1495],{"class":1187,"line":1304},[1185,1496,1497],{"class":1191},"});\n",[1185,1499,1500,1503,1506,1508,1511,1514,1517,1520,1523,1526,1529,1532,1535,1537,1539,1542,1544,1547,1549,1551,1554,1556,1559],{"class":1187,"line":1310},[1185,1501,1502],{"class":1195},"if",[1185,1504,1505],{"class":1191}," (",[1185,1507,478],{"class":1353},[1185,1509,1510],{"class":1191},".status ",[1185,1512,1513],{"class":1195},"!==",[1185,1515,1516],{"class":1212}," \"succeeded\"",[1185,1518,1519],{"class":1191},") ",[1185,1521,1522],{"class":1195},"throw",[1185,1524,1525],{"class":1195}," new",[1185,1527,1528],{"class":1202}," Error",[1185,1530,1531],{"class":1191},"(",[1185,1533,1534],{"class":1212},"`job ",[1185,1536,1387],{"class":1195},[1185,1538,478],{"class":1353},[1185,1540,1541],{"class":1191},".id",[1185,1543,1393],{"class":1195},[1185,1545,1546],{"class":1212}," is ",[1185,1548,1387],{"class":1195},[1185,1550,478],{"class":1353},[1185,1552,1553],{"class":1191},".status",[1185,1555,1393],{"class":1195},[1185,1557,1558],{"class":1212},"`",[1185,1560,1561],{"class":1191},");\n",[1185,1563,1564,1567,1570,1572,1574,1576,1578,1580,1582,1585,1587,1590,1593,1595,1597,1600,1602,1604],{"class":1187,"line":1316},[1185,1565,1566],{"class":1353},"console",[1185,1568,1569],{"class":1202},".log",[1185,1571,1531],{"class":1191},[1185,1573,1558],{"class":1212},[1185,1575,1387],{"class":1195},[1185,1577,478],{"class":1353},[1185,1579,1541],{"class":1191},[1185,1581,1393],{"class":1195},[1185,1583,1584],{"class":1212},": ",[1185,1586,1387],{"class":1195},[1185,1588,1589],{"class":1353},"JSON",[1185,1591,1592],{"class":1202},".stringify",[1185,1594,1531],{"class":1191},[1185,1596,478],{"class":1353},[1185,1598,1599],{"class":1191},".data)",[1185,1601,1393],{"class":1195},[1185,1603,1558],{"class":1212},[1185,1605,1561],{"class":1191},[1175,1607,1612],{"className":1608,"code":1609,"filename":1610,"language":1611,"meta":1181,"style":1181},"language-python shiki shiki-themes kaab-code kaab-code kaab-code","# 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","Python","python",[1029,1613,1614,1619,1640,1665,1732,1744,1748,1767,1802],{"__ignoreMap":1181},[1185,1615,1616],{"class":1187,"line":1188},[1185,1617,1618],{"class":1344},"# One call: create the job and hold the request up to 30 s for its result (Prefer: wait).\n",[1185,1620,1621,1624,1626,1628,1630,1632,1634,1637],{"class":1187,"line":1237},[1185,1622,1623],{"class":1191},"job ",[1185,1625,1196],{"class":1195},[1185,1627,1363],{"class":1191},[1185,1629,1143],{"class":1399},[1185,1631,171],{"class":1191},[1185,1633,1143],{"class":1399},[1185,1635,1636],{"class":1202},"create",[1185,1638,1639],{"class":1399},"(\n",[1185,1641,1642,1645,1647,1650,1653,1656,1658,1660,1663],{"class":1187,"line":1248},[1185,1643,1644],{"class":1399},"    url",[1185,1646,1196],{"class":1195},[1185,1648,1649],{"class":1195},"f",[1185,1651,1652],{"class":1212},"\"",[1185,1654,1655],{"class":1353},"{",[1185,1657,1390],{"class":1399},[1185,1659,1393],{"class":1353},[1185,1661,1662],{"class":1212},"\u002Fp\u002F1\"",[1185,1664,1400],{"class":1399},[1185,1666,1667,1670,1672,1674,1677,1679,1682,1685,1688,1691,1694,1696,1699,1701,1704,1706,1709,1711,1714,1716,1719,1721,1724,1726,1729],{"class":1187,"line":1258},[1185,1668,1669],{"class":1399},"    extract",[1185,1671,1196],{"class":1195},[1185,1673,1655],{"class":1399},[1185,1675,1676],{"class":1212},"\"title\"",[1185,1678,1584],{"class":1399},[1185,1680,1681],{"class":1212},"\"h1\"",[1185,1683,1684],{"class":1399},", ",[1185,1686,1687],{"class":1212},"\"price\"",[1185,1689,1690],{"class":1399},": {",[1185,1692,1693],{"class":1212},"\"selector\"",[1185,1695,1584],{"class":1399},[1185,1697,1698],{"class":1212},"\".price\"",[1185,1700,1684],{"class":1399},[1185,1702,1703],{"class":1212},"\"type\"",[1185,1705,1584],{"class":1399},[1185,1707,1708],{"class":1212},"\"money\"",[1185,1710,1684],{"class":1399},[1185,1712,1713],{"class":1212},"\"locale\"",[1185,1715,1584],{"class":1399},[1185,1717,1718],{"class":1212},"\"tr\"",[1185,1720,1684],{"class":1399},[1185,1722,1723],{"class":1212},"\"currency\"",[1185,1725,1584],{"class":1399},[1185,1727,1728],{"class":1212},"\"TRY\"",[1185,1730,1731],{"class":1399},"}},\n",[1185,1733,1734,1737,1739,1742],{"class":1187,"line":1268},[1185,1735,1736],{"class":1399},"    wait",[1185,1738,1196],{"class":1195},[1185,1740,1741],{"class":1353},"30",[1185,1743,1400],{"class":1399},[1185,1745,1746],{"class":1187,"line":1277},[1185,1747,1322],{"class":1399},[1185,1749,1750,1752,1754,1756,1759,1762,1764],{"class":1187,"line":1292},[1185,1751,1502],{"class":1195},[1185,1753,1354],{"class":1191},[1185,1755,1143],{"class":1399},[1185,1757,1758],{"class":1191},"status ",[1185,1760,1761],{"class":1195},"!=",[1185,1763,1516],{"class":1212},[1185,1765,1766],{"class":1399},":\n",[1185,1768,1769,1772,1775,1777,1779,1782,1784,1787,1789,1791,1793,1796,1798,1800],{"class":1187,"line":1298},[1185,1770,1771],{"class":1195},"    raise",[1185,1773,1774],{"class":1353}," SystemExit",[1185,1776,1531],{"class":1399},[1185,1778,1649],{"class":1195},[1185,1780,1781],{"class":1212},"\"job ",[1185,1783,1655],{"class":1353},[1185,1785,1786],{"class":1399},"job.id",[1185,1788,1393],{"class":1353},[1185,1790,1546],{"class":1212},[1185,1792,1655],{"class":1353},[1185,1794,1795],{"class":1399},"job.status",[1185,1797,1393],{"class":1353},[1185,1799,1652],{"class":1212},[1185,1801,1322],{"class":1399},[1185,1803,1804,1807,1809,1811,1813,1815,1817,1819,1821,1823,1826,1829,1832,1834,1837,1840,1843,1845],{"class":1187,"line":1304},[1185,1805,1806],{"class":1202},"print",[1185,1808,1531],{"class":1399},[1185,1810,1649],{"class":1195},[1185,1812,1652],{"class":1212},[1185,1814,1655],{"class":1353},[1185,1816,1786],{"class":1399},[1185,1818,1393],{"class":1353},[1185,1820,1584],{"class":1212},[1185,1822,1655],{"class":1353},[1185,1824,1825],{"class":1399},"job.data.",[1185,1827,1828],{"class":1202},"to_dict",[1185,1830,1831],{"class":1399},"() ",[1185,1833,1502],{"class":1195},[1185,1835,1836],{"class":1399}," job.data ",[1185,1838,1839],{"class":1195},"else",[1185,1841,1842],{"class":1353}," None}",[1185,1844,1652],{"class":1212},[1185,1846,1322],{"class":1399},[1175,1848,1853],{"className":1849,"code":1850,"filename":1851,"language":1852,"meta":1181,"style":1181},"language-go shiki shiki-themes kaab-code kaab-code kaab-code","\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","Go","go",[1029,1854,1855,1860,1904,1920,1939,1950,2002,2007,2012,2026,2037,2042,2068,2081,2090,2095,2109,2133,2138],{"__ignoreMap":1181},[1185,1856,1857],{"class":1187,"line":1188},[1185,1858,1859],{"class":1344},"\u002F\u002F One call: create the job and hold the request up to 30 s for its result (Prefer: wait).\n",[1185,1861,1862,1865,1868,1871,1874,1877,1880,1882,1885,1888,1891,1893,1896,1899,1901],{"class":1187,"line":1237},[1185,1863,1864],{"class":1191},"body, err ",[1185,1866,1867],{"class":1195},":=",[1185,1869,1870],{"class":1191}," kaab.",[1185,1872,1873],{"class":1202},"Body",[1185,1875,1876],{"class":1191},"[",[1185,1878,1879],{"class":1202},"client",[1185,1881,1143],{"class":1191},[1185,1883,1884],{"class":1202},"CreateJobJSONBody",[1185,1886,1887],{"class":1191},"](",[1185,1889,1890],{"class":1195},"map",[1185,1892,1876],{"class":1191},[1185,1894,1895],{"class":1195},"string",[1185,1897,1898],{"class":1191},"]",[1185,1900,634],{"class":1202},[1185,1902,1903],{"class":1191},"{\n",[1185,1905,1906,1909,1912,1915,1918],{"class":1187,"line":1248},[1185,1907,1908],{"class":1212},"    \"url\"",[1185,1910,1911],{"class":1191},": site ",[1185,1913,1914],{"class":1195},"+",[1185,1916,1917],{"class":1212}," \"\u002Fp\u002F1\"",[1185,1919,1400],{"class":1191},[1185,1921,1922,1925,1927,1929,1931,1933,1935,1937],{"class":1187,"line":1258},[1185,1923,1924],{"class":1212},"    \"extract\"",[1185,1926,1584],{"class":1191},[1185,1928,1890],{"class":1195},[1185,1930,1876],{"class":1191},[1185,1932,1895],{"class":1195},[1185,1934,1898],{"class":1191},[1185,1936,634],{"class":1202},[1185,1938,1903],{"class":1191},[1185,1940,1941,1944,1946,1948],{"class":1187,"line":1268},[1185,1942,1943],{"class":1212},"        \"title\"",[1185,1945,1584],{"class":1191},[1185,1947,1681],{"class":1212},[1185,1949,1400],{"class":1191},[1185,1951,1952,1955,1957,1959,1961,1963,1965,1967,1969,1971,1973,1975,1977,1979,1981,1983,1985,1987,1989,1991,1993,1995,1997,1999],{"class":1187,"line":1277},[1185,1953,1954],{"class":1212},"        \"price\"",[1185,1956,1584],{"class":1191},[1185,1958,1890],{"class":1195},[1185,1960,1876],{"class":1191},[1185,1962,1895],{"class":1195},[1185,1964,1898],{"class":1191},[1185,1966,634],{"class":1202},[1185,1968,1655],{"class":1191},[1185,1970,1693],{"class":1212},[1185,1972,1584],{"class":1191},[1185,1974,1698],{"class":1212},[1185,1976,1684],{"class":1191},[1185,1978,1703],{"class":1212},[1185,1980,1584],{"class":1191},[1185,1982,1708],{"class":1212},[1185,1984,1684],{"class":1191},[1185,1986,1713],{"class":1212},[1185,1988,1584],{"class":1191},[1185,1990,1718],{"class":1212},[1185,1992,1684],{"class":1191},[1185,1994,1723],{"class":1212},[1185,1996,1584],{"class":1191},[1185,1998,1728],{"class":1212},[1185,2000,2001],{"class":1191},"},\n",[1185,2003,2004],{"class":1187,"line":1292},[1185,2005,2006],{"class":1191},"    },\n",[1185,2008,2009],{"class":1187,"line":1298},[1185,2010,2011],{"class":1191},"})\n",[1185,2013,2014,2016,2019,2021,2024],{"class":1187,"line":1304},[1185,2015,1502],{"class":1195},[1185,2017,2018],{"class":1191}," err ",[1185,2020,1761],{"class":1195},[1185,2022,2023],{"class":1353}," nil",[1185,2025,1410],{"class":1191},[1185,2027,2028,2031,2034],{"class":1187,"line":1310},[1185,2029,2030],{"class":1191},"    log.",[1185,2032,2033],{"class":1202},"Fatal",[1185,2035,2036],{"class":1191},"(err)\n",[1185,2038,2039],{"class":1187,"line":1316},[1185,2040,2041],{"class":1191},"}\n",[1185,2043,2044,2047,2049,2052,2055,2058,2061,2063,2065],{"class":1187,"line":1325},[1185,2045,2046],{"class":1191},"job, err ",[1185,2048,1867],{"class":1195},[1185,2050,2051],{"class":1191}," c.Jobs.",[1185,2053,2054],{"class":1202},"Create",[1185,2056,2057],{"class":1191},"(ctx, body, kaab.",[1185,2059,2060],{"class":1202},"WithWait",[1185,2062,1531],{"class":1191},[1185,2064,1741],{"class":1353},[1185,2066,2067],{"class":1191},"))\n",[1185,2069,2071,2073,2075,2077,2079],{"class":1187,"line":2070},13,[1185,2072,1502],{"class":1195},[1185,2074,2018],{"class":1191},[1185,2076,1761],{"class":1195},[1185,2078,2023],{"class":1353},[1185,2080,1410],{"class":1191},[1185,2082,2084,2086,2088],{"class":1187,"line":2083},14,[1185,2085,2030],{"class":1191},[1185,2087,2033],{"class":1202},[1185,2089,2036],{"class":1191},[1185,2091,2093],{"class":1187,"line":2092},15,[1185,2094,2041],{"class":1191},[1185,2096,2098,2100,2103,2105,2107],{"class":1187,"line":2097},16,[1185,2099,1502],{"class":1195},[1185,2101,2102],{"class":1191}," job.Status ",[1185,2104,1761],{"class":1195},[1185,2106,1516],{"class":1212},[1185,2108,1410],{"class":1191},[1185,2110,2112,2114,2117,2119,2121,2124,2126,2128,2130],{"class":1187,"line":2111},17,[1185,2113,2030],{"class":1191},[1185,2115,2116],{"class":1202},"Fatalf",[1185,2118,1531],{"class":1191},[1185,2120,1781],{"class":1212},[1185,2122,2123],{"class":1353},"%s",[1185,2125,1546],{"class":1212},[1185,2127,2123],{"class":1353},[1185,2129,1652],{"class":1212},[1185,2131,2132],{"class":1191},", job.ID, job.Status)\n",[1185,2134,2136],{"class":1187,"line":2135},18,[1185,2137,2041],{"class":1191},[1185,2139,2141,2144,2147,2149,2151,2153,2155,2158,2161,2164,2167],{"class":1187,"line":2140},19,[1185,2142,2143],{"class":1191},"fmt.",[1185,2145,2146],{"class":1202},"Printf",[1185,2148,1531],{"class":1191},[1185,2150,1652],{"class":1212},[1185,2152,2123],{"class":1353},[1185,2154,1584],{"class":1212},[1185,2156,2157],{"class":1353},"%v",[1185,2159,2160],{"class":1212},"\\n\"",[1185,2162,2163],{"class":1191},", job.ID, ",[1185,2165,2166],{"class":1195},"*",[1185,2168,2169],{"class":1191},"job.Data)\n",[1175,2171,2173],{"className":1177,"code":2172,"filename":841,"language":1180,"meta":1181,"style":1181},"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,2174,2175,2194,2213,2223,2232],{"__ignoreMap":1181},[1185,2176,2177,2180,2182,2184,2186,2189,2192],{"class":1187,"line":1188},[1185,2178,2179],{"class":1191},"data",[1185,2181,1196],{"class":1195},[1185,2183,1199],{"class":1191},[1185,2185,846],{"class":1202},[1185,2187,2188],{"class":1205}," jobs",[1185,2190,2191],{"class":1205}," run",[1185,2193,1234],{"class":1191},[1185,2195,2196,2199,2202,2204,2206,2208,2211],{"class":1187,"line":1237},[1185,2197,2198],{"class":1205},"  --url",[1185,2200,2201],{"class":1212}," \"${SITE_URL",[1185,2203,1216],{"class":1195},[1185,2205,1219],{"class":1212},[1185,2207,1222],{"class":1195},[1185,2209,2210],{"class":1212},"shop.example.com}\u002Fp\u002F1\"",[1185,2212,1234],{"class":1191},[1185,2214,2215,2218,2221],{"class":1187,"line":1248},[1185,2216,2217],{"class":1205},"  --extract",[1185,2219,2220],{"class":1212}," '{\"title\": \"h1\", \"price\": {\"selector\": \".price\", \"type\": \"money\", \"locale\": \"tr\", \"currency\": \"TRY\"}}'",[1185,2222,1234],{"class":1191},[1185,2224,2225,2228,2230],{"class":1187,"line":1258},[1185,2226,2227],{"class":1205},"  --wait",[1185,2229,1490],{"class":1353},[1185,2231,1322],{"class":1191},[1185,2233,2234,2236],{"class":1187,"line":1268},[1185,2235,1328],{"class":1202},[1185,2237,2238],{"class":1212}," \"$data\"\n",[1025,2240,2241,2243,2244,2247,2248,1143],{},[1029,2242,1031],{}," holds the request open up to 60 seconds (",[1029,2245,2246],{},"Prefer: wait","). A job that finishes in time comes\nback complete; one that does not comes back in its current state, and you follow it with\n",[1029,2249,2250],{},"jobs.wait",[1034,2252,2254],{"id":2253},"wait-for-a-job-and-answer-it","Wait for a job, and answer it",[1172,2256,2257,2416,2533],{},[1175,2258,2260],{"className":1334,"code":2259,"filename":1336,"language":1337,"meta":1181,"style":1181},"\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,2261,2262,2267,2288,2307,2324,2328,2368],{"__ignoreMap":1181},[1185,2263,2264],{"class":1187,"line":1188},[1185,2265,2266],{"class":1344},"\u002F\u002F Or start it and wait separately: `jobs.wait` long-polls until the job ends.\n",[1185,2268,2269,2271,2274,2276,2278,2280,2282,2284,2286],{"class":1187,"line":1237},[1185,2270,1350],{"class":1195},[1185,2272,2273],{"class":1353}," started",[1185,2275,1357],{"class":1195},[1185,2277,1360],{"class":1195},[1185,2279,1363],{"class":1353},[1185,2281,1143],{"class":1202},[1185,2283,171],{"class":1353},[1185,2285,1370],{"class":1202},[1185,2287,1373],{"class":1191},[1185,2289,2290,2292,2294,2296,2298,2300,2302,2305],{"class":1187,"line":1248},[1185,2291,1378],{"class":1191},[1185,2293,1381],{"class":1195},[1185,2295,1384],{"class":1212},[1185,2297,1387],{"class":1195},[1185,2299,1390],{"class":1191},[1185,2301,1393],{"class":1195},[1185,2303,2304],{"class":1212},"\u002Fp\u002F2`",[1185,2306,1400],{"class":1399},[1185,2308,2309,2311,2313,2316,2318,2320,2322],{"class":1187,"line":1258},[1185,2310,1405],{"class":1191},[1185,2312,1381],{"class":1195},[1185,2314,2315],{"class":1191}," { title",[1185,2317,1381],{"class":1195},[1185,2319,1420],{"class":1212},[1185,2321,1471],{"class":1191},[1185,2323,1400],{"class":1399},[1185,2325,2326],{"class":1187,"line":1268},[1185,2327,1497],{"class":1191},[1185,2329,2330,2332,2335,2337,2339,2341,2343,2345,2348,2350,2353,2355,2357,2360,2362,2365],{"class":1187,"line":1277},[1185,2331,1350],{"class":1195},[1185,2333,2334],{"class":1353}," done",[1185,2336,1357],{"class":1195},[1185,2338,1360],{"class":1195},[1185,2340,1363],{"class":1353},[1185,2342,1143],{"class":1202},[1185,2344,171],{"class":1353},[1185,2346,2347],{"class":1202},".wait",[1185,2349,1531],{"class":1191},[1185,2351,2352],{"class":1353},"started",[1185,2354,1541],{"class":1191},[1185,2356,1440],{"class":1399},[1185,2358,2359],{"class":1191}," { timeoutMs",[1185,2361,1381],{"class":1195},[1185,2363,2364],{"class":1353}," 120_000",[1185,2366,2367],{"class":1191}," });\n",[1185,2369,2370,2372,2374,2376,2378,2380,2383,2385,2387,2389,2391,2393,2395,2397,2400,2402,2404,2406,2408,2410,2412,2414],{"class":1187,"line":1292},[1185,2371,1566],{"class":1353},[1185,2373,1569],{"class":1202},[1185,2375,1531],{"class":1191},[1185,2377,1558],{"class":1212},[1185,2379,1387],{"class":1195},[1185,2381,2382],{"class":1353},"done",[1185,2384,1541],{"class":1191},[1185,2386,1393],{"class":1195},[1185,2388,1584],{"class":1212},[1185,2390,1387],{"class":1195},[1185,2392,2382],{"class":1353},[1185,2394,1553],{"class":1191},[1185,2396,1393],{"class":1195},[1185,2398,2399],{"class":1195}," ${",[1185,2401,1589],{"class":1353},[1185,2403,1592],{"class":1202},[1185,2405,1531],{"class":1191},[1185,2407,2382],{"class":1353},[1185,2409,1599],{"class":1191},[1185,2411,1393],{"class":1195},[1185,2413,1558],{"class":1212},[1185,2415,1561],{"class":1191},[1175,2417,2419],{"className":1608,"code":2418,"filename":1610,"language":1611,"meta":1181,"style":1181},"# 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,2420,2421,2426,2476,2503],{"__ignoreMap":1181},[1185,2422,2423],{"class":1187,"line":1188},[1185,2424,2425],{"class":1344},"# Or start it and wait separately: jobs.wait long-polls until the job ends.\n",[1185,2427,2428,2431,2433,2435,2437,2439,2441,2443,2446,2448,2450,2452,2454,2456,2458,2461,2464,2466,2468,2470,2472,2474],{"class":1187,"line":1237},[1185,2429,2430],{"class":1191},"started ",[1185,2432,1196],{"class":1195},[1185,2434,1363],{"class":1191},[1185,2436,1143],{"class":1399},[1185,2438,171],{"class":1191},[1185,2440,1143],{"class":1399},[1185,2442,1636],{"class":1202},[1185,2444,2445],{"class":1399},"(url",[1185,2447,1196],{"class":1195},[1185,2449,1649],{"class":1195},[1185,2451,1652],{"class":1212},[1185,2453,1655],{"class":1353},[1185,2455,1390],{"class":1399},[1185,2457,1393],{"class":1353},[1185,2459,2460],{"class":1212},"\u002Fp\u002F2\"",[1185,2462,2463],{"class":1399},", extract",[1185,2465,1196],{"class":1195},[1185,2467,1655],{"class":1399},[1185,2469,1676],{"class":1212},[1185,2471,1584],{"class":1399},[1185,2473,1681],{"class":1212},[1185,2475,2011],{"class":1399},[1185,2477,2478,2481,2483,2485,2487,2489,2491,2493,2496,2498,2501],{"class":1187,"line":1248},[1185,2479,2480],{"class":1191},"done ",[1185,2482,1196],{"class":1195},[1185,2484,1363],{"class":1191},[1185,2486,1143],{"class":1399},[1185,2488,171],{"class":1191},[1185,2490,1143],{"class":1399},[1185,2492,1031],{"class":1202},[1185,2494,2495],{"class":1399},"(started.id, timeout",[1185,2497,1196],{"class":1195},[1185,2499,2500],{"class":1353},"120",[1185,2502,1322],{"class":1399},[1185,2504,2505,2507,2509,2511,2513,2515,2518,2520,2522,2524,2527,2529,2531],{"class":1187,"line":1258},[1185,2506,1806],{"class":1202},[1185,2508,1531],{"class":1399},[1185,2510,1649],{"class":1195},[1185,2512,1652],{"class":1212},[1185,2514,1655],{"class":1353},[1185,2516,2517],{"class":1399},"done.id",[1185,2519,1393],{"class":1353},[1185,2521,1584],{"class":1212},[1185,2523,1655],{"class":1353},[1185,2525,2526],{"class":1399},"done.status",[1185,2528,1393],{"class":1353},[1185,2530,1652],{"class":1212},[1185,2532,1322],{"class":1399},[1175,2534,2536],{"className":1849,"code":2535,"filename":1851,"language":1852,"meta":1181,"style":1181},"\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,2537,2538,2543,2614,2628,2640,2648,2652,2686,2698,2706,2710],{"__ignoreMap":1181},[1185,2539,2540],{"class":1187,"line":1188},[1185,2541,2542],{"class":1344},"\u002F\u002F Or start it and wait separately: Jobs.Wait long-polls until the job ends.\n",[1185,2544,2545,2548,2550,2552,2554,2556,2558,2560,2562,2564,2566,2568,2570,2572,2574,2576,2579,2581,2583,2586,2588,2591,2593,2595,2597,2599,2601,2603,2605,2607,2609,2611],{"class":1187,"line":1237},[1185,2546,2547],{"class":1191},"body, _ ",[1185,2549,1196],{"class":1195},[1185,2551,1870],{"class":1191},[1185,2553,1873],{"class":1202},[1185,2555,1876],{"class":1191},[1185,2557,1879],{"class":1202},[1185,2559,1143],{"class":1191},[1185,2561,1884],{"class":1202},[1185,2563,1887],{"class":1191},[1185,2565,1890],{"class":1195},[1185,2567,1876],{"class":1191},[1185,2569,1895],{"class":1195},[1185,2571,1898],{"class":1191},[1185,2573,634],{"class":1202},[1185,2575,1655],{"class":1191},[1185,2577,2578],{"class":1212},"\"url\"",[1185,2580,1911],{"class":1191},[1185,2582,1914],{"class":1195},[1185,2584,2585],{"class":1212}," \"\u002Fp\u002F2\"",[1185,2587,1684],{"class":1191},[1185,2589,2590],{"class":1212},"\"extract\"",[1185,2592,1584],{"class":1191},[1185,2594,1890],{"class":1195},[1185,2596,1876],{"class":1191},[1185,2598,1895],{"class":1195},[1185,2600,1898],{"class":1191},[1185,2602,634],{"class":1202},[1185,2604,1655],{"class":1191},[1185,2606,1676],{"class":1212},[1185,2608,1584],{"class":1191},[1185,2610,1681],{"class":1212},[1185,2612,2613],{"class":1191},"}})\n",[1185,2615,2616,2619,2621,2623,2625],{"class":1187,"line":1248},[1185,2617,2618],{"class":1191},"started, err ",[1185,2620,1867],{"class":1195},[1185,2622,2051],{"class":1191},[1185,2624,2054],{"class":1202},[1185,2626,2627],{"class":1191},"(ctx, body)\n",[1185,2629,2630,2632,2634,2636,2638],{"class":1187,"line":1258},[1185,2631,1502],{"class":1195},[1185,2633,2018],{"class":1191},[1185,2635,1761],{"class":1195},[1185,2637,2023],{"class":1353},[1185,2639,1410],{"class":1191},[1185,2641,2642,2644,2646],{"class":1187,"line":1268},[1185,2643,2030],{"class":1191},[1185,2645,2033],{"class":1202},[1185,2647,2036],{"class":1191},[1185,2649,2650],{"class":1187,"line":1277},[1185,2651,2041],{"class":1191},[1185,2653,2654,2657,2659,2661,2664,2667,2669,2671,2674,2677,2680,2683],{"class":1187,"line":1292},[1185,2655,2656],{"class":1191},"done, err ",[1185,2658,1867],{"class":1195},[1185,2660,2051],{"class":1191},[1185,2662,2663],{"class":1202},"Wait",[1185,2665,2666],{"class":1191},"(ctx, started.ID, ",[1185,2668,846],{"class":1202},[1185,2670,1143],{"class":1191},[1185,2672,2673],{"class":1202},"WaitOptions",[1185,2675,2676],{"class":1191},"{Timeout: ",[1185,2678,2679],{"class":1353},"2",[1185,2681,2682],{"class":1195}," *",[1185,2684,2685],{"class":1191}," time.Minute})\n",[1185,2687,2688,2690,2692,2694,2696],{"class":1187,"line":1298},[1185,2689,1502],{"class":1195},[1185,2691,2018],{"class":1191},[1185,2693,1761],{"class":1195},[1185,2695,2023],{"class":1353},[1185,2697,1410],{"class":1191},[1185,2699,2700,2702,2704],{"class":1187,"line":1304},[1185,2701,2030],{"class":1191},[1185,2703,2033],{"class":1202},[1185,2705,2036],{"class":1191},[1185,2707,2708],{"class":1187,"line":1310},[1185,2709,2041],{"class":1191},[1185,2711,2712,2714,2716,2718,2720,2722,2724,2726,2728],{"class":1187,"line":1316},[1185,2713,2143],{"class":1191},[1185,2715,2146],{"class":1202},[1185,2717,1531],{"class":1191},[1185,2719,1652],{"class":1212},[1185,2721,2123],{"class":1353},[1185,2723,1584],{"class":1212},[1185,2725,2123],{"class":1353},[1185,2727,2160],{"class":1212},[1185,2729,2730],{"class":1191},", done.ID, done.Status)\n",[1025,2732,2733,2736],{},[1029,2734,2735],{},"jobs.wait(id)"," long-polls until the job succeeds, fails or is canceled, and answers it on the way:",[2738,2739,2740,2756],"ul",{},[2741,2742,2743,1505,2749,1684,2752,2755],"li",{},[2744,2745,2746],"strong",{},[1029,2747,2748],{},"onInput",[1029,2750,2751],{},"on_input",[1029,2753,2754],{},"OnInput",") supplies a value the job asked for, such as a one-time\ncode. The value is posted to the job and the wait goes on.",[2741,2757,2758,1505,2763,1684,2766,2769,2770,2773],{},[2744,2759,2760],{},[1029,2761,2762],{},"onAttention",[1029,2764,2765],{},"on_attention",[1029,2767,2768],{},"OnAttention",") decides what to do with a job that needs\nattention: a resume action (apply a proposal, skip the step, retry from a checkpoint, abort), or\n",[1029,2771,2772],{},"\"wait\""," to leave it to somebody in the panel or on a hosted page.",[1025,2775,2776,2777,2780],{},"A parked job with no handler is returned to you as it is. The whole wait times out after five\nminutes by default (",[1029,2778,2779],{},"timeoutMs",").",[1034,2782,2784],{"id":2783},"behaviour-all-three-share","Behaviour all three share",[2738,2786,2787,2836,2862,2877],{},[2741,2788,2789,2792,2793,1684,2796,2799,2800,2803,2804,1684,2807,2799,2810,2813,2814,2817,2818,2821,2822,2824,2825,2799,2828,2831,2832,2780],{},[2744,2790,2791],{},"Retries."," ",[1029,2794,2795],{},"GET",[1029,2797,2798],{},"PUT"," and ",[1029,2801,2802],{},"DELETE"," are retried on ",[1029,2805,2806],{},"408",[1029,2808,2809],{},"429",[1029,2811,2812],{},"5xx"," and on connection\nfailures, twice by default, honouring ",[1029,2815,2816],{},"Retry-After"," (a wait over a minute is not retried). ",[1029,2819,2820],{},"POST","\nis retried only with an ",[1029,2823,1055],{},", which ",[1029,2826,2827],{},"jobs.create",[1029,2829,2830],{},"jobs.batch"," always send (a\nULID unless you give one), so a retried create never runs twice. To make your own retries safe,\npass your own key (see ",[1042,2833,2835],{"href":2834},"\u002Fguides\u002Fside-effect-safety","side-effect safety",[2741,2837,2838,2841,2842,1505,2845,2848,2849,2851,2852,1684,2855,2799,2858,2861],{},[2744,2839,2840],{},"Errors."," Every failure is a ",[1029,2843,2844],{},"KaabError",[1029,2846,2847],{},"*kaab.Error"," in Go) with the API's ",[1029,2850,1029],{},", the HTTP\n",[1029,2853,2854],{},"status",[1029,2856,2857],{},"request_id",[1029,2859,2860],{},"details","; quote the request id to support.",[2741,2863,2864,2867,2868,1684,2871,1684,2874,1143],{},[2744,2865,2866],{},"Lists"," iterate across pages: ",[1029,2869,2870],{},"for await (const job of kaab.jobs.list())",[1029,2872,2873],{},"for job in kaab.jobs.list()",[1029,2875,2876],{},"for job, err := range c.Jobs.ListAll(ctx, nil)",[2741,2878,2879,2792,2882,2799,2885,2888,2889,2892,2893,2780],{},[2744,2880,2881],{},"Webhooks.",[1029,2883,2884],{},"webhooks.verify(rawBody, signatureHeader, secret)",[1029,2886,2887],{},"constructEvent"," check\n",[1029,2890,2891],{},"Kaab-Signature"," on the raw request body (see ",[1042,2894,105],{"href":2895},"\u002Fguides\u002Fwebhooks",[1025,2897,2898,2899,1684,2902,1684,2904,2907,2908,2912],{},"Every API operation has the same name in all three: a resource, then a method\n(",[1029,2900,2901],{},"kaab.jobs.create",[1029,2903,2901],{},[1029,2905,2906],{},"c.Jobs.Create","). ",[1042,2909,2911],{"href":2910},"\u002Freference\u002Fsdks","SDK reference"," lists\neach operation with its name per language and links its API page, where the request and response\nfields are documented.",[1034,2914,2916],{"id":2915},"worked-example","Worked example",[1025,2918,2919,2920,2923,2924,2926,2927,2930],{},"The quickstart extracts the title and price of a product page, ",[1029,2921,2922],{},"https:\u002F\u002Fshop.example.com\u002Fp\u002F1",", in\none call, then starts a second job and follows it with ",[1029,2925,2250],{},". For a page that shows a pair of\nheadphones priced ",[1029,2928,2929],{},"1.337,40 TL",", the first job returns:",[1175,2932,2935],{"className":2933,"code":2934,"language":680,"meta":1181,"style":1181},"language-json shiki shiki-themes kaab-code kaab-code kaab-code","{ \"title\": \"Kulaklık Klasik 101\", \"price\": { \"amount\": 1337.4, \"currency\": \"TRY\" } }\n",[1029,2936,2937],{"__ignoreMap":1181},[1185,2938,2939,2942,2944,2946,2949,2951,2954,2956,2959,2962,2964,2967,2969,2972,2974,2976],{"class":1187,"line":1188},[1185,2940,2941],{"class":1191},"{ ",[1185,2943,1676],{"class":1195},[1185,2945,1381],{"class":1399},[1185,2947,2948],{"class":1212}," \"Kulaklık Klasik 101\"",[1185,2950,1440],{"class":1399},[1185,2952,2953],{"class":1195}," \"price\"",[1185,2955,1381],{"class":1399},[1185,2957,2958],{"class":1191}," { ",[1185,2960,2961],{"class":1195},"\"amount\"",[1185,2963,1381],{"class":1399},[1185,2965,2966],{"class":1353}," 1337.4",[1185,2968,1440],{"class":1399},[1185,2970,2971],{"class":1195}," \"currency\"",[1185,2973,1381],{"class":1399},[1185,2975,1468],{"class":1212},[1185,2977,2978],{"class":1191}," } }\n",[1034,2980,2982],{"id":2981},"pitfalls","Pitfalls",[2738,2984,2985,2996,3013,3031],{},[2741,2986,2987,2990,2991,2995],{},[2744,2988,2989],{},"Generating a new idempotency key per attempt."," The SDK's own retries reuse the key they sent;\nif ",[2992,2993,2994],"em",{},"your"," code retries a create, pass the same key each time.",[2741,2997,2998,3001,3002,3004,3005,1684,3007,3009,3010,3012],{},[2744,2999,3000],{},"Waiting forever on a parked job."," Without ",[1029,3003,2748],{}," or ",[1029,3006,2762],{},[1029,3008,2250],{}," returns a\nparked job; check ",[1029,3011,2854],{}," instead of assuming it finished.",[2741,3014,3015,3021,3022,3024,3025,3004,3028,1143],{},[2744,3016,3017,3018,3020],{},"Treating ",[1029,3019,1031],{}," as a deadline for the job."," It bounds the request, not the job: a job still\nrunning after ",[1029,3023,1031],{}," comes back ",[1029,3026,3027],{},"running",[1029,3029,3030],{},"queued",[2741,3032,3033,3036],{},[2744,3034,3035],{},"Parsing a webhook body before verifying it."," Verify the raw bytes first.",[1034,3038,155],{"id":3039},"reference",[2738,3041,3042,3047,3065,3071],{},[2741,3043,3044],{},[1042,3045,3046],{"href":2910},"SDK operation names",[2741,3048,3049,1684,3053,1400,3057,1684,3061],{},[1042,3050,3052],{"href":3051},"\u002Freference\u002Fapi\u002Fjobs\u002Fcreate-job","Create a job",[1042,3054,3056],{"href":3055},"\u002Freference\u002Fapi\u002Fjobs\u002Fget-job","read a job",[1042,3058,3060],{"href":3059},"\u002Freference\u002Fapi\u002Fjobs\u002Fsubmit-job-input","submit an input",[1042,3062,3064],{"href":3063},"\u002Freference\u002Fapi\u002Fjobs\u002Fresume-job","resume a job",[2741,3066,3067],{},[1042,3068,3070],{"href":3069},"\u002Freference\u002Fcodes#errors","Error codes",[2741,3072,3073,3074,1400,3078,2799,3080],{},"Guides with SDK code for a login that asks for a one-time code, a webhook receiver and a schedule\nwith change detection: ",[1042,3075,3077],{"href":3076},"\u002Fguides\u002Fauthenticated-flows","authenticated flows",[1042,3079,105],{"href":2895},[1042,3081,3083],{"href":3082},"\u002Fguides\u002Fschedules-and-change-detection","schedules and change detection",[3085,3086,3087],"style",{},"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 .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 .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 .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 .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 .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 .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":1181,"searchDepth":1248,"depth":1248,"links":3089},[3090,3091,3092,3093,3094,3095,3096,3097],{"id":1036,"depth":1237,"text":1037},{"id":1059,"depth":1237,"text":1060},{"id":1169,"depth":1237,"text":1170},{"id":2253,"depth":1237,"text":2254},{"id":2783,"depth":1237,"text":2784},{"id":2915,"depth":1237,"text":2916},{"id":2981,"depth":1237,"text":2982},{"id":3039,"depth":1237,"text":155},false,null,"The official TypeScript, Python and Go clients: install, authenticate, run a job, wait for it, answer it, and verify webhooks.","md",{},true,"\u002Fguides\u002Fsdks",{"title":125,"description":3100},"3.guides\u002F13.sdks","Dkrk0c0VqsDACD-Dn1Xr9B-n-gO-044w3A0XgrU5E1o",[3109,3113],{"title":122,"path":3110,"stem":3111,"description":3112,"children":-1},"\u002Fguides\u002Fdrift-and-canaries","3.guides\u002F12.drift-and-canaries","How Kaabist notices that a program has quietly started returning worse data, and how it finds out before your next job does.",{"title":128,"path":1044,"stem":3114,"description":3115,"children":-1},"3.guides\u002F14.cli","Run jobs, push and lint programs, review proposals and manage schedules and webhooks from a terminal.",1793593409293]