[{"data":1,"prerenderedAt":879},["ShallowReactive",2],{"navigation_docs_en":3,"-en-developers-api-authentication":408,"-en-developers-api-authentication-surround":874},[4,25,74,124,238,253,313,342,388],{"title":5,"path":6,"stem":7,"children":8,"page":24},"Getting Started","\u002Fen\u002Fgetting-started","en\u002F1.getting-started",[9,14,19],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fen\u002Fgetting-started\u002Fintroduction","en\u002F1.getting-started\u002F1.introduction","i-lucide-house",{"title":15,"path":16,"stem":17,"icon":18},"Quickstart","\u002Fen\u002Fgetting-started\u002Fquickstart","en\u002F1.getting-started\u002F2.quickstart","i-lucide-rocket",{"title":20,"path":21,"stem":22,"icon":23},"Concepts","\u002Fen\u002Fgetting-started\u002Fconcepts","en\u002F1.getting-started\u002F3.concepts","i-lucide-book-open",false,{"title":26,"path":27,"stem":28,"children":29,"page":24},"Live Production","\u002Fen\u002Flive-production","en\u002F2.live-production",[30,35,55,60],{"title":31,"path":32,"stem":33,"icon":34},"On air","\u002Fen\u002Flive-production\u002Fon-air","en\u002F2.live-production\u002F1.on-air","i-lucide-radio",{"title":36,"path":37,"stem":38,"children":39,"page":24},"Live Streams","\u002Fen\u002Flive-production\u002Flive-streams","en\u002F2.live-production\u002F2.live-streams",[40,45,50],{"title":41,"path":42,"stem":43,"icon":44},"Overview","\u002Fen\u002Flive-production\u002Flive-streams\u002Foverview","en\u002F2.live-production\u002F2.live-streams\u002F1.overview","i-lucide-list",{"title":46,"path":47,"stem":48,"icon":49},"Options","\u002Fen\u002Flive-production\u002Flive-streams\u002Flive-stream-options","en\u002F2.live-production\u002F2.live-streams\u002F2.live-stream-options","i-lucide-file-text",{"title":51,"path":52,"stem":53,"icon":54},"Start and stop","\u002Fen\u002Flive-production\u002Flive-streams\u002Fstart-stop","en\u002F2.live-production\u002F2.live-streams\u002F3.start-stop","i-lucide-play-circle",{"title":56,"path":57,"stem":58,"icon":59},"Scheduler","\u002Fen\u002Flive-production\u002Fscheduler","en\u002F2.live-production\u002F3.scheduler","i-lucide-calendar-clock",{"title":61,"path":62,"stem":63,"children":64,"page":24},"Recordings","\u002Fen\u002Flive-production\u002Frecordings","en\u002F2.live-production\u002F4.recordings",[65,69],{"title":41,"path":66,"stem":67,"icon":68},"\u002Fen\u002Flive-production\u002Frecordings\u002Foverview","en\u002F2.live-production\u002F4.recordings\u002F1.overview","i-lucide-circle-dot",{"title":70,"path":71,"stem":72,"icon":73},"Editor","\u002Fen\u002Flive-production\u002Frecordings\u002Feditor","en\u002F2.live-production\u002F4.recordings\u002F2.editor","i-lucide-scissors",{"title":75,"path":76,"stem":77,"children":78,"page":24},"Configuration","\u002Fen\u002Fconfiguration","en\u002F3.configuration",[79,93,98,111],{"title":80,"path":81,"stem":82,"children":83,"page":24},"Devices","\u002Fen\u002Fconfiguration\u002Fdevices","en\u002F3.configuration\u002F1.devices",[84,88],{"title":80,"path":85,"stem":86,"icon":87},"\u002Fen\u002Fconfiguration\u002Fdevices\u002Fdevices","en\u002F3.configuration\u002F1.devices\u002F1.devices","i-lucide-server",{"title":89,"path":90,"stem":91,"icon":92},"Groups","\u002Fen\u002Fconfiguration\u002Fdevices\u002Fgroups","en\u002F3.configuration\u002F1.devices\u002F2.groups","i-lucide-network",{"title":94,"path":95,"stem":96,"icon":97},"Sources","\u002Fen\u002Fconfiguration\u002Fsources","en\u002F3.configuration\u002F2.sources","i-lucide-cable",{"title":99,"path":100,"stem":101,"children":102,"page":24},"Encodings","\u002Fen\u002Fconfiguration\u002Fencodings","en\u002F3.configuration\u002F3.encodings",[103,107],{"title":99,"path":104,"stem":105,"icon":106},"\u002Fen\u002Fconfiguration\u002Fencodings\u002Fprofiles","en\u002F3.configuration\u002F3.encodings\u002F1.profiles","i-lucide-sliders-horizontal",{"title":89,"path":108,"stem":109,"icon":110},"\u002Fen\u002Fconfiguration\u002Fencodings\u002Fgroups","en\u002F3.configuration\u002F3.encodings\u002F2.groups","i-lucide-layers",{"title":112,"path":113,"stem":114,"children":115,"page":24},"Destinations","\u002Fen\u002Fconfiguration\u002Fdestinations","en\u002F3.configuration\u002F4.destinations",[116,120],{"title":112,"path":117,"stem":118,"icon":119},"\u002Fen\u002Fconfiguration\u002Fdestinations\u002Fdestinations","en\u002F3.configuration\u002F4.destinations\u002F1.destinations","i-lucide-send",{"title":89,"path":121,"stem":122,"icon":123},"\u002Fen\u002Fconfiguration\u002Fdestinations\u002Fpublishing-groups","en\u002F3.configuration\u002F4.destinations\u002F2.publishing-groups","i-lucide-share-2",{"title":125,"path":126,"stem":127,"children":128,"page":24},"Settings","\u002Fen\u002Fsettings","en\u002F4.settings",[129,142,147,163,179],{"title":130,"path":131,"stem":132,"children":133,"page":24},"Users","\u002Fen\u002Fsettings\u002Fusers","en\u002F4.settings\u002F1.users",[134,138],{"title":130,"path":135,"stem":136,"icon":137},"\u002Fen\u002Fsettings\u002Fusers\u002Fusers","en\u002F4.settings\u002F1.users\u002F1.users","i-lucide-user",{"title":89,"path":139,"stem":140,"icon":141},"\u002Fen\u002Fsettings\u002Fusers\u002Fuser-groups","en\u002F4.settings\u002F1.users\u002F2.user-groups","i-lucide-users",{"title":143,"path":144,"stem":145,"icon":146},"Security","\u002Fen\u002Fsettings\u002Fsecurity","en\u002F4.settings\u002F2.security","i-lucide-shield",{"title":148,"icon":149,"path":150,"stem":151,"children":152,"page":24},"Assets","i-lucide-image","\u002Fen\u002Fsettings\u002Fassets","en\u002F4.settings\u002F3.assets",[153,158],{"title":154,"path":155,"stem":156,"icon":157},"Logos","\u002Fen\u002Fsettings\u002Fassets\u002Flogos","en\u002F4.settings\u002F3.assets\u002F1.logos","i-lucide-images",{"title":159,"path":160,"stem":161,"icon":162},"Files","\u002Fen\u002Fsettings\u002Fassets\u002Ffiles","en\u002F4.settings\u002F3.assets\u002F2.files","i-lucide-clapperboard",{"title":164,"icon":165,"path":166,"stem":167,"children":168,"page":24},"External Storage","i-lucide-folder-cog","\u002Fen\u002Fsettings\u002Fexternal-storage","en\u002F4.settings\u002F4.external-storage",[169,174],{"title":170,"path":171,"stem":172,"icon":173},"Remote Folders","\u002Fen\u002Fsettings\u002Fexternal-storage\u002Fremote-folders","en\u002F4.settings\u002F4.external-storage\u002F1.remote-folders","i-lucide-folder-archive",{"title":175,"path":176,"stem":177,"icon":178},"Target Folders","\u002Fen\u002Fsettings\u002Fexternal-storage\u002Ftarget-folders","en\u002F4.settings\u002F4.external-storage\u002F2.target-folders","i-lucide-folder-up",{"title":180,"path":181,"stem":182,"children":183,"page":24},"Integrations","\u002Fen\u002Fsettings\u002Fintegrations","en\u002F4.settings\u002F5.integrations",[184,188,193,207],{"title":41,"path":185,"stem":186,"icon":187},"\u002Fen\u002Fsettings\u002Fintegrations\u002Foverview","en\u002F4.settings\u002F5.integrations\u002F1.overview","i-lucide-plug",{"title":189,"path":190,"stem":191,"icon":192},"MediaCopilot","\u002Fen\u002Fsettings\u002Fintegrations\u002Fmediacopilot","en\u002F4.settings\u002F5.integrations\u002F2.mediacopilot","i-lucide-sparkles",{"title":194,"icon":195,"path":196,"stem":197,"children":198,"page":24},"C21 Live Cloud","i-lucide-cloud","\u002Fen\u002Fsettings\u002Fintegrations\u002Fc21livecloud","en\u002F4.settings\u002F5.integrations\u002F3.c21livecloud",[199,202],{"title":41,"path":200,"stem":201,"icon":195},"\u002Fen\u002Fsettings\u002Fintegrations\u002Fc21livecloud\u002Foverview","en\u002F4.settings\u002F5.integrations\u002F3.c21livecloud\u002F1.overview",{"title":203,"path":204,"stem":205,"icon":206},"Accounts","\u002Fen\u002Fsettings\u002Fintegrations\u002Fc21livecloud\u002Faccounts","en\u002F4.settings\u002F5.integrations\u002F3.c21livecloud\u002F2.accounts","i-lucide-key-round",{"title":208,"icon":146,"path":209,"stem":210,"children":211,"page":24},"DRM Providers","\u002Fen\u002Fsettings\u002Fintegrations\u002Fdrm","en\u002F4.settings\u002F5.integrations\u002F4.drm",[212,216,220,224,228,233],{"title":41,"path":213,"stem":214,"icon":215},"\u002Fen\u002Fsettings\u002Fintegrations\u002Fdrm\u002Foverview","en\u002F4.settings\u002F5.integrations\u002F4.drm\u002F1.overview","i-lucide-shield-check",{"title":217,"path":218,"stem":219,"icon":146},"Widevine","\u002Fen\u002Fsettings\u002Fintegrations\u002Fdrm\u002Fwidevine","en\u002F4.settings\u002F5.integrations\u002F4.drm\u002F2.widevine",{"title":221,"path":222,"stem":223,"icon":146},"PlayReady","\u002Fen\u002Fsettings\u002Fintegrations\u002Fdrm\u002Fplayready","en\u002F4.settings\u002F5.integrations\u002F4.drm\u002F3.playready",{"title":225,"path":226,"stem":227,"icon":146},"FairPlay","\u002Fen\u002Fsettings\u002Fintegrations\u002Fdrm\u002Ffairplay","en\u002F4.settings\u002F5.integrations\u002F4.drm\u002F4.fairplay",{"title":229,"path":230,"stem":231,"icon":232},"Providers","\u002Fen\u002Fsettings\u002Fintegrations\u002Fdrm\u002Fproviders","en\u002F4.settings\u002F5.integrations\u002F4.drm\u002F5.providers","i-lucide-shield-half",{"title":234,"path":235,"stem":236,"icon":237},"Workflow","\u002Fen\u002Fsettings\u002Fintegrations\u002Fdrm\u002Fworkflow","en\u002F4.settings\u002F5.integrations\u002F4.drm\u002F6.workflow","i-lucide-workflow",{"title":239,"path":240,"stem":241,"children":242,"page":24},"System Status","\u002Fen\u002Fsystem-status","en\u002F5.system-status",[243,248],{"title":244,"path":245,"stem":246,"icon":247},"Commands","\u002Fen\u002Fsystem-status\u002Fcommands","en\u002F5.system-status\u002F1.commands","i-lucide-square-terminal",{"title":249,"path":250,"stem":251,"icon":252},"Logs","\u002Fen\u002Fsystem-status\u002Flogs","en\u002F5.system-status\u002F2.logs","i-lucide-scroll-text",{"title":254,"path":255,"stem":256,"children":257,"page":24},"How Tos","\u002Fen\u002Fhow-tos","en\u002F6.how-tos",[258,263,268,273,277,281,285,290,294,299,304,309],{"title":259,"path":260,"stem":261,"icon":262},"Start and stop a Live stream","\u002Fen\u002Fhow-tos\u002Fstart-stream-via-api","en\u002F6.how-tos\u002F1.start-stream-via-api","i-lucide-terminal",{"title":264,"path":265,"stem":266,"icon":267},"Ingest a YouTube Live broadcast","\u002Fen\u002Fhow-tos\u002Fingest-youtube-live","en\u002F6.how-tos\u002F10.ingest-youtube-live","i-lucide-youtube",{"title":269,"path":270,"stem":271,"icon":272},"Source Synchronized Encoding (SSE) — bit-identical redundancy","\u002Fen\u002Fhow-tos\u002Fsource-synchronized-encoding","en\u002F6.how-tos\u002F11.source-synchronized-encoding","i-lucide-copy-check",{"title":274,"path":275,"stem":276,"icon":34},"Broadcast radio as video","\u002Fen\u002Fhow-tos\u002Fbroadcast-radio-as-video","en\u002F6.how-tos\u002F12.broadcast-radio-as-video",{"title":278,"path":279,"stem":280,"icon":215},"Protect a Live stream with multi-DRM","\u002Fen\u002Fhow-tos\u002Fmulti-drm-destination","en\u002F6.how-tos\u002F2.multi-drm-destination",{"title":282,"path":283,"stem":284,"icon":59},"Schedule a weekly recurring broadcast","\u002Fen\u002Fhow-tos\u002Fweekly-recurring-broadcast","en\u002F6.how-tos\u002F3.weekly-recurring-broadcast",{"title":286,"path":287,"stem":288,"icon":289},"Cut a clip in the Editor and send it to MediaCopilot","\u002Fen\u002Fhow-tos\u002Fexport-recording-to-mediacopilot","en\u002F6.how-tos\u002F4.export-recording-to-mediacopilot","i-lucide-upload-cloud",{"title":291,"path":292,"stem":293,"icon":149},"Apply a logo overlay to a running Live stream","\u002Fen\u002Fhow-tos\u002Fapply-logo-overlay","en\u002F6.how-tos\u002F5.apply-logo-overlay",{"title":295,"path":296,"stem":297,"icon":298},"Black out or replace the program on a running Live stream","\u002Fen\u002Fhow-tos\u002Fbroadcast-blackout","en\u002F6.how-tos\u002F6.broadcast-blackout","i-lucide-square",{"title":300,"path":301,"stem":302,"icon":303},"Switch the source of a running Live stream","\u002Fen\u002Fhow-tos\u002Fruntime-source-switch","en\u002F6.how-tos\u002F7.runtime-source-switch","i-lucide-repeat-2",{"title":305,"path":306,"stem":307,"icon":308},"Toggle a Publishing mid-broadcast","\u002Fen\u002Fhow-tos\u002Ftoggle-publishing-mid-broadcast","en\u002F6.how-tos\u002F8.toggle-publishing-mid-broadcast","i-lucide-toggle-right",{"title":310,"path":311,"stem":312,"icon":34},"Contribute a live signal to MediaCopilot Live","\u002Fen\u002Fhow-tos\u002Fcontribute-to-mediacopilot-live","en\u002F6.how-tos\u002F9.contribute-to-mediacopilot-live",{"title":314,"path":315,"stem":316,"children":317,"page":24},"Installation","\u002Fen\u002Finstallation","en\u002F7.installation",[318,323,328,333,338],{"title":319,"path":320,"stem":321,"icon":322},"Prepare the host","\u002Fen\u002Finstallation\u002Fprepare-host","en\u002F7.installation\u002F1.prepare-host","i-lucide-server-cog",{"title":324,"path":325,"stem":326,"icon":327},"Install C21 Live Control","\u002Fen\u002Finstallation\u002Fcontrol","en\u002F7.installation\u002F2.control","i-lucide-cloud-download",{"title":329,"path":330,"stem":331,"icon":332},"Install C21 Live Encoder","\u002Fen\u002Finstallation\u002Fencoder","en\u002F7.installation\u002F3.encoder","i-lucide-cpu",{"title":334,"path":335,"stem":336,"icon":337},"Updates","\u002Fen\u002Finstallation\u002Fupdates","en\u002F7.installation\u002F4.updates","i-lucide-refresh-cw",{"title":339,"path":340,"stem":341,"icon":206},"Licenses","\u002Fen\u002Finstallation\u002Flicenses","en\u002F7.installation\u002F5.licenses",{"title":343,"path":344,"stem":345,"children":346,"page":24},"Developers","\u002Fen\u002Fdevelopers","en\u002F8.developers",[347,351,369],{"title":41,"path":348,"stem":349,"icon":350},"\u002Fen\u002Fdevelopers\u002Foverview","en\u002F8.developers\u002F1.overview","i-lucide-code",{"title":352,"icon":350,"path":353,"stem":354,"children":355,"page":24},"API","\u002Fen\u002Fdevelopers\u002Fapi","en\u002F8.developers\u002F2.api",[356,359,364],{"title":41,"path":357,"stem":358,"icon":350},"\u002Fen\u002Fdevelopers\u002Fapi\u002Foverview","en\u002F8.developers\u002F2.api\u002F1.overview",{"title":360,"path":361,"stem":362,"icon":363},"Authentication","\u002Fen\u002Fdevelopers\u002Fapi\u002Fauthentication","en\u002F8.developers\u002F2.api\u002F2.authentication","i-lucide-key",{"title":365,"path":366,"stem":367,"icon":368},"Pagination and Errors","\u002Fen\u002Fdevelopers\u002Fapi\u002Fpagination-errors","en\u002F8.developers\u002F2.api\u002F3.pagination-errors","i-lucide-list-ordered",{"title":370,"icon":371,"path":372,"stem":373,"children":374,"page":24},"MCP Server","i-lucide-bot","\u002Fen\u002Fdevelopers\u002Fmcp-server","en\u002F8.developers\u002F3.mcp-server",[375,378,383],{"title":41,"path":376,"stem":377,"icon":371},"\u002Fen\u002Fdevelopers\u002Fmcp-server\u002Foverview","en\u002F8.developers\u002F3.mcp-server\u002F1.overview",{"title":379,"path":380,"stem":381,"icon":382},"Tools","\u002Fen\u002Fdevelopers\u002Fmcp-server\u002Ftools","en\u002F8.developers\u002F3.mcp-server\u002F2.tools","i-lucide-wrench",{"title":384,"path":385,"stem":386,"icon":387},"Examples","\u002Fen\u002Fdevelopers\u002Fmcp-server\u002Fexamples","en\u002F8.developers\u002F3.mcp-server\u002F3.examples","i-lucide-play",{"title":389,"path":390,"stem":391,"children":392,"page":24},"Resources","\u002Fen\u002Fresources","en\u002F9.resources",[393,398,403],{"title":394,"path":395,"stem":396,"icon":397},"Links","\u002Fen\u002Fresources\u002Flinks","en\u002F9.resources\u002F1.links","i-lucide-link",{"title":399,"path":400,"stem":401,"icon":402},"Release Notes","\u002Fen\u002Fresources\u002Frelease-notes","en\u002F9.resources\u002F2.release-notes","i-lucide-clipboard-list",{"title":404,"path":405,"stem":406,"icon":407},"Glossary","\u002Fen\u002Fresources\u002Fglossary","en\u002F9.resources\u002F3.glossary","i-lucide-book-a",{"id":409,"title":360,"body":410,"description":867,"extension":868,"links":869,"meta":870,"navigation":871,"path":361,"seo":872,"stem":362,"__hash__":873},"docs_en\u002Fen\u002F8.developers\u002F2.api\u002F2.authentication.md",{"type":411,"value":412,"toc":855},"minimark",[413,421,441,444,449,454,461,501,508,682,688,691,695,698,706,709,713,731,735,748,752,758,778,782,804,808,811,825,829,851],[414,415,416,420],"p",{},[417,418,419],"strong",{},"C21 Live Control"," authenticates two classes of caller:",[422,423,424,431],"ul",{},[425,426,427,430],"li",{},[417,428,429],{},"Human operators"," signing in to the web UI use a session cookie. The session is established by the standard sign-in form against the user catalogue.",[425,432,433,436,437,440],{},[417,434,435],{},"Non-interactive callers"," — the REST API and the MCP server — use an ",[417,438,439],{},"API token",", a bearer credential issued to an existing user.",[414,442,443],{},"Both paths share the same authorisation model: every call is associated with a user, and the user's role (System Administrator or Operator) gates what the call can do.",[445,446,448],"h2",{"id":447},"api-tokens","API tokens",[450,451,453],"h3",{"id":452},"create","Create",[414,455,456,460],{},[457,458,459],"code",{},"POST \u002Fc21apiv2\u002Fsecurity\u002Ftokens"," issues a new token. The request body accepts:",[462,463,464,477],"table",{},[465,466,467],"thead",{},[468,469,470,474],"tr",{},[471,472,473],"th",{},"Field",[471,475,476],{},"Notes",[478,479,480,491],"tbody",{},[468,481,482,488],{},[483,484,485],"td",{},[457,486,487],{},"name",[483,489,490],{},"Required. Human-readable label (1–100 characters).",[468,492,493,498],{},[483,494,495],{},[457,496,497],{},"expires_days",[483,499,500],{},"Optional. Lifetime in days (1–3650). Omit for a non-expiring token.",[414,502,503,504,507],{},"The response carries the full token ",[417,505,506],{},"exactly once",":",[509,510,515],"pre",{"className":511,"code":512,"language":513,"meta":514,"style":514},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"data\": {\n    \"id\": 12,\n    \"kid\": \"\u003Ckey-id>\",\n    \"token\": \"\u003Cthe full bearer string>\",\n    \"name\": \"mcp-server-dev\",\n    \"created_at\": \"2026-05-18T10:00:00Z\",\n    \"expires_at\": \"2026-08-16T10:00:00Z\"\n  }\n}\n","json","",[457,516,517,526,544,565,588,609,629,650,670,676],{"__ignoreMap":514},[518,519,522],"span",{"class":520,"line":521},"line",1,[518,523,525],{"class":524},"sMK4o","{\n",[518,527,529,532,536,539,541],{"class":520,"line":528},2,[518,530,531],{"class":524},"  \"",[518,533,535],{"class":534},"spNyl","data",[518,537,538],{"class":524},"\"",[518,540,507],{"class":524},[518,542,543],{"class":524}," {\n",[518,545,547,550,554,556,558,562],{"class":520,"line":546},3,[518,548,549],{"class":524},"    \"",[518,551,553],{"class":552},"sBMFI","id",[518,555,538],{"class":524},[518,557,507],{"class":524},[518,559,561],{"class":560},"sbssI"," 12",[518,563,564],{"class":524},",\n",[518,566,568,570,573,575,577,580,584,586],{"class":520,"line":567},4,[518,569,549],{"class":524},[518,571,572],{"class":552},"kid",[518,574,538],{"class":524},[518,576,507],{"class":524},[518,578,579],{"class":524}," \"",[518,581,583],{"class":582},"sfazB","\u003Ckey-id>",[518,585,538],{"class":524},[518,587,564],{"class":524},[518,589,591,593,596,598,600,602,605,607],{"class":520,"line":590},5,[518,592,549],{"class":524},[518,594,595],{"class":552},"token",[518,597,538],{"class":524},[518,599,507],{"class":524},[518,601,579],{"class":524},[518,603,604],{"class":582},"\u003Cthe full bearer string>",[518,606,538],{"class":524},[518,608,564],{"class":524},[518,610,612,614,616,618,620,622,625,627],{"class":520,"line":611},6,[518,613,549],{"class":524},[518,615,487],{"class":552},[518,617,538],{"class":524},[518,619,507],{"class":524},[518,621,579],{"class":524},[518,623,624],{"class":582},"mcp-server-dev",[518,626,538],{"class":524},[518,628,564],{"class":524},[518,630,632,634,637,639,641,643,646,648],{"class":520,"line":631},7,[518,633,549],{"class":524},[518,635,636],{"class":552},"created_at",[518,638,538],{"class":524},[518,640,507],{"class":524},[518,642,579],{"class":524},[518,644,645],{"class":582},"2026-05-18T10:00:00Z",[518,647,538],{"class":524},[518,649,564],{"class":524},[518,651,653,655,658,660,662,664,667],{"class":520,"line":652},8,[518,654,549],{"class":524},[518,656,657],{"class":552},"expires_at",[518,659,538],{"class":524},[518,661,507],{"class":524},[518,663,579],{"class":524},[518,665,666],{"class":582},"2026-08-16T10:00:00Z",[518,668,669],{"class":524},"\"\n",[518,671,673],{"class":520,"line":672},9,[518,674,675],{"class":524},"  }\n",[518,677,679],{"class":520,"line":678},10,[518,680,681],{"class":524},"}\n",[414,683,684,685,687],{},"The server stores only the token's hash. Store the returned ",[457,686,595],{}," value in a secret manager — it is never returned again.",[414,689,690],{},"Creating a token requires the System Administrator role.",[450,692,694],{"id":693},"use","Use",[414,696,697],{},"Callers pass the token in the standard bearer header:",[509,699,704],{"className":700,"code":702,"language":703,"meta":514},[701],"language-text","Authorization: Bearer \u003CYOUR_API_TOKEN>\n","text",[457,705,702],{"__ignoreMap":514},[414,707,708],{},"The token authenticates as the user it was issued to and inherits that user's role.",[450,710,712],{"id":711},"list","List",[414,714,715,718,719,721,722,721,724,721,726,721,728,730],{},[457,716,717],{},"GET \u002Fc21apiv2\u002Fsecurity\u002Ftokens"," returns the catalogue of tokens. Each row exposes ",[457,720,553],{},", ",[457,723,572],{},[457,725,487],{},[457,727,636],{},[457,729,657],{}," — the secret value is never echoed back.",[450,732,734],{"id":733},"revoke","Revoke",[414,736,737,740,741,743,744,747],{},[457,738,739],{},"DELETE \u002Fc21apiv2\u002Fsecurity\u002Ftokens\u002F{kid}"," revokes a token by its ",[457,742,572],{},". Subsequent calls with that token return ",[457,745,746],{},"401 Unauthorized",".",[450,749,751],{"id":750},"rotate","Rotate",[414,753,754,755,757],{},"There is no ",[457,756,750],{}," operation. To rotate a token without downtime:",[759,760,761,767,770,773],"ol",{},[425,762,763,764,766],{},"Create a new token (",[457,765,459],{},").",[425,768,769],{},"Update the integration to use the new token.",[425,771,772],{},"Confirm the integration is operating against the new token.",[425,774,775,776,766],{},"Revoke the old token (",[457,777,739],{},[445,779,781],{"id":780},"field-length-limits","Field length limits",[414,783,784,785,721,788,791,792,795,796,799,800,803],{},"The ",[457,786,787],{},"username",[457,789,790],{},"first_name"," and ",[457,793,794],{},"last_name"," fields are limited to 30 characters; ",[457,797,798],{},"email"," accepts up to 75. The API rejects oversized values up-front with a validation error (HTTP 400) and names the offending field in the envelope. The OpenAPI spec exposes the ",[457,801,802],{},"maxLength"," on each field definition.",[445,805,807],{"id":806},"storage-advice","Storage advice",[414,809,810],{},"Treat API tokens as secrets:",[422,812,813,816,819,822],{},[425,814,815],{},"Never commit a token to source control.",[425,817,818],{},"Store tokens in the host's secret store (Kubernetes secrets, HashiCorp Vault, AWS Secrets Manager, GCP Secret Manager, GitHub Actions secrets).",[425,820,821],{},"Rotate on a schedule. Recreate the token, switch over, verify, revoke the old one.",[425,823,824],{},"One token per caller. Audit becomes ambiguous and revocation becomes destructive when tokens are shared between unrelated services.",[445,826,828],{"id":827},"faq","FAQ",[830,831,832,837,844],"accordion",{},[833,834,836],"accordion-item",{"label":835},"Does a token carry a separate scope or permission set?","No. The token inherits the role of the user it was issued to. To narrow what a token can do, issue it to a user whose role is already narrow (an Operator, not a System Administrator).",[833,838,840,841,843],{"label":839},"What happens to in-flight requests when a token is revoked?","In-flight responses complete normally. The next request from the revoked token returns ",[457,842,746],{}," and the token cannot be re-enabled — create a new token instead.",[833,845,847,848,850],{"label":846},"Can I issue a token without an expiry?","Yes. Omit ",[457,849,497],{}," on creation and the token is issued without an expiration date. The token remains valid until it is revoked.",[852,853,854],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":514,"searchDepth":528,"depth":528,"links":856},[857,864,865,866],{"id":447,"depth":528,"text":448,"children":858},[859,860,861,862,863],{"id":452,"depth":546,"text":453},{"id":693,"depth":546,"text":694},{"id":711,"depth":546,"text":712},{"id":733,"depth":546,"text":734},{"id":750,"depth":546,"text":751},{"id":780,"depth":528,"text":781},{"id":806,"depth":528,"text":807},{"id":827,"depth":528,"text":828},"API tokens and how C21 Live Control authenticates callers.","md",null,{},{"icon":363},{"title":360,"description":867},"-KblYg-LgGzyUdS27M4aylQdyGqZ3X07-X3wTpybPyE",[875,877],{"title":41,"path":357,"stem":358,"description":876,"icon":350,"children":-1},"Programmatic access to C21 Live Control over its REST API.",{"title":365,"path":366,"stem":367,"description":878,"icon":368,"children":-1},"Shared response conventions, error envelope and retry guidance.",1782916491862]