[{"data":1,"prerenderedAt":2836},["ShallowReactive",2],{"navigation":3,"page:\u002Fguides\u002Fcli":1019,"surround:\u002Fguides\u002Fcli":2828},[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":128,"body":1021,"breaking":2818,"date":2819,"description":2820,"extension":2821,"generated":2818,"meta":2822,"navigation":2823,"path":2824,"seo":2825,"stem":2826,"version":2819,"__hash__":2827},"docs\u002F3.guides\u002F14.cli.md",{"type":1022,"value":1023,"toc":2808},"minimark",[1024,1031,1036,1050,1054,1057,1090,1124,1127,1154,1158,1185,1207,1211,2264,2267,2332,2346,2410,2414,2579,2589,2593,2600,2679,2702,2706,2760,2763,2804],[1025,1026,1027,1030],"p",{},[1028,1029,846],"code",{}," is a single binary for Linux, macOS and Windows, built on the Go SDK. It runs jobs, keeps\nprograms in files you can version and review, and answers parked jobs, so a terminal or a CI job\ncan do what the panel does.",[1032,1033,1035],"h2",{"id":1034},"when-to-use-it","When to use it",[1025,1037,1038,1039,1044,1045,1049],{},"Use the CLI from a shell, a CI pipeline or a cron job on your own machine: to run a program and\nsave its data, to lint and push program files from a repository, or to approve proposals in bulk.\nFrom application code, use an ",[1040,1041,1043],"a",{"href":1042},"\u002Fguides\u002Fsdks","SDK"," instead; for building and testing a program\ninteractively, the ",[1040,1046,1048],{"href":1047},"\u002Fpanel\u002Fbuilder","program builder"," is quicker.",[1032,1051,1053],{"id":1052},"install","Install",[1025,1055,1056],{},"With Go 1.24 or later:",[1058,1059,1064],"pre",{"className":1060,"code":1061,"language":1062,"meta":1063,"style":1063},"language-bash shiki shiki-themes kaab-code kaab-code kaab-code","go install github.com\u002Fkaabist\u002Fkaab-go\u002Fcmd\u002Fkaab@latest\nkaab version\n","bash","",[1028,1065,1066,1082],{"__ignoreMap":1063},[1067,1068,1071,1075,1079],"span",{"class":1069,"line":1070},"line",1,[1067,1072,1074],{"class":1073},"sJugJ","go",[1067,1076,1078],{"class":1077},"sx8Bj"," install",[1067,1080,1081],{"class":1077}," github.com\u002Fkaabist\u002Fkaab-go\u002Fcmd\u002Fkaab@latest\n",[1067,1083,1085,1087],{"class":1069,"line":1084},2,[1067,1086,846],{"class":1073},[1067,1088,1089],{"class":1077}," version\n",[1025,1091,1092,1093,1096,1097,1100,1101,1104,1105,1108,1109,1112,1113,1116,1117,1119,1120,1123],{},"Each release is also built as archives for Linux, macOS (",[1028,1094,1095],{},"darwin",") and Windows, on ",[1028,1098,1099],{},"amd64"," and\n",[1028,1102,1103],{},"arm64",": ",[1028,1106,1107],{},"kaab_\u003Cversion>_\u003Cos>_\u003Carch>.tar.gz"," (",[1028,1110,1111],{},".zip"," on Windows), each with the binary, its licence\nand README, and a ",[1028,1114,1115],{},"checksums.txt"," to verify them against. Unpack one and put ",[1028,1118,846],{}," on your ",[1028,1121,1122],{},"PATH",".\nThere is no Homebrew or winget package yet.",[1025,1125,1126],{},"Shell completion comes with the binary:",[1058,1128,1130],{"className":1060,"code":1129,"language":1062,"meta":1063,"style":1063},"kaab completion zsh > \"${fpath[1]}\u002F_kaab\"   # also bash, fish, powershell\n",[1028,1131,1132],{"__ignoreMap":1063},[1067,1133,1134,1136,1139,1142,1146,1150],{"class":1069,"line":1070},[1067,1135,846],{"class":1073},[1067,1137,1138],{"class":1077}," completion",[1067,1140,1141],{"class":1077}," zsh",[1067,1143,1145],{"class":1144},"sqn18"," >",[1067,1147,1149],{"class":1148},"suOy4"," \"${fpath[1]}\u002F_kaab\"",[1067,1151,1153],{"class":1152},"sKog0","   # also bash, fish, powershell\n",[1032,1155,1157],{"id":1156},"sign-in","Sign in",[1058,1159,1161],{"className":1060,"code":1160,"language":1062,"meta":1063,"style":1063},"kaab auth login            # paste an sk_live_ or sk_test_ key\nkaab auth status\n",[1028,1162,1163,1176],{"__ignoreMap":1063},[1067,1164,1165,1167,1170,1173],{"class":1069,"line":1070},[1067,1166,846],{"class":1073},[1067,1168,1169],{"class":1077}," auth",[1067,1171,1172],{"class":1077}," login",[1067,1174,1175],{"class":1152},"            # paste an sk_live_ or sk_test_ key\n",[1067,1177,1178,1180,1182],{"class":1069,"line":1084},[1067,1179,846],{"class":1073},[1067,1181,1169],{"class":1077},[1067,1183,1184],{"class":1077}," status\n",[1025,1186,1187,1188,1191,1192,1195,1196,1199,1200,1100,1203,1206],{},"The key is checked against the API and kept in your operating system's keychain (or, where there\nis none, in ",[1028,1189,1190],{},"~\u002F.config\u002Fkaab\u002Fcredentials.toml",", readable only by you). A profile holds one live and\none test key; ",[1028,1193,1194],{},"--test"," uses the test one, ",[1028,1197,1198],{},"--profile"," picks another profile. ",[1028,1201,1202],{},"KAAB_API_KEY",[1028,1204,1205],{},"KAAB_BASE_URL"," override any profile, which is what CI should use.",[1032,1208,1210],{"id":1209},"run-a-job","Run a job",[1212,1213,1214,1360,1632,1873,2195],"code-group",{},[1058,1215,1218],{"className":1060,"code":1216,"filename":1217,"language":1062,"meta":1063,"style":1063},"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",[1028,1219,1220,1264,1274,1284,1294,1303,1318,1324,1330,1336,1342,1351],{"__ignoreMap":1063},[1067,1221,1222,1226,1229,1232,1234,1237,1240,1243,1246,1249,1252,1255,1258,1261],{"class":1069,"line":1070},[1067,1223,1225],{"class":1224},"sTzsn","response",[1067,1227,1228],{"class":1144},"=",[1067,1230,1231],{"class":1224},"$(",[1067,1233,1217],{"class":1073},[1067,1235,1236],{"class":1077}," -sS",[1067,1238,1239],{"class":1077}," --fail-with-body",[1067,1241,1242],{"class":1148}," \"${KAAB_BASE_URL",[1067,1244,1245],{"class":1144},":-",[1067,1247,1248],{"class":1148},"https",[1067,1250,1251],{"class":1144},":\u002F\u002F",[1067,1253,1254],{"class":1148},"api.kaab.ist",[1067,1256,1257],{"class":1144},"\u002F",[1067,1259,1260],{"class":1148},"v1}\u002Fjobs\"",[1067,1262,1263],{"class":1224}," \\\n",[1067,1265,1266,1269,1272],{"class":1069,"line":1084},[1067,1267,1268],{"class":1077},"  -H",[1067,1270,1271],{"class":1148}," \"Authorization: Bearer $KAAB_API_KEY\"",[1067,1273,1263],{"class":1224},[1067,1275,1277,1279,1282],{"class":1069,"line":1276},3,[1067,1278,1268],{"class":1077},[1067,1280,1281],{"class":1148}," \"Content-Type: application\u002Fjson\"",[1067,1283,1263],{"class":1224},[1067,1285,1287,1289,1292],{"class":1069,"line":1286},4,[1067,1288,1268],{"class":1077},[1067,1290,1291],{"class":1148}," \"Prefer: wait=30\"",[1067,1293,1263],{"class":1224},[1067,1295,1297,1300],{"class":1069,"line":1296},5,[1067,1298,1299],{"class":1077},"  -d",[1067,1301,1302],{"class":1148}," '{\n",[1067,1304,1306,1309,1311,1313,1315],{"class":1069,"line":1305},6,[1067,1307,1308],{"class":1148},"    \"url\": \"'\"${SITE_URL",[1067,1310,1245],{"class":1144},[1067,1312,1248],{"class":1148},[1067,1314,1251],{"class":1144},[1067,1316,1317],{"class":1148},"shop.example.com}\"'\u002Fp\u002F1\",\n",[1067,1319,1321],{"class":1069,"line":1320},7,[1067,1322,1323],{"class":1148},"    \"extract\": {\n",[1067,1325,1327],{"class":1069,"line":1326},8,[1067,1328,1329],{"class":1148},"      \"title\": \"h1\",\n",[1067,1331,1333],{"class":1069,"line":1332},9,[1067,1334,1335],{"class":1148},"      \"price\": { \"selector\": \".price\", \"type\": \"money\", \"locale\": \"tr\", \"currency\": \"TRY\" }\n",[1067,1337,1339],{"class":1069,"line":1338},10,[1067,1340,1341],{"class":1148},"    }\n",[1067,1343,1345,1348],{"class":1069,"line":1344},11,[1067,1346,1347],{"class":1148},"  }'",[1067,1349,1350],{"class":1224},")\n",[1067,1352,1354,1357],{"class":1069,"line":1353},12,[1067,1355,1356],{"class":1073},"echo",[1067,1358,1359],{"class":1148}," \"$response\"\n",[1058,1361,1366],{"className":1362,"code":1363,"filename":1364,"language":1365,"meta":1063,"style":1063},"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",[1028,1367,1368,1373,1402,1429,1439,1451,1502,1509,1521,1526,1589],{"__ignoreMap":1063},[1067,1369,1370],{"class":1069,"line":1070},[1067,1371,1372],{"class":1152},"\u002F\u002F One call: create the job and hold the request up to 30 s for its result (`Prefer: wait`).\n",[1067,1374,1375,1378,1382,1385,1388,1391,1394,1396,1399],{"class":1069,"line":1084},[1067,1376,1377],{"class":1144},"const",[1067,1379,1381],{"class":1380},"sHJIl"," job",[1067,1383,1384],{"class":1144}," =",[1067,1386,1387],{"class":1144}," await",[1067,1389,1390],{"class":1380}," kaab",[1067,1392,1393],{"class":1073},".",[1067,1395,171],{"class":1380},[1067,1397,1398],{"class":1073},".create",[1067,1400,1401],{"class":1224},"({\n",[1067,1403,1404,1407,1410,1413,1416,1419,1422,1425],{"class":1069,"line":1276},[1067,1405,1406],{"class":1224},"  url",[1067,1408,1409],{"class":1144},":",[1067,1411,1412],{"class":1148}," `",[1067,1414,1415],{"class":1144},"${",[1067,1417,1418],{"class":1224},"site",[1067,1420,1421],{"class":1144},"}",[1067,1423,1424],{"class":1148},"\u002Fp\u002F1`",[1067,1426,1428],{"class":1427},"sQm2-",",\n",[1067,1430,1431,1434,1436],{"class":1069,"line":1286},[1067,1432,1433],{"class":1224},"  extract",[1067,1435,1409],{"class":1144},[1067,1437,1438],{"class":1224}," {\n",[1067,1440,1441,1444,1446,1449],{"class":1069,"line":1296},[1067,1442,1443],{"class":1224},"    title",[1067,1445,1409],{"class":1144},[1067,1447,1448],{"class":1148}," \"h1\"",[1067,1450,1428],{"class":1427},[1067,1452,1453,1456,1458,1461,1463,1466,1469,1472,1474,1477,1479,1482,1484,1487,1489,1492,1494,1497,1500],{"class":1069,"line":1305},[1067,1454,1455],{"class":1224},"    price",[1067,1457,1409],{"class":1144},[1067,1459,1460],{"class":1224}," { selector",[1067,1462,1409],{"class":1144},[1067,1464,1465],{"class":1148}," \".price\"",[1067,1467,1468],{"class":1427},",",[1067,1470,1471],{"class":1224}," type",[1067,1473,1409],{"class":1144},[1067,1475,1476],{"class":1148}," \"money\"",[1067,1478,1468],{"class":1427},[1067,1480,1481],{"class":1224}," locale",[1067,1483,1409],{"class":1144},[1067,1485,1486],{"class":1148}," \"tr\"",[1067,1488,1468],{"class":1427},[1067,1490,1491],{"class":1224}," currency",[1067,1493,1409],{"class":1144},[1067,1495,1496],{"class":1148}," \"TRY\"",[1067,1498,1499],{"class":1224}," }",[1067,1501,1428],{"class":1427},[1067,1503,1504,1507],{"class":1069,"line":1320},[1067,1505,1506],{"class":1224},"  }",[1067,1508,1428],{"class":1427},[1067,1510,1511,1514,1516,1519],{"class":1069,"line":1326},[1067,1512,1513],{"class":1224},"  wait",[1067,1515,1409],{"class":1144},[1067,1517,1518],{"class":1380}," 30",[1067,1520,1428],{"class":1427},[1067,1522,1523],{"class":1069,"line":1332},[1067,1524,1525],{"class":1224},"});\n",[1067,1527,1528,1531,1533,1535,1538,1541,1544,1547,1550,1553,1556,1559,1562,1564,1566,1569,1571,1574,1576,1578,1581,1583,1586],{"class":1069,"line":1338},[1067,1529,1530],{"class":1144},"if",[1067,1532,1108],{"class":1224},[1067,1534,478],{"class":1380},[1067,1536,1537],{"class":1224},".status ",[1067,1539,1540],{"class":1144},"!==",[1067,1542,1543],{"class":1148}," \"succeeded\"",[1067,1545,1546],{"class":1224},") ",[1067,1548,1549],{"class":1144},"throw",[1067,1551,1552],{"class":1144}," new",[1067,1554,1555],{"class":1073}," Error",[1067,1557,1558],{"class":1224},"(",[1067,1560,1561],{"class":1148},"`job ",[1067,1563,1415],{"class":1144},[1067,1565,478],{"class":1380},[1067,1567,1568],{"class":1224},".id",[1067,1570,1421],{"class":1144},[1067,1572,1573],{"class":1148}," is ",[1067,1575,1415],{"class":1144},[1067,1577,478],{"class":1380},[1067,1579,1580],{"class":1224},".status",[1067,1582,1421],{"class":1144},[1067,1584,1585],{"class":1148},"`",[1067,1587,1588],{"class":1224},");\n",[1067,1590,1591,1594,1597,1599,1601,1603,1605,1607,1609,1611,1613,1616,1619,1621,1623,1626,1628,1630],{"class":1069,"line":1344},[1067,1592,1593],{"class":1380},"console",[1067,1595,1596],{"class":1073},".log",[1067,1598,1558],{"class":1224},[1067,1600,1585],{"class":1148},[1067,1602,1415],{"class":1144},[1067,1604,478],{"class":1380},[1067,1606,1568],{"class":1224},[1067,1608,1421],{"class":1144},[1067,1610,1104],{"class":1148},[1067,1612,1415],{"class":1144},[1067,1614,1615],{"class":1380},"JSON",[1067,1617,1618],{"class":1073},".stringify",[1067,1620,1558],{"class":1224},[1067,1622,478],{"class":1380},[1067,1624,1625],{"class":1224},".data)",[1067,1627,1421],{"class":1144},[1067,1629,1585],{"class":1148},[1067,1631,1588],{"class":1224},[1058,1633,1638],{"className":1634,"code":1635,"filename":1636,"language":1637,"meta":1063,"style":1063},"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",[1028,1639,1640,1645,1666,1691,1758,1770,1774,1793,1828],{"__ignoreMap":1063},[1067,1641,1642],{"class":1069,"line":1070},[1067,1643,1644],{"class":1152},"# One call: create the job and hold the request up to 30 s for its result (Prefer: wait).\n",[1067,1646,1647,1650,1652,1654,1656,1658,1660,1663],{"class":1069,"line":1084},[1067,1648,1649],{"class":1224},"job ",[1067,1651,1228],{"class":1144},[1067,1653,1390],{"class":1224},[1067,1655,1393],{"class":1427},[1067,1657,171],{"class":1224},[1067,1659,1393],{"class":1427},[1067,1661,1662],{"class":1073},"create",[1067,1664,1665],{"class":1427},"(\n",[1067,1667,1668,1671,1673,1676,1679,1682,1684,1686,1689],{"class":1069,"line":1276},[1067,1669,1670],{"class":1427},"    url",[1067,1672,1228],{"class":1144},[1067,1674,1675],{"class":1144},"f",[1067,1677,1678],{"class":1148},"\"",[1067,1680,1681],{"class":1380},"{",[1067,1683,1418],{"class":1427},[1067,1685,1421],{"class":1380},[1067,1687,1688],{"class":1148},"\u002Fp\u002F1\"",[1067,1690,1428],{"class":1427},[1067,1692,1693,1696,1698,1700,1703,1705,1708,1711,1714,1717,1720,1722,1725,1727,1730,1732,1735,1737,1740,1742,1745,1747,1750,1752,1755],{"class":1069,"line":1286},[1067,1694,1695],{"class":1427},"    extract",[1067,1697,1228],{"class":1144},[1067,1699,1681],{"class":1427},[1067,1701,1702],{"class":1148},"\"title\"",[1067,1704,1104],{"class":1427},[1067,1706,1707],{"class":1148},"\"h1\"",[1067,1709,1710],{"class":1427},", ",[1067,1712,1713],{"class":1148},"\"price\"",[1067,1715,1716],{"class":1427},": {",[1067,1718,1719],{"class":1148},"\"selector\"",[1067,1721,1104],{"class":1427},[1067,1723,1724],{"class":1148},"\".price\"",[1067,1726,1710],{"class":1427},[1067,1728,1729],{"class":1148},"\"type\"",[1067,1731,1104],{"class":1427},[1067,1733,1734],{"class":1148},"\"money\"",[1067,1736,1710],{"class":1427},[1067,1738,1739],{"class":1148},"\"locale\"",[1067,1741,1104],{"class":1427},[1067,1743,1744],{"class":1148},"\"tr\"",[1067,1746,1710],{"class":1427},[1067,1748,1749],{"class":1148},"\"currency\"",[1067,1751,1104],{"class":1427},[1067,1753,1754],{"class":1148},"\"TRY\"",[1067,1756,1757],{"class":1427},"}},\n",[1067,1759,1760,1763,1765,1768],{"class":1069,"line":1296},[1067,1761,1762],{"class":1427},"    wait",[1067,1764,1228],{"class":1144},[1067,1766,1767],{"class":1380},"30",[1067,1769,1428],{"class":1427},[1067,1771,1772],{"class":1069,"line":1305},[1067,1773,1350],{"class":1427},[1067,1775,1776,1778,1780,1782,1785,1788,1790],{"class":1069,"line":1320},[1067,1777,1530],{"class":1144},[1067,1779,1381],{"class":1224},[1067,1781,1393],{"class":1427},[1067,1783,1784],{"class":1224},"status ",[1067,1786,1787],{"class":1144},"!=",[1067,1789,1543],{"class":1148},[1067,1791,1792],{"class":1427},":\n",[1067,1794,1795,1798,1801,1803,1805,1808,1810,1813,1815,1817,1819,1822,1824,1826],{"class":1069,"line":1326},[1067,1796,1797],{"class":1144},"    raise",[1067,1799,1800],{"class":1380}," SystemExit",[1067,1802,1558],{"class":1427},[1067,1804,1675],{"class":1144},[1067,1806,1807],{"class":1148},"\"job ",[1067,1809,1681],{"class":1380},[1067,1811,1812],{"class":1427},"job.id",[1067,1814,1421],{"class":1380},[1067,1816,1573],{"class":1148},[1067,1818,1681],{"class":1380},[1067,1820,1821],{"class":1427},"job.status",[1067,1823,1421],{"class":1380},[1067,1825,1678],{"class":1148},[1067,1827,1350],{"class":1427},[1067,1829,1830,1833,1835,1837,1839,1841,1843,1845,1847,1849,1852,1855,1858,1860,1863,1866,1869,1871],{"class":1069,"line":1332},[1067,1831,1832],{"class":1073},"print",[1067,1834,1558],{"class":1427},[1067,1836,1675],{"class":1144},[1067,1838,1678],{"class":1148},[1067,1840,1681],{"class":1380},[1067,1842,1812],{"class":1427},[1067,1844,1421],{"class":1380},[1067,1846,1104],{"class":1148},[1067,1848,1681],{"class":1380},[1067,1850,1851],{"class":1427},"job.data.",[1067,1853,1854],{"class":1073},"to_dict",[1067,1856,1857],{"class":1427},"() ",[1067,1859,1530],{"class":1144},[1067,1861,1862],{"class":1427}," job.data ",[1067,1864,1865],{"class":1144},"else",[1067,1867,1868],{"class":1380}," None}",[1067,1870,1678],{"class":1148},[1067,1872,1350],{"class":1427},[1058,1874,1878],{"className":1875,"code":1876,"filename":1877,"language":1074,"meta":1063,"style":1063},"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",[1028,1879,1880,1885,1929,1945,1964,1975,2027,2032,2037,2051,2062,2067,2093,2106,2115,2120,2134,2158,2163],{"__ignoreMap":1063},[1067,1881,1882],{"class":1069,"line":1070},[1067,1883,1884],{"class":1152},"\u002F\u002F One call: create the job and hold the request up to 30 s for its result (Prefer: wait).\n",[1067,1886,1887,1890,1893,1896,1899,1902,1905,1907,1910,1913,1916,1918,1921,1924,1926],{"class":1069,"line":1084},[1067,1888,1889],{"class":1224},"body, err ",[1067,1891,1892],{"class":1144},":=",[1067,1894,1895],{"class":1224}," kaab.",[1067,1897,1898],{"class":1073},"Body",[1067,1900,1901],{"class":1224},"[",[1067,1903,1904],{"class":1073},"client",[1067,1906,1393],{"class":1224},[1067,1908,1909],{"class":1073},"CreateJobJSONBody",[1067,1911,1912],{"class":1224},"](",[1067,1914,1915],{"class":1144},"map",[1067,1917,1901],{"class":1224},[1067,1919,1920],{"class":1144},"string",[1067,1922,1923],{"class":1224},"]",[1067,1925,634],{"class":1073},[1067,1927,1928],{"class":1224},"{\n",[1067,1930,1931,1934,1937,1940,1943],{"class":1069,"line":1276},[1067,1932,1933],{"class":1148},"    \"url\"",[1067,1935,1936],{"class":1224},": site ",[1067,1938,1939],{"class":1144},"+",[1067,1941,1942],{"class":1148}," \"\u002Fp\u002F1\"",[1067,1944,1428],{"class":1224},[1067,1946,1947,1950,1952,1954,1956,1958,1960,1962],{"class":1069,"line":1286},[1067,1948,1949],{"class":1148},"    \"extract\"",[1067,1951,1104],{"class":1224},[1067,1953,1915],{"class":1144},[1067,1955,1901],{"class":1224},[1067,1957,1920],{"class":1144},[1067,1959,1923],{"class":1224},[1067,1961,634],{"class":1073},[1067,1963,1928],{"class":1224},[1067,1965,1966,1969,1971,1973],{"class":1069,"line":1296},[1067,1967,1968],{"class":1148},"        \"title\"",[1067,1970,1104],{"class":1224},[1067,1972,1707],{"class":1148},[1067,1974,1428],{"class":1224},[1067,1976,1977,1980,1982,1984,1986,1988,1990,1992,1994,1996,1998,2000,2002,2004,2006,2008,2010,2012,2014,2016,2018,2020,2022,2024],{"class":1069,"line":1305},[1067,1978,1979],{"class":1148},"        \"price\"",[1067,1981,1104],{"class":1224},[1067,1983,1915],{"class":1144},[1067,1985,1901],{"class":1224},[1067,1987,1920],{"class":1144},[1067,1989,1923],{"class":1224},[1067,1991,634],{"class":1073},[1067,1993,1681],{"class":1224},[1067,1995,1719],{"class":1148},[1067,1997,1104],{"class":1224},[1067,1999,1724],{"class":1148},[1067,2001,1710],{"class":1224},[1067,2003,1729],{"class":1148},[1067,2005,1104],{"class":1224},[1067,2007,1734],{"class":1148},[1067,2009,1710],{"class":1224},[1067,2011,1739],{"class":1148},[1067,2013,1104],{"class":1224},[1067,2015,1744],{"class":1148},[1067,2017,1710],{"class":1224},[1067,2019,1749],{"class":1148},[1067,2021,1104],{"class":1224},[1067,2023,1754],{"class":1148},[1067,2025,2026],{"class":1224},"},\n",[1067,2028,2029],{"class":1069,"line":1320},[1067,2030,2031],{"class":1224},"    },\n",[1067,2033,2034],{"class":1069,"line":1326},[1067,2035,2036],{"class":1224},"})\n",[1067,2038,2039,2041,2044,2046,2049],{"class":1069,"line":1332},[1067,2040,1530],{"class":1144},[1067,2042,2043],{"class":1224}," err ",[1067,2045,1787],{"class":1144},[1067,2047,2048],{"class":1380}," nil",[1067,2050,1438],{"class":1224},[1067,2052,2053,2056,2059],{"class":1069,"line":1338},[1067,2054,2055],{"class":1224},"    log.",[1067,2057,2058],{"class":1073},"Fatal",[1067,2060,2061],{"class":1224},"(err)\n",[1067,2063,2064],{"class":1069,"line":1344},[1067,2065,2066],{"class":1224},"}\n",[1067,2068,2069,2072,2074,2077,2080,2083,2086,2088,2090],{"class":1069,"line":1353},[1067,2070,2071],{"class":1224},"job, err ",[1067,2073,1892],{"class":1144},[1067,2075,2076],{"class":1224}," c.Jobs.",[1067,2078,2079],{"class":1073},"Create",[1067,2081,2082],{"class":1224},"(ctx, body, kaab.",[1067,2084,2085],{"class":1073},"WithWait",[1067,2087,1558],{"class":1224},[1067,2089,1767],{"class":1380},[1067,2091,2092],{"class":1224},"))\n",[1067,2094,2096,2098,2100,2102,2104],{"class":1069,"line":2095},13,[1067,2097,1530],{"class":1144},[1067,2099,2043],{"class":1224},[1067,2101,1787],{"class":1144},[1067,2103,2048],{"class":1380},[1067,2105,1438],{"class":1224},[1067,2107,2109,2111,2113],{"class":1069,"line":2108},14,[1067,2110,2055],{"class":1224},[1067,2112,2058],{"class":1073},[1067,2114,2061],{"class":1224},[1067,2116,2118],{"class":1069,"line":2117},15,[1067,2119,2066],{"class":1224},[1067,2121,2123,2125,2128,2130,2132],{"class":1069,"line":2122},16,[1067,2124,1530],{"class":1144},[1067,2126,2127],{"class":1224}," job.Status ",[1067,2129,1787],{"class":1144},[1067,2131,1543],{"class":1148},[1067,2133,1438],{"class":1224},[1067,2135,2137,2139,2142,2144,2146,2149,2151,2153,2155],{"class":1069,"line":2136},17,[1067,2138,2055],{"class":1224},[1067,2140,2141],{"class":1073},"Fatalf",[1067,2143,1558],{"class":1224},[1067,2145,1807],{"class":1148},[1067,2147,2148],{"class":1380},"%s",[1067,2150,1573],{"class":1148},[1067,2152,2148],{"class":1380},[1067,2154,1678],{"class":1148},[1067,2156,2157],{"class":1224},", job.ID, job.Status)\n",[1067,2159,2161],{"class":1069,"line":2160},18,[1067,2162,2066],{"class":1224},[1067,2164,2166,2169,2172,2174,2176,2178,2180,2183,2186,2189,2192],{"class":1069,"line":2165},19,[1067,2167,2168],{"class":1224},"fmt.",[1067,2170,2171],{"class":1073},"Printf",[1067,2173,1558],{"class":1224},[1067,2175,1678],{"class":1148},[1067,2177,2148],{"class":1380},[1067,2179,1104],{"class":1148},[1067,2181,2182],{"class":1380},"%v",[1067,2184,2185],{"class":1148},"\\n\"",[1067,2187,2188],{"class":1224},", job.ID, ",[1067,2190,2191],{"class":1144},"*",[1067,2193,2194],{"class":1224},"job.Data)\n",[1058,2196,2198],{"className":1060,"code":2197,"filename":841,"language":1062,"meta":1063,"style":1063},"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",[1028,2199,2200,2219,2238,2248,2257],{"__ignoreMap":1063},[1067,2201,2202,2205,2207,2209,2211,2214,2217],{"class":1069,"line":1070},[1067,2203,2204],{"class":1224},"data",[1067,2206,1228],{"class":1144},[1067,2208,1231],{"class":1224},[1067,2210,846],{"class":1073},[1067,2212,2213],{"class":1077}," jobs",[1067,2215,2216],{"class":1077}," run",[1067,2218,1263],{"class":1224},[1067,2220,2221,2224,2227,2229,2231,2233,2236],{"class":1069,"line":1084},[1067,2222,2223],{"class":1077},"  --url",[1067,2225,2226],{"class":1148}," \"${SITE_URL",[1067,2228,1245],{"class":1144},[1067,2230,1248],{"class":1148},[1067,2232,1251],{"class":1144},[1067,2234,2235],{"class":1148},"shop.example.com}\u002Fp\u002F1\"",[1067,2237,1263],{"class":1224},[1067,2239,2240,2243,2246],{"class":1069,"line":1276},[1067,2241,2242],{"class":1077},"  --extract",[1067,2244,2245],{"class":1148}," '{\"title\": \"h1\", \"price\": {\"selector\": \".price\", \"type\": \"money\", \"locale\": \"tr\", \"currency\": \"TRY\"}}'",[1067,2247,1263],{"class":1224},[1067,2249,2250,2253,2255],{"class":1069,"line":1286},[1067,2251,2252],{"class":1077},"  --wait",[1067,2254,1518],{"class":1380},[1067,2256,1350],{"class":1224},[1067,2258,2259,2261],{"class":1069,"line":1296},[1067,2260,1356],{"class":1073},[1067,2262,2263],{"class":1148}," \"$data\"\n",[1025,2265,2266],{},"More forms of the same command:",[1058,2268,2270],{"className":1060,"code":2269,"language":1062,"meta":1063,"style":1063},"kaab jobs run --url https:\u002F\u002Fshop.example.com\u002Fp\u002F1 --extract @schema.json --wait 30\nkaab jobs run --program acme-report@production --input report_id=42 --session acme --wait 60\n",[1028,2271,2272,2298],{"__ignoreMap":1063},[1067,2273,2274,2276,2278,2280,2283,2286,2289,2292,2295],{"class":1069,"line":1070},[1067,2275,846],{"class":1073},[1067,2277,2213],{"class":1077},[1067,2279,2216],{"class":1077},[1067,2281,2282],{"class":1077}," --url",[1067,2284,2285],{"class":1077}," https:\u002F\u002Fshop.example.com\u002Fp\u002F1",[1067,2287,2288],{"class":1077}," --extract",[1067,2290,2291],{"class":1077}," @schema.json",[1067,2293,2294],{"class":1077}," --wait",[1067,2296,2297],{"class":1380}," 30\n",[1067,2299,2300,2302,2304,2306,2309,2312,2315,2318,2321,2324,2327,2329],{"class":1069,"line":1084},[1067,2301,846],{"class":1073},[1067,2303,2213],{"class":1077},[1067,2305,2216],{"class":1077},[1067,2307,2308],{"class":1077}," --program",[1067,2310,2311],{"class":1077}," acme-report@production",[1067,2313,2314],{"class":1077}," --input",[1067,2316,2317],{"class":1077}," report_id=",[1067,2319,2320],{"class":1380},"42",[1067,2322,2323],{"class":1077}," --session",[1067,2325,2326],{"class":1077}," acme",[1067,2328,2294],{"class":1077},[1067,2330,2331],{"class":1380}," 60\n",[1025,2333,2334,2335,2337,2338,2341,2342,2345],{},"A succeeded job prints its ",[1028,2336,2204],{}," as JSON on stdout and a one-line summary on stderr, so\n",[1028,2339,2340],{},"kaab jobs run … > data.json"," does what it says. ",[1028,2343,2344],{},"--json"," prints the whole envelope instead.",[2347,2348,2349,2362],"table",{},[2350,2351,2352],"thead",{},[2353,2354,2355,2359],"tr",{},[2356,2357,2358],"th",{},"Exit code",[2356,2360,2361],{},"Meaning",[2363,2364,2365,2378,2386,2394],"tbody",{},[2353,2366,2367,2371],{},[2368,2369,2370],"td",{},"0",[2368,2372,2373,2374,2377],{},"succeeded, or still running when ",[1028,2375,2376],{},"--wait"," ran out",[2353,2379,2380,2383],{},[2368,2381,2382],{},"1",[2368,2384,2385],{},"the request failed (the API's code, message and request id are printed)",[2353,2387,2388,2391],{},[2368,2389,2390],{},"2",[2368,2392,2393],{},"the job failed or was canceled",[2353,2395,2396,2399],{},[2368,2397,2398],{},"3",[2368,2400,2401,2402,2404,2405,1710,2407,2409],{},"the job is parked: waiting for an input (",[1028,2403,887],{},") or for attention (",[1028,2406,893],{},[1028,2408,911],{},")",[1032,2411,2413],{"id":2412},"programs-proposals-schedules-webhooks","Programs, proposals, schedules, webhooks",[1058,2415,2417],{"className":1060,"code":2416,"language":1062,"meta":1063,"style":1063},"kaab programs lint report.json          # exit 1 on errors\nkaab programs push report.json --publish\nkaab programs pull acme-report@production -o report.json\nkaab programs diff acme-report 3 4\nkaab proposals list && kaab proposals approve prp_… --promote\nkaab schedules create --program acme-report@production --cron \"0 * * * *\" --change-detection --field price\nkaab webhooks create --url https:\u002F\u002Fexample.com\u002Fhooks --events 'job.*'\nkaab credits && kaab usage --group-by program\n",[1028,2418,2419,2435,2449,2466,2484,2510,2539,2559],{"__ignoreMap":1063},[1067,2420,2421,2423,2426,2429,2432],{"class":1069,"line":1070},[1067,2422,846],{"class":1073},[1067,2424,2425],{"class":1077}," programs",[1067,2427,2428],{"class":1077}," lint",[1067,2430,2431],{"class":1077}," report.json",[1067,2433,2434],{"class":1152},"          # exit 1 on errors\n",[1067,2436,2437,2439,2441,2444,2446],{"class":1069,"line":1084},[1067,2438,846],{"class":1073},[1067,2440,2425],{"class":1077},[1067,2442,2443],{"class":1077}," push",[1067,2445,2431],{"class":1077},[1067,2447,2448],{"class":1077}," --publish\n",[1067,2450,2451,2453,2455,2458,2460,2463],{"class":1069,"line":1276},[1067,2452,846],{"class":1073},[1067,2454,2425],{"class":1077},[1067,2456,2457],{"class":1077}," pull",[1067,2459,2311],{"class":1077},[1067,2461,2462],{"class":1077}," -o",[1067,2464,2465],{"class":1077}," report.json\n",[1067,2467,2468,2470,2472,2475,2478,2481],{"class":1069,"line":1286},[1067,2469,846],{"class":1073},[1067,2471,2425],{"class":1077},[1067,2473,2474],{"class":1077}," diff",[1067,2476,2477],{"class":1077}," acme-report",[1067,2479,2480],{"class":1380}," 3",[1067,2482,2483],{"class":1380}," 4\n",[1067,2485,2486,2488,2491,2494,2497,2499,2501,2504,2507],{"class":1069,"line":1296},[1067,2487,846],{"class":1073},[1067,2489,2490],{"class":1077}," proposals",[1067,2492,2493],{"class":1077}," list",[1067,2495,2496],{"class":1427}," &&",[1067,2498,1390],{"class":1073},[1067,2500,2490],{"class":1077},[1067,2502,2503],{"class":1077}," approve",[1067,2505,2506],{"class":1077}," prp_…",[1067,2508,2509],{"class":1077}," --promote\n",[1067,2511,2512,2514,2517,2520,2522,2524,2527,2530,2533,2536],{"class":1069,"line":1305},[1067,2513,846],{"class":1073},[1067,2515,2516],{"class":1077}," schedules",[1067,2518,2519],{"class":1077}," create",[1067,2521,2308],{"class":1077},[1067,2523,2311],{"class":1077},[1067,2525,2526],{"class":1077}," --cron",[1067,2528,2529],{"class":1148}," \"0 * * * *\"",[1067,2531,2532],{"class":1077}," --change-detection",[1067,2534,2535],{"class":1077}," --field",[1067,2537,2538],{"class":1077}," price\n",[1067,2540,2541,2543,2546,2548,2550,2553,2556],{"class":1069,"line":1320},[1067,2542,846],{"class":1073},[1067,2544,2545],{"class":1077}," webhooks",[1067,2547,2519],{"class":1077},[1067,2549,2282],{"class":1077},[1067,2551,2552],{"class":1077}," https:\u002F\u002Fexample.com\u002Fhooks",[1067,2554,2555],{"class":1077}," --events",[1067,2557,2558],{"class":1148}," 'job.*'\n",[1067,2560,2561,2563,2566,2568,2570,2573,2576],{"class":1069,"line":1326},[1067,2562,846],{"class":1073},[1067,2564,2565],{"class":1077}," credits",[1067,2567,2496],{"class":1427},[1067,2569,1390],{"class":1073},[1067,2571,2572],{"class":1077}," usage",[1067,2574,2575],{"class":1077}," --group-by",[1067,2577,2578],{"class":1077}," program\n",[1025,2580,2581,2584,2585,2588],{},[1028,2582,2583],{},"kaab \u003Ccommand> --help"," describes every flag, and ",[1040,2586,2587],{"href":844},"the CLI reference"," lists every\ncommand.",[1032,2590,2592],{"id":2591},"worked-example","Worked example",[1025,2594,2595,2596,2599],{},"Run a shop's product page, ",[1028,2597,2598],{},"https:\u002F\u002Fshop.example.com\u002Fp\u002F1",", from a terminal and keep only the price:",[1058,2601,2603],{"className":1060,"code":2602,"language":1062,"meta":1063,"style":1063},"export KAAB_API_KEY=sk_test_…\ncat > schema.json \u003C\u003C'JSON'\n{ \"title\": \"h1\", \"price\": { \"selector\": \".price\", \"type\": \"money\", \"locale\": \"tr\", \"currency\": \"TRY\" } }\nJSON\nkaab jobs run --url https:\u002F\u002Fshop.example.com\u002Fp\u002F1 --extract @schema.json --wait 30 > data.json\necho $?   # 0\n",[1028,2604,2605,2618,2634,2639,2644,2669],{"__ignoreMap":1063},[1067,2606,2607,2610,2613,2615],{"class":1069,"line":1070},[1067,2608,2609],{"class":1144},"export",[1067,2611,2612],{"class":1224}," KAAB_API_KEY",[1067,2614,1228],{"class":1144},[1067,2616,2617],{"class":1224},"sk_test_…\n",[1067,2619,2620,2623,2625,2628,2631],{"class":1069,"line":1084},[1067,2621,2622],{"class":1073},"cat",[1067,2624,1145],{"class":1144},[1067,2626,2627],{"class":1077}," schema.json",[1067,2629,2630],{"class":1144}," \u003C\u003C",[1067,2632,2633],{"class":1224},"'JSON'\n",[1067,2635,2636],{"class":1069,"line":1276},[1067,2637,2638],{"class":1148},"{ \"title\": \"h1\", \"price\": { \"selector\": \".price\", \"type\": \"money\", \"locale\": \"tr\", \"currency\": \"TRY\" } }\n",[1067,2640,2641],{"class":1069,"line":1286},[1067,2642,2643],{"class":1224},"JSON\n",[1067,2645,2646,2648,2650,2652,2654,2656,2658,2660,2662,2664,2666],{"class":1069,"line":1296},[1067,2647,846],{"class":1073},[1067,2649,2213],{"class":1077},[1067,2651,2216],{"class":1077},[1067,2653,2282],{"class":1077},[1067,2655,2285],{"class":1077},[1067,2657,2288],{"class":1077},[1067,2659,2291],{"class":1077},[1067,2661,2294],{"class":1077},[1067,2663,1518],{"class":1380},[1067,2665,1145],{"class":1144},[1067,2667,2668],{"class":1077}," data.json\n",[1067,2670,2671,2673,2676],{"class":1069,"line":1305},[1067,2672,1356],{"class":1073},[1067,2674,2675],{"class":1224}," $?   ",[1067,2677,2678],{"class":1152},"# 0\n",[1025,2680,2681,2684,2685,2687,2688,2691,2692,2695,2696,2698,2699,2701],{},[1028,2682,2683],{},"data.json"," holds the job's ",[1028,2686,2204],{},": the title ",[1028,2689,2690],{},"Kulaklık Klasik 101"," and the price\n",[1028,2693,2694],{},"{ \"amount\": 1337.4, \"currency\": \"TRY\" }",".\nIn a CI step, branch on the exit code: ",[1028,2697,2390],{}," means the job failed, ",[1028,2700,2398],{}," that it parked and somebody has\nto answer it.",[1032,2703,2705],{"id":2704},"pitfalls","Pitfalls",[2707,2708,2709,2724,2740,2751],"ul",{},[2710,2711,2712,2716,2717,2719,2720,2723],"li",{},[2713,2714,2715],"strong",{},"A live key in CI by accident."," ",[1028,2718,1202],{}," wins over every profile; give CI an ",[1028,2721,2722],{},"sk_test_","\nkey for checks and a narrowly scoped live key only where it does real work.",[2710,2725,2726,2729,2730,2732,2733,2735,2736,2739],{},[2713,2727,2728],{},"Treating exit code 0 as \"done\"."," It also means the job was still running when ",[1028,2731,2376],{}," ran\nout. Use ",[1028,2734,2344],{}," and read ",[1028,2737,2738],{},"status"," when the difference matters.",[2710,2741,2742,2716,2748,2750],{},[2713,2743,2744,2745,1393],{},"Forgetting ",[1028,2746,2747],{},"--publish",[1028,2749,935],{}," without it saves a draft version that no alias\nruns.",[2710,2752,2753,2759],{},[2713,2754,2755,2756,1393],{},"Shell globbing in ",[1028,2757,2758],{},"--events 'job.*'"," Quote event patterns.",[1032,2761,155],{"id":2762},"reference",[2707,2764,2765,2787],{},[2710,2766,2767,1710,2772,1428,2777,1710,2782],{},[1040,2768,2770],{"href":2769},"\u002Freference\u002Fcli\u002Fkaab",[1028,2771,846],{},[1040,2773,2775],{"href":2774},"\u002Freference\u002Fcli\u002Fkaab-jobs-run",[1028,2776,896],{},[1040,2778,2780],{"href":2779},"\u002Freference\u002Fcli\u002Fkaab-programs-push",[1028,2781,935],{},[1040,2783,2785],{"href":2784},"\u002Freference\u002Fcli\u002Fkaab-auth-login",[1028,2786,851],{},[2710,2788,2789,1428,2794,1428,2799],{},[1040,2790,2792],{"href":2791},"\u002Freference\u002Fcli\u002Fkaab-proposals-approve",[1028,2793,941],{},[1040,2795,2797],{"href":2796},"\u002Freference\u002Fcli\u002Fkaab-schedules-create",[1028,2798,956],{},[1040,2800,2802],{"href":2801},"\u002Freference\u002Fcli\u002Fkaab-webhooks-create",[1028,2803,995],{},[2805,2806,2807],"style",{},"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 .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 .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 .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 .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 .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 .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":1063,"searchDepth":1276,"depth":1276,"links":2809},[2810,2811,2812,2813,2814,2815,2816,2817],{"id":1034,"depth":1084,"text":1035},{"id":1052,"depth":1084,"text":1053},{"id":1156,"depth":1084,"text":1157},{"id":1209,"depth":1084,"text":1210},{"id":2412,"depth":1084,"text":2413},{"id":2591,"depth":1084,"text":2592},{"id":2704,"depth":1084,"text":2705},{"id":2762,"depth":1084,"text":155},false,null,"Run jobs, push and lint programs, review proposals and manage schedules and webhooks from a terminal.","md",{},true,"\u002Fguides\u002Fcli",{"title":128,"description":2820},"3.guides\u002F14.cli","ecdQog--JP4AB6AEhEz_vJr7xZ5yjshJAMtzbyKzZnY",[2829,2832],{"title":125,"path":1042,"stem":2830,"description":2831,"children":-1},"3.guides\u002F13.sdks","The official TypeScript, Python and Go clients: install, authenticate, run a job, wait for it, answer it, and verify webhooks.",{"title":131,"path":2833,"stem":2834,"description":2835,"children":-1},"\u002Fguides\u002Fmcp","3.guides\u002F15.mcp","Connect Claude Code, Codex, Cursor or any MCP client to Kaabist and let it build, test and maintain programs in a real Kaabist browser.",1793593409295]