[{"data":1,"prerenderedAt":1040},["ShallowReactive",2],{"guide-partner-arming-experience":3},{"id":4,"title":5,"body":6,"description":1030,"extension":1031,"meta":1032,"navigation":269,"path":1036,"seo":1037,"stem":1038,"__hash__":1039},"content/guides/partners/arming-experience.md","The Arming Experience",{"type":7,"value":8,"toc":1001},"minimal",[9,13,22,34,39,46,62,66,71,190,194,197,202,216,221,232,237,313,318,335,338,342,356,360,366,371,473,477,494,498,501,591,594,597,601,616,620,641,645,659,663,677,681,685,756,760,827,831,835,841,845,851,855,861,865,868,900,904,943,954,958,969,974,997],[10,11,5],"h1",{"id":12},"the-arming-experience",[14,15,16,17,21],"p",{},"Defining how arming works is not just a technical step—",[18,19,20],"strong",{},"it's an operational agreement",". This section outlines the boundaries of authority between CHeKT and your platform.",[23,24,26,31],"alert",{"type":25},"warning",[14,27,28],{},[18,29,30],{},"Operational Contract",[14,32,33],{},"This page defines operational contracts that cannot be changed after deployment. Read carefully and consult with your integration team before proceeding.",[35,36,38],"h2",{"id":37},"understanding-arming-authority","Understanding Arming Authority",[14,40,41,42,45],{},"The Arming Experience determines ",[18,43,44],{},"who has control"," over the armed/disarmed state of a security system. This is not a technical preference—it's a fundamental architectural decision that defines:",[47,48,49,53,56,59],"ul",{},[50,51,52],"li",{},"Who owns the arming state",[50,54,55],{},"Where users go to arm/disarm",[50,57,58],{},"How state synchronization works",[50,60,61],{},"What happens during failures",[35,63,65],{"id":64},"two-arming-models","Two Arming Models",[67,68,70],"h3",{"id":69},"comparison-table","Comparison Table",[72,73,74,96],"table",{},[75,76,77],"thead",{},[78,79,80,86,91],"tr",{},[81,82,83],"th",{},[18,84,85],{},"Category",[81,87,88],{},[18,89,90],{},"Partner-Triggered Arming",[81,92,93],{},[18,94,95],{},"CHeKT-Triggered Arming",[97,98,99,113,126,139,152,165,177],"tbody",{},[78,100,101,107,110],{},[102,103,104],"td",{},[18,105,106],{},"Authority",[102,108,109],{},"Partner Platform",[102,111,112],{},"CHeKT Cloud / Mobile App",[78,114,115,120,123],{},[102,116,117],{},[18,118,119],{},"Use Case",[102,121,122],{},"Physical Panel Pairing",[102,124,125],{},"Virtual Panel / Cloud Schedules",[78,127,128,133,136],{},[102,129,130],{},[18,131,132],{},"Responsibility",[102,134,135],{},"Partner owns the Arming State",[102,137,138],{},"CHeKT manages the Arming State",[78,140,141,146,149],{},[102,142,143],{},[18,144,145],{},"Sync Method",[102,147,148],{},"Real-time State Sync API",[102,150,151],{},"Internal Logic & Schedules",[78,153,154,159,162],{},[102,155,156],{},[18,157,158],{},"User Interface",[102,160,161],{},"Partner's App/Panel",[102,163,164],{},"CHeKT Mobile App",[78,166,167,172,174],{},[102,168,169],{},[18,170,171],{},"Scheduling",[102,173,109],{},[102,175,176],{},"CHeKT Cloud",[78,178,179,184,187],{},[102,180,181],{},[18,182,183],{},"State Source",[102,185,186],{},"Partner → CHeKT",[102,188,189],{},"CHeKT → Partner",[35,191,193],{"id":192},"model-details","Model Details",[67,195,90],{"id":196},"partner-triggered-arming",[14,198,199],{},[18,200,201],{},"When to Choose:",[47,203,204,207,210,213],{},[50,205,206],{},"You have physical security panels users interact with",[50,208,209],{},"Your platform has an existing arming interface",[50,211,212],{},"You want full control over arming logic and user experience",[50,214,215],{},"Your users expect to arm/disarm through your app",[14,217,218],{},[18,219,220],{},"Technical Flow:",[222,223,228],"pre",{"className":224,"code":226,"language":227},[225],"language-text","User → Partner Panel/App → Partner Platform → CHeKT API\n","text",[229,230,226],"code",{"__ignoreMap":231},"",[14,233,234],{},[18,235,236],{},"API Requirements:",[222,238,242],{"className":239,"code":240,"language":241,"meta":231,"style":231},"language-http shiki shiki-themes github-light github-dark","POST /v1/sites/{site_id}/arming-state\nContent-Type: application/json\nAuthorization: Bearer PARTNER_M2M_TOKEN\n\n{\n  \"state\": \"armed_away\",\n  \"partition\": \"all\",\n  \"timestamp\": \"2024-01-15T10:30:00Z\",\n  \"user_id\": \"user_123\",\n  \"source\": \"keypad\"\n}\n","http",[229,243,244,252,258,264,271,277,283,289,295,301,307],{"__ignoreMap":231},[245,246,249],"span",{"class":247,"line":248},"line",1,[245,250,251],{},"POST /v1/sites/{site_id}/arming-state\n",[245,253,255],{"class":247,"line":254},2,[245,256,257],{},"Content-Type: application/json\n",[245,259,261],{"class":247,"line":260},3,[245,262,263],{},"Authorization: Bearer PARTNER_M2M_TOKEN\n",[245,265,267],{"class":247,"line":266},4,[245,268,270],{"emptyLinePlaceholder":269},true,"\n",[245,272,274],{"class":247,"line":273},5,[245,275,276],{},"{\n",[245,278,280],{"class":247,"line":279},6,[245,281,282],{},"  \"state\": \"armed_away\",\n",[245,284,286],{"class":247,"line":285},7,[245,287,288],{},"  \"partition\": \"all\",\n",[245,290,292],{"class":247,"line":291},8,[245,293,294],{},"  \"timestamp\": \"2024-01-15T10:30:00Z\",\n",[245,296,298],{"class":247,"line":297},9,[245,299,300],{},"  \"user_id\": \"user_123\",\n",[245,302,304],{"class":247,"line":303},10,[245,305,306],{},"  \"source\": \"keypad\"\n",[245,308,310],{"class":247,"line":309},11,[245,311,312],{},"}\n",[14,314,315],{},[18,316,317],{},"Responsibilities:",[47,319,320,323,326,329,332],{},[50,321,322],{},"✅ Implement real-time state sync within 5 seconds",[50,324,325],{},"✅ Handle all user-initiated arming/disarming",[50,327,328],{},"✅ Manage entry/exit delays",[50,330,331],{},"✅ Send accurate timestamps",[50,333,334],{},"✅ Handle sync failures and retries",[67,336,95],{"id":337},"chekt-triggered-arming",[14,339,340],{},[18,341,201],{},[47,343,344,347,350,353],{},[50,345,346],{},"You're building a cloud-first integration without physical panels",[50,348,349],{},"You want CHeKT to handle the entire arming experience",[50,351,352],{},"Your users will use CHeKT's mobile app for arming",[50,354,355],{},"You want automated scheduling managed by CHeKT",[14,357,358],{},[18,359,220],{},[222,361,364],{"className":362,"code":363,"language":227},[225],"User → CHeKT Mobile App → CHeKT Cloud → Partner Webhook\n",[229,365,363],{"__ignoreMap":231},[14,367,368],{},[18,369,370],{},"Webhook Events:",[222,372,376],{"className":373,"code":374,"language":375,"meta":231,"style":231},"language-json shiki shiki-themes github-light github-dark","{\n  \"event_type\": \"arming.state_changed\",\n  \"site_id\": \"site_123\",\n  \"new_state\": \"armed_away\",\n  \"previous_state\": \"disarmed\",\n  \"timestamp\": \"2024-01-15T10:30:00Z\",\n  \"triggered_by\": \"user_123\",\n  \"source\": \"mobile_app\"\n}\n","json",[229,377,378,383,399,411,423,435,447,459,469],{"__ignoreMap":231},[245,379,380],{"class":247,"line":248},[245,381,276],{"class":382},"sVt8B",[245,384,385,389,392,396],{"class":247,"line":254},[245,386,388],{"class":387},"sj4cs","  \"event_type\"",[245,390,391],{"class":382},": ",[245,393,395],{"class":394},"sZZnC","\"arming.state_changed\"",[245,397,398],{"class":382},",\n",[245,400,401,404,406,409],{"class":247,"line":260},[245,402,403],{"class":387},"  \"site_id\"",[245,405,391],{"class":382},[245,407,408],{"class":394},"\"site_123\"",[245,410,398],{"class":382},[245,412,413,416,418,421],{"class":247,"line":266},[245,414,415],{"class":387},"  \"new_state\"",[245,417,391],{"class":382},[245,419,420],{"class":394},"\"armed_away\"",[245,422,398],{"class":382},[245,424,425,428,430,433],{"class":247,"line":273},[245,426,427],{"class":387},"  \"previous_state\"",[245,429,391],{"class":382},[245,431,432],{"class":394},"\"disarmed\"",[245,434,398],{"class":382},[245,436,437,440,442,445],{"class":247,"line":279},[245,438,439],{"class":387},"  \"timestamp\"",[245,441,391],{"class":382},[245,443,444],{"class":394},"\"2024-01-15T10:30:00Z\"",[245,446,398],{"class":382},[245,448,449,452,454,457],{"class":247,"line":285},[245,450,451],{"class":387},"  \"triggered_by\"",[245,453,391],{"class":382},[245,455,456],{"class":394},"\"user_123\"",[245,458,398],{"class":382},[245,460,461,464,466],{"class":247,"line":291},[245,462,463],{"class":387},"  \"source\"",[245,465,391],{"class":382},[245,467,468],{"class":394},"\"mobile_app\"\n",[245,470,471],{"class":247,"line":297},[245,472,312],{"class":382},[14,474,475],{},[18,476,317],{},[47,478,479,482,485,488,491],{},[50,480,481],{},"✅ Implement webhook endpoints for arming events",[50,483,484],{},"✅ Update your system state based on CHeKT events",[50,486,487],{},"✅ Handle webhook retries and failures",[50,489,490],{},"✅ Verify webhook signatures",[50,492,493],{},"✅ Respond to arming commands from CHeKT",[35,495,497],{"id":496},"decision-matrix","Decision Matrix",[14,499,500],{},"Use this matrix to determine which model fits your integration:",[72,502,503,522],{},[75,504,505],{},[78,506,507,512,517],{},[81,508,509],{},[18,510,511],{},"Question",[81,513,514],{},[18,515,516],{},"Partner-Triggered",[81,518,519],{},[18,520,521],{},"CHeKT-Triggered",[97,523,524,535,544,553,562,571,581],{},[78,525,526,529,532],{},[102,527,528],{},"Do you have physical panels?",[102,530,531],{},"✅ Yes",[102,533,534],{},"❌ No",[78,536,537,540,542],{},[102,538,539],{},"Do users need to arm via your app?",[102,541,531],{},[102,543,534],{},[78,545,546,549,551],{},[102,547,548],{},"Do you want to control arming logic?",[102,550,531],{},[102,552,534],{},[78,554,555,558,560],{},[102,556,557],{},"Is this a cloud-first integration?",[102,559,534],{},[102,561,531],{},[78,563,564,567,569],{},[102,565,566],{},"Should CHeKT handle scheduling?",[102,568,534],{},[102,570,531],{},[78,572,573,576,578],{},[102,574,575],{},"Do you have entry/exit delays?",[102,577,531],{},[102,579,580],{},"✅ Yes (both support)",[78,582,583,586,588],{},[102,584,585],{},"Need custom arming modes?",[102,587,531],{},[102,589,590],{},"Limited",[35,592,30],{"id":593},"operational-contract",[14,595,596],{},"By implementing either model, you agree to:",[67,598,600],{"id":599},"_1-consistency","1. Consistency",[47,602,603,610,613],{},[50,604,605,606,609],{},"Once chosen, the arming model ",[18,607,608],{},"cannot be changed"," without re-certification",[50,611,612],{},"All sites under your partnership must use the same model",[50,614,615],{},"Mixing models is strictly prohibited",[67,617,619],{"id":618},"_2-reliability","2. Reliability",[47,621,622,629,635,638],{},[50,623,624,625,628],{},"Arming state must be ",[18,626,627],{},"accurate"," at all times",[50,630,631,632],{},"State changes must be reflected within ",[18,633,634],{},"5 seconds",[50,636,637],{},"Failed syncs must trigger operational alerts",[50,639,640],{},"99.9% uptime SLA for arming APIs",[67,642,644],{"id":643},"_3-security","3. Security",[47,646,647,650,653,656],{},[50,648,649],{},"User attribution must be preserved for all arming events",[50,651,652],{},"Audit trails must be maintained",[50,654,655],{},"Invalid state transitions must be rejected",[50,657,658],{},"Security events cannot be lost or delayed",[67,660,662],{"id":661},"_4-user-experience","4. User Experience",[47,664,665,668,671,674],{},[50,666,667],{},"Entry/exit delays must match panel configuration",[50,669,670],{},"Arming failures must provide actionable feedback",[50,672,673],{},"Users must have a clear, reliable way to arm/disarm",[50,675,676],{},"Unexpected state changes must be explained",[35,678,680],{"id":679},"implementation-checklist","Implementation Checklist",[67,682,684],{"id":683},"for-partner-triggered-arming","For Partner-Triggered Arming",[47,686,689,702,708,714,720,726,732,738,744,750],{"className":687},[688],"contains-task-list",[50,690,693,697,698,701],{"className":691},[692],"task-list-item",[694,695],"input",{"disabled":269,"type":696},"checkbox"," Implement ",[229,699,700],{},"/v1/sites/{id}/arming-state"," API endpoint",[50,703,705,707],{"className":704},[692],[694,706],{"disabled":269,"type":696}," Handle all arming state changes from your platform",[50,709,711,713],{"className":710},[692],[694,712],{"disabled":269,"type":696}," Send state updates within 5 seconds of user action",[50,715,717,719],{"className":716},[692],[694,718],{"disabled":269,"type":696}," Implement exponential backoff for failed syncs",[50,721,723,725],{"className":722},[692],[694,724],{"disabled":269,"type":696}," Test partition-specific arming scenarios",[50,727,729,731],{"className":728},[692],[694,730],{"disabled":269,"type":696}," Verify timestamp accuracy (must be UTC)",[50,733,735,737],{"className":734},[692],[694,736],{"disabled":269,"type":696}," Handle entry/exit delays correctly",[50,739,741,743],{"className":740},[692],[694,742],{"disabled":269,"type":696}," Test open zone failures",[50,745,747,749],{"className":746},[692],[694,748],{"disabled":269,"type":696}," Implement retry logic for network failures",[50,751,753,755],{"className":752},[692],[694,754],{"disabled":269,"type":696}," Add operational monitoring and alerting",[67,757,759],{"id":758},"for-chekt-triggered-arming","For CHeKT-Triggered Arming",[47,761,763,769,775,785,791,797,803,809,815,821],{"className":762},[688],[50,764,766,768],{"className":765},[692],[694,767],{"disabled":269,"type":696}," Configure webhook endpoints to receive arming events",[50,770,772,774],{"className":771},[692],[694,773],{"disabled":269,"type":696}," Implement webhook signature verification",[50,776,778,780,781,784],{"className":777},[692],[694,779],{"disabled":269,"type":696}," Handle ",[229,782,783],{},"arming.state_changed"," event types",[50,786,788,790],{"className":787},[692],[694,789],{"disabled":269,"type":696}," Update your system state based on CHeKT events",[50,792,794,796],{"className":793},[692],[694,795],{"disabled":269,"type":696}," Test scheduled arming/disarming scenarios",[50,798,800,802],{"className":799},[692],[694,801],{"disabled":269,"type":696}," Verify event delivery and retry logic",[50,804,806,808],{"className":805},[692],[694,807],{"disabled":269,"type":696}," Handle webhook delivery failures gracefully",[50,810,812,814],{"className":811},[692],[694,813],{"disabled":269,"type":696}," Implement idempotency for duplicate events",[50,816,818,820],{"className":817},[692],[694,819],{"disabled":269,"type":696}," Test arming via CHeKT mobile app",[50,822,824,826],{"className":823},[692],[694,825],{"disabled":269,"type":696}," Add webhook monitoring and alerting",[35,828,830],{"id":829},"common-scenarios","Common Scenarios",[67,832,834],{"id":833},"scenario-1-arm-failure-open-zone","Scenario 1: Arm Failure (Open Zone)",[222,836,839],{"className":837,"code":838,"language":227},[225],"1. User attempts to arm system\n2. Partner detects Zone 5 (Back Door) is open\n3. Partner sends ARM_FAILURE event to CHeKT\n4. CHeKT notifies user: \"Cannot arm - Back Door is open\"\n5. System remains disarmed\n",[229,840,838],{"__ignoreMap":231},[67,842,844],{"id":843},"scenario-2-successful-arm-away","Scenario 2: Successful Arm Away",[222,846,849],{"className":847,"code":848,"language":227},[225],"1. User initiates Arm Away\n2. Exit delay starts (60 seconds)\n3. Partner sends ARMING_IN_PROGRESS to CHeKT\n4. User exits building\n5. Exit delay completes\n6. Partner sends ARMED_AWAY to CHeKT\n7. CHeKT confirms and updates monitoring status\n",[229,850,848],{"__ignoreMap":231},[67,852,854],{"id":853},"scenario-3-disarm-during-entry-delay","Scenario 3: Disarm During Entry Delay",[222,856,859],{"className":857,"code":858,"language":227},[225],"1. System is ARMED_AWAY\n2. Front door opens → Entry delay starts (30 seconds)\n3. Partner sends ENTRY_DELAY to CHeKT\n4. User enters code at panel\n5. Partner sends DISARMED to CHeKT\n6. CHeKT cancels alarm countdown\n",[229,860,858],{"__ignoreMap":231},[35,862,864],{"id":863},"testing-requirements","Testing Requirements",[14,866,867],{},"Before production deployment, you must test:",[47,869,870,873,876,879,882,885,888,891,894,897],{},[50,871,872],{},"All arming mode transitions (Away, Stay, Night, Disarmed)",[50,874,875],{},"Entry and exit delay scenarios",[50,877,878],{},"Open zone arm failures",[50,880,881],{},"User code validation",[50,883,884],{},"Network failure recovery",[50,886,887],{},"State synchronization edge cases",[50,889,890],{},"Webhook retry logic (for CHeKT-Triggered)",[50,892,893],{},"API retry logic (for Partner-Triggered)",[50,895,896],{},"Timestamp accuracy across time zones",[50,898,899],{},"Concurrent arming/disarming requests",[35,901,903],{"id":902},"certification-process","Certification Process",[905,906,907,913,919,925,931,937],"ol",{},[50,908,909,912],{},[18,910,911],{},"Model Selection",": Choose your arming model",[50,914,915,918],{},[18,916,917],{},"Implementation",": Build according to specifications",[50,920,921,924],{},[18,922,923],{},"Testing",": Complete all test scenarios",[50,926,927,930],{},[18,928,929],{},"Review",": Schedule technical review with CHeKT",[50,932,933,936],{},[18,934,935],{},"Certification",": Pass certification requirements",[50,938,939,942],{},[18,940,941],{},"Production",": Deploy to production",[23,944,946,951],{"type":945},"error",[14,947,948],{},[18,949,950],{},"Cannot Mix Models",[14,952,953],{},"A site cannot use both arming models simultaneously. Attempting to do so will result in undefined behavior and certification failure.",[35,955,957],{"id":956},"support-and-next-steps","Support and Next Steps",[23,959,961,966],{"type":960},"info",[14,962,963],{},[18,964,965],{},"Need Help Choosing?",[14,967,968],{},"Contact your Partner Integration Manager at CHeKT to discuss which arming model best fits your use case. We recommend scheduling a consultation before beginning development.",[14,970,971],{},[18,972,973],{},"Next Steps:",[905,975,976,985,988,991,994],{},[50,977,978,979,984],{},"Review the ",[980,981,983],"a",{"href":982},"/apis/partner/events","Partner Event APIs"," for technical specifications",[50,986,987],{},"Implement the chosen model following the checklist above",[50,989,990],{},"Complete the testing requirements",[50,992,993],{},"Schedule integration testing with CHeKT's certification team",[50,995,996],{},"Pass certification before production deployment",[998,999,1000],"style",{},"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 .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":231,"searchDepth":260,"depth":260,"links":1002},[1003,1004,1007,1011,1012,1018,1022,1027,1028,1029],{"id":37,"depth":254,"text":38},{"id":64,"depth":254,"text":65,"children":1005},[1006],{"id":69,"depth":260,"text":70},{"id":192,"depth":254,"text":193,"children":1008},[1009,1010],{"id":196,"depth":260,"text":90},{"id":337,"depth":260,"text":95},{"id":496,"depth":254,"text":497},{"id":593,"depth":254,"text":30,"children":1013},[1014,1015,1016,1017],{"id":599,"depth":260,"text":600},{"id":618,"depth":260,"text":619},{"id":643,"depth":260,"text":644},{"id":661,"depth":260,"text":662},{"id":679,"depth":254,"text":680,"children":1019},[1020,1021],{"id":683,"depth":260,"text":684},{"id":758,"depth":260,"text":759},{"id":829,"depth":254,"text":830,"children":1023},[1024,1025,1026],{"id":833,"depth":260,"text":834},{"id":843,"depth":260,"text":844},{"id":853,"depth":260,"text":854},{"id":863,"depth":254,"text":864},{"id":902,"depth":254,"text":903},{"id":956,"depth":254,"text":957},"Defining how arming works is not just a technical step—it's an operational agreement between CHeKT and your platform.","md",{"track":1033,"category":1034,"order":260,"badge":1035},"partner","Critical Reading","Must Read","/guides/partners/arming-experience",{"title":5,"description":1030},"guides/partners/arming-experience","P4wqqUVkgIQgj3oRvZ0G6s5JkP9zfECvC4jw57LYi5o",1770959188041]