Connect a server to Techstack by running one personal command in its terminal
The pairing command is the Give me a 1-liner path in the Add Node wizard.
You copy one line from Techstack, paste it into the terminal of your server,
and the server connects itself. You do not need to enter SSH details in
Techstack.
The command downloads the Techstack installer from your Techstack and runs it
with a personal, short-lived pairing token. On the server, the installer:
detects the platform and installs the Techstack Guard, a small agent
that reports the server’s health;
installs the pinned StackKits runtime the rollout needs;
redeems the pairing token, which links this server to your homelab;
installs Docker with apt-get when no working container runtime is present;
installs and starts the techstack-agent system service, so the Guard
keeps running after a restart.
The Guard talks to Techstack only through an outbound HTTPS connection. It
sends a heartbeat and a measured inventory about every 30 seconds. You do not
open an inbound port on the server for it.The token works once. Techstack stores only a hash of the credential the
server receives, and the command is not kept in job reports.
A Linux server with systemd. Ubuntu is the standard system; see
Add a Node.
Administrator rights. Run the command as root or as a user that can use
sudo. The installer writes system files and installs a service.
curl on the server. The command uses it to download the installer.
The server can reach Techstack. The progress page shows the field
Techstack URL reachable from the server. The address in that field must
open from the server, not only from your computer. With the
Windows Beta, the server reaches the Windows
computer on TCP port 5264 in your local network, so keep the Windows client
running while you pair.
A fresh command. A pairing token expires 15 minutes after Techstack
creates it.
When the Guard sends its first heartbeat, Techstack changes the Node from
Not connected yet to connected. The progress page then continues with the
StackKit rollout for this Node. You can close the terminal.To check the Guard on the server later:
sudo systemctl status techstack-agent shows whether the service runs.
sudo journalctl -u techstack-agent -f follows its log.
For what happens during enrollment, how to recover an interrupted pairing and
how to end it again, see Pair a server with Guard
and Revoke, detach and uninstall Guard.The Node now appears in your homelab with its health. Where its services are
reachable does not depend on where the server stands: local hardware and
rented servers can both use your own domain or a *.kombify.me address. See
kombify.me.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"kombify","colors":{"primary":"#6366F1","light":"#818CF8","dark":"#4F46E5"},"logo":{"light":"https://mintcdn.com/kombiverselabs-0b0a8e7b/KJjd5IRouo0WTrDs/images/logo_sized.png?fit=max\u0026auto=format\u0026n=KJjd5IRouo0WTrDs\u0026q=85\u0026s=dd7a94af58a3970049f077be986cb8c4","dark":"https://mintcdn.com/kombiverselabs-0b0a8e7b/KJjd5IRouo0WTrDs/images/logo_sized.png?fit=max\u0026auto=format\u0026n=KJjd5IRouo0WTrDs\u0026q=85\u0026s=dd7a94af58a3970049f077be986cb8c4"},"favicon":"https://mintcdn.com/kombiverselabs-0b0a8e7b/KJjd5IRouo0WTrDs/images/Icon.png?fit=max\u0026auto=format\u0026n=KJjd5IRouo0WTrDs\u0026q=85\u0026s=aa98ac0e30731dc139d4b955ca600db8","appearance":{"default":"dark"},"navbar":{"links":[{"href":"mailto:info@kombify.io","label":"Support"}]},"footer":{"socials":{"github":"https://github.com/kombifyio"},"links":[{"header":"Legal","items":[{"label":"Imprint","href":"https://kombify.io/impressum"},{"label":"Privacy","href":"https://kombify.io/privacy"},{"label":"Terms","href":"https://kombify.io/terms"},{"label":"Status","href":"https://status.kombify.io"}]}]},"search":{"prompt":"Search kombify docs..."},"integrations":{"telemetry":{"enabled":false}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"GitHub","icon":"github","href":"https://github.com/kombifyio"},{"anchor":"Community","icon":"comments","href":"https://github.com/kombifyio/StackKits/discussions"},{"anchor":"Blog","icon":"newspaper","href":"https://blog.kombify.io"}]},"languages":[{"language":"en","default":true,"href":""},{"language":"de","href":"de"},{"language":"es","href":"es"},{"language":"zh-Hans","href":"zh-Hans"},{"language":"hi","href":"hi"},{"language":"ar","href":"ar"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"kombiverselabs-0b0a8e7b","hasAudioNarration":false,"actualSubdomain":"kombiverselabs-0b0a8e7b","customDomains":["docs.kombify.io"],"gitSource":{"type":"github","owner":"kombiverselabs","repo":"mintlify-docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af55176d7fada81d391e167","clientVersion":"0.0.4124","searchFilterCounts":[{"language":"en","tag":"Reference","count":304},{"language":"ar","tag":"المرجع","count":298},{"language":"de","tag":"Referenz","count":298},{"language":"es","tag":"Referencia","count":298},{"language":"hi","tag":"संदर्भ","count":298},{"language":"zh-Hans","tag":"参考","count":298},{"language":"en","tag":"Techstack","count":272},{"language":"ar","tag":"Techstack","count":264},{"language":"de","tag":"Techstack","count":264},{"language":"es","tag":"Techstack","count":264},{"language":"hi","tag":"Techstack","count":264},{"language":"zh-Hans","tag":"Techstack","count":264},{"language":"en","tag":"API","count":212},{"language":"ar","tag":"API","count":212},{"language":"de","tag":"API","count":212},{"language":"es","tag":"API","count":212},{"language":"hi","tag":"API","count":212},{"language":"zh-Hans","tag":"API","count":212},{"language":"en","tag":"StackKits","count":106},{"language":"de","tag":"StackKits","count":97},{"language":"ar","tag":"StackKits","count":95},{"language":"es","tag":"StackKits","count":95},{"language":"hi","tag":"StackKits","count":95},{"language":"zh-Hans","tag":"StackKits","count":95},{"language":"en","tag":"CLI","count":84},{"language":"ar","tag":"CLI","count":79},{"language":"de","tag":"CLI","count":79},{"language":"es","tag":"CLI","count":79},{"language":"hi","tag":"CLI","count":79},{"language":"zh-Hans","tag":"CLI","count":79},{"language":"en","tag":"Identity \u0026 Access","count":56},{"language":"ar","tag":"الهوية والوصول","count":50},{"language":"de","tag":"Identität \u0026 Zugriff","count":50},{"language":"es","tag":"Identidad y acceso","count":50},{"language":"hi","tag":"पहचान और एक्सेस","count":50},{"language":"zh-Hans","tag":"身份与访问","count":50},{"language":"en","tag":"Gateway API","count":48},{"language":"ar","tag":"واجهة برمجة تطبيقات Gateway","count":48},{"language":"de","tag":"Gateway-API","count":48},{"language":"es","tag":"API de Gateway","count":48},{"language":"hi","tag":"Gateway API","count":48},{"language":"zh-Hans","tag":"Gateway API","count":48},{"language":"en","tag":"Advanced tools and reference","count":35},{"language":"ar","tag":"الأدوات المتقدمة والمرجع","count":30},{"language":"de","tag":"Erweiterte Werkzeuge und Referenz","count":30},{"language":"es","tag":"Herramientas avanzadas y referencia","count":30},{"language":"hi","tag":"उन्नत टूल और संदर्भ","count":30},{"language":"zh-Hans","tag":"高级工具与参考","count":30},{"language":"en","tag":"Apps","count":23},{"language":"en","tag":"Workers","count":21},{"language":"ar","tag":"Workers","count":21},{"language":"de","tag":"Workers","count":21},{"language":"es","tag":"Workers","count":21},{"language":"hi","tag":"Workers","count":21},{"language":"zh-Hans","tag":"Workers","count":21},{"language":"ar","tag":"Auth","count":20},{"language":"de","tag":"Auth","count":20},{"language":"es","tag":"Auth","count":20},{"language":"hi","tag":"Auth","count":20},{"language":"zh-Hans","tag":"Auth","count":20}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"photo-backup-guide.css","content":".kombify-photo-guide{--ink:#202337;--muted:#696e7c;--quiet:#8b8e9b;--primary:#6366f1;--deep:#4f46e5;--wash:#f0efff;--border:#e9e9f0;--bg:#fff;--panel:#f7f8fb;--soft:#f5f5f9;--green:#25765e;color:var(--ink);font:inherit;font-size:14px;line-height:1.6}.kombify-photo-guide *{box-sizing:border-box}.kombify-photo-guide [hidden]{display:none!important}.kombify-photo-guide .guide-content{max-width:1010px;margin:auto}.kombify-photo-guide a{color:inherit;text-decoration:none}.kombify-photo-guide button,.kombify-photo-guide input{font:inherit}.kombify-photo-guide button{cursor:pointer;touch-action:manipulation}.kombify-photo-guide button:disabled{cursor:default;opacity:.4}.kombify-photo-guide :is(button,a,input,summary):focus-visible{outline:3px solid #9c95ff;outline-offset:4px}.kombify-photo-guide .ico{display:inline-block;width:19px;height:19px;flex-shrink:0;vertical-align:middle}.kombify-photo-guide button .ico{pointer-events:none}.kombify-photo-guide p{margin:0}.kombify-photo-guide h2{font-size:16px;font-weight:640;letter-spacing:-.3px;margin:0}.kombify-photo-guide :is(section,details){scroll-margin-top:110px}.kombify-photo-guide .page-top,.kombify-photo-guide .section-top,.kombify-photo-guide .guide-heading{display:flex;justify-content:space-between;align-items:center;gap:14px}.kombify-photo-guide .intro-meta{display:flex;align-items:center;gap:17px;color:var(--quiet);font-size:11px}.kombify-photo-guide .intro-meta span{display:flex;align-items:center;gap:6px}.kombify-photo-guide .intro-meta .ico{width:14px;height:14px}.kombify-photo-guide .tool-button{border:1px solid var(--border);border-radius:8px;padding:8px;background:var(--bg);color:var(--muted);display:flex;align-items:center;justify-content:center}.kombify-photo-guide .ready-strip{margin-top:24px;background:var(--panel);border:1px solid var(--border);padding:11px 15px;display:flex;align-items:center;flex-wrap:wrap;gap:10px 14px;border-radius:9px;font-size:11px;color:var(--muted)}.kombify-photo-guide .ready-strip>span{display:flex;align-items:center;gap:6px}.kombify-photo-guide .ready-strip strong{color:var(--ink);white-space:nowrap}.kombify-photo-guide .ready-strip .ico{width:14px;height:14px;color:var(--green)}.kombify-photo-guide .ready-strip a{margin-left:auto;color:var(--deep);white-space:nowrap;font-size:10px}.kombify-photo-guide .downloads{margin-top:26px}.kombify-photo-guide .section-top{margin-bottom:12px}.kombify-photo-guide .small-link{font-size:10px;color:var(--muted)}.kombify-photo-guide .small-link .ico{width:12px}.kombify-photo-guide .downloads-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:11px}.kombify-photo-guide .download-card{border:1px solid var(--border);border-radius:11px;display:flex;gap:13px;align-items:center;padding:16px 17px;background:var(--bg);transition:transform .15s,border-color .15s;min-height:89px}.kombify-photo-guide .download-card.active{border-color:#c9c6fa;background:var(--wash)}.kombify-photo-guide .download-card:hover{transform:translateY(-2px);border-color:var(--primary)}.kombify-photo-guide .platform-icon{display:flex;align-items:center;justify-content:center;background:var(--soft);border:1px solid var(--border);width:42px;height:46px;flex-shrink:0;border-radius:11px}.kombify-photo-guide .platform-icon .ico{width:26px;height:26px}.kombify-photo-guide .download-text{display:flex;flex-direction:column;gap:2px;min-width:0}.kombify-photo-guide .download-text strong{font-size:12px;font-weight:650}.kombify-photo-guide .download-text small{font-size:10px;color:var(--muted)}.kombify-photo-guide .store-name{color:var(--deep);font-size:10px;margin-top:4px}.kombify-photo-guide .store-name .ico{width:11px;height:11px}.kombify-photo-guide .download-hint{font-size:10px;color:var(--muted);margin-top:9px}.kombify-photo-guide .download-hint a{color:var(--deep);text-decoration:underline;text-underline-offset:3px}.kombify-photo-guide .download-hint .ico{width:10px;height:10px}.kombify-photo-guide .guide-section{margin-top:31px}.kombify-photo-guide .guide-heading{margin-bottom:13px}.kombify-photo-guide .platform-label{font-size:10px;color:var(--muted)}.kombify-photo-guide .platform-label .ico{width:12px;height:12px}.kombify-photo-guide .wizard{border:1px solid var(--border);border-radius:14px;overflow:hidden;background:var(--bg);box-shadow:0 6px 24px #30215e05}.kombify-photo-guide .step-tabs{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));border-bottom:1px solid var(--border);padding:0 16px}.kombify-photo-guide .step-tab{display:flex;gap:9px;align-items:center;justify-content:center;position:relative;padding:17px 10px;border:0;background:transparent;font-size:12px;color:var(--muted)}.kombify-photo-guide .step-tab[aria-selected=true]{color:var(--deep);font-weight:600}.kombify-photo-guide .step-tab[aria-selected=true]:after{content:\"\";position:absolute;bottom:-1px;left:10px;right:10px;height:2px;background:var(--primary)}.kombify-photo-guide .step-dot{width:25px;height:25px;display:flex;align-items:center;justify-content:center;border:1px solid var(--border);border-radius:50%;font-size:11px;background:var(--soft)}.kombify-photo-guide .step-tab[aria-selected=true] .step-dot{background:var(--primary);border-color:var(--primary);color:white}.kombify-photo-guide .step-tab.done .step-dot{background:var(--wash);color:var(--green)}.kombify-photo-guide .guide-panel{display:grid;grid-template-columns:minmax(0,1fr) 43%;min-height:460px}.kombify-photo-guide .panel-copy{padding:29px 30px 24px;display:flex;flex-direction:column;min-width:0}.kombify-photo-guide .step-kicker{font-size:9px;letter-spacing:1.35px;font-weight:650;color:var(--primary);margin-bottom:11px}.kombify-photo-guide .panel-copy h3{font-size:25px;line-height:1.24;letter-spacing:-.7px;font-weight:650;margin:0 0 13px}.kombify-photo-guide .step-intro{color:var(--muted);font-size:14px;line-height:1.65;margin-bottom:21px}.kombify-photo-guide .click-list{padding:0;list-style:none;margin:0 0 14px}.kombify-photo-guide .click-list li{display:flex;align-items:flex-start;gap:11px;margin:0 0 15px;font-size:14px;line-height:1.7}.kombify-photo-guide .click-num{width:22px;height:22px;background:var(--wash);color:var(--deep);display:flex;align-items:center;justify-content:center;flex-shrink:0;border-radius:6px;font-size:10px;font-weight:650;margin-top:2px}.kombify-photo-guide .key{font-size:12px;background:var(--soft);border:1px solid var(--border);border-radius:4px;padding:1px 4px;font-weight:600;white-space:nowrap}.kombify-photo-guide .micro-note{font-size:12px;line-height:1.7;color:var(--muted);display:flex;align-items:flex-start;gap:8px;margin-bottom:15px}.kombify-photo-guide .micro-note .ico{width:14px;height:14px;margin-top:3px}.kombify-photo-guide .panel-copy details{font-size:12px;color:var(--muted);margin:0 0 15px}.kombify-photo-guide summary{cursor:pointer}.kombify-photo-guide .panel-copy summary{color:var(--deep);font-weight:500}.kombify-photo-guide .panel-copy details p{padding-top:8px;line-height:1.8}.kombify-photo-guide .panel-copy details a{color:var(--deep);text-decoration:underline}.kombify-photo-guide .step-check{display:flex;align-items:center;gap:7px;font-size:12px;color:var(--green);margin-top:auto;padding-top:10px}.kombify-photo-guide .step-check .ico{width:15px;height:15px}.kombify-photo-guide .panel-visual{border-left:1px solid var(--border);background:var(--panel);display:flex;flex-direction:column;align-items:center;justify-content:center;padding:22px 24px 18px;position:relative;min-width:0}.kombify-photo-guide .screenshot-tag{position:absolute;left:15px;top:12px;font-size:8px;letter-spacing:.8px;color:var(--quiet)}.kombify-photo-guide .screenshot-tag .ico{width:11px;height:11px;margin-right:4px}.kombify-photo-guide .screen-figure{width:min(100%,280px);margin:24px 0 0}.kombify-photo-guide .screen-figure.portrait{width:min(100%,205px)}.kombify-photo-guide .screen-figure.tall{width:min(100%,178px)}.kombify-photo-guide .screen-image{position:relative;border:5px solid white;border-radius:10px;background:white;box-shadow:0 8px 24px #35324d14;overflow:hidden}.kombify-photo-guide .screen-image>img{display:block;width:100%;height:auto;margin:0;border-radius:0}.kombify-photo-guide .annotation{position:absolute;border:2px solid #8b79e7;border-radius:5px;box-shadow:0 0 0 2px #8b79e721;pointer-events:none}.kombify-photo-guide .annotation:before{content:attr(data-n);position:absolute;left:-10px;top:-10px;background:#7864cb;color:white;border:2px solid white;border-radius:50%;width:19px;height:19px;text-align:center;font-size:10px;font-weight:700;line-height:15px}.kombify-photo-guide .login-url{top:49.7%;left:12.7%;width:74.5%;height:12.1%}.kombify-photo-guide .login-next{top:64.8%;left:12.7%;width:74.5%;height:9.5%}.kombify-photo-guide .album-mark{top:44.7%;left:3.1%;width:93.6%;height:13.1%}.kombify-photo-guide .enable-mark{top:82%;left:3%;width:94%;height:11.5%;border-color:#bcabff}.kombify-photo-guide .zoom-button{position:absolute;right:8px;bottom:8px;border:1px solid #e5e0ed;border-radius:7px;padding:6px;background:#ffffffeb;color:#656070;display:flex}.kombify-photo-guide .zoom-button .ico{width:15px;height:15px}.kombify-photo-guide figcaption{text-align:center;margin-top:10px;font-size:9px;color:var(--muted)}.kombify-photo-guide figcaption .ico{width:10px;height:10px}.kombify-photo-guide .image-fallback{display:none}.kombify-photo-guide .image-unavailable .screen-image>img,.kombify-photo-guide .image-unavailable .annotation{display:none}.kombify-photo-guide .image-unavailable .image-fallback{min-height:260px;padding:30px 16px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;text-align:center;color:#656070;font-size:13px;background:#fff}.kombify-photo-guide .image-fallback span{font-size:11px}.kombify-photo-guide .wizard-bottom{display:flex;align-items:center;gap:16px;padding:14px 20px;border-top:1px solid var(--border);background:var(--bg)}.kombify-photo-guide .progress-note{font-size:10px;color:var(--muted);margin-right:auto}.kombify-photo-guide .progress-meter{display:flex;gap:4px;margin-bottom:5px}.kombify-photo-guide .progress-meter span{width:25px;height:3px;border-radius:3px;background:var(--border)}.kombify-photo-guide .progress-meter .done{background:var(--primary)}.kombify-photo-guide .prev,.kombify-photo-guide .next{display:flex;align-items:center;justify-content:center;gap:8px;border:0;border-radius:7px;font-size:12px;padding:10px 14px}.kombify-photo-guide .prev{background:transparent;color:var(--muted)}.kombify-photo-guide .next{background:var(--primary);color:white;font-weight:550}.kombify-photo-guide .next .ico,.kombify-photo-guide .prev .ico{width:15px;height:15px}.kombify-photo-guide .provenance-inline{font-size:9px;color:var(--quiet);padding:9px 3px 0;display:flex;gap:5px;align-items:center;flex-wrap:wrap}.kombify-photo-guide .provenance-inline a{text-decoration:underline;text-underline-offset:3px}.kombify-photo-guide .verify-visual{background:var(--panel)}.kombify-photo-guide .flow-device{display:flex;align-items:center;justify-content:center;gap:16px;width:100%}.kombify-photo-guide .flow-node{width:76px;height:89px;display:flex;align-items:center;justify-content:center;border:1px solid var(--border);position:relative;border-radius:14px;background:var(--bg)}.kombify-photo-guide .flow-node>.ico{width:34px;height:34px;color:var(--green)}.kombify-photo-guide .flow-arrow{color:var(--green)}.kombify-photo-guide .flow-labels{display:flex;justify-content:space-between;width:225px;font-size:10px;color:var(--muted);margin-top:13px}.kombify-photo-guide .check-stamp{position:absolute;right:-8px;bottom:-8px;background:var(--green);border:3px solid var(--panel);border-radius:50%;width:28px;height:28px;color:white;display:flex;align-items:center;justify-content:center}.kombify-photo-guide .check-stamp .ico{width:14px;height:14px}.kombify-photo-guide .flow-caption{font-size:16px;font-weight:600;margin-top:28px;text-align:center}.kombify-photo-guide .flow-sub{font-size:11px;color:var(--muted);text-align:center;max-width:235px;margin-top:7px}.kombify-photo-guide .verify-list{display:flex;flex-direction:column;gap:13px;margin:0 0 21px}.kombify-photo-guide .verify-list label{display:flex;align-items:flex-start;gap:10px;font-size:13px;cursor:pointer}.kombify-photo-guide .verify-list input{appearance:auto;width:16px;height:16px;margin-top:3px;accent-color:var(--primary);flex-shrink:0}.kombify-photo-guide .done-message{font-size:12px;color:var(--green);padding:10px 12px;background:var(--panel);border-radius:7px;margin-bottom:12px}.kombify-photo-guide .warning{display:flex;gap:12px;padding:16px 18px;border:1px solid #e4e7df;background:#f8faf6;border-radius:10px;margin-top:24px;color:#515b48}.kombify-photo-guide .warning>.ico{width:21px;height:21px;flex-shrink:0}.kombify-photo-guide .warning strong{font-size:12px}.kombify-photo-guide .warning p{font-size:11px;line-height:1.8;margin-top:3px}.kombify-photo-guide .warning a{font-weight:600;text-decoration:underline}.kombify-photo-guide .more-section{margin-top:29px}.kombify-photo-guide .more-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.kombify-photo-guide .more-card{display:flex;align-items:center;gap:13px;padding:17px;border:1px solid var(--border);border-radius:10px;background:var(--bg);text-align:left;color:var(--ink)}.kombify-photo-guide .more-card>span:nth-child(2){flex:1}.kombify-photo-guide .more-card strong{display:block;font-size:12px;font-weight:600}.kombify-photo-guide .more-card small{display:block;font-size:10px;color:var(--muted);margin-top:3px}.kombify-photo-guide .more-card>.ico{width:15px;height:15px;color:var(--quiet)}.kombify-photo-guide .more-icon{background:var(--wash);color:var(--deep);width:38px;height:38px;display:flex;align-items:center;justify-content:center;border-radius:9px;flex-shrink:0}.kombify-photo-guide .more-icon.green{color:var(--green);background:var(--panel)}.kombify-photo-guide .faq-section{margin-top:32px}.kombify-photo-guide .faq{border-bottom:1px solid var(--border)}.kombify-photo-guide .faq summary{padding:16px 1px;font-size:13px;font-weight:500}.kombify-photo-guide .answer{font-size:13px;line-height:1.8;color:var(--muted);padding:0 2px 16px}.kombify-photo-guide .answer a{color:var(--deep);text-decoration:underline}.kombify-photo-guide .answer .ico{width:11px;height:11px}.kombify-photo-guide .footline{display:flex;justify-content:space-between;align-items:flex-start;gap:20px;border-top:1px solid var(--border);margin-top:35px;padding-top:20px;font-size:10px;color:var(--muted)}.kombify-photo-guide .attribution strong{font-weight:500;color:var(--ink)}.kombify-photo-guide .attribution .ico{width:10px;height:10px}.kombify-photo-guide .reset{border:0;background:transparent;color:var(--muted);font-size:10px;white-space:nowrap;padding:0}.kombify-photo-guide .source-section{margin-top:17px;font-size:10px;color:var(--muted)}.kombify-photo-guide .source-content{padding:14px;background:var(--panel);border:1px solid var(--border);border-radius:8px;margin-top:10px;font-size:11px;line-height:1.8}.kombify-photo-guide .source-content p+p{margin-top:9px}.kombify-photo-guide .source-links{display:flex;flex-wrap:wrap;gap:8px 15px;margin-top:12px}.kombify-photo-guide .source-links a{color:var(--deep)}.kombify-photo-guide .source-links .ico{width:10px;height:10px}.kombify-photo-guide .dim{font-size:9px;color:var(--quiet);margin-top:14px}.kombify-photo-guide dialog{border:1px solid var(--border);border-radius:16px;padding:0;width:min(560px,calc(100vw - 32px));max-height:85dvh;background:var(--bg);color:var(--ink);box-shadow:0 20px 80px #18122b44;margin:auto}.kombify-photo-guide dialog::backdrop{background:#20163366;backdrop-filter:blur(3px)}.kombify-photo-guide .dialog-header{padding:20px 24px;border-bottom:1px solid var(--border);display:flex;justify-content:space-between;align-items:center;gap:15px}.kombify-photo-guide .dialog-header h2{font-size:18px}.kombify-photo-guide .dialog-close{border:0;background:var(--soft);color:var(--muted);border-radius:6px;padding:6px;display:flex}.kombify-photo-guide .dialog-body{padding:23px 25px;line-height:1.8}.kombify-photo-guide .dialog-body p{font-size:13px;margin-bottom:14px}.kombify-photo-guide .simple-steps{list-style:decimal;margin:15px 0 22px;padding-left:22px;font-size:13px}.kombify-photo-guide .simple-steps li{padding-left:5px;margin-bottom:12px}.kombify-photo-guide .primary-link{display:inline-flex;align-items:center;gap:8px;background:var(--primary);color:white;padding:10px 14px;border-radius:7px;font-size:12px}.kombify-photo-guide .primary-link .ico{width:13px;height:13px}.kombify-photo-guide .dialog-body .fineprint{font-size:11px;color:var(--muted);margin-top:17px}.kombify-photo-guide .fineprint .ico{width:11px;height:11px}.kombify-photo-guide .zoom-dialog{width:auto;max-width:calc(100vw - 32px)}.kombify-photo-guide .zoom-content{padding:20px;text-align:center}.kombify-photo-guide .zoom-content img{display:block;max-height:65dvh;max-width:min(80vw,820px);width:auto;height:auto;margin:auto}.kombify-photo-guide .zoom-content a{display:inline-block;font-size:11px;color:var(--deep);margin-top:12px}.kombify-photo-guide .zoom-content .ico{width:11px;height:11px}.kombify-photo-guide .toast{position:fixed;bottom:20px;left:50%;transform:translateX(-50%);padding:10px 20px;border-radius:10px;background:#33304a;color:white;font-size:12px;z-index:90;box-shadow:0 5px 30px #30284722}.dark .kombify-photo-guide{--ink:#ececf5;--muted:#b1b3c5;--quiet:#9b9db0;--primary:#818cf8;--deep:#a5b4fc;--wash:#292745;--border:#343447;--bg:#18181f;--panel:#202029;--soft:#25252f;--green:#6fd4ac}.dark .kombify-photo-guide .warning{background:#25271e;border-color:#454833;color:#dcdfcf}@media (max-width:1000px){.kombify-photo-guide .panel-copy{padding:25px 22px}.kombify-photo-guide .download-card{padding:14px 12px;gap:10px}.kombify-photo-guide .step-tab{font-size:10px;gap:6px}.kombify-photo-guide .panel-visual{padding:22px 15px}.kombify-photo-guide .panel-copy h3{font-size:23px}}@media (max-width:600px){.kombify-photo-guide .page-tools{display:none}.kombify-photo-guide .intro-meta{gap:12px;font-size:10px;flex-wrap:wrap}.kombify-photo-guide .ready-strip{margin-top:19px;padding:11px 12px;gap:7px 12px}.kombify-photo-guide .ready-strip>strong{width:100%}.kombify-photo-guide .ready-strip a{margin-left:0}.kombify-photo-guide .downloads-grid{grid-template-columns:1fr 1fr;gap:8px}.kombify-photo-guide .download-card{padding:14px 12px;gap:10px}.kombify-photo-guide .download-card:nth-child(3){grid-column:1/-1;min-height:auto;border-style:dashed}.kombify-photo-guide .download-card:nth-child(3) .download-text{flex-direction:row;align-items:center;width:100%;gap:6px}.kombify-photo-guide .download-card:nth-child(3) small{display:none}.kombify-photo-guide .download-card:nth-child(3) .store-name{margin-left:auto}.kombify-photo-guide .platform-icon{width:33px;height:37px}.kombify-photo-guide .platform-icon .ico{width:21px;height:21px}.kombify-photo-guide .download-text strong{font-size:11px}.kombify-photo-guide .download-text small,.kombify-photo-guide .store-name{font-size:9px}.kombify-photo-guide .guide-heading h2{font-size:14px}.kombify-photo-guide .step-tabs{padding:0 5px}.kombify-photo-guide .step-tab{flex-direction:column;gap:5px;padding:12px 4px;font-size:10px}.kombify-photo-guide .step-dot{width:22px;height:22px;font-size:9px}.kombify-photo-guide .guide-panel{grid-template-columns:1fr;min-height:0}.kombify-photo-guide .panel-copy{padding:22px}.kombify-photo-guide .panel-copy h3{font-size:22px}.kombify-photo-guide .panel-visual{border-left:0;border-top:1px solid var(--border);min-height:310px;padding:28px 22px 15px}.kombify-photo-guide .screen-figure{width:230px}.kombify-photo-guide .screen-figure.portrait{width:178px}.kombify-photo-guide .screen-figure.tall{width:160px}.kombify-photo-guide .wizard-bottom{padding:12px 13px;gap:6px}.kombify-photo-guide .prev{padding:8px 5px;font-size:11px}.kombify-photo-guide .next{padding:11px;font-size:11px}.kombify-photo-guide .progress-note{font-size:8px}.kombify-photo-guide .progress-meter span{width:17px}.kombify-photo-guide .more-grid{grid-template-columns:1fr}.kombify-photo-guide .footline{flex-wrap:wrap}.kombify-photo-guide .toast{width:calc(100vw - 40px);text-align:center;font-size:11px}.kombify-photo-guide .dialog-header{padding:17px 19px}.kombify-photo-guide .dialog-body{padding:19px}}@media (prefers-reduced-motion:reduce){.kombify-photo-guide *{transition:none!important;animation:none!important}}@media print{.kombify-photo-guide :is(.page-tools,.step-tabs,.wizard-bottom,.more-section,.reset,.toast,.zoom-button){display:none!important}.kombify-photo-guide .guide-panel[hidden]{display:grid!important}.kombify-photo-guide .guide-panel{grid-template-columns:1fr 40%;break-inside:avoid;border-top:1px solid var(--border)}.kombify-photo-guide .warning{break-inside:avoid}}"},{"filePath":"client-setup-guide.css","content":".kombify-client-guide{--ink:#202337;--muted:#696e7c;--quiet:#8b8e9b;--primary:#6366f1;--deep:#4f46e5;--wash:#f0efff;--border:#e9e9f0;--bg:#fff;--panel:#f7f8fb;--soft:#f5f5f9;--green:#25765e;color:var(--ink);font:inherit;font-size:14px;line-height:1.6}.kombify-client-guide *{box-sizing:border-box}.kombify-client-guide [hidden]{display:none!important}.kombify-client-guide .guide-content{max-width:1010px;margin:auto}.kombify-client-guide a{color:inherit;text-decoration:none}.kombify-client-guide button,.kombify-client-guide input{font:inherit}.kombify-client-guide button{cursor:pointer;touch-action:manipulation}.kombify-client-guide button:disabled{cursor:default;opacity:.4}.kombify-client-guide :is(button,a,input,summary):focus-visible{outline:3px solid #9c95ff;outline-offset:4px}.kombify-client-guide .ico{display:inline-block;width:19px;height:19px;flex-shrink:0;vertical-align:middle}.kombify-client-guide button .ico{pointer-events:none}.kombify-client-guide p{margin:0}.kombify-client-guide h2{font-size:16px;font-weight:640;letter-spacing:-.3px;margin:0}.kombify-client-guide :is(section,details){scroll-margin-top:110px}.kombify-client-guide.guide-enhanced .step-content h3{scroll-margin-top:var(--scroll-mt)}.kombify-client-guide .page-top,.kombify-client-guide .section-top,.kombify-client-guide .guide-heading{display:flex;justify-content:space-between;align-items:center;gap:14px}.kombify-client-guide .intro-meta{display:flex;align-items:center;gap:17px;color:var(--quiet);font-size:11px}.kombify-client-guide .intro-meta span{display:flex;align-items:center;gap:6px}.kombify-client-guide .intro-meta .ico{width:14px;height:14px}.kombify-client-guide .tool-button{border:1px solid var(--border);border-radius:8px;padding:8px;background:var(--bg);color:var(--muted);display:flex;align-items:center;justify-content:center}.kombify-client-guide .ready-strip{margin-top:24px;background:var(--panel);border:1px solid var(--border);padding:11px 15px;display:flex;align-items:center;flex-wrap:wrap;gap:10px 14px;border-radius:9px;font-size:11px;color:var(--muted)}.kombify-client-guide .ready-strip>span{display:flex;align-items:center;gap:6px}.kombify-client-guide .ready-strip strong{color:var(--ink);white-space:nowrap}.kombify-client-guide .ready-strip .ico{width:14px;height:14px;color:var(--green)}.kombify-client-guide .ready-strip a{margin-left:auto;color:var(--deep);white-space:nowrap;font-size:10px}.kombify-client-guide .downloads{margin-top:26px}.kombify-client-guide .section-top{margin-bottom:12px}.kombify-client-guide .small-link{font-size:10px;color:var(--muted)}.kombify-client-guide .small-link .ico{width:12px}.kombify-client-guide .downloads-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(175px,1fr));gap:11px}.kombify-client-guide .download-card{border:1px solid var(--border);border-radius:11px;display:flex;gap:13px;align-items:center;padding:16px 17px;background:var(--bg);transition:transform .15s,border-color .15s;min-height:89px}.kombify-client-guide .download-card:hover{transform:translateY(-2px);border-color:var(--primary)}.kombify-client-guide .platform-icon{display:flex;align-items:center;justify-content:center;background:var(--soft);border:1px solid var(--border);width:42px;height:46px;flex-shrink:0;border-radius:11px}.kombify-client-guide .platform-icon .ico{width:26px;height:26px}.kombify-client-guide .download-text{display:flex;flex-direction:column;gap:2px;min-width:0}.kombify-client-guide .download-text strong{font-size:12px;font-weight:650}.kombify-client-guide .download-text small{font-size:10px;color:var(--muted)}.kombify-client-guide .store-name{color:var(--deep);font-size:10px;margin-top:4px}.kombify-client-guide .store-name .ico{width:11px;height:11px}.kombify-client-guide .download-hint{font-size:10px;color:var(--muted);margin-top:9px}.kombify-client-guide .download-hint a{color:var(--deep);text-decoration:underline;text-underline-offset:3px}.kombify-client-guide .download-hint .ico{width:10px;height:10px}.kombify-client-guide .guide-section{margin-top:31px}.kombify-client-guide .guide-heading{margin-bottom:13px}.kombify-client-guide .wizard{border:1px solid var(--border);border-radius:14px;overflow:hidden;background:var(--bg);box-shadow:0 6px 24px #30215e05}.kombify-client-guide .step-tabs{display:grid;grid-template-columns:repeat(var(--kcg-steps,4),minmax(0,1fr));border-bottom:1px solid var(--border);padding:0 16px}.kombify-client-guide .step-tab{display:flex;gap:9px;align-items:center;justify-content:center;position:relative;padding:17px 10px;border:0;background:transparent;font-size:12px;color:var(--muted)}.kombify-client-guide .step-tab[aria-selected=true]{color:var(--deep);font-weight:600}.kombify-client-guide .step-tab[aria-selected=true]:after{content:\"\";position:absolute;bottom:-1px;left:10px;right:10px;height:2px;background:var(--primary)}.kombify-client-guide .step-dot{width:25px;height:25px;display:flex;align-items:center;justify-content:center;border:1px solid var(--border);border-radius:50%;font-size:11px;background:var(--soft)}.kombify-client-guide .step-tab[aria-selected=true] .step-dot{background:var(--primary);border-color:var(--primary);color:white}.kombify-client-guide .step-tab.done .step-dot{background:var(--wash);color:var(--green)}.kombify-client-guide .guide-panel{display:grid;grid-template-columns:minmax(0,1fr) 43%;min-height:460px}.kombify-client-guide.guide-enhanced .guide-panel:not(.active){display:none}.kombify-client-guide .panel-copy{padding:29px 30px 24px;display:flex;flex-direction:column;min-width:0}.kombify-client-guide .step-kicker{font-size:9px;letter-spacing:1.35px;font-weight:650;color:var(--primary);margin-bottom:11px}.kombify-client-guide .panel-copy h3{font-size:25px;line-height:1.24;letter-spacing:-.7px;font-weight:650;margin:0 0 13px}.kombify-client-guide .step-intro{color:var(--muted);font-size:14px;line-height:1.65;margin-bottom:21px}.kombify-client-guide .click-list{padding:0;list-style:none;margin:0 0 14px}.kombify-client-guide .click-list li{display:flex;align-items:flex-start;gap:11px;margin:0 0 15px;font-size:14px;line-height:1.7}.kombify-client-guide .click-num{width:22px;height:22px;background:var(--wash);color:var(--deep);display:flex;align-items:center;justify-content:center;flex-shrink:0;border-radius:6px;font-size:10px;font-weight:650;margin-top:2px}.kombify-client-guide .key{font-size:12px;background:var(--soft);border:1px solid var(--border);border-radius:4px;padding:1px 4px;font-weight:600;white-space:nowrap}.kombify-client-guide .micro-note{font-size:12px;line-height:1.7;color:var(--muted);display:flex;align-items:flex-start;gap:8px;margin-bottom:15px}.kombify-client-guide .micro-note .ico{width:14px;height:14px;margin-top:3px}.kombify-client-guide .panel-copy details{font-size:12px;color:var(--muted);margin:0 0 15px}.kombify-client-guide summary{cursor:pointer}.kombify-client-guide .panel-copy summary{color:var(--deep);font-weight:500}.kombify-client-guide .panel-copy details p{padding-top:8px;line-height:1.8}.kombify-client-guide .panel-copy details a{color:var(--deep);text-decoration:underline}.kombify-client-guide .step-check{display:flex;align-items:center;gap:7px;font-size:12px;color:var(--green);margin-top:auto;padding-top:10px}.kombify-client-guide .step-check .ico{width:15px;height:15px}.kombify-client-guide .panel-visual{border-left:1px solid var(--border);background:var(--panel);display:flex;flex-direction:column;align-items:center;justify-content:center;padding:22px 24px 18px;position:relative;min-width:0}.kombify-client-guide .screenshot-tag{position:absolute;left:15px;top:12px;font-size:8px;letter-spacing:.8px;color:var(--quiet)}.kombify-client-guide .screenshot-tag .ico{width:11px;height:11px;margin-right:4px}.kombify-client-guide .screen-figure{width:min(100%,400px);margin:24px 0 0}.kombify-client-guide .screen-figure.phone{width:min(100%,220px)}.kombify-client-guide .screen-image{position:relative;border:5px solid white;border-radius:10px;background:white;box-shadow:0 8px 24px #35324d14;overflow:hidden}.kombify-client-guide .screen-image>img{display:block;width:100%;height:auto;margin:0;border-radius:0}.kombify-client-guide .annotation{position:absolute;border:2px solid #8b79e7;border-radius:5px;box-shadow:0 0 0 2px #8b79e721;pointer-events:none}.kombify-client-guide .annotation:not([data-n]):before{display:none}.kombify-client-guide .annotation:before{content:attr(data-n);position:absolute;left:-10px;top:-10px;background:#7864cb;color:white;border:2px solid white;border-radius:50%;width:19px;height:19px;text-align:center;font-size:10px;font-weight:700;line-height:15px}.kombify-client-guide .zoom-button{position:absolute;right:8px;bottom:8px;border:1px solid #e5e0ed;border-radius:7px;padding:6px;background:#ffffffeb;color:#656070;display:flex}.kombify-client-guide .zoom-button .ico{width:15px;height:15px}.kombify-client-guide .screen-caption{text-align:center;margin-top:10px;font-size:9px;color:var(--muted)}.kombify-client-guide .screen-caption .ico{width:10px;height:10px}.kombify-client-guide .image-fallback{display:none}.kombify-client-guide .image-unavailable .screen-image>img,.kombify-client-guide .image-unavailable .annotation{display:none}.kombify-client-guide .image-unavailable .image-fallback{min-height:260px;padding:30px 16px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;text-align:center;color:#656070;font-size:13px;background:#fff}.kombify-client-guide .image-fallback span{font-size:11px}.kombify-client-guide .wizard-bottom{display:flex;align-items:center;gap:16px;padding:14px 20px;border-top:1px solid var(--border);background:var(--bg)}.kombify-client-guide .progress-note{font-size:10px;color:var(--muted);margin-right:auto}.kombify-client-guide .progress-meter{display:flex;gap:4px;margin-bottom:5px}.kombify-client-guide .progress-meter span{width:25px;height:3px;border-radius:3px;background:var(--border)}.kombify-client-guide .progress-meter .done{background:var(--primary)}.kombify-client-guide .prev,.kombify-client-guide .next{display:flex;align-items:center;justify-content:center;gap:8px;border:0;border-radius:7px;font-size:12px;padding:10px 14px}.kombify-client-guide .prev{background:transparent;color:var(--muted)}.kombify-client-guide .next{background:var(--primary);color:white;font-weight:550}.kombify-client-guide .next .ico,.kombify-client-guide .prev .ico{width:15px;height:15px}.kombify-client-guide .provenance-inline{font-size:9px;color:var(--quiet);padding:9px 3px 0;display:flex;gap:5px;align-items:center;flex-wrap:wrap}.kombify-client-guide .provenance-inline a{text-decoration:underline;text-underline-offset:3px}.kombify-client-guide .verify-list{display:flex;flex-direction:column;gap:13px;margin:0 0 21px}.kombify-client-guide .verify-list label{display:flex;align-items:flex-start;gap:10px;font-size:13px;cursor:pointer}.kombify-client-guide .verify-list input{appearance:auto;width:16px;height:16px;margin-top:3px;accent-color:var(--primary);flex-shrink:0}.kombify-client-guide .more-section{margin-top:29px}.kombify-client-guide .more-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.kombify-client-guide .more-card{display:flex;align-items:center;gap:13px;padding:17px;border:1px solid var(--border);border-radius:10px;background:var(--bg);text-align:left;color:var(--ink)}.kombify-client-guide .more-card>span:nth-child(2){flex:1}.kombify-client-guide .more-card strong{display:block;font-size:12px;font-weight:600}.kombify-client-guide .more-card small{display:block;font-size:10px;color:var(--muted);margin-top:3px}.kombify-client-guide .more-card>.ico{width:15px;height:15px;color:var(--quiet)}.kombify-client-guide .more-icon{background:var(--wash);color:var(--deep);width:38px;height:38px;display:flex;align-items:center;justify-content:center;border-radius:9px;flex-shrink:0}.kombify-client-guide .more-icon.green{color:var(--green);background:var(--panel)}.kombify-client-guide .faq-section{margin-top:32px}.kombify-client-guide .faq{border-bottom:1px solid var(--border)}.kombify-client-guide .faq .disclosure-title{padding:16px 1px;font-size:13px;font-weight:500}.kombify-client-guide .answer{font-size:13px;line-height:1.8;color:var(--muted);padding:0 2px 16px}.kombify-client-guide .answer a{color:var(--deep);text-decoration:underline}.kombify-client-guide .answer .ico{width:11px;height:11px}.kombify-client-guide .footline{display:flex;justify-content:space-between;align-items:flex-start;gap:20px;border-top:1px solid var(--border);margin-top:35px;padding-top:20px;font-size:10px;color:var(--muted)}.kombify-client-guide .attribution strong{font-weight:500;color:var(--ink)}.kombify-client-guide .attribution .ico{width:10px;height:10px}.kombify-client-guide .reset{border:0;background:transparent;color:var(--muted);font-size:10px;white-space:nowrap;padding:0}.kombify-client-guide .source-section{margin-top:17px;font-size:10px;color:var(--muted)}.kombify-client-guide .source-content{padding:14px;background:var(--panel);border:1px solid var(--border);border-radius:8px;margin-top:10px;font-size:11px;line-height:1.8}.kombify-client-guide .source-content p+p{margin-top:9px}.kombify-client-guide .source-links{display:flex;flex-wrap:wrap;gap:8px 15px;margin-top:12px}.kombify-client-guide .source-links a{color:var(--deep)}.kombify-client-guide .source-links .ico{width:10px;height:10px}.kombify-client-guide .dim{font-size:9px;color:var(--quiet);margin-top:14px}.kombify-client-guide dialog{border:1px solid var(--border);border-radius:16px;padding:0;width:min(560px,calc(100vw - 32px));max-height:85dvh;background:var(--bg);color:var(--ink);box-shadow:0 20px 80px #18122b44;margin:auto}.kombify-client-guide dialog::backdrop{background:#20163366;backdrop-filter:blur(3px)}.kombify-client-guide .dialog-header{padding:20px 24px;border-bottom:1px solid var(--border);display:flex;justify-content:space-between;align-items:center;gap:15px}.kombify-client-guide .dialog-header h2{font-size:18px}.kombify-client-guide .dialog-close{border:0;background:var(--soft);color:var(--muted);border-radius:6px;padding:6px;display:flex}.kombify-client-guide .zoom-dialog{width:auto;max-width:calc(100vw - 32px)}.kombify-client-guide .zoom-content{padding:20px;text-align:center}.kombify-client-guide .zoom-content img{display:block;max-height:65dvh;max-width:min(80vw,820px);width:auto;height:auto;margin:auto}.kombify-client-guide .zoom-content a{display:inline-block;font-size:11px;color:var(--deep);margin-top:12px}.kombify-client-guide .zoom-content .ico{width:11px;height:11px}.kombify-client-guide .toast:not(.show){display:none}.kombify-client-guide .toast{position:fixed;bottom:20px;left:50%;transform:translateX(-50%);padding:10px 20px;border-radius:10px;background:#33304a;color:white;font-size:12px;z-index:90;box-shadow:0 5px 30px #30284722}@media (max-width:1000px){.kombify-client-guide .panel-copy{padding:25px 22px}.kombify-client-guide .download-card{padding:14px 12px;gap:10px}.kombify-client-guide .step-tab{font-size:10px;gap:6px}.kombify-client-guide .panel-visual{padding:22px 15px}.kombify-client-guide .panel-copy h3{font-size:23px}}@media (max-width:600px){.kombify-client-guide .page-tools{display:none}.kombify-client-guide .intro-meta{gap:12px;font-size:10px;flex-wrap:wrap}.kombify-client-guide .ready-strip{margin-top:19px;padding:11px 12px;gap:7px 12px}.kombify-client-guide .ready-strip>.guide-strong{width:100%}.kombify-client-guide .ready-strip a{margin-left:0}.kombify-client-guide .downloads-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.kombify-client-guide .step-tab span:last-child{display:none}.kombify-client-guide .download-card{padding:14px 12px;gap:10px}.kombify-client-guide .platform-icon{width:33px;height:37px}.kombify-client-guide .platform-icon .ico{width:21px;height:21px}.kombify-client-guide .download-text strong{font-size:11px}.kombify-client-guide .download-text small,.kombify-client-guide .store-name{font-size:9px}.kombify-client-guide .guide-heading h2{font-size:14px}.kombify-client-guide .step-tabs{padding:0 5px}.kombify-client-guide .step-tab{flex-direction:column;gap:5px;padding:12px 4px;font-size:10px}.kombify-client-guide .step-dot{width:22px;height:22px;font-size:9px}.kombify-client-guide .guide-panel{grid-template-columns:1fr;min-height:0}.kombify-client-guide .panel-copy{padding:22px}.kombify-client-guide .panel-copy h3{font-size:22px}.kombify-client-guide .panel-visual{border-left:0;border-top:1px solid var(--border);min-height:310px;padding:28px 22px 15px}.kombify-client-guide .screen-figure{width:min(100%,360px)}.kombify-client-guide .screen-figure.phone{width:190px}.kombify-client-guide .wizard-bottom{padding:12px 13px;gap:6px}.kombify-client-guide .prev{padding:8px 5px;font-size:11px}.kombify-client-guide .next{padding:11px;font-size:11px}.kombify-client-guide .progress-note{font-size:8px}.kombify-client-guide .progress-meter span{width:17px}.kombify-client-guide .more-grid{grid-template-columns:1fr}.kombify-client-guide .footline{flex-wrap:wrap}.kombify-client-guide .toast{width:calc(100vw - 40px);text-align:center;font-size:11px}.kombify-client-guide .dialog-header{padding:17px 19px}}@media (prefers-reduced-motion:reduce){.kombify-client-guide *{transition:none!important;animation:none!important}}@media print{.kombify-client-guide :is(.page-tools,.step-tabs,.wizard-bottom,.more-section,.reset,.toast,.zoom-button){display:none!important}.kombify-client-guide.guide-enhanced .guide-panel:not(.active){display:grid}.kombify-client-guide .guide-panel{grid-template-columns:1fr 40%;break-inside:avoid;border-top:1px solid var(--border)}}.kombify-client-guide .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.kombify-client-guide .badge{display:inline-flex;align-items:center;gap:4px;width:max-content;max-width:100%;overflow-wrap:anywhere;margin-top:5px;padding:1px 6px;border-radius:999px;font-size:9px;font-weight:600;letter-spacing:.2px;border:1px solid var(--border);color:var(--muted);background:var(--soft)}.kombify-client-guide .badge.official{color:var(--green);border-color:#bfe0d3;background:#f1f9f5}.kombify-client-guide .badge.unofficial{color:#8a5a00;border-color:#ecd9a8;background:#fdf8ea}.kombify-client-guide .screen-image>.annotation{z-index:1}.kombify-client-guide .only-dark{display:none!important}.kombify-client-guide .link-visual{width:min(100%,360px);margin-top:18px;display:flex;flex-direction:column;gap:12px}.kombify-client-guide .link-visual>p{font-size:12px;line-height:1.7;color:var(--muted)}.kombify-client-guide .link-visual>.guide-strong{font-size:15px;font-weight:620}.kombify-client-guide .vendor-link{display:flex;align-items:center;gap:10px;padding:12px 14px;border:1px solid var(--border);border-radius:10px;background:var(--bg);font-size:12px;color:var(--ink)}.kombify-client-guide .vendor-link:hover{border-color:var(--primary)}.kombify-client-guide .vendor-link small{display:block;font-size:10px;color:var(--muted)}.kombify-client-guide .vendor-link>span{flex:1}.kombify-client-guide .vendor-link .ico{width:14px;height:14px;color:var(--deep)}.kombify-client-guide .screen-caption .meta{display:block;margin-top:3px;color:var(--quiet)}.kombify-client-guide .more-card{text-decoration:none}.dark .kombify-client-guide{--ink:#ececf5;--muted:#b1b3c5;--quiet:#9b9db0;--primary:#818cf8;--deep:#a5b4fc;--wash:#292745;--border:#343447;--bg:#18181f;--panel:#202029;--soft:#25252f;--green:#6fd4ac}.dark .kombify-client-guide .only-dark{display:block!important}.dark .kombify-client-guide .only-light.has-dark{display:none!important}.dark .kombify-client-guide .screen-image{border-color:#2b2b36;background:#2b2b36}.dark .kombify-client-guide .badge.official{background:#1c2a24;border-color:#2f5446}.dark .kombify-client-guide .badge.unofficial{background:#2c2618;border-color:#5a4a22;color:#f0cf85}@media print{.kombify-client-guide .panel-visual{border-left:0}.kombify-client-guide .link-visual a:after{content:\" (\" attr(href) \")\";font-size:9px;color:var(--muted)}.kombify-client-guide .image-fallback{display:none!important}}.kombify-client-guide .disclosure-title{cursor:pointer;text-align:start;color:inherit;font:inherit;background:none;border:0;padding:0}.kombify-client-guide.guide-enhanced [data-guide-disclosure].collapsed>:is(.answer,.source-content){display:none}@media print{.kombify-client-guide.guide-enhanced [data-guide-disclosure].collapsed>:is(.answer,.source-content){display:block}}.kombify-client-guide .guide-strong{font-weight:600}.kombify-client-guide .guide-small{font-size:smaller}@media print{body:has(.kombify-client-guide) #navbar{display:none!important}}"}],"page":{"pagePath":"techstack/pairing-command","slug":"/techstack/pairing-command","pageMetadata":{"title":"Pairing command","description":"Connect a server to Techstack by running one personal command in its terminal","sidebarTitle":"Pairing command","icon":"terminal","href":"/techstack/pairing-command"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Connect a server to Techstack by running one personal command in its terminal\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,ol:`ol`,p:`p`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{Heading,Warning}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`The pairing command is the `,_jsx(_components.strong,{children:`Give me a 1-liner`}),` path in the Add Node wizard.\nYou copy one line from Techstack, paste it into the terminal of your server,\nand the server connects itself. You do not need to enter SSH details in\nTechstack.`]}),`\n`,_jsx(Heading,{level:`2`,id:`what-the-command-does`,children:`What the command does`}),`\n`,_jsx(_components.p,{children:`The command downloads the Techstack installer from your Techstack and runs it\nwith a personal, short-lived pairing token. On the server, the installer:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`detects the platform and installs the Techstack `,_jsx(_components.strong,{children:`Guard`}),`, a small agent\nthat reports the server’s health;`]}),`\n`,_jsx(_components.li,{children:`installs the pinned StackKits runtime the rollout needs;`}),`\n`,_jsx(_components.li,{children:`redeems the pairing token, which links this server to your homelab;`}),`\n`,_jsxs(_components.li,{children:[`installs Docker with `,_jsx(_components.code,{children:`apt-get`}),` when no working container runtime is present;`]}),`\n`,_jsxs(_components.li,{children:[`installs and starts the `,_jsx(_components.code,{children:`techstack-agent`}),` system service, so the Guard\nkeeps running after a restart.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`The Guard talks to Techstack only through an `,_jsx(_components.strong,{children:`outbound`}),` HTTPS connection. It\nsends a heartbeat and a measured inventory about every 30 seconds. You do not\nopen an inbound port on the server for it.`]}),`\n`,_jsx(_components.p,{children:`The token works once. Techstack stores only a hash of the credential the\nserver receives, and the command is not kept in job reports.`}),`\n`,_jsx(Heading,{level:`2`,id:`before-you-run-it`,children:`Before you run it`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`A Linux server with systemd.`}),` Ubuntu is the standard system; see\n`,_jsx(_components.a,{href:`/techstack/add-node#operating-system`,children:`Add a Node`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Administrator rights.`}),` Run the command as `,_jsx(_components.code,{children:`root`}),` or as a user that can use\n`,_jsx(_components.code,{children:`sudo`}),`. The installer writes system files and installs a service.`]}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[_jsx(_components.code,{children:`curl`}),` on the server.`]}),` The command uses it to download the installer.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`The server can reach Techstack.`}),` The progress page shows the field\n`,_jsx(_components.strong,{children:`Techstack URL reachable from the server`}),`. The address in that field must\nopen from the server, not only from your computer. With the\n`,_jsx(_components.a,{href:`/techstack/install-windows`,children:`Windows Beta`}),`, the server reaches the Windows\ncomputer on TCP port `,_jsx(_components.code,{children:`5264`}),` in your local network, so keep the Windows client\nrunning while you pair.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`A fresh command.`}),` A pairing token expires 15 minutes after Techstack\ncreates it.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`run-the-command`,children:`Run the command`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Finish the Add Node wizard. Techstack opens the progress page for the new\nNode, which shows `,_jsx(_components.strong,{children:`Not connected yet`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Check the `,_jsx(_components.strong,{children:`Techstack URL reachable from the server`}),` field and correct it\nif the server uses a different address to reach Techstack.`]}),`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Copy pairing command`}),`.`]}),`\n`,_jsx(_components.li,{children:`Open a terminal on the server, directly or over SSH, paste the command, and\npress Enter. Do not change the command. It contains your personal token.`}),`\n`,_jsx(_components.li,{children:`Wait for the installer to finish. It prints each step.`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`If the page says `,_jsx(_components.strong,{children:`This pairing token has expired`}),`, select `,_jsx(_components.strong,{children:`Generate new\ncommand`}),` and run the new command instead. The old one no longer works.`]}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`Treat the command like a one-time password. Anyone who runs it before it\nexpires can connect a server to your homelab.`})}),`\n`,_jsx(Heading,{level:`2`,id:`when-the-node-is-connected`,children:`When the Node is connected`}),`\n`,_jsxs(_components.p,{children:[`When the Guard sends its first heartbeat, Techstack changes the Node from\n`,_jsx(_components.strong,{children:`Not connected yet`}),` to connected. The progress page then continues with the\nStackKit rollout for this Node. You can close the terminal.`]}),`\n`,_jsx(_components.p,{children:`To check the Guard on the server later:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`sudo systemctl status techstack-agent`}),` shows whether the service runs.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`sudo journalctl -u techstack-agent -f`}),` follows its log.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`For what happens during enrollment, how to recover an interrupted pairing and\nhow to end it again, see `,_jsx(_components.a,{href:`/techstack/guard/pairing`,children:`Pair a server with Guard`}),`\nand `,_jsx(_components.a,{href:`/techstack/guard/revoke-and-uninstall`,children:`Revoke, detach and uninstall Guard`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`The Node now appears in your homelab with its health. Where its services are\nreachable does not depend on where the server stands: local hardware and\nrented servers can both use your own domain or a `,_jsx(_components.code,{children:`*.kombify.me`}),` address. See\n`,_jsx(_components.a,{href:`/kombify-me/overview`,children:`kombify.me`}),`.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Pairing command","description":"Connect a server to Techstack by running one personal command in its terminal","sidebarTitle":"Pairing command","icon":"terminal","href":"/techstack/pairing-command"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"What the command does","slug":"what-the-command-does","depth":2,"children":[]},{"title":"Before you run it","slug":"before-you-run-it","depth":2,"children":[]},{"title":"Run the command","slug":"run-the-command","depth":2,"children":[]},{"title":"When the Node is connected","slug":"when-the-node-is-connected","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"kombiverselabs-0b0a8e7b","siteName":"kombify","title":"Pairing command - kombify","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"en":{"href":"/techstack/pairing-command","matchLevel":0},"de":{"href":"/de/techstack/pairing-command","matchLevel":1},"es":{"href":"/es/techstack/pairing-command","matchLevel":1},"zh-Hans":{"href":"/zh-Hans/techstack/pairing-command","matchLevel":1},"hi":{"href":"/hi/techstack/pairing-command","matchLevel":1},"ar":{"href":"/ar/techstack/pairing-command","matchLevel":1}}},"lastModified":"2026-11-10T16:36:23.752Z","originalFileLocation":"techstack/pairing-command.mdx","locale":"en"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"dark\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Connect a server to Techstack by running one personal command in its terminal\">\u003cmeta data-mint-head name=\"application-name\" content=\"kombify\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/kombiverselabs-0b0a8e7b/6N-jvzL82rvGR_d7/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/kombiverselabs-0b0a8e7b/6N-jvzL82rvGR_d7/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/kombiverselabs-0b0a8e7b/6N-jvzL82rvGR_d7/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/kombiverselabs-0b0a8e7b/6N-jvzL82rvGR_d7/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/kombiverselabs-0b0a8e7b/6N-jvzL82rvGR_d7/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/kombiverselabs-0b0a8e7b/6N-jvzL82rvGR_d7/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/kombiverselabs-0b0a8e7b/6N-jvzL82rvGR_d7/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/kombiverselabs-0b0a8e7b/6N-jvzL82rvGR_d7/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/kombiverselabs-0b0a8e7b/6N-jvzL82rvGR_d7/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Pairing command - kombify\">\u003cmeta data-mint-head property=\"og:description\" content=\"Connect a server to Techstack by running one personal command in its terminal\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"kombify\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.kombify.io/techstack/pairing-command\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://kombiverselabs-0b0a8e7b.mintlify.site/_mintlify/api/og/v2?division=Nodes\u0026amp;title=Pairing+command\u0026amp;description=Connect+a+server+to+Techstack+by+running+one+personal+command+in+its+terminal\u0026amp;theme=bf908c200520c0e99647d4ef\u0026amp;signature=0d05691025823d663b30ff89f4ef443b2955b6f7d6964c83ff142db9200dbbb8\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Pairing command - kombify\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Connect a server to Techstack by running one personal command in its terminal\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://kombiverselabs-0b0a8e7b.mintlify.site/_mintlify/api/og/v2?division=Nodes\u0026amp;title=Pairing+command\u0026amp;description=Connect+a+server+to+Techstack+by+running+one+personal+command+in+its+terminal\u0026amp;theme=bf908c200520c0e99647d4ef\u0026amp;signature=0d05691025823d663b30ff89f4ef443b2955b6f7d6964c83ff142db9200dbbb8\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/kombiverselabs-0b0a8e7b/6N-jvzL82rvGR_d7/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"kombify\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#6366F1\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.kombify.io/techstack/pairing-command\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/techstack/pairing-command.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"en\" href=\"https://docs.kombify.io/techstack/pairing-command\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"de\" href=\"https://docs.kombify.io/de/techstack/pairing-command\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"es\" href=\"https://docs.kombify.io/es/techstack/pairing-command\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"zh-Hans\" href=\"https://docs.kombify.io/zh-Hans/techstack/pairing-command\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"hi\" href=\"https://docs.kombify.io/hi/techstack/pairing-command\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"ar\" href=\"https://docs.kombify.io/ar/techstack/pairing-command\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://docs.kombify.io/techstack/pairing-command\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.kombify.io/#organization\",\"name\":\"kombify\",\"url\":\"https://docs.kombify.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/kombiverselabs-0b0a8e7b/KJjd5IRouo0WTrDs/images/logo_sized.png?fit=max\u0026auto=format\u0026n=KJjd5IRouo0WTrDs\u0026q=85\u0026s=dd7a94af58a3970049f077be986cb8c4\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.kombify.io#website\",\"name\":\"kombify\",\"url\":\"https://docs.kombify.io\",\"publisher\":{\"@id\":\"https://docs.kombify.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.kombify.io/techstack/pairing-command#webpage\",\"url\":\"https://docs.kombify.io/techstack/pairing-command\",\"name\":\"Pairing command\",\"description\":\"Connect a server to Techstack by running one personal command in its terminal\",\"dateModified\":\"2026-11-10T16:36:23.752Z\",\"isPartOf\":{\"@id\":\"https://docs.kombify.io#website\"},\"breadcrumb\":{\"@id\":\"https://docs.kombify.io/techstack/pairing-command#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.kombify.io/techstack/pairing-command#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Nodes\",\"item\":\"https://docs.kombify.io/techstack/add-node\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Pairing command\",\"item\":\"https://docs.kombify.io/techstack/pairing-command\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.kombify.io/techstack/pairing-command#article\",\"headline\":\"Pairing command\",\"name\":\"Pairing command\",\"description\":\"Connect a server to Techstack by running one personal command in its terminal\",\"url\":\"https://docs.kombify.io/techstack/pairing-command\",\"mainEntityOfPage\":{\"@id\":\"https://docs.kombify.io/techstack/pairing-command#webpage\"},\"dateModified\":\"2026-11-10T16:36:23.752Z\",\"publisher\":{\"@id\":\"https://docs.kombify.io/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.kombify.io#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"kombify\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"kombify\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/techstack/pairing-command.md","siteName":"kombify","nav":{"global":{"anchors":[{"anchor":"GitHub","icon":"github","href":"https://github.com/kombifyio"},{"anchor":"Community","icon":"comments","href":"https://github.com/kombifyio/StackKits/discussions"},{"anchor":"Blog","icon":"newspaper","href":"https://blog.kombify.io"}]},"languages":[{"language":"en","default":true,"tabs":[{"tab":"Start","icon":"house","pages":[{"title":"Start","href":""}]},{"tab":"StackKits","icon":"boxes-stacked","pages":[{"title":"StackKits","href":"/stackkits/overview"}]},{"tab":"Techstack","icon":"layer-group","groups":[{"group":"Techstack","pages":[{"title":"Techstack","sidebarTitle":"Overview","icon":"layer-group","href":"/techstack/overview"},{"title":"Install Techstack Beta on Windows","sidebarTitle":"Install Windows Beta","icon":"windows","href":"/techstack/install-windows"},{"title":"Techstack operating modes","sidebarTitle":"Operating modes","icon":"sliders","href":"/techstack/operating-modes"},{"title":"Techstack availability","sidebarTitle":"Availability","icon":"circle-info","href":"/techstack/availability"}]},{"group":"kombify Guard","icon":"shield-halved","pages":[{"title":"kombify Guard","sidebarTitle":"Why Guard matters","icon":"shield-halved","mode":"explanation","href":"/techstack/guard/overview"},{"title":"Guard architecture and operation truth","sidebarTitle":"Architecture","icon":"diagram-project","mode":"explanation","href":"/techstack/guard/architecture"},{"title":"Guard protection and recovery evidence","sidebarTitle":"Protection and recovery","icon":"clipboard-check","mode":"explanation","href":"/techstack/guard/protection-and-recovery"},{"title":"Pair a server with Guard","sidebarTitle":"Pair a server","icon":"link","href":"/techstack/guard/pairing"},{"title":"What Guard sends and keeps","sidebarTitle":"Data Guard sends","icon":"database","href":"/techstack/guard/data"},{"title":"Revoke, detach and uninstall Guard","sidebarTitle":"Revoke and uninstall","icon":"plug-circle-xmark","href":"/techstack/guard/revoke-and-uninstall"}]},{"group":"Nodes","icon":"server","pages":[{"title":"Add a Node","description":"Choose where a new Node comes from, which system it runs, and what role it has in your StackKit","sidebarTitle":"Add a Node","icon":"server","href":"/techstack/add-node"},{"title":"Pairing command","sidebarTitle":"Pairing command","icon":"terminal","href":"/techstack/pairing-command"},{"title":"Connect a server over SSH","description":"Let Techstack sign in to your server over SSH and connect it for you","sidebarTitle":"Connect over SSH","icon":"key","href":"/techstack/ssh-connection"},{"title":"Node roles and StackKit foundation","sidebarTitle":"Node roles","icon":"sitemap","href":"/techstack/node-roles"},{"title":"Managed servers","sidebarTitle":"Managed servers","icon":"cloud","href":"/techstack/managed-servers"},{"title":"Run kombify on Proxmox VE","sidebarTitle":"Proxmox VE","icon":"server","href":"/guides/stackkits/proxmox"},{"title":"Home Assistant on kombify","sidebarTitle":"Home Assistant","icon":"house-signal","href":"/guides/stackkits/home-assistant-os"}]},{"group":"kombify.me","icon":"globe","pages":[{"title":"kombify.me","sidebarTitle":"Overview","icon":"globe","href":"/kombify-me/overview"},{"title":"Get your first kombify.me address","sidebarTitle":"Your first address","icon":"rocket","href":"/kombify-me/get-your-first-address"},{"title":"Public, private or redirect: which one do I need?","sidebarTitle":"Public or private","icon":"route","href":"/kombify-me/public-or-private"},{"title":"Publish a service on kombify.me","sidebarTitle":"Public addresses","icon":"lock","href":"/kombify-me/public-addresses"},{"title":"Reach a private service through kombify.me","sidebarTitle":"Private targets","icon":"network-wired","href":"/kombify-me/private-targets"},{"title":"Use an address with a StackKits server","sidebarTitle":"StackKits server","icon":"server","href":"/kombify-me/connect-a-stackkits-server"},{"title":"Change, pause or remove an address","sidebarTitle":"Change or remove","icon":"sliders","href":"/kombify-me/change-pause-or-remove-an-address"},{"title":"kombify.me troubleshooting","sidebarTitle":"Troubleshooting","icon":"life-ring","href":"/kombify-me/troubleshooting"}]},{"group":"Reference","pages":[{"group":"CLI","icon":"square-terminal","root":{"title":"techstack api CLI reference","sidebarTitle":"Overview","icon":"square-terminal","href":"/techstack/reference/cli/overview"},"pages":[{"title":"techstack api addons","sidebarTitle":"addons","href":"/techstack/reference/cli/addons"},{"title":"techstack api agents","sidebarTitle":"agents","href":"/techstack/reference/cli/agents"},{"title":"techstack api auth","sidebarTitle":"auth","href":"/techstack/reference/cli/auth"},{"title":"techstack api autoinstall","sidebarTitle":"autoinstall","href":"/techstack/reference/cli/autoinstall"},{"title":"techstack api client-pairing","sidebarTitle":"client-pairing","href":"/techstack/reference/cli/client-pairing"},{"title":"techstack api discovery","sidebarTitle":"discovery","href":"/techstack/reference/cli/discovery"},{"title":"techstack api drift","sidebarTitle":"drift","href":"/techstack/reference/cli/drift"},{"title":"techstack api features","sidebarTitle":"features","href":"/techstack/reference/cli/features"},{"title":"techstack api health","sidebarTitle":"health","href":"/techstack/reference/cli/health"},{"title":"techstack api homelab","sidebarTitle":"homelab","href":"/techstack/reference/cli/homelab"},{"title":"techstack api install-scripts","sidebarTitle":"install-scripts","href":"/techstack/reference/cli/install-scripts"},{"title":"techstack api instance","sidebarTitle":"instance","href":"/techstack/reference/cli/instance"},{"title":"techstack api inventory","sidebarTitle":"inventory","href":"/techstack/reference/cli/inventory"},{"title":"techstack api jobs","sidebarTitle":"jobs","href":"/techstack/reference/cli/jobs"},{"title":"techstack api managed-runtimes","sidebarTitle":"managed-runtimes","href":"/techstack/reference/cli/managed-runtimes"},{"title":"techstack api monitor","sidebarTitle":"monitor","href":"/techstack/reference/cli/monitor"},{"title":"techstack api monthly-runtimes","sidebarTitle":"monthly-runtimes","href":"/techstack/reference/cli/monthly-runtimes"},{"title":"techstack api pairing-tokens","sidebarTitle":"pairing-tokens","href":"/techstack/reference/cli/pairing-tokens"},{"title":"techstack api registry","sidebarTitle":"registry","href":"/techstack/reference/cli/registry"},{"title":"techstack api runtime","sidebarTitle":"runtime","href":"/techstack/reference/cli/runtime"},{"title":"techstack api servers","sidebarTitle":"servers","href":"/techstack/reference/cli/servers"},{"title":"techstack api services","sidebarTitle":"services","href":"/techstack/reference/cli/services"},{"title":"techstack api stack-identity","sidebarTitle":"stack-identity","href":"/techstack/reference/cli/stack-identity"},{"title":"techstack api stackkits","sidebarTitle":"stackkits","href":"/techstack/reference/cli/stackkits"},{"title":"techstack api stacks","sidebarTitle":"stacks","href":"/techstack/reference/cli/stacks"},{"title":"techstack api system","sidebarTitle":"system","href":"/techstack/reference/cli/system"},{"title":"techstack api system-accounts","sidebarTitle":"system-accounts","href":"/techstack/reference/cli/system-accounts"},{"title":"techstack api tunnel","sidebarTitle":"tunnel","href":"/techstack/reference/cli/tunnel"},{"title":"techstack api unifier","sidebarTitle":"unifier","href":"/techstack/reference/cli/unifier"},{"title":"techstack api wallet","sidebarTitle":"wallet","href":"/techstack/reference/cli/wallet"},{"title":"techstack api workers","sidebarTitle":"workers","href":"/techstack/reference/cli/workers"}]},{"group":"API","icon":"code","pages":[{"group":"Health","pages":[{"title":"Main health check","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/health","href":"/techstack/reference/api/health/main-health-check"},{"title":"Kubernetes liveness probe","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/health/live","href":"/techstack/reference/api/health/kubernetes-liveness-probe"},{"title":"Kubernetes readiness probe","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/health/ready","href":"/techstack/reference/api/health/kubernetes-readiness-probe"},{"title":"Kubernetes startup probe","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/health/startup","href":"/techstack/reference/api/health/kubernetes-startup-probe"},{"title":"Service info (version, runtime stats)","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/info","href":"/techstack/reference/api/health/service-info-version-runtime-stats"},{"title":"Discover API capabilities for clients","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/capabilities","href":"/techstack/reference/api/health/discover-api-capabilities-for-clients"},{"title":"Public runtime config for the static SPA","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/client/bootstrap","href":"/techstack/reference/api/health/public-runtime-config-for-the-static-spa"},{"title":"Data protection profile of the signed-in user","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/data-profile","href":"/techstack/reference/api/health/data-protection-profile-of-the-signed-in-user"},{"title":"Download the OpenAPI contract","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/openapi.yaml","href":"/techstack/reference/api/health/download-the-openapi-contract"},{"title":"V2 health check","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v2/health","href":"/techstack/reference/api/health/v2-health-check"},{"title":"Check missing dependencies","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/autoinstall/status","href":"/techstack/reference/api/health/check-missing-dependencies"},{"title":"Install missing dependencies","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/autoinstall/install","href":"/techstack/reference/api/health/install-missing-dependencies"}]},{"group":"Auth","pages":[{"title":"Issue a CSRF token for cookie-authenticated browser mutations","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/csrf","href":"/techstack/reference/api/auth/issue-a-csrf-token-for-cookie-authenticated-browser-mutations"},{"title":"Get current auth mode (local or cloud)","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/auth/mode","href":"/techstack/reference/api/auth/get-current-auth-mode-local-or-cloud"},{"title":"One-shot local owner setup","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/auth/setup","href":"/techstack/reference/api/auth/one-shot-local-owner-setup"},{"title":"List available local and browser auth methods","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/auth/methods","href":"/techstack/reference/api/auth/list-available-local-and-browser-auth-methods"},{"title":"Login with a local auth method","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/auth/login","href":"/techstack/reference/api/auth/login-with-a-local-auth-method"},{"title":"Reveal the unclaimed break-glass bootstrap account","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/auth/breakglass/reveal","href":"/techstack/reference/api/auth/reveal-the-unclaimed-break-glass-bootstrap-account"},{"title":"Claim the break-glass bootstrap account","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/auth/breakglass/claim","href":"/techstack/reference/api/auth/claim-the-break-glass-bootstrap-account"},{"title":"Get stack identity metadata","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/auth/stack-identity","href":"/techstack/reference/api/auth/get-stack-identity-metadata"},{"title":"Update stack identity metadata","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml put /api/v1/auth/stack-identity","href":"/techstack/reference/api/auth/update-stack-identity-metadata"},{"title":"Verify SSO token from portal","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/auth/portal-verify","href":"/techstack/reference/api/auth/verify-sso-token-from-portal"},{"title":"OIDC callback handler","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/auth/callback","href":"/techstack/reference/api/auth/oidc-callback-handler"},{"title":"OIDC logout handler","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/auth/logout","href":"/techstack/reference/api/auth/oidc-logout-handler"},{"title":"OIDC callback handler (cloud mode)","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /auth/callback","href":"/techstack/reference/api/auth/oidc-callback-handler-cloud-mode"},{"title":"Legacy OIDC logout alias","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /auth/logout","href":"/techstack/reference/api/auth/legacy-oidc-logout-alias"},{"title":"Return the current browser session identity","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v2/whoami","href":"/techstack/reference/api/auth/return-the-current-browser-session-identity"},{"title":"List active browser auth providers","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v2/auth/providers","href":"/techstack/reference/api/auth/list-active-browser-auth-providers"},{"title":"Start browser auth login flow","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v2/auth/login","href":"/techstack/reference/api/auth/start-browser-auth-login-flow"},{"title":"Finish browser auth login flow","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v2/auth/callback","href":"/techstack/reference/api/auth/finish-browser-auth-login-flow"},{"title":"End the browser auth session","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v2/auth/logout","href":"/techstack/reference/api/auth/end-the-browser-auth-session"},{"title":"Reset system account password","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/system-accounts/{role}/reset","href":"/techstack/reference/api/auth/reset-system-account-password"}]},{"group":"Instance","pages":[{"title":"Get the stable local instance identity","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/instance","href":"/techstack/reference/api/instance/get-the-stable-local-instance-identity"},{"title":"Get the local enrollment record","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/enrollment","href":"/techstack/reference/api/instance/get-the-local-enrollment-record"}]},{"group":"Stacks","pages":[{"title":"List the owner's StackKit deployments","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/stacks","href":"/techstack/reference/api/stacks/list-the-owners-stackkit-deployments"},{"title":"Create a StackKit deployment in the owner's Homelab","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/stacks","href":"/techstack/reference/api/stacks/create-a-stackkit-deployment-in-the-owners-homelab"},{"title":"Get the caller's homelab and its StackKit deployments","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/homelab","href":"/techstack/reference/api/stacks/get-the-callers-homelab-and-its-stackkit-deployments"},{"title":"Rename the caller's homelab","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml patch /api/v1/homelab","href":"/techstack/reference/api/stacks/rename-the-callers-homelab"},{"title":"Review or apply owner-scoped test-residue cleanup","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/stacks/prune-orphans","href":"/techstack/reference/api/stacks/review-or-apply-owner-scoped-test-residue-cleanup"},{"title":"Fetch the owner bootstrap spec for a StackKit deployment","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/stacks/{id}/owner-spec","href":"/techstack/reference/api/stacks/fetch-the-owner-bootstrap-spec-for-a-stackkit-deployment"},{"title":"Start provisioning an existing StackKit deployment","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/stacks/{id}/provision","href":"/techstack/reference/api/stacks/start-provisioning-an-existing-stackkit-deployment"},{"title":"Roll out one StackKit deployment (unify + IaC + tofu apply)","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/stacks/{id}/deploy","href":"/techstack/reference/api/stacks/roll-out-one-stackkit-deployment-unify-+-iac-+-tofu-apply"},{"title":"Get the post-configuration operations read model for one owned StackKit deployment","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/stacks/{id}/operations","href":"/techstack/reference/api/stacks/get-the-post-configuration-operations-read-model-for-one-owned-stackkit-deployment"},{"title":"Queue an owned node's typed Advanced or backup operation","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/stacks/{id}/stackkit/operations","href":"/techstack/reference/api/stacks/queue-an-owned-nodes-typed-advanced-or-backup-operation"},{"title":"Verify request-bound managed-runtime authority without creating a resource","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/managed-runtimes/authority","href":"/techstack/reference/api/stacks/verify-request-bound-managed-runtime-authority-without-creating-a-resource"},{"title":"Add one managed Node through native provider control","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/stacks/{id}/managed-runtimes","href":"/techstack/reference/api/stacks/add-one-managed-node-through-native-provider-control"},{"title":"Resume one overdue managed Node wait on its exact existing VM","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/stacks/{id}/resume-enrollment","href":"/techstack/reference/api/stacks/resume-one-overdue-managed-node-wait-on-its-exact-existing-vm"},{"title":"Retry one failed StackKit deployment rollout on its exact existing managed VM","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/stacks/{id}/retry-rollout","href":"/techstack/reference/api/stacks/retry-one-failed-stackkit-deployment-rollout-on-its-exact-existing-managed-vm"},{"title":"Repair one degraded component of a completed rollout on its existing server","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/stacks/{id}/repair","href":"/techstack/reference/api/stacks/repair-one-degraded-component-of-a-completed-rollout-on-its-existing-server"},{"title":"Read desired and observed routing state for one StackKit deployment","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/stacks/{id}/routing","href":"/techstack/reference/api/stacks/read-desired-and-observed-routing-state-for-one-stackkit-deployment"},{"title":"Ensure the desired routing overlay for one exact StackKit deployment and Node","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml put /api/v1/stacks/{id}/routing","href":"/techstack/reference/api/stacks/ensure-the-desired-routing-overlay-for-one-exact-stackkit-deployment-and-node"},{"title":"List explicit primary routing targets for one StackKit deployment","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/stacks/{id}/routing/targets","href":"/techstack/reference/api/stacks/list-explicit-primary-routing-targets-for-one-stackkit-deployment"},{"title":"Decommission one StackKit deployment and its infrastructure","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/stacks/{id}/destroy","href":"/techstack/reference/api/stacks/decommission-one-stackkit-deployment-and-its-infrastructure"}]},{"group":"Stacks - Specs","pages":[{"title":"Get persisted kombination.yaml (byte-exact, base64)","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/stacks/{id}/intent","href":"/techstack/reference/api/stacks--specs/get-persisted-kombinationyaml-byte-exact-base64"},{"title":"Get requirements spec (Phase 1 output)","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/stacks/{id}/requirements","href":"/techstack/reference/api/stacks--specs/get-requirements-spec-phase-1-output"},{"title":"Get unified spec (Phase 2 output)","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/stacks/{id}/unified","href":"/techstack/reference/api/stacks--specs/get-unified-spec-phase-2-output"},{"title":"Verify spec hash chain integrity","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/stacks/{id}/verify-chain","href":"/techstack/reference/api/stacks--specs/verify-spec-hash-chain-integrity"},{"title":"Get complete pipeline status for all spec phases","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/stacks/{id}/pipeline-status","href":"/techstack/reference/api/stacks--specs/get-complete-pipeline-status-for-all-spec-phases"}]},{"group":"Stacks - Import/Export","pages":[{"title":"Export stack as stack-spec.yaml","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/stacks/{id}/export","href":"/techstack/reference/api/stacks--importexport/export-stack-as-stack-specyaml"},{"title":"Import stack-spec.yaml as a StackKit deployment","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/stacks/import","href":"/techstack/reference/api/stacks--importexport/import-stack-specyaml-as-a-stackkit-deployment"},{"title":"Validate spec without importing","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/stacks/import/validate","href":"/techstack/reference/api/stacks--importexport/validate-spec-without-importing"}]},{"group":"Stacks - Drift","pages":[{"title":"Trigger drift check","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/stacks/{id}/drift/check","href":"/techstack/reference/api/stacks--drift/trigger-drift-check"},{"title":"Get current drift status","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/stacks/{id}/drift/status","href":"/techstack/reference/api/stacks--drift/get-current-drift-status"},{"title":"Get detailed drift information with affected resources","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/stacks/{id}/drift/details","href":"/techstack/reference/api/stacks--drift/get-detailed-drift-information-with-affected-resources"},{"title":"Trigger drift resolution (re-apply)","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/stacks/{id}/drift/resolve","href":"/techstack/reference/api/stacks--drift/trigger-drift-resolution-re-apply"},{"title":"List all drift results (paginated)","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/drift/results","href":"/techstack/reference/api/stacks--drift/list-all-drift-results-paginated"},{"title":"Get single drift result","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/drift/results/{id}","href":"/techstack/reference/api/stacks--drift/get-single-drift-result"},{"title":"Delete drift result","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml delete /api/v1/drift/results/{id}","href":"/techstack/reference/api/stacks--drift/delete-drift-result"}]},{"group":"Unifier","pages":[{"title":"Validate a stack specification against CUE schemas","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/unifier/validate","href":"/techstack/reference/api/unifier/validate-a-stack-specification-against-cue-schemas"},{"title":"Analyze spec to get requirements (Phase 1)","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/unifier/analyze","href":"/techstack/reference/api/unifier/analyze-spec-to-get-requirements-phase-1"},{"title":"Unify specifications (Phase 2)","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/unifier/unify","href":"/techstack/reference/api/unifier/unify-specifications-phase-2"},{"title":"Run full unifier pipeline (validate + analyze + unify + generate)","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/unifier/pipeline","href":"/techstack/reference/api/unifier/run-full-unifier-pipeline-validate-+-analyze-+-unify-+-generate"},{"title":"Validate pipeline inputs without executing","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/unifier/pipeline/validate","href":"/techstack/reference/api/unifier/validate-pipeline-inputs-without-executing"},{"title":"Preview pipeline results without side effects","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/unifier/pipeline/preview","href":"/techstack/reference/api/unifier/preview-pipeline-results-without-side-effects"},{"title":"Generate IaC from unified spec","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/unifier/generate","href":"/techstack/reference/api/unifier/generate-iac-from-unified-spec"},{"title":"Generate IaC directly","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/unifier/iac","href":"/techstack/reference/api/unifier/generate-iac-directly"},{"title":"Preview IaC generation without writing files","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/unifier/iac/preview","href":"/techstack/reference/api/unifier/preview-iac-generation-without-writing-files"}]},{"group":"StackKits","pages":[{"title":"List available StackKits","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/stackkits","href":"/techstack/reference/api/stackkits/list-available-stackkits"},{"title":"Get specific StackKit details","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/stackkits/{name}","href":"/techstack/reference/api/stackkits/get-specific-stackkit-details"}]},{"group":"Add-ons","pages":[{"title":"List available add-ons","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/addons","href":"/techstack/reference/api/add-ons/list-available-add-ons"},{"title":"Auto-detect applicable add-ons for a spec","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/addons/detect","href":"/techstack/reference/api/add-ons/auto-detect-applicable-add-ons-for-a-spec"}]},{"group":"Inventory","pages":[{"title":"List sanitized server inventory for the authenticated owner","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/inventory/servers","href":"/techstack/reference/api/inventory/list-sanitized-server-inventory-for-the-authenticated-owner"},{"title":"Read the authenticated owner's server-presence summary","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/servers/summary","href":"/techstack/reference/api/inventory/read-the-authenticated-owners-server-presence-summary"},{"title":"Set or clear the owner-chosen name of one owned server","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml patch /api/v1/inventory/servers/{serverId}","href":"/techstack/reference/api/inventory/set-or-clear-the-owner-chosen-name-of-one-owned-server"},{"title":"Get freshness-qualified health for one owned server","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/inventory/servers/{serverId}/health","href":"/techstack/reference/api/inventory/get-freshness-qualified-health-for-one-owned-server"},{"title":"Get desired, reserved, observed, and exposed listeners for one owned server","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/inventory/servers/{serverId}/ports","href":"/techstack/reference/api/inventory/get-desired-reserved-observed-and-exposed-listeners-for-one-owned-server"},{"title":"List sanitized services for the authenticated owner's servers","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/inventory/services","href":"/techstack/reference/api/inventory/list-sanitized-services-for-the-authenticated-owners-servers"},{"title":"Get sanitized access context for one owned server","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/inventory/servers/{serverId}/access-context","href":"/techstack/reference/api/inventory/get-sanitized-access-context-for-one-owned-server"}]},{"group":"Servers","pages":[{"title":"Get the authenticated owner's port inventory for one canonical server","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/servers/{serverId}/ports","href":"/techstack/reference/api/servers/get-the-authenticated-owners-port-inventory-for-one-canonical-server"},{"title":"List canonical Node runtime state","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/servers","href":"/techstack/reference/api/servers/list-canonical-node-runtime-state"},{"title":"Get canonical server lifecycle, connection, health, and channels","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/servers/{serverId}","href":"/techstack/reference/api/servers/get-canonical-server-lifecycle-connection-health-and-channels"},{"title":"List the persisted server state timeline","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/servers/{serverId}/transitions","href":"/techstack/reference/api/servers/list-the-persisted-server-state-timeline"},{"title":"How available the server is, observed and as the owner confirmed it","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/servers/{serverId}/availability","href":"/techstack/reference/api/servers/how-available-the-server-is-observed-and-as-the-owner-confirmed-it"},{"title":"Confirm or correct how available the server is","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml put /api/v1/servers/{serverId}/availability","href":"/techstack/reference/api/servers/confirm-or-correct-how-available-the-server-is"},{"title":"Revoke and detach one exact customer-operated BYO server","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/servers/{serverId}/detach","href":"/techstack/reference/api/servers/revoke-and-detach-one-exact-customer-operated-byo-server"},{"title":"Ask the kombify Guard for a fresh host security observation","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/servers/{serverId}/security/verify","href":"/techstack/reference/api/servers/ask-the-kombify-guard-for-a-fresh-host-security-observation"},{"title":"List the open findings and recent findings history of one server","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/servers/{serverId}/security/findings","href":"/techstack/reference/api/servers/list-the-open-findings-and-recent-findings-history-of-one-server"},{"title":"List the recent security repairs of one server","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/servers/{serverId}/security/repairs","href":"/techstack/reference/api/servers/list-the-recent-security-repairs-of-one-server"},{"title":"Repair named drifted host security controls","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/servers/{serverId}/security/repairs","href":"/techstack/reference/api/servers/repair-named-drifted-host-security-controls"},{"title":"Read the owner's approval of automatic security repair","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/servers/{serverId}/security/auto-repair","href":"/techstack/reference/api/servers/read-the-owners-approval-of-automatic-security-repair"},{"title":"Approve or withdraw automatic repair of a small safe set of controls","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml put /api/v1/servers/{serverId}/security/auto-repair","href":"/techstack/reference/api/servers/approve-or-withdraw-automatic-repair-of-a-small-safe-set-of-controls"},{"title":"Read the server's network facts and any recorded home network move","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/servers/{serverId}/network","href":"/techstack/reference/api/servers/read-the-servers-network-facts-and-any-recorded-home-network-move"},{"title":"Re-bind a moved server to the network it is on now","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/servers/{serverId}/network/rebind","href":"/techstack/reference/api/servers/re-bind-a-moved-server-to-the-network-it-is-on-now"},{"title":"Publish the server at a kombify.me address, or stop publishing it","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml put /api/v1/servers/{serverId}/reach","href":"/techstack/reference/api/servers/publish-the-server-at-a-kombifyme-address-or-stop-publishing-it"},{"title":"Preview service and stack impact before confirming OS maintenance","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/servers/{serverId}/maintenance-impact","href":"/techstack/reference/api/servers/preview-service-and-stack-impact-before-confirming-os-maintenance"},{"title":"Queue an owned server OS update plan, OS update or reboot","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/servers/{serverId}/actions","href":"/techstack/reference/api/servers/queue-an-owned-server-os-update-plan-os-update-or-reboot"},{"title":"Read one maintenance job of an owned server","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/servers/{serverId}/actions/{jobId}","href":"/techstack/reference/api/servers/read-one-maintenance-job-of-an-owned-server"},{"title":"Cancel an owned maintenance job before execution starts","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/servers/{serverId}/actions/{jobId}/cancel","href":"/techstack/reference/api/servers/cancel-an-owned-maintenance-job-before-execution-starts"}]},{"group":"Services","pages":[{"title":"List canonical measured service runtime state","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/services","href":"/techstack/reference/api/services/list-canonical-measured-service-runtime-state"},{"title":"Get desired, observed, health, access, and action capabilities for one service","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/services/{serviceId}","href":"/techstack/reference/api/services/get-desired-observed-health-access-and-action-capabilities-for-one-service"},{"title":"Read node-owned connector status and current published transport admission","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/services/{serviceId}/connector","href":"/techstack/reference/api/services/read-node-owned-connector-status-and-current-published-transport-admission"},{"title":"Ensure or revoke one declared owned Home Assistant connector on its node","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/services/{serviceId}/connector","href":"/techstack/reference/api/services/ensure-or-revoke-one-declared-owned-home-assistant-connector-on-its-node"},{"title":"Refresh the current node-owned connector through a distinct read-only job","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/services/{serviceId}/connector/verify","href":"/techstack/reference/api/services/refresh-the-current-node-owned-connector-through-a-distinct-read-only-job"},{"title":"Assess one exact existing Home Assistant Container for in-place adoption","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/services/{serviceId}/adoption-plans","href":"/techstack/reference/api/services/assess-one-exact-existing-home-assistant-container-for-in-place-adoption"},{"title":"Read the retained application assessment and durable progress","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/services/{serviceId}/adoption-plans/{planId}","href":"/techstack/reference/api/services/read-the-retained-application-assessment-and-durable-progress"},{"title":"Execute the exact reviewed source plan with explicit Owner approval","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/services/{serviceId}/adoption-plans/{planId}/execute","href":"/techstack/reference/api/services/execute-the-exact-reviewed-source-plan-with-explicit-owner-approval"},{"title":"Release an adopted lifecycle binding without deleting or stopping its runtime","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/services/{serviceId}/release","href":"/techstack/reference/api/services/release-an-adopted-lifecycle-binding-without-deleting-or-stopping-its-runtime"},{"title":"Read measured resource metrics for an owned service","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/services/{serviceId}/metrics","href":"/techstack/reference/api/services/read-measured-resource-metrics-for-an-owned-service"},{"title":"List owned services with their catalog and canonical placement","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/registry/services","href":"/techstack/reference/api/services/list-owned-services-with-their-catalog-and-canonical-placement"},{"title":"Queue an owner-authorized StackKits service action","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/registry/services/{serviceId}/actions","href":"/techstack/reference/api/services/queue-an-owner-authorized-stackkits-service-action"},{"title":"Read the latest bounded, redacted StackKits service log page","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/registry/services/{serviceId}/logs","href":"/techstack/reference/api/services/read-the-latest-bounded-redacted-stackkits-service-log-page"}]},{"group":"Workers","pages":[{"title":"List registered workers (filtered by owner)","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/workers","href":"/techstack/reference/api/workers/list-registered-workers-filtered-by-owner"},{"title":"Register worker via pairing token","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/workers/register","href":"/techstack/reference/api/workers/register-worker-via-pairing-token"},{"title":"Exchange the worker credential and a key proof for an access token","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/workers/{id}/identity/token","href":"/techstack/reference/api/workers/exchange-the-worker-credential-and-a-key-proof-for-an-access-token"},{"title":"Propose a host key for a legacy bearer worker","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/workers/{id}/identity/bind","href":"/techstack/reference/api/workers/propose-a-host-key-for-a-legacy-bearer-worker"},{"title":"List the owner's servers that wait for an identity key approval","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/workers/identity-upgrades","href":"/techstack/reference/api/workers/list-the-owners-servers-that-wait-for-an-identity-key-approval"},{"title":"Show whether a server still needs its identity key approved","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/workers/{id}/identity/upgrade","href":"/techstack/reference/api/workers/show-whether-a-server-still-needs-its-identity-key-approved"},{"title":"Approve the key a legacy server proposed","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/workers/{id}/identity/upgrade/approve","href":"/techstack/reference/api/workers/approve-the-key-a-legacy-server-proposed"},{"title":"Discard the key a legacy server proposed","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/workers/{id}/identity/upgrade/reject","href":"/techstack/reference/api/workers/discard-the-key-a-legacy-server-proposed"},{"title":"Rotate the kombify Guard host key","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/workers/{id}/identity/rotate","href":"/techstack/reference/api/workers/rotate-the-kombify-guard-host-key"},{"title":"Report kombify Guard host security and backup observations","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/workers/{id}/posture","href":"/techstack/reference/api/workers/report-kombify-guard-host-security-and-backup-observations"},{"title":"Send kombify Guard host and container telemetry","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/workers/{id}/telemetry","href":"/techstack/reference/api/workers/send-kombify-guard-host-and-container-telemetry"},{"title":"Exchange kombify Guard reach state with the control plane","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/workers/{id}/reach","href":"/techstack/reference/api/workers/exchange-kombify-guard-reach-state-with-the-control-plane"},{"title":"Create an idempotent TechStack runtime enrollment","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /v1/ril/servers/connect","href":"/techstack/reference/api/workers/create-an-idempotent-techstack-runtime-enrollment"},{"title":"Rotate or recover one runtime-agent credential","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /v1/ril/servers/{id}/credential/rotate","href":"/techstack/reference/api/workers/rotate-or-recover-one-runtime-agent-credential"},{"title":"Runtime agent heartbeat","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/workers/{id}/heartbeat","href":"/techstack/reference/api/workers/runtime-agent-heartbeat"},{"title":"Ingest Guard service inventory","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/workers/{id}/inventory","href":"/techstack/reference/api/workers/ingest-guard-service-inventory"},{"title":"Approve pending worker","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/workers/{id}/approve","href":"/techstack/reference/api/workers/approve-pending-worker"},{"title":"List the unresolved operation outcomes of one kombify Guard","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/workers/{id}/outcomes","href":"/techstack/reference/api/workers/list-the-unresolved-operation-outcomes-of-one-kombify-guard"},{"title":"Release an unresolved kombify Guard operation outcome","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/workers/{id}/outcomes/{command_id}/resolve","href":"/techstack/reference/api/workers/release-an-unresolved-kombify-guard-operation-outcome"},{"title":"Worker bootstrap script","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /install.sh","href":"/techstack/reference/api/workers/worker-bootstrap-script"},{"title":"Windows worker bootstrap script","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /install.ps1","href":"/techstack/reference/api/workers/windows-worker-bootstrap-script"}]},{"group":"Agents","pages":[{"title":"List connected gRPC agents","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/agents","href":"/techstack/reference/api/agents/list-connected-grpc-agents"},{"title":"Get agent by ID with resources","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/agents/{id}","href":"/techstack/reference/api/agents/get-agent-by-id-with-resources"},{"title":"Remove/deregister agent","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml delete /api/v1/agents/{id}","href":"/techstack/reference/api/agents/removederegister-agent"},{"title":"Send command to agent","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/agents/{id}/command","href":"/techstack/reference/api/agents/send-command-to-agent"},{"title":"Get recent agent logs","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/agents/{id}/logs","href":"/techstack/reference/api/agents/get-recent-agent-logs"},{"title":"Stream live agent logs via SSE","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/agents/{id}/logs/stream","href":"/techstack/reference/api/agents/stream-live-agent-logs-via-sse"}]},{"group":"Jobs","pages":[{"title":"List jobs owned by the authenticated user","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/jobs","href":"/techstack/reference/api/jobs/list-jobs-owned-by-the-authenticated-user"},{"title":"Get the current state of one owned job","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/jobs/{id}","href":"/techstack/reference/api/jobs/get-the-current-state-of-one-owned-job"},{"title":"Stream job progress via SSE","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/jobs/{id}/stream","href":"/techstack/reference/api/jobs/stream-job-progress-via-sse"},{"title":"Get job logs","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/jobs/{id}/logs","href":"/techstack/reference/api/jobs/get-job-logs"},{"title":"Get job queue statistics","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/jobs/stats","href":"/techstack/reference/api/jobs/get-job-queue-statistics"}]},{"group":"Discovery","pages":[{"title":"Get local network interfaces","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/discovery/networks","href":"/techstack/reference/api/discovery/get-local-network-interfaces"},{"title":"Start network scan (async)","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/discovery/scan","href":"/techstack/reference/api/discovery/start-network-scan-async"},{"title":"Get scan status and results","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/discovery/scan/{id}","href":"/techstack/reference/api/discovery/get-scan-status-and-results"},{"title":"Cancel running scan","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/discovery/scan/{id}/cancel","href":"/techstack/reference/api/discovery/cancel-running-scan"},{"title":"Enrich scan results with additional data","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/discovery/scan/{id}/enrich","href":"/techstack/reference/api/discovery/enrich-scan-results-with-additional-data"},{"title":"List caller-owned discovered devices","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/discovery/devices","href":"/techstack/reference/api/discovery/list-caller-owned-discovered-devices"},{"title":"Get caller-owned discovered device","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/discovery/devices/{id}","href":"/techstack/reference/api/discovery/get-caller-owned-discovered-device"},{"title":"Deep probe a caller-owned device","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/discovery/probe","href":"/techstack/reference/api/discovery/deep-probe-a-caller-owned-device"},{"title":"Test SSH connectivity to a device","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/discovery/test-ssh","href":"/techstack/reference/api/discovery/test-ssh-connectivity-to-a-device"},{"title":"Clear discovery cache (admin only)","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml delete /api/v1/discovery/cache","href":"/techstack/reference/api/discovery/clear-discovery-cache-admin-only"},{"title":"Get discovery statistics (admin only)","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/discovery/stats","href":"/techstack/reference/api/discovery/get-discovery-statistics-admin-only"}]},{"group":"Features","pages":[{"title":"List all features grouped by category","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/features","href":"/techstack/reference/api/features/list-all-features-grouped-by-category"}]},{"group":"Trust","pages":[{"title":"List pairing tokens","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/trust/pairing-tokens","href":"/techstack/reference/api/trust/list-pairing-tokens"},{"title":"Create pairing token for worker registration","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/trust/pairing-tokens","href":"/techstack/reference/api/trust/create-pairing-token-for-worker-registration"},{"title":"Delete pairing token","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml delete /api/v1/trust/pairing-tokens/{id}","href":"/techstack/reference/api/trust/delete-pairing-token"}]},{"group":"Client Binding","pages":[{"title":"Issue a short-lived ClientPairingEnvelope v1","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/client-pairing/issue","href":"/techstack/reference/api/client-binding/issue-a-short-lived-clientpairingenvelope-v1"},{"title":"Atomically redeem a ClientPairingEnvelope v1 code","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/client-pairing/redeem","href":"/techstack/reference/api/client-binding/atomically-redeem-a-clientpairingenvelope-v1-code"}]},{"group":"Tunnel","pages":[{"title":"Get public tunnel registry URL","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/tunnel/registry-url","href":"/techstack/reference/api/tunnel/get-public-tunnel-registry-url"},{"title":"Get tunnel connection status","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/tunnel/status","href":"/techstack/reference/api/tunnel/get-tunnel-connection-status"},{"title":"Start Cloudflare tunnel","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/tunnel/start","href":"/techstack/reference/api/tunnel/start-cloudflare-tunnel"},{"title":"Stop Cloudflare tunnel","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/tunnel/stop","href":"/techstack/reference/api/tunnel/stop-cloudflare-tunnel"},{"title":"Generate worker install command with tunnel URL","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/tunnel/install-command","href":"/techstack/reference/api/tunnel/generate-worker-install-command-with-tunnel-url"},{"title":"Validate custom tunnel URL","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/tunnel/validate-url","href":"/techstack/reference/api/tunnel/validate-custom-tunnel-url"},{"title":"Detect network topology","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/tunnel/topology","href":"/techstack/reference/api/tunnel/detect-network-topology"},{"title":"List the caller's own kombify.me subdomains for diagnostics; registration is StackKits-owned","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/tunnel/subdomains","href":"/techstack/reference/api/tunnel/list-the-callers-own-kombifyme-subdomains-for-diagnostics;-registration-is-stackkits-owned"},{"title":"List services under one of the caller's own kombify.me base subdomains","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/tunnel/subdomains/{baseId}/services","href":"/techstack/reference/api/tunnel/list-services-under-one-of-the-callers-own-kombifyme-base-subdomains"}]},{"group":"Metrics","pages":[{"title":"Run a PromQL instant query","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/monitor/metrics/instant","href":"/techstack/reference/api/metrics/run-a-promql-instant-query"},{"title":"Run a PromQL range query","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/monitor/metrics/query","href":"/techstack/reference/api/metrics/run-a-promql-range-query"},{"title":"List metric label names","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/monitor/metrics/labels","href":"/techstack/reference/api/metrics/list-metric-label-names"},{"title":"List values for a metric label","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/monitor/metrics/values","href":"/techstack/reference/api/metrics/list-values-for-a-metric-label"},{"title":"List metric names","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/monitor/metrics/names","href":"/techstack/reference/api/metrics/list-metric-names"},{"title":"Project filesystem growth from observed storage gauges","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/monitor/storage-forecast","href":"/techstack/reference/api/metrics/project-filesystem-growth-from-observed-storage-gauges"},{"title":"Read per-drive SMART and NVMe health evidence","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/monitor/drive-health","href":"/techstack/reference/api/metrics/read-per-drive-smart-and-nvme-health-evidence"},{"title":"Read active and recovered drive-health condition episodes","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/monitor/drive-health/alerts","href":"/techstack/reference/api/metrics/read-active-and-recovered-drive-health-condition-episodes"},{"title":"Read domain lifecycle and observed DNS/TLS differences","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/monitor/domains","href":"/techstack/reference/api/metrics/read-domain-lifecycle-and-observed-dnstls-differences"},{"title":"Get monitoring backend status and runtime metadata","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/monitor/status","href":"/techstack/reference/api/metrics/get-monitoring-backend-status-and-runtime-metadata"},{"title":"Get monitoring ingest/query health diagnostics","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/monitor/health","href":"/techstack/reference/api/metrics/get-monitoring-ingestquery-health-diagnostics"},{"title":"Availability, downtime episodes and daily state, derived from the transition timeline","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/monitor/availability","href":"/techstack/reference/api/metrics/availability-downtime-episodes-and-daily-state-derived-from-the-transition-timeline"},{"title":"List active monitoring alerts","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/monitor/alerts","href":"/techstack/reference/api/metrics/list-active-monitoring-alerts"},{"title":"List monitoring alert rules","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/monitor/alerts/rules","href":"/techstack/reference/api/metrics/list-monitoring-alert-rules"},{"title":"Prometheus-compatible instance metrics (admin/infra only)","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /metrics","href":"/techstack/reference/api/metrics/prometheus-compatible-instance-metrics-admininfra-only"},{"title":"Prometheus-compatible instance metrics (API path alias, admin/infra only)","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/metrics","href":"/techstack/reference/api/metrics/prometheus-compatible-instance-metrics-api-path-alias-admininfra-only"}]},{"group":"Runtime","pages":[{"title":"Get recent runtime/deploy logs","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/runtime/logs","href":"/techstack/reference/api/runtime/get-recent-runtimedeploy-logs"}]},{"group":"Wallet","pages":[{"title":"List redacted wallet recovery items","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/wallet","href":"/techstack/reference/api/wallet/list-redacted-wallet-recovery-items"},{"title":"Mint a short-lived reauth proof after a fresh platform re-auth","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/wallet/{id}/reauth-proof","href":"/techstack/reference/api/wallet/mint-a-short-lived-reauth-proof-after-a-fresh-platform-re-auth"},{"title":"Reveal a wallet recovery secret/TOTP, gated by a fresh reauth proof","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/wallet/{id}/reveal","href":"/techstack/reference/api/wallet/reveal-a-wallet-recovery-secrettotp-gated-by-a-fresh-reauth-proof"}]},{"group":"Monthly Runtime","pages":[{"title":"List monthly runtime offerings","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/monthly-runtimes/offerings","href":"/techstack/reference/api/monthly-runtime/list-monthly-runtime-offerings"},{"title":"Get monthly runtime status","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/monthly-runtimes/{lease_id}","href":"/techstack/reference/api/monthly-runtime/get-monthly-runtime-status"},{"title":"Start a stopped managed server of the same generation","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/monthly-runtimes/{lease_id}/start","href":"/techstack/reference/api/monthly-runtime/start-a-stopped-managed-server-of-the-same-generation"},{"title":"Stop a managed server without destroying it","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/monthly-runtimes/{lease_id}/stop","href":"/techstack/reference/api/monthly-runtime/stop-a-managed-server-without-destroying-it"},{"title":"Enable owner SSH access for this generation","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/monthly-runtimes/{lease_id}/enable-ssh","href":"/techstack/reference/api/monthly-runtime/enable-owner-ssh-access-for-this-generation"},{"title":"Disable owner SSH access for this generation","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/monthly-runtimes/{lease_id}/disable-ssh","href":"/techstack/reference/api/monthly-runtime/disable-owner-ssh-access-for-this-generation"},{"title":"Decommission a monthly runtime lease","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/monthly-runtimes/{lease_id}/decommission","href":"/techstack/reference/api/monthly-runtime/decommission-a-monthly-runtime-lease"},{"title":"Archive a legacy or unbound custody record after provider cleanup","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/monthly-runtimes/{lease_id}/resolve-custody","href":"/techstack/reference/api/monthly-runtime/archive-a-legacy-or-unbound-custody-record-after-provider-cleanup"},{"title":"Recover the Guard session of a managed runtime","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/monthly-runtimes/{lease_id}/reconnect","href":"/techstack/reference/api/monthly-runtime/recover-the-guard-session-of-a-managed-runtime"},{"title":"Get SSH connection information for a monthly runtime lease","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/monthly-runtimes/{lease_id}/ssh","href":"/techstack/reference/api/monthly-runtime/get-ssh-connection-information-for-a-monthly-runtime-lease"},{"title":"List monthly runtime operation history","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/monthly-runtimes/{lease_id}/operations","href":"/techstack/reference/api/monthly-runtime/list-monthly-runtime-operation-history"},{"title":"Read redacted managed runtime cleanup state facts","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml get /api/v1/monthly-runtimes/{lease_id}/cleanup-readback","href":"/techstack/reference/api/monthly-runtime/read-redacted-managed-runtime-cleanup-state-facts"},{"title":"Recreate one fully released managed server generation","deprecated":null,"version":null,"openapi":"/techstack/reference/api/openapi.yaml post /api/v1/monthly-runtimes/{lease_id}/recreate","href":"/techstack/reference/api/monthly-runtime/recreate-one-fully-released-managed-server-generation"}]}]}]}]},{"tab":"SpeechKit","icon":"microphone","pages":[{"title":"SpeechKit","href":"/speechkit/overview"}]},{"tab":"Apps","icon":"grid-2","pages":[{"title":"Apps","href":"/apps/cloud/overview"}]},{"tab":"Identity \u0026 Access","icon":"shield-halved","pages":[{"title":"Identity \u0026 Access","href":"/identity/overview"}]},{"tab":"Changelog","icon":"newspaper","pages":[{"title":"Changelog","href":"/changelog/overview"}]}]},{"language":"de","pages":[{"title":"de","href":"/de/techstack/pairing-command"}]},{"language":"es","pages":[{"title":"es","href":"/es/techstack/pairing-command"}]},{"language":"zh-Hans","pages":[{"title":"zh-Hans","href":"/zh-Hans/techstack/pairing-command"}]},{"language":"hi","pages":[{"title":"hi","href":"/hi/techstack/pairing-command"}]},{"language":"ar","pages":[{"title":"ar","href":"/ar/techstack/pairing-command"}]}]},"basePath":"","title":"Pairing command - kombify","buildId":"dpl_8hoxaqFTU7hTr6A2fUraxAyjuiZo","deploymentId":"dpl_8hoxaqFTU7hTr6A2fUraxAyjuiZo","dynamics":[],"chunks":[]}