[{"data":1,"prerenderedAt":2277},["ShallowReactive",2],{"navigation":3,"page:\u002Fguides\u002Fhosted-resolve":1019,"surround:\u002Fguides\u002Fhosted-resolve":2269},[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":92,"body":1021,"breaking":2260,"date":2261,"description":2262,"extension":2263,"generated":2260,"meta":2264,"navigation":1935,"path":2265,"seo":2266,"stem":2267,"version":2261,"__hash__":2268},"docs\u002F3.guides\u002F02.hosted-resolve.md",{"type":1022,"value":1023,"toc":2250},"minimark",[1024,1038,1043,1050,1071,1075,1078,1169,1172,1215,1246,1257,1260,1264,1283,1290,1294,1305,1339,1348,1355,1378,1382,1463,1466,1470,1477,2110,2155,2159,2193,2196,2246],[1025,1026,1027,1028,1032,1033,1037],"p",{},"A ",[1029,1030,1031],"strong",{},"hosted resolve page"," (",[1034,1035,1036],"code",{},"https:\u002F\u002Fapp.kaab.ist\u002Fr\u002F\u003Ctoken>",") lets a person without a Kaabist\naccount finish one parked job: type the code their bank has texted them, apply a suggested fix,\nor deal with the page themselves. You send them the link; the page names your organisation, says\nin plain words what is needed, and does one thing for one job.",[1039,1040,1042],"h2",{"id":1041},"when-to-use-it","When to use it",[1025,1044,1045,1046,1049],{},"Use a hosted page when the value or the decision belongs to ",[1029,1047,1048],{},"your end user",", not to you: the\none-time code arrives on their phone, or the account the job signs in to is theirs. The code then\ngoes from their phone to the job without passing through your servers.",[1025,1051,1052,1053,1056,1057,1060,1061,1065,1066,1070],{},"When you, your backend or your operators can supply the value, answer through the API instead\n(",[1034,1054,1055],{},"POST \u002Fv1\u002Fjobs\u002F{id}\u002Finput",", or an SDK's ",[1034,1058,1059],{},"onInput","); see\n",[1062,1063,89],"a",{"href":1064},"\u002Fguides\u002Fauthenticated-flows",". When a stopped job needs a judgement about the\nprogram itself (skipping a step, retrying from a checkpoint), handle it in the\n",[1062,1067,1069],{"href":1068},"\u002Fpanel\u002Ftakeover","panel",": a hosted page never offers those.",[1039,1072,1074],{"id":1073},"collecting-a-value","Collecting a value",[1025,1076,1077],{},"Declare the input as hosted in the program:",[1079,1080,1084],"pre",{"className":1081,"code":1082,"language":680,"meta":1083,"style":1083},"language-json shiki shiki-themes kaab-code kaab-code kaab-code","{ \"await_input\": { \"name\": \"otp\", \"prompt\": \"The code we sent you\", \"pattern\": \"^[0-9]{6}$\",\n  \"collect\": \"hosted\", \"hosted\": { \"notify\": \"none\" } } }\n","",[1034,1085,1086,1139],{"__ignoreMap":1083},[1087,1088,1091,1095,1099,1103,1106,1109,1111,1115,1118,1121,1123,1126,1128,1131,1133,1136],"span",{"class":1089,"line":1090},"line",1,[1087,1092,1094],{"class":1093},"sTzsn","{ ",[1087,1096,1098],{"class":1097},"sqn18","\"await_input\"",[1087,1100,1102],{"class":1101},"sQm2-",":",[1087,1104,1105],{"class":1093}," { ",[1087,1107,1108],{"class":1097},"\"name\"",[1087,1110,1102],{"class":1101},[1087,1112,1114],{"class":1113},"suOy4"," \"otp\"",[1087,1116,1117],{"class":1101},",",[1087,1119,1120],{"class":1097}," \"prompt\"",[1087,1122,1102],{"class":1101},[1087,1124,1125],{"class":1113}," \"The code we sent you\"",[1087,1127,1117],{"class":1101},[1087,1129,1130],{"class":1097}," \"pattern\"",[1087,1132,1102],{"class":1101},[1087,1134,1135],{"class":1113}," \"^[0-9]{6}$\"",[1087,1137,1138],{"class":1101},",\n",[1087,1140,1142,1145,1147,1150,1152,1154,1156,1158,1161,1163,1166],{"class":1089,"line":1141},2,[1087,1143,1144],{"class":1097},"  \"collect\"",[1087,1146,1102],{"class":1101},[1087,1148,1149],{"class":1113}," \"hosted\"",[1087,1151,1117],{"class":1101},[1087,1153,1149],{"class":1097},[1087,1155,1102],{"class":1101},[1087,1157,1105],{"class":1093},[1087,1159,1160],{"class":1097},"\"notify\"",[1087,1162,1102],{"class":1101},[1087,1164,1165],{"class":1113}," \"none\"",[1087,1167,1168],{"class":1093}," } } }\n",[1025,1170,1171],{},"When the job parks there, its envelope carries the page's address from the first moment:",[1079,1173,1175],{"className":1081,"code":1174,"language":680,"meta":1083,"style":1083},"\"input_request\": { \"name\": \"otp\", \"collect\": \"hosted\", \"resolve_url\": \"https:\u002F\u002Fapp.kaab.ist\u002Fr\u002F…\", … }\n",[1034,1176,1177],{"__ignoreMap":1083},[1087,1178,1179,1182,1185,1187,1189,1191,1193,1196,1198,1200,1202,1205,1207,1210,1212],{"class":1089,"line":1090},[1087,1180,1181],{"class":1113},"\"input_request\"",[1087,1183,1184],{"class":1093},": { ",[1087,1186,1108],{"class":1097},[1087,1188,1102],{"class":1101},[1087,1190,1114],{"class":1113},[1087,1192,1117],{"class":1101},[1087,1194,1195],{"class":1097}," \"collect\"",[1087,1197,1102],{"class":1101},[1087,1199,1149],{"class":1113},[1087,1201,1117],{"class":1101},[1087,1203,1204],{"class":1097}," \"resolve_url\"",[1087,1206,1102],{"class":1101},[1087,1208,1209],{"class":1113}," \"https:\u002F\u002Fapp.kaab.ist\u002Fr\u002F…\"",[1087,1211,1117],{"class":1101},[1087,1213,1214],{"class":1093}," … }\n",[1025,1216,1217,1218,1221,1222,1225,1226,1229,1230,1233,1234,1237,1238,1241,1242,1245],{},"Then get the link to the person. With ",[1034,1219,1220],{},"\"notify\": \"none\""," you deliver it yourself, by e-mail, SMS or\nin your own app; the ",[1034,1223,1224],{},"job.awaiting_input"," webhook is the moment to do it, and\n",[1034,1227,1228],{},"input_request.resolve_url"," on the job it points at is the link. The program language also accepts\n",[1034,1231,1232],{},"\"notify\": \"email\""," with a ",[1034,1235,1236],{},"\"to\""," address (a template such as ",[1034,1239,1240],{},"\"{{inputs.email}}\"","); this guide\ndelivers the link itself, which works whatever ",[1034,1243,1244],{},"notify"," says.",[1025,1247,1248,1249,1252,1253,1256],{},"Lint warns about a hosted input with no ",[1034,1250,1251],{},"hosted.notify"," at all\n(",[1062,1254,823],{"href":1255},"\u002Freference\u002Fdsl\u002Flint\u002Fw007","): it is a reminder that somebody has to tell the person the page\nexists, or the job waits until its deadline.",[1025,1258,1259],{},"The person opens the link, types the value, and the job continues. The value is checked against the\nstep's type and pattern before it is accepted, on the page and again by the API.",[1039,1261,1263],{"id":1262},"sharing-a-stopped-job","Sharing a stopped job",[1025,1265,1266,1267,1270,1271,1274,1275,1278,1279,1282],{},"A job that stopped for something unexpected (",[1034,1268,1269],{},"needs_attention",") can be shared from its page in the\npanel: ",[1029,1272,1273],{},"Share resolve link",". The dialog explains that anyone with the link can act on this one job\nuntil it finishes or the park expires, and has one option, ",[1029,1276,1277],{},"Let them abort the job",", off by\ndefault. The job's ",[1034,1280,1281],{},"attention.resolve_url"," then holds the link.",[1025,1284,1285,1286,1289],{},"The shared page shows the screenshot the job stopped on, a plain-sentence description of what is in\nthe way, the platform's suggested fixes (applied for this one job only), and ",[1029,1287,1288],{},"Open the page",": a\ntakeover of the remote browser with no address bar, no tabs and no session export.",[1039,1291,1293],{"id":1292},"what-the-person-sees","What the person sees",[1025,1295,1296,1297,1300,1301,1304],{},"The page carries no Kaabist navigation and no sign-in. At the top, in small grey text, is your\norganisation's name; under it the heading ",[1029,1298,1299],{},"We need one more thing from you"," for an input, or\n",[1029,1302,1303],{},"We need your help to continue"," for a stopped job. The footer reads \"Secure page · the link works\nfor one task and expires\", and the line under the card says when this link expires.",[1025,1306,1307,1310,1311,1314,1315,1318,1319,1322,1323,1326,1327,1330,1331,1334,1335,1338],{},[1029,1308,1309],{},"On a phone"," the page is a single column with a small margin on each side. For an input, the\nscreenshot of the page the job stopped on (when there is one) fills the width, followed by one\nlarge field labelled with your ",[1034,1312,1313],{},"prompt"," and a full-width ",[1029,1316,1317],{},"Send"," button. The field is marked as a\none-time-code field, so phones offer a code that has arrived by SMS; a ",[1034,1320,1321],{},"number"," input opens the\nnumeric keypad, and a ",[1034,1324,1325],{},"secret"," input is masked. A value that does not match the pattern is refused\nunder the field before anything is sent. For a stopped job, each suggested fix is a short sentence\nwith an ",[1029,1328,1329],{},"Apply this fix"," button below it, followed by ",[1029,1332,1333],{},"Or do it yourself"," and an ",[1029,1336,1337],{},"Open the\npage"," button.",[1025,1340,1341,1344,1345,1347],{},[1029,1342,1343],{},"On a desktop"," the same content sits in a centred card at most 768 pixels wide, with more padding,\nand each suggested fix has its ",[1029,1346,1329],{}," button on the same line as its sentence. Opening\nthe page for a takeover widens the card to the full window so the remote browser has room.",[1025,1349,1350,1351,1354],{},"When the shared link allows it, a red ",[1029,1352,1353],{},"Stop this task"," button sits at the bottom of the card and\nasks for confirmation (\"It will not continue, and this link stops working\").",[1025,1356,1357,1358,1361,1362,1365,1366,1369,1370,1373,1374,1377],{},"After an answer the card is replaced by its outcome: ",[1029,1359,1360],{},"Thank you, it is on its way"," with a spinner\nwhile the job runs (the page checks again every few seconds), then ",[1029,1363,1364],{},"All done",". A link past its\ndeadline shows ",[1029,1367,1368],{},"This link has expired",", a withdrawn one or one whose job was canceled ",[1029,1371,1372],{},"This link\nis no longer active",", and an address that is incomplete or unknown ",[1029,1375,1376],{},"This link does not work",".",[1039,1379,1381],{"id":1380},"what-a-link-can-do","What a link can do",[1383,1384,1385,1396],"table",{},[1386,1387,1388],"thead",{},[1389,1390,1391,1394],"tr",{},[1392,1393],"th",{},[1392,1395],{},[1397,1398,1399,1408,1420,1428,1436,1444,1455],"tbody",{},[1389,1400,1401,1405],{},[1402,1403,1404],"td",{},"One job",[1402,1406,1407],{},"A link opens exactly one job, and acts only while that job waits.",[1389,1409,1410,1413],{},[1402,1411,1412],{},"Expiry",[1402,1414,1415,1416,1419],{},"It expires with the job's park: an input's ",[1034,1417,1418],{},"expires",", or the attention's deadline (a week).",[1389,1421,1422,1425],{},[1402,1423,1424],{},"Revocation",[1402,1426,1427],{},"It stops working when the job finishes or is canceled.",[1389,1429,1430,1433],{},[1402,1431,1432],{},"No account",[1402,1434,1435],{},"Nothing about your organisation beyond its name is shown; no cookie is set.",[1389,1437,1438,1441],{},[1402,1439,1440],{},"Rate",[1402,1442,1443],{},"30 requests a minute per link.",[1389,1445,1446,1449],{},[1402,1447,1448],{},"Abort",[1402,1450,1451,1452,1454],{},"Only on a link you shared with ",[1029,1453,1277],{}," ticked; never on an input's link.",[1389,1456,1457,1460],{},[1402,1458,1459],{},"Permanent changes",[1402,1461,1462],{},"Never. A fix applied from the page affects this job only; making it permanent is an approval in your review queue.",[1025,1464,1465],{},"Pages are not indexed by search engines, send no referrer and are never cached. Every action taken\non one is recorded on the job.",[1039,1467,1469],{"id":1468},"worked-example","Worked example",[1025,1471,1472,1473,1476],{},"Take a customer portal at ",[1034,1474,1475],{},"https:\u002F\u002Fportal.example.com"," that signs in with an e-mail address and a\npassword, then asks for a six-digit code. This program asks for the code on a hosted page:",[1478,1479,1480],"code-group",{},[1079,1481,1486],{"className":1482,"code":1483,"filename":1484,"language":1485,"meta":1083,"style":1083},"language-ts shiki shiki-themes kaab-code kaab-code kaab-code","const definition = {\n  kaab: \"1\",\n  name,\n  inputs: { email: \"string\", password: \"secret\" },\n  options: { max_tier: \"browser\" },\n  steps: [\n    { goto: `${site}\u002Flogin`, expect: { visible: \"input[name=email]\" } },\n    { fill: \"input[name=email]\", value: \"{{inputs.email}}\" },\n    { fill: \"input[name=password]\", value: \"{{inputs.password}}\" },\n    { click: \"form button[type=submit]\", expect: { visible: \"input[name=code]\" } },\n    {\n      await_input: {\n        name: \"otp\",\n        prompt: \"The six-digit code we sent you\",\n        pattern: \"^[0-9]{6}$\",\n        collect: \"hosted\", \u002F\u002F a page at input_request.resolve_url collects it\n        hosted: { notify: \"none\" }, \u002F\u002F or { notify: \"email\", to: \"{{inputs.email}}\" }\n      },\n    },\n    { fill: \"input[name=code]\", value: \"{{vars.otp}}\" },\n    { click: \"form button[type=submit]\", expect: { url: \"**\u002Fdashboard\" } },\n    { extract: { heading: \"h1\" } },\n  ],\n};\nawait kaab.programs.create({ name, definition, publish: true });\n\nconst job = await kaab.jobs.create({\n  program: name,\n  inputs: { email: \"dev@kaab.ist\", password: \"secret\" },\n});\n\u002F\u002F Without an onInput handler, wait returns as soon as the job parks.\nconst parked = await kaab.jobs.wait(job.id, { timeoutMs: 120_000 });\nconsole.log(`${parked.id} is ${parked.status}: answer at ${parked.input_request?.resolve_url}`);\n","TypeScript","ts",[1034,1487,1488,1503,1515,1523,1554,1574,1585,1628,1652,1675,1703,1709,1719,1731,1744,1756,1772,1794,1802,1810,1832,1859,1879,1887,1893,1930,1937,1961,1974,2000,2006,2012,2053],{"__ignoreMap":1083},[1087,1489,1490,1493,1497,1500],{"class":1089,"line":1090},[1087,1491,1492],{"class":1097},"const",[1087,1494,1496],{"class":1495},"sHJIl"," definition",[1087,1498,1499],{"class":1097}," =",[1087,1501,1502],{"class":1093}," {\n",[1087,1504,1505,1508,1510,1513],{"class":1089,"line":1141},[1087,1506,1507],{"class":1093},"  kaab",[1087,1509,1102],{"class":1097},[1087,1511,1512],{"class":1113}," \"1\"",[1087,1514,1138],{"class":1101},[1087,1516,1518,1521],{"class":1089,"line":1517},3,[1087,1519,1520],{"class":1093},"  name",[1087,1522,1138],{"class":1101},[1087,1524,1526,1529,1531,1534,1536,1539,1541,1544,1546,1549,1552],{"class":1089,"line":1525},4,[1087,1527,1528],{"class":1093},"  inputs",[1087,1530,1102],{"class":1097},[1087,1532,1533],{"class":1093}," { email",[1087,1535,1102],{"class":1097},[1087,1537,1538],{"class":1113}," \"string\"",[1087,1540,1117],{"class":1101},[1087,1542,1543],{"class":1093}," password",[1087,1545,1102],{"class":1097},[1087,1547,1548],{"class":1113}," \"secret\"",[1087,1550,1551],{"class":1093}," }",[1087,1553,1138],{"class":1101},[1087,1555,1557,1560,1562,1565,1567,1570,1572],{"class":1089,"line":1556},5,[1087,1558,1559],{"class":1093},"  options",[1087,1561,1102],{"class":1097},[1087,1563,1564],{"class":1093}," { max_tier",[1087,1566,1102],{"class":1097},[1087,1568,1569],{"class":1113}," \"browser\"",[1087,1571,1551],{"class":1093},[1087,1573,1138],{"class":1101},[1087,1575,1577,1580,1582],{"class":1089,"line":1576},6,[1087,1578,1579],{"class":1093},"  steps",[1087,1581,1102],{"class":1097},[1087,1583,1584],{"class":1093}," [\n",[1087,1586,1588,1591,1593,1596,1599,1602,1605,1608,1610,1613,1615,1618,1620,1623,1626],{"class":1089,"line":1587},7,[1087,1589,1590],{"class":1093},"    { goto",[1087,1592,1102],{"class":1097},[1087,1594,1595],{"class":1113}," `",[1087,1597,1598],{"class":1097},"${",[1087,1600,1601],{"class":1093},"site",[1087,1603,1604],{"class":1097},"}",[1087,1606,1607],{"class":1113},"\u002Flogin`",[1087,1609,1117],{"class":1101},[1087,1611,1612],{"class":1093}," expect",[1087,1614,1102],{"class":1097},[1087,1616,1617],{"class":1093}," { visible",[1087,1619,1102],{"class":1097},[1087,1621,1622],{"class":1113}," \"input[name=email]\"",[1087,1624,1625],{"class":1093}," } }",[1087,1627,1138],{"class":1101},[1087,1629,1631,1634,1636,1638,1640,1643,1645,1648,1650],{"class":1089,"line":1630},8,[1087,1632,1633],{"class":1093},"    { fill",[1087,1635,1102],{"class":1097},[1087,1637,1622],{"class":1113},[1087,1639,1117],{"class":1101},[1087,1641,1642],{"class":1093}," value",[1087,1644,1102],{"class":1097},[1087,1646,1647],{"class":1113}," \"{{inputs.email}}\"",[1087,1649,1551],{"class":1093},[1087,1651,1138],{"class":1101},[1087,1653,1655,1657,1659,1662,1664,1666,1668,1671,1673],{"class":1089,"line":1654},9,[1087,1656,1633],{"class":1093},[1087,1658,1102],{"class":1097},[1087,1660,1661],{"class":1113}," \"input[name=password]\"",[1087,1663,1117],{"class":1101},[1087,1665,1642],{"class":1093},[1087,1667,1102],{"class":1097},[1087,1669,1670],{"class":1113}," \"{{inputs.password}}\"",[1087,1672,1551],{"class":1093},[1087,1674,1138],{"class":1101},[1087,1676,1678,1681,1683,1686,1688,1690,1692,1694,1696,1699,1701],{"class":1089,"line":1677},10,[1087,1679,1680],{"class":1093},"    { click",[1087,1682,1102],{"class":1097},[1087,1684,1685],{"class":1113}," \"form button[type=submit]\"",[1087,1687,1117],{"class":1101},[1087,1689,1612],{"class":1093},[1087,1691,1102],{"class":1097},[1087,1693,1617],{"class":1093},[1087,1695,1102],{"class":1097},[1087,1697,1698],{"class":1113}," \"input[name=code]\"",[1087,1700,1625],{"class":1093},[1087,1702,1138],{"class":1101},[1087,1704,1706],{"class":1089,"line":1705},11,[1087,1707,1708],{"class":1093},"    {\n",[1087,1710,1712,1715,1717],{"class":1089,"line":1711},12,[1087,1713,1714],{"class":1093},"      await_input",[1087,1716,1102],{"class":1097},[1087,1718,1502],{"class":1093},[1087,1720,1722,1725,1727,1729],{"class":1089,"line":1721},13,[1087,1723,1724],{"class":1093},"        name",[1087,1726,1102],{"class":1097},[1087,1728,1114],{"class":1113},[1087,1730,1138],{"class":1101},[1087,1732,1734,1737,1739,1742],{"class":1089,"line":1733},14,[1087,1735,1736],{"class":1093},"        prompt",[1087,1738,1102],{"class":1097},[1087,1740,1741],{"class":1113}," \"The six-digit code we sent you\"",[1087,1743,1138],{"class":1101},[1087,1745,1747,1750,1752,1754],{"class":1089,"line":1746},15,[1087,1748,1749],{"class":1093},"        pattern",[1087,1751,1102],{"class":1097},[1087,1753,1135],{"class":1113},[1087,1755,1138],{"class":1101},[1087,1757,1759,1762,1764,1766,1768],{"class":1089,"line":1758},16,[1087,1760,1761],{"class":1093},"        collect",[1087,1763,1102],{"class":1097},[1087,1765,1149],{"class":1113},[1087,1767,1117],{"class":1101},[1087,1769,1771],{"class":1770},"sKog0"," \u002F\u002F a page at input_request.resolve_url collects it\n",[1087,1773,1775,1778,1780,1783,1785,1787,1789,1791],{"class":1089,"line":1774},17,[1087,1776,1777],{"class":1093},"        hosted",[1087,1779,1102],{"class":1097},[1087,1781,1782],{"class":1093}," { notify",[1087,1784,1102],{"class":1097},[1087,1786,1165],{"class":1113},[1087,1788,1551],{"class":1093},[1087,1790,1117],{"class":1101},[1087,1792,1793],{"class":1770}," \u002F\u002F or { notify: \"email\", to: \"{{inputs.email}}\" }\n",[1087,1795,1797,1800],{"class":1089,"line":1796},18,[1087,1798,1799],{"class":1093},"      }",[1087,1801,1138],{"class":1101},[1087,1803,1805,1808],{"class":1089,"line":1804},19,[1087,1806,1807],{"class":1093},"    }",[1087,1809,1138],{"class":1101},[1087,1811,1813,1815,1817,1819,1821,1823,1825,1828,1830],{"class":1089,"line":1812},20,[1087,1814,1633],{"class":1093},[1087,1816,1102],{"class":1097},[1087,1818,1698],{"class":1113},[1087,1820,1117],{"class":1101},[1087,1822,1642],{"class":1093},[1087,1824,1102],{"class":1097},[1087,1826,1827],{"class":1113}," \"{{vars.otp}}\"",[1087,1829,1551],{"class":1093},[1087,1831,1138],{"class":1101},[1087,1833,1835,1837,1839,1841,1843,1845,1847,1850,1852,1855,1857],{"class":1089,"line":1834},21,[1087,1836,1680],{"class":1093},[1087,1838,1102],{"class":1097},[1087,1840,1685],{"class":1113},[1087,1842,1117],{"class":1101},[1087,1844,1612],{"class":1093},[1087,1846,1102],{"class":1097},[1087,1848,1849],{"class":1093}," { url",[1087,1851,1102],{"class":1097},[1087,1853,1854],{"class":1113}," \"**\u002Fdashboard\"",[1087,1856,1625],{"class":1093},[1087,1858,1138],{"class":1101},[1087,1860,1862,1865,1867,1870,1872,1875,1877],{"class":1089,"line":1861},22,[1087,1863,1864],{"class":1093},"    { extract",[1087,1866,1102],{"class":1097},[1087,1868,1869],{"class":1093}," { heading",[1087,1871,1102],{"class":1097},[1087,1873,1874],{"class":1113}," \"h1\"",[1087,1876,1625],{"class":1093},[1087,1878,1138],{"class":1101},[1087,1880,1882,1885],{"class":1089,"line":1881},23,[1087,1883,1884],{"class":1093},"  ]",[1087,1886,1138],{"class":1101},[1087,1888,1890],{"class":1089,"line":1889},24,[1087,1891,1892],{"class":1093},"};\n",[1087,1894,1896,1899,1902,1905,1907,1910,1913,1915,1917,1919,1922,1924,1927],{"class":1089,"line":1895},25,[1087,1897,1898],{"class":1097},"await",[1087,1900,1901],{"class":1495}," kaab",[1087,1903,1377],{"class":1904},"sJugJ",[1087,1906,224],{"class":1495},[1087,1908,1909],{"class":1904},".create",[1087,1911,1912],{"class":1093},"({ name",[1087,1914,1117],{"class":1101},[1087,1916,1496],{"class":1093},[1087,1918,1117],{"class":1101},[1087,1920,1921],{"class":1093}," publish",[1087,1923,1102],{"class":1097},[1087,1925,1926],{"class":1495}," true",[1087,1928,1929],{"class":1093}," });\n",[1087,1931,1933],{"class":1089,"line":1932},26,[1087,1934,1936],{"emptyLinePlaceholder":1935},true,"\n",[1087,1938,1940,1942,1945,1947,1950,1952,1954,1956,1958],{"class":1089,"line":1939},27,[1087,1941,1492],{"class":1097},[1087,1943,1944],{"class":1495}," job",[1087,1946,1499],{"class":1097},[1087,1948,1949],{"class":1097}," await",[1087,1951,1901],{"class":1495},[1087,1953,1377],{"class":1904},[1087,1955,171],{"class":1495},[1087,1957,1909],{"class":1904},[1087,1959,1960],{"class":1093},"({\n",[1087,1962,1964,1967,1969,1972],{"class":1089,"line":1963},28,[1087,1965,1966],{"class":1093},"  program",[1087,1968,1102],{"class":1097},[1087,1970,1971],{"class":1093}," name",[1087,1973,1138],{"class":1101},[1087,1975,1977,1979,1981,1983,1985,1988,1990,1992,1994,1996,1998],{"class":1089,"line":1976},29,[1087,1978,1528],{"class":1093},[1087,1980,1102],{"class":1097},[1087,1982,1533],{"class":1093},[1087,1984,1102],{"class":1097},[1087,1986,1987],{"class":1113}," \"dev@kaab.ist\"",[1087,1989,1117],{"class":1101},[1087,1991,1543],{"class":1093},[1087,1993,1102],{"class":1097},[1087,1995,1548],{"class":1113},[1087,1997,1551],{"class":1093},[1087,1999,1138],{"class":1101},[1087,2001,2003],{"class":1089,"line":2002},30,[1087,2004,2005],{"class":1093},"});\n",[1087,2007,2009],{"class":1089,"line":2008},31,[1087,2010,2011],{"class":1770},"\u002F\u002F Without an onInput handler, wait returns as soon as the job parks.\n",[1087,2013,2015,2017,2020,2022,2024,2026,2028,2030,2033,2036,2038,2041,2043,2046,2048,2051],{"class":1089,"line":2014},32,[1087,2016,1492],{"class":1097},[1087,2018,2019],{"class":1495}," parked",[1087,2021,1499],{"class":1097},[1087,2023,1949],{"class":1097},[1087,2025,1901],{"class":1495},[1087,2027,1377],{"class":1904},[1087,2029,171],{"class":1495},[1087,2031,2032],{"class":1904},".wait",[1087,2034,2035],{"class":1093},"(",[1087,2037,478],{"class":1495},[1087,2039,2040],{"class":1093},".id",[1087,2042,1117],{"class":1101},[1087,2044,2045],{"class":1093}," { timeoutMs",[1087,2047,1102],{"class":1097},[1087,2049,2050],{"class":1495}," 120_000",[1087,2052,1929],{"class":1093},[1087,2054,2056,2059,2062,2064,2067,2069,2072,2074,2076,2079,2081,2083,2086,2088,2091,2093,2095,2097,2100,2103,2105,2107],{"class":1089,"line":2055},33,[1087,2057,2058],{"class":1495},"console",[1087,2060,2061],{"class":1904},".log",[1087,2063,2035],{"class":1093},[1087,2065,2066],{"class":1113},"`",[1087,2068,1598],{"class":1097},[1087,2070,2071],{"class":1495},"parked",[1087,2073,2040],{"class":1093},[1087,2075,1604],{"class":1097},[1087,2077,2078],{"class":1113}," is ",[1087,2080,1598],{"class":1097},[1087,2082,2071],{"class":1495},[1087,2084,2085],{"class":1093},".status",[1087,2087,1604],{"class":1097},[1087,2089,2090],{"class":1113},": answer at ",[1087,2092,1598],{"class":1097},[1087,2094,2071],{"class":1495},[1087,2096,1377],{"class":1093},[1087,2098,2099],{"class":1495},"input_request",[1087,2101,2102],{"class":1093},"?.resolve_url",[1087,2104,1604],{"class":1097},[1087,2106,2066],{"class":1113},[1087,2108,2109],{"class":1093},");\n",[2111,2112,2113,2120,2130,2139],"ol",{},[2114,2115,2116,2117,1377],"li",{},"Create the job with ",[1034,2118,2119],{},"inputs: { \"email\": \"dev@kaab.ist\", \"password\": \"\u003Cthe account password>\" }",[2114,2121,2122,2123,2126,2127,2129],{},"It signs in and parks ",[1034,2124,2125],{},"awaiting_input",". ",[1034,2128,1228],{}," is set; the snippet prints it.",[2114,2131,2132,2133,2136,2137,1377],{},"Open the link in a private window: the page names your organisation and asks for \"The six-digit\ncode we sent you\". Type the code the site sent, for example ",[1034,2134,2135],{},"482913",", and press ",[1029,2138,1317],{},[2114,2140,2141,2142,2144,2145,2147,2148,2151,2152,1377],{},"The page says ",[1029,2143,1360],{},", then ",[1029,2146,1364],{},"; the job is ",[1034,2149,2150],{},"succeeded",", with\nthe dashboard's heading in ",[1034,2153,2154],{},"data.heading",[1039,2156,2158],{"id":2157},"pitfalls","Pitfalls",[2160,2161,2162,2168,2174,2187],"ul",{},[2114,2163,2164,2167],{},[1029,2165,2166],{},"The link is a credential."," Whoever holds it can act on that job. Send it only to the person\nmeant to answer, over a channel you trust, and never log it.",[2114,2169,2170,2173],{},[1029,2171,2172],{},"Answering twice."," Once a value is accepted, the page moves on; a second submission is refused\nbecause the job is no longer waiting.",[2114,2175,2176,2179,2180,2182,2183,2186],{},[1029,2177,2178],{},"Deadlines."," An input's ",[1034,2181,1418],{}," is at most 7 days. Choose one that matches how quickly your\nusers react; the browser itself is kept open only for the step's ",[1034,2184,2185],{},"ttl"," (at most 15 minutes), and\na later answer resumes from the last checkpoint.",[2114,2188,2189,2192],{},[1029,2190,2191],{},"Expecting the page to change the program."," Applying a fix from a hosted page never publishes\nanything. Review the proposal in the panel if it should apply to every job.",[1039,2194,155],{"id":2195},"reference",[2160,2197,2198,2208,2225,2236],{},[2114,2199,2200,2205,2206],{},[1062,2201,2203],{"href":2202},"\u002Freference\u002Fdsl\u002Factions\u002Fawait-input",[1034,2204,592],{}," and lint ",[1062,2207,823],{"href":1255},[2114,2209,2210,1032,2214,2216,2217,2220,2221],{},[1062,2211,2213],{"href":2212},"\u002Freference\u002Fapi\u002Fjobs\u002Fget-job","Get a job",[1034,2215,2099],{},", ",[1034,2218,2219],{},"attention","), the\n",[1062,2222,2224],{"href":2223},"\u002Freference\u002Fapi\u002Fschemas\u002Fjob","job schema",[2114,2226,2227,2230,2231,2216,2233],{},[1062,2228,838],{"href":2229},"\u002Freference\u002Fevents",": ",[1034,2232,1224],{},[1034,2234,2235],{},"job.needs_attention",[2114,2237,2238,2239,2243,2244],{},"Concepts: ",[1062,2240,2242],{"href":2241},"\u002Fconcepts\u002Fhuman-in-the-loop","human in the loop","; panel: ",[1062,2245,147],{"href":1068},[2247,2248,2249],"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 .sQm2-, html code.shiki .sQm2-{--shiki-light:var(--kaab-code-token-punctuation);--shiki-default:var(--kaab-code-token-punctuation);--shiki-dark:var(--kaab-code-token-punctuation)}html pre.shiki code .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 .sHJIl, html code.shiki .sHJIl{--shiki-light:var(--kaab-code-token-constant);--shiki-default:var(--kaab-code-token-constant);--shiki-dark:var(--kaab-code-token-constant)}html pre.shiki code .sKog0, html code.shiki .sKog0{--shiki-light:var(--kaab-code-token-comment);--shiki-default:var(--kaab-code-token-comment);--shiki-dark:var(--kaab-code-token-comment)}html pre.shiki code .sJugJ, html code.shiki .sJugJ{--shiki-light:var(--kaab-code-token-function);--shiki-default:var(--kaab-code-token-function);--shiki-dark:var(--kaab-code-token-function)}",{"title":1083,"searchDepth":1517,"depth":1517,"links":2251},[2252,2253,2254,2255,2256,2257,2258,2259],{"id":1041,"depth":1141,"text":1042},{"id":1073,"depth":1141,"text":1074},{"id":1262,"depth":1141,"text":1263},{"id":1292,"depth":1141,"text":1293},{"id":1380,"depth":1141,"text":1381},{"id":1468,"depth":1141,"text":1469},{"id":2157,"depth":1141,"text":2158},{"id":2195,"depth":1141,"text":155},false,null,"Let your own end users finish a parked job on a page with no account: type a one-time code, apply a fix, or take over.","md",{},"\u002Fguides\u002Fhosted-resolve",{"title":92,"description":2262},"3.guides\u002F02.hosted-resolve","XfARVJnQgTsx7j1W7Yb1cPZP2OpbqEioULuLVJ5bsKM",[2270,2273],{"title":89,"path":1064,"stem":2271,"description":2272,"children":-1},"3.guides\u002F01.authenticated-flows","Sign in with a password and a one-time code, save the session, and let the next job start already signed in.",{"title":95,"path":2274,"stem":2275,"description":2276,"children":-1},"\u002Fguides\u002Flists-and-pagination","3.guides\u002F03.lists-and-pagination","Extract lists of objects, follow \"next\" links across pages, and load infinite lists by scrolling, with bounds lint can check.",1793593415622]