{"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"hide-your-internal-apis","__idx":0},"children":["Hide your internal APIs"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Several times a month, a variation of this question comes up:"]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["How do we hide endpoints that are for internal use only?"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Follow along using our sample API provided with this tutorial to hide APIs, and then try this again with your APIs."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"overview","__idx":1},"children":["Overview"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["In this tutorial, see how to maintain a single source of truth (SSOT) OpenAPI description."," ","Once the API description is complete, generate an internal and an external version of the API."]},{"$$mdtype":"Tag","name":"Diagram","attributes":{"data-language":"mermaid","diagramType":"mermaid","diagramSource":"graph TD\n    A[SSOT] -->|bundle| B(Internal)\n    A[SSOT] -->|bundle| C(External)\n","diagramHtml":"<svg id=\"diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 238.078125px;\" viewBox=\"0 0 238.078125 198\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>\n    #diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e foreignObject {\n      overflow: visible;\n    }\n  </style><style>#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e{font-family:\"Redocly Mermaid Sans\",Arial,\"Liberation Sans\",Arimo,Helvetica,\"Redocly Mermaid CJK\",sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .error-icon{fill:#552222;}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .error-text{fill:#552222;stroke:#552222;}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .edge-thickness-normal{stroke-width:1px;}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .edge-thickness-thick{stroke-width:3.5px;}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .edge-pattern-solid{stroke-dasharray:0;}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .edge-thickness-invisible{stroke-width:0;fill:none;}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .edge-pattern-dashed{stroke-dasharray:3;}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .edge-pattern-dotted{stroke-dasharray:2;}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .marker{fill:#333333;stroke:#333333;}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .marker.cross{stroke:#333333;}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e svg{font-family:\"Redocly Mermaid Sans\",Arial,\"Liberation Sans\",Arimo,Helvetica,\"Redocly Mermaid CJK\",sans-serif;font-size:16px;}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e p{margin:0;}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .label{font-family:\"Redocly Mermaid Sans\",Arial,\"Liberation Sans\",Arimo,Helvetica,\"Redocly Mermaid CJK\",sans-serif;color:#333;}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .cluster-label text{fill:#333;}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .cluster-label span{color:#333;}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .cluster-label span p{background-color:transparent;}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .label text,#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e span{fill:#333;color:#333;}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .node rect,#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .node circle,#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .node ellipse,#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .node polygon,#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .rough-node .label text,#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .node .label text,#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .image-shape .label,#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .icon-shape .label{text-anchor:middle;}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .rough-node .label,#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .node .label,#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .image-shape .label,#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .icon-shape .label{text-align:center;}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .node.clickable{cursor:pointer;}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .arrowheadPath{fill:#333333;}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .edgePath .path{stroke:#333333;stroke-width:1px;}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .flowchart-link{stroke:#333333;fill:none;}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .cluster text{fill:#333;}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .cluster span{color:#333;}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Redocly Mermaid Sans\",Arial,\"Liberation Sans\",Arimo,Helvetica,\"Redocly Mermaid CJK\",sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e rect.text{fill:none;stroke-width:0;}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .icon-shape,#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .icon-shape p,#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .icon-shape .label rect,#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e .node .neo-node{stroke:#9370DB;}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e [data-look=\"neo\"].node rect,#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e [data-look=\"neo\"].cluster rect,#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e [data-look=\"neo\"].node circle .state-start{fill:#000000;}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e :root{--mermaid-font-family:\"Redocly Mermaid Sans\",Arial,\"Liberation Sans\",Arimo,Helvetica,\"Redocly Mermaid CJK\",sans-serif;}</style><g><marker id=\"diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M89.011,62L82.457,68.167C75.903,74.333,62.795,86.667,56.241,98.333C49.688,110,49.688,121,49.688,126.5L49.688,132\" id=\"diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e-L_A_B_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6ODkuMDExMjkxNTAzOTA2MjUsInkiOjYyfSx7IngiOjQ5LjY4NzUsInkiOjk5fSx7IngiOjQ5LjY4NzUsInkiOjEzNn1d\" data-look=\"classic\" marker-end=\"url(#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e_flowchart-v2-pointEnd)\"></path><path d=\"M146.403,62L152.957,68.167C159.511,74.333,172.619,86.667,179.173,98.333C185.727,110,185.727,121,185.727,126.5L185.727,132\" id=\"diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e-L_A_C_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_C_0\" data-points=\"W3sieCI6MTQ2LjQwMjc3MDk5NjA5Mzc1LCJ5Ijo2Mn0seyJ4IjoxODUuNzI2NTYyNSwieSI6OTl9LHsieCI6MTg1LjcyNjU2MjUsInkiOjEzNn1d\" data-look=\"classic\" marker-end=\"url(#diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\" transform=\"translate(49.6875, 99)\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(-24.0234375, -12)\"><foreignObject width=\"48.046875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>bundle</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(185.7265625, 99)\"><g class=\"label\" data-id=\"L_A_C_0\" transform=\"translate(-24.0234375, -12)\"><foreignObject width=\"48.046875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>bundle</p></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e-flowchart-A-0\" data-look=\"classic\" transform=\"translate(117.70703125, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-51.78125\" y=\"-27\" width=\"103.5625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-21.78125, -12)\"><rect></rect><foreignObject width=\"43.5625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>SSOT</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e-flowchart-B-1\" data-look=\"classic\" transform=\"translate(49.6875, 163)\"><rect class=\"basic label-container\" style=\"\" rx=\"5\" ry=\"5\" x=\"-41.6875\" y=\"-27\" width=\"83.375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-26.6875, -12)\"><rect></rect><foreignObject width=\"53.375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Internal</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e-flowchart-C-3\" data-look=\"classic\" transform=\"translate(185.7265625, 163)\"><rect class=\"basic label-container\" style=\"\" rx=\"5\" ry=\"5\" x=\"-44.3515625\" y=\"-27\" width=\"88.703125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-29.3515625, -12)\"><rect></rect><foreignObject width=\"58.703125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>External</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"diagram-3a2d951496b053118810a9744899aff59dab68b3658e43d38aabd19f5f88cf9e-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg>","diagramHtmlDark":"<svg id=\"diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 238.078125px;\" viewBox=\"0 0 238.078125 198\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>\n    #diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 foreignObject {\n      overflow: visible;\n    }\n  </style><style>#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6{font-family:\"Redocly Mermaid Sans\",Arial,\"Liberation Sans\",Arimo,Helvetica,\"Redocly Mermaid CJK\",sans-serif;font-size:16px;fill:#ccc;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .error-icon{fill:#a44141;}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .error-text{fill:#ddd;stroke:#ddd;}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .edge-thickness-normal{stroke-width:1px;}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .edge-thickness-thick{stroke-width:3.5px;}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .edge-pattern-solid{stroke-dasharray:0;}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .edge-thickness-invisible{stroke-width:0;fill:none;}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .edge-pattern-dashed{stroke-dasharray:3;}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .edge-pattern-dotted{stroke-dasharray:2;}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .marker{fill:lightgrey;stroke:lightgrey;}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .marker.cross{stroke:lightgrey;}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 svg{font-family:\"Redocly Mermaid Sans\",Arial,\"Liberation Sans\",Arimo,Helvetica,\"Redocly Mermaid CJK\",sans-serif;font-size:16px;}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 p{margin:0;}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .label{font-family:\"Redocly Mermaid Sans\",Arial,\"Liberation Sans\",Arimo,Helvetica,\"Redocly Mermaid CJK\",sans-serif;color:#ccc;}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .cluster-label text{fill:#F9FFFE;}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .cluster-label span{color:#F9FFFE;}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .cluster-label span p{background-color:transparent;}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .label text,#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 span{fill:#ccc;color:#ccc;}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .node rect,#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .node circle,#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .node ellipse,#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .node polygon,#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .node path{fill:#1f2020;stroke:#ccc;stroke-width:1px;}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .rough-node .label text,#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .node .label text,#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .image-shape .label,#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .icon-shape .label{text-anchor:middle;}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .rough-node .label,#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .node .label,#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .image-shape .label,#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .icon-shape .label{text-align:center;}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .node.clickable{cursor:pointer;}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .root .anchor path{fill:lightgrey!important;stroke-width:0;stroke:lightgrey;}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .arrowheadPath{fill:lightgrey;}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .edgePath .path{stroke:lightgrey;stroke-width:1px;}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .flowchart-link{stroke:lightgrey;fill:none;}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .edgeLabel{background-color:hsl(0, 0%, 34.4117647059%);text-align:center;}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .edgeLabel p{background-color:hsl(0, 0%, 34.4117647059%);}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .edgeLabel rect{opacity:0.5;background-color:hsl(0, 0%, 34.4117647059%);fill:hsl(0, 0%, 34.4117647059%);}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .labelBkg{background-color:rgba(87.75, 87.75, 87.75, 0.5);}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .cluster rect{fill:hsl(180, 1.5873015873%, 28.3529411765%);stroke:rgba(255, 255, 255, 0.25);stroke-width:1px;}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .cluster text{fill:#F9FFFE;}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .cluster span{color:#F9FFFE;}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Redocly Mermaid Sans\",Arial,\"Liberation Sans\",Arimo,Helvetica,\"Redocly Mermaid CJK\",sans-serif;font-size:12px;background:hsl(20, 1.5873015873%, 12.3529411765%);border:1px solid rgba(255, 255, 255, 0.25);border-radius:2px;pointer-events:none;z-index:100;}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#ccc;}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 rect.text{fill:none;stroke-width:0;}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .icon-shape,#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .image-shape{background-color:hsl(0, 0%, 34.4117647059%);text-align:center;}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .icon-shape p,#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .image-shape p{background-color:hsl(0, 0%, 34.4117647059%);padding:2px;}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .icon-shape .label rect,#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .image-shape .label rect{opacity:0.5;background-color:hsl(0, 0%, 34.4117647059%);fill:hsl(0, 0%, 34.4117647059%);}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 .node .neo-node{stroke:#ccc;}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 [data-look=\"neo\"].node rect,#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 [data-look=\"neo\"].cluster rect,#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 [data-look=\"neo\"].node polygon{stroke:url(#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 [data-look=\"neo\"].node path{stroke:url(#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6-gradient);stroke-width:1px;}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 [data-look=\"neo\"].node .neo-line path{stroke:#ccc;filter:none;}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 [data-look=\"neo\"].node circle{stroke:url(#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 [data-look=\"neo\"].node circle .state-start{fill:#000000;}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 [data-look=\"neo\"].icon-shape .icon{fill:url(#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6 :root{--mermaid-font-family:\"Redocly Mermaid Sans\",Arial,\"Liberation Sans\",Arimo,Helvetica,\"Redocly Mermaid CJK\",sans-serif;}</style><g><marker id=\"diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M89.011,62L82.457,68.167C75.903,74.333,62.795,86.667,56.241,98.333C49.688,110,49.688,121,49.688,126.5L49.688,132\" id=\"diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6-L_A_B_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6ODkuMDExMjkxNTAzOTA2MjUsInkiOjYyfSx7IngiOjQ5LjY4NzUsInkiOjk5fSx7IngiOjQ5LjY4NzUsInkiOjEzNn1d\" data-look=\"classic\" marker-end=\"url(#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6_flowchart-v2-pointEnd)\"></path><path d=\"M146.403,62L152.957,68.167C159.511,74.333,172.619,86.667,179.173,98.333C185.727,110,185.727,121,185.727,126.5L185.727,132\" id=\"diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6-L_A_C_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_C_0\" data-points=\"W3sieCI6MTQ2LjQwMjc3MDk5NjA5Mzc1LCJ5Ijo2Mn0seyJ4IjoxODUuNzI2NTYyNSwieSI6OTl9LHsieCI6MTg1LjcyNjU2MjUsInkiOjEzNn1d\" data-look=\"classic\" marker-end=\"url(#diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\" transform=\"translate(49.6875, 99)\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(-24.0234375, -12)\"><foreignObject width=\"48.046875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>bundle</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(185.7265625, 99)\"><g class=\"label\" data-id=\"L_A_C_0\" transform=\"translate(-24.0234375, -12)\"><foreignObject width=\"48.046875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>bundle</p></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6-flowchart-A-0\" data-look=\"classic\" transform=\"translate(117.70703125, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-51.78125\" y=\"-27\" width=\"103.5625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-21.78125, -12)\"><rect></rect><foreignObject width=\"43.5625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>SSOT</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6-flowchart-B-1\" data-look=\"classic\" transform=\"translate(49.6875, 163)\"><rect class=\"basic label-container\" style=\"\" rx=\"5\" ry=\"5\" x=\"-41.6875\" y=\"-27\" width=\"83.375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-26.6875, -12)\"><rect></rect><foreignObject width=\"53.375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Internal</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6-flowchart-C-3\" data-look=\"classic\" transform=\"translate(185.7265625, 163)\"><rect class=\"basic label-container\" style=\"\" rx=\"5\" ry=\"5\" x=\"-44.3515625\" y=\"-27\" width=\"88.703125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-29.3515625, -12)\"><rect></rect><foreignObject width=\"58.703125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>External</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#FFFFFF\"></feDropShadow></filter></defs><defs><filter id=\"diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#FFFFFF\"></feDropShadow></filter></defs><linearGradient id=\"diagram-7b6c835133ee34e3ae0231481162e61731259305b0a5d85a38b07e09ac7d06c6-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"#cccccc\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(180, 0%, 18.3529411765%)\" stop-opacity=\"1\"></stop></linearGradient></svg>"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The following image highlights what is to be removed in this tutorial."," ",{"$$mdtype":"Tag","name":"Image","attributes":{"src":"/content-assets/hide-internal-apis-problem-dc353629a8944264.png","alt":"what needs to be hidden"},"children":[]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"prerequisites","__idx":2},"children":["Prerequisites"]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info","name":"We do, You do"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This tutorial is most effective when you follow along and complete the steps."]}]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"Link","attributes":{"href":"/docs/cli/v2/installation"},"children":["Install @redocly/cli"]}," with version 1.0.0-beta.90 or later (we use 1.0.0-beta.94 in this tutorial)."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Download the ",{"$$mdtype":"Tag","name":"Link","attributes":{"href":"https://gist.github.com/adamaltman/ee07bf94a967926ee0e54bcd56fdcdfb"},"children":["sample.yaml"]}," file into a new directory named ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["hide-apis-demo"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Use your favorite IDE for editing the YAML file (we use VS Code and have the ",{"$$mdtype":"Tag","name":"Link","attributes":{"href":"https://redocly.com/docs/redocly-openapi/"},"children":["Redocly extension"]}," installed)."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"step-1-add-x-internal-to-the-api-description","__idx":3},"children":["Step 1: Add ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["x-internal"]}," to the API description"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["In this step, mark which operations and properties of the API description are for internal use."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Open the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sample.yaml"]}," file in your IDE. Changes are needed in a few places."]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Go to line 22 and add a new line between ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["post"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["operationId"]},"."," ","The indentation is important."," ","Type ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["x-internal: true"]}," on that line."," ","The space after the colon is important too."," ","It should look like the following example.",{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"yaml","header":{"controls":{"copy":{}}},"source":"post:\n  x-internal: true\n  operationId: postStars\n","lang":"yaml"},"children":[]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Go to line 52 and add a new line between ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["hasPlanets"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["type"]},", like we did previously. The following example shows how it should look.",{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"yaml","header":{"controls":{"copy":{}}},"source":"hasPlanets:\n  x-internal: true\n  type: boolean\n","lang":"yaml"},"children":[]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Save the file."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"step-2-add-a-redocly-configuration-file","__idx":4},"children":["Step 2: Add a Redocly configuration file"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["In this step, create a Redocly configuration file with two APIs pointing to the same root file."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Make a new file in the same ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["hide-apis-demo"]}," directory named ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["redocly.yaml"]}," (the casing is important)."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Then, add this snippet to the file:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"yaml","header":{"controls":{"copy":{}}},"source":"apis:\n  internal@latest:\n    root: ./sample.yaml\n","lang":"yaml"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Let's explain what's going on here."," ","The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["apis"]}," object contains a collection of our APIs."," ","The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["internal@latest"]}," matches the expected configuration ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["{name@version}"]}," pattern for each API."," ","The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["root"]}," is the path to the root of the API description."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["We only have one root API file (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sample.yaml"]},"), but we want to generate two APIs from that SSOT."," ","To do that, we add another API to the API section."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"yaml","header":{"controls":{"copy":{}}},"source":"apis:\n  internal@latest:\n    root: ./sample.yaml\n  external@latest:\n    root: ./sample.yaml\n","lang":"yaml"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Finally, we want the ",{"$$mdtype":"Tag","name":"Link","attributes":{"href":"/docs/cli/v2/decorators/remove-x-internal"},"children":["remove-x-internal"]}," decorator to be applied to the external API."," ","To accomplish that, add the last three lines as shown in the following example."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"yaml","header":{"controls":{"copy":{}}},"source":"apis:\n  internal@latest:\n    root: ./sample.yaml\n  external@latest:\n    root: ./sample.yaml\n    decorators:\n      remove-x-internal: on\n","lang":"yaml"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Save the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["redocly.yaml"]}," file."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"step-3-output-internal-and-external-apis","__idx":5},"children":["Step 3: Output internal and external APIs"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["In this step, produce two API snapshots from the single source of truth."," ","This can be done in two ways:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Option A: Let Redocly's API registry handle the work (which uses the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["bundle"]}," command under the hood)."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Option B: Your machine plus the ",{"$$mdtype":"Tag","name":"Link","attributes":{"href":"/docs/cli/v2/commands/bundle"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["bundle"]}," command"]},"."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"option-a-redoclys-api-registry-bundles-automatically","__idx":6},"children":["Option A: Redocly's API registry bundles automatically"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Add the APIs to the API registry."," ","This process varies depending on the source type you use."," ","If using the CICD ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["push"]}," command, it can push all APIs or the API you specify by the API ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["name@version"]},"."," ","If using a git-based integration, select the appropriate API in the path to your root file."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"Image","attributes":{"src":"/content-assets/hide-apis-path-to-root-file-6f2743ef7cdc0452.png","alt":"path to root file"},"children":[]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Confirm the API in the registry has the appropriate content."]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Repeat this step for each API."]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"option-b-use-your-machine-and-the-bundle-command","__idx":7},"children":["Option B: Use your machine and the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["bundle"]}," command"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Bundle the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["external@latest"]}," API."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"shell","header":{"controls":{"copy":{}}},"source":"redocly bundle external@latest --output dist/external.yaml\n","lang":"shell"},"children":[]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Inspect the file at ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["dist/external.yaml"]},"."," ","Confirm the following:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["postStars"]}," operation is removed."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["hasPlanets"]}," property is removed."]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Bundle the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["internal@latest"]}," API."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"shell","header":{"controls":{"copy":{}}},"source":"redocly bundle internal@latest --output dist/internal.yaml\n","lang":"shell"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Inspect the file at ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["dist/internal.yaml"]},"."," ","Confirm the following:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["postStars"]}," operation is ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["not"]}," removed."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["hasPlanets"]}," property is ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["not"]}," removed."]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"next-steps","__idx":8},"children":["Next steps"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If you enjoyed this tutorial, please share it with a colleague, or on the social networks."," ","Be sure to tag ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["@Redocly"]}," as it lets us know how we're doing and where we can improve."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Try this technique with your own APIs to accomplish the use case demonstrated above."]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"danger","name":"Security through obscurity"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If an endpoint is discovered, your API authentication mechanism ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["must"]}," prevent unauthorized access."," ","Removing APIs from documentation is not a security mechanism. Use access controls for your internal API documentation as well."]}]}]},"frontmatter":{"tocMaxDepth":3},"tagList":["admonition"],"title":"Hide your internal APIs","lastModified":"2026-02-11T08:45:02.000Z"}