[{"data":1,"prerenderedAt":222},["ShallowReactive",2],{"guide-/guides/migrating-platform-linking":3},{"id":4,"title":5,"body":6,"category":212,"description":213,"extension":214,"meta":215,"navigation":216,"order":203,"path":217,"readingTime":218,"seo":219,"stem":220,"__hash__":221},"guides/guides/migrating-platform-linking.md","Migrating from 2-way to Platform Linking",{"type":7,"value":8,"toc":198},"minimal",[9,13,17,25,30,58,62,69,127,135,139,144,147,150,154,173,177,180,184,187,191],[10,11,5],"h1",{"id":12},"migrating-from-2-way-to-platform-linking",[14,15,16],"p",{},"For years, CHeKT and its biggest partners ran two-way integrations. CHeKT called the partner's APIs; the partner called ours; both sides kept state in sync. It worked, until it didn't.",[14,18,19,20,24],{},"This guide explains why every integration today is ",[21,22,23],"strong",{},"external → CHeKT"," (Partner API + webhooks) and what the migration path looks like for older two-way integrations.",[26,27,29],"h2",{"id":28},"the-problem-with-two-way","The problem with two-way",[31,32,33,40,46,52],"ul",{},[34,35,36,39],"li",{},[21,37,38],{},"Drift."," Two systems holding the same state always disagree at some point. Resolution is expensive.",[34,41,42,45],{},[21,43,44],{},"Coupling."," A change on either side breaks the other. Coordination kills speed.",[34,47,48,51],{},[21,49,50],{},"Auth complexity."," Two sets of keys, two webhooks, two retry policies, double the failure modes.",[34,53,54,57],{},[21,55,56],{},"Onboarding cost."," Every new partner becomes a custom project. The marginal cost never drops.",[26,59,61],{"id":60},"the-new-model","The new model",[14,63,64,65,68],{},"We split integrations into two patterns. Both flow in the same direction — ",[21,66,67],{},"into CHeKT"," — but hit different API surfaces:",[70,71,72,91],"table",{},[73,74,75],"thead",{},[76,77,78,82,85,88],"tr",{},[79,80,81],"th",{},"Pattern",[79,83,84],{},"Direction",[79,86,87],{},"API surface",[79,89,90],{},"Auth",[92,93,94,111],"tbody",{},[76,95,96,102,105,108],{},[97,98,99],"td",{},[21,100,101],{},"CHeKT Apps",[97,103,104],{},"Third-party → CHeKT",[97,106,107],{},"Public API",[97,109,110],{},"API Key",[76,112,113,118,121,124],{},[97,114,115],{},[21,116,117],{},"Platform Linking",[97,119,120],{},"Partner platform → CHeKT",[97,122,123],{},"Partner API",[97,125,126],{},"API Key → OAuth → Assertion Token",[14,128,129,130,134],{},"If you find yourself building outbound calls ",[131,132,133],"em",{},"from"," CHeKT into your platform, stop. CHeKT exposes events over webhooks and data over the Partner API — your side consumes both.",[26,136,138],{"id":137},"migration-steps-for-existing-two-way-partners","Migration steps for existing two-way partners",[140,141,143],"h3",{"id":142},"step-1-confirm-chekt-is-the-source-of-truth-for-operational-data","Step 1 — Confirm CHeKT is the source of truth for operational data",[14,145,146],{},"Events, alarms, dispatches, and audit logs live in CHeKT. Drop any code on your side that pushes those into CHeKT — it's no longer needed.",[14,148,149],{},"Anything your platform owns (video, panel configuration, your own UI state) stays on your side. CHeKT will not call out to fetch it.",[140,151,153],{"id":152},"step-2-pick-the-right-auth-tier","Step 2 — Pick the right auth tier",[31,155,156,161,167],{},[34,157,158,160],{},[21,159,110],{}," — stable, server-to-server, low ceremony. Best starting point.",[34,162,163,166],{},[21,164,165],{},"OAuth 2.0"," — user-mediated grants on your platform's users. Use when the integration is per-user, not per-platform.",[34,168,169,172],{},[21,170,171],{},"Assertion Tokens"," — signed JWTs with rotating keys. Strictest trust tier; reserve for high-volume, high-stakes service-to-service.",[140,174,176],{"id":175},"step-3-subscribe-to-webhooks-instead-of-polling","Step 3 — Subscribe to webhooks instead of polling",[14,178,179],{},"Anywhere your old code polled CHeKT on a timer, replace it with a webhook subscription. Less load, lower latency, fewer surprises during traffic spikes.",[140,181,183],{"id":182},"step-4-retire-chekts-old-outbound-endpoints-into-your-service","Step 4 — Retire CHeKT's old outbound endpoints into your service",[14,185,186],{},"Once your side is calling the Partner API for enrichment and consuming events via webhooks, the legacy outbound path from CHeKT into your platform can be decommissioned. Less code is less to break.",[26,188,190],{"id":189},"what-we-learned","What we learned",[14,192,193,194,197],{},"The biggest lesson: ",[21,195,196],{},"direction matters more than features",". A clean one-direction integration with fewer features ships faster, breaks less, and onboards new partners in days, not quarters.",{"title":199,"searchDepth":200,"depth":200,"links":201},"",3,[202,204,205,211],{"id":28,"depth":203,"text":29},2,{"id":60,"depth":203,"text":61},{"id":137,"depth":203,"text":138,"children":206},[207,208,209,210],{"id":142,"depth":200,"text":143},{"id":152,"depth":200,"text":153},{"id":175,"depth":200,"text":176},{"id":182,"depth":200,"text":183},{"id":189,"depth":203,"text":190},"Architecture","Why we stopped doing bidirectional integrations and how to move to one-direction Platform Linking.","md",{},true,"/guides/migrating-platform-linking","8 min",{"title":5,"description":213},"guides/migrating-platform-linking","JUQg9DURbmsXiTh4ceyynDa0Ipp_K2zqB8ERb7d4LVQ",1779905486279]