diff --git a/assets/scss/_styles_project.scss b/assets/scss/_styles_project.scss
index c686003729..f8e04e6e55 100644
--- a/assets/scss/_styles_project.scss
+++ b/assets/scss/_styles_project.scss
@@ -11,6 +11,7 @@
@import "_videos_project.scss";
@import "subscription.scss";
@import "rest-api-reference.scss";
+@import "rest-api-interactive.scss";
@import "_video-landing_project.scss";
@import "elements_project";
@import "summary.scss";
diff --git a/assets/scss/rest-api-interactive.scss b/assets/scss/rest-api-interactive.scss
new file mode 100644
index 0000000000..8d3b571683
--- /dev/null
+++ b/assets/scss/rest-api-interactive.scss
@@ -0,0 +1,440 @@
+/**
+ * REST API Interactive Components Styling
+ * Handles UI for request builder and response display
+ */
+
+/* Execute Button */
+.rest-api-execute-button {
+ display: inline-flex;
+ align-items: center;
+ gap: 0.5rem;
+ padding: 0.75rem 1.5rem;
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+ color: white;
+ border: none;
+ border-radius: 0.375rem;
+ font-weight: 600;
+ font-size: 0.95rem;
+ cursor: pointer;
+ transition: all 0.3s ease;
+ box-shadow: 0 4px 6px -1px rgba(102, 126, 234, 0.3);
+}
+
+.rest-api-execute-button:hover:not(:disabled) {
+ transform: translateY(-2px);
+ box-shadow: 0 6px 12px -1px rgba(102, 126, 234, 0.4);
+}
+
+.rest-api-execute-button:active:not(:disabled) {
+ transform: translateY(0);
+}
+
+.rest-api-execute-button:disabled {
+ opacity: 0.7;
+ cursor: not-allowed;
+}
+
+.rest-api-execute-button.is-loading {
+ position: relative;
+ color: transparent;
+}
+
+.rest-api-execute-button.is-loading::after {
+ content: '';
+ position: absolute;
+ width: 16px;
+ height: 16px;
+ top: 50%;
+ left: 50%;
+ margin-left: -8px;
+ margin-top: -8px;
+ border: 2px solid rgba(255, 255, 255, 0.3);
+ border-radius: 50%;
+ border-top-color: white;
+ animation: spin 0.6s linear infinite;
+}
+
+@keyframes spin {
+ to {
+ transform: rotate(360deg);
+ }
+}
+
+/* Server Selection */
+.rest-api-server-selector {
+ margin: 1rem 0;
+ display: flex;
+ flex-direction: column;
+ gap: 0.5rem;
+}
+
+.rest-api-server-selector label {
+ font-weight: 600;
+ font-size: 0.9rem;
+ color: #374151;
+}
+
+.rest-api-server-select {
+ padding: 0.5rem 0.75rem;
+ border: 1px solid #d1d5db;
+ border-radius: 0.375rem;
+ background-color: white;
+ font-size: 0.9rem;
+ cursor: pointer;
+ transition: border-color 0.2s ease;
+}
+
+.rest-api-server-select:focus {
+ outline: none;
+ border-color: #667eea;
+ box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1);
+}
+
+/* URL Preview */
+.rest-api-url-preview {
+ margin: 1rem 0;
+ padding: 0.75rem 1rem;
+ background-color: #f3f4f6;
+ border-left: 4px solid #667eea;
+ border-radius: 0.375rem;
+ font-family: 'Monaco', 'Courier New', monospace;
+ font-size: 0.85rem;
+ word-break: break-all;
+ color: #374151;
+}
+
+/* Parameter Inputs */
+.rest-api-parameter-group {
+ margin: 1rem 0;
+ display: flex;
+ flex-direction: column;
+ gap: 0.75rem;
+}
+
+.rest-api-parameter-input {
+ display: flex;
+ flex-direction: column;
+ gap: 0.375rem;
+}
+
+.rest-api-parameter-input label {
+ font-weight: 600;
+ font-size: 0.85rem;
+ color: #374151;
+}
+
+.rest-api-parameter-input label .rest-api-parameter-required {
+ color: #dc2626;
+ margin-left: 0.25rem;
+}
+
+.rest-api-parameter-input input,
+.rest-api-parameter-input textarea {
+ padding: 0.5rem 0.75rem;
+ border: 1px solid #d1d5db;
+ border-radius: 0.375rem;
+ font-size: 0.9rem;
+ font-family: inherit;
+ transition: border-color 0.2s ease;
+}
+
+.rest-api-parameter-input input:focus,
+.rest-api-parameter-input textarea:focus {
+ outline: none;
+ border-color: #667eea;
+ box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1);
+}
+
+.rest-api-parameter-input .rest-api-parameter-description {
+ font-size: 0.8rem;
+ color: #6b7280;
+ margin-top: -0.25rem;
+}
+
+/* Authentication */
+.rest-api-auth-input {
+ margin: 1rem 0;
+ padding: 1rem;
+ background-color: #fef3c7;
+ border-left: 4px solid #f59e0b;
+ border-radius: 0.375rem;
+ display: flex;
+ flex-direction: column;
+ gap: 0.75rem;
+}
+
+.rest-api-auth-input label {
+ font-weight: 600;
+ font-size: 0.9rem;
+ color: #92400e;
+}
+
+.rest-api-auth-input input {
+ padding: 0.5rem 0.75rem;
+ border: 1px solid #fcd34d;
+ border-radius: 0.375rem;
+ font-size: 0.9rem;
+ background-color: rgba(255, 255, 255, 0.8);
+}
+
+.rest-api-auth-input input:focus {
+ outline: none;
+ border-color: #f59e0b;
+ box-shadow: 0 0 0 3px rgba(245, 158, 11, 0.1);
+}
+
+.rest-api-auth-input .rest-api-auth-help {
+ font-size: 0.8rem;
+ color: #92400e;
+}
+
+/* Response Display */
+.rest-api-response-display {
+ margin-top: 2rem;
+ padding: 1.5rem;
+ background-color: #f9fafb;
+ border: 1px solid #e5e7eb;
+ border-radius: 0.5rem;
+ display: none;
+ animation: slideIn 0.3s ease;
+}
+
+.rest-api-response-display--active {
+ display: block;
+}
+
+@keyframes slideIn {
+ from {
+ opacity: 0;
+ transform: translateY(-10px);
+ }
+ to {
+ opacity: 1;
+ transform: translateY(0);
+ }
+}
+
+.rest-api-response-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 1rem;
+ padding-bottom: 0.75rem;
+ border-bottom: 2px solid #e5e7eb;
+}
+
+.rest-api-response-header h4 {
+ margin: 0;
+ font-size: 1.1rem;
+ font-weight: 600;
+ color: #111827;
+}
+
+.rest-api-response-meta {
+ display: flex;
+ gap: 1rem;
+ align-items: center;
+ font-size: 0.9rem;
+}
+
+.rest-api-response-status {
+ display: inline-flex;
+ align-items: center;
+ gap: 0.5rem;
+ padding: 0.35rem 0.75rem;
+ border-radius: 0.375rem;
+ font-weight: 600;
+ font-family: 'Monaco', 'Courier New', monospace;
+ font-size: 0.85rem;
+}
+
+.rest-api-response-status.success {
+ background-color: #d1fae5;
+ color: #065f46;
+}
+
+.rest-api-response-status.error {
+ background-color: #fee2e2;
+ color: #991b1b;
+}
+
+.rest-api-response-status.loading {
+ background-color: #dbeafe;
+ color: #0c4a6e;
+}
+
+.rest-api-response-duration {
+ color: #6b7280;
+ font-size: 0.85rem;
+}
+
+/* Response Body */
+.rest-api-response-body {
+ margin: 0;
+ padding: 1rem;
+ background-color: #1f2937;
+ border-radius: 0.375rem;
+ color: #e5e7eb;
+ font-size: 0.85rem;
+ font-family: 'Monaco', 'Courier New', monospace;
+ overflow-x: auto;
+ max-height: 400px;
+ overflow-y: auto;
+}
+
+.rest-api-response-body code {
+ background: none;
+ color: inherit;
+ padding: 0;
+ font-family: inherit;
+ font-size: inherit;
+}
+
+.rest-api-response-body.language-json {
+ color: #60a5fa;
+}
+
+/* Syntax highlighting for JSON */
+.rest-api-response-body.hljs {
+ background: #1f2937;
+ padding: 1rem;
+}
+
+/* Error Display */
+.rest-api-error-display {
+ margin-top: 2rem;
+ padding: 1.5rem;
+ background-color: #fef2f2;
+ border: 1px solid #fecaca;
+ border-left: 4px solid #dc2626;
+ border-radius: 0.5rem;
+ animation: slideIn 0.3s ease;
+}
+
+.rest-api-error-display--active {
+ display: block;
+}
+
+.rest-api-error-header {
+ display: flex;
+ align-items: center;
+ gap: 0.75rem;
+ margin-bottom: 1rem;
+}
+
+.rest-api-error-icon {
+ font-size: 1.5rem;
+}
+
+.rest-api-error-header h4 {
+ margin: 0;
+ font-size: 1.1rem;
+ font-weight: 600;
+ color: #991b1b;
+}
+
+.rest-api-error-message {
+ margin: 0 0 0.75rem 0;
+ color: #7f1d1d;
+ font-size: 0.95rem;
+}
+
+.rest-api-error-details {
+ margin: 0.75rem 0 0 0;
+}
+
+.rest-api-error-details summary {
+ cursor: pointer;
+ font-weight: 600;
+ color: #991b1b;
+ padding: 0.5rem;
+ user-select: none;
+}
+
+.rest-api-error-details summary:hover {
+ background-color: rgba(220, 38, 38, 0.1);
+ border-radius: 0.375rem;
+}
+
+.rest-api-error-details pre {
+ margin: 0.75rem 0 0 0;
+ padding: 0.75rem;
+ background-color: rgba(220, 38, 38, 0.05);
+ border-radius: 0.375rem;
+ font-size: 0.8rem;
+ overflow-x: auto;
+ font-family: 'Monaco', 'Courier New', monospace;
+ color: #7f1d1d;
+}
+
+/* Request Section */
+.rest-api-section--try .rest-api-execute-section {
+ margin-top: 1.5rem;
+ padding-top: 1.5rem;
+ border-top: 1px solid #e5e7eb;
+}
+
+.rest-api-execute-section h4 {
+ margin: 0 0 1rem 0;
+ font-size: 1rem;
+ font-weight: 600;
+ color: #111827;
+}
+
+/* Responsive Design */
+@media (max-width: 768px) {
+ .rest-api-response-meta {
+ flex-direction: column;
+ gap: 0.5rem;
+ align-items: flex-start;
+ }
+
+ .rest-api-response-body {
+ max-height: 300px;
+ font-size: 0.75rem;
+ }
+
+ .rest-api-execute-button {
+ width: 100%;
+ justify-content: center;
+ }
+}
+
+/* Dark mode support */
+@media (prefers-color-scheme: dark) {
+ .rest-api-response-display {
+ background-color: #111827;
+ border-color: #374151;
+ }
+
+ .rest-api-response-header {
+ border-bottom-color: #374151;
+ color: #f3f4f6;
+ }
+
+ .rest-api-response-header h4 {
+ color: #f3f4f6;
+ }
+
+ .rest-api-response-status {
+ background-color: #064e3b;
+ color: #d1fae5;
+ }
+
+ .rest-api-url-preview {
+ background-color: #1f2937;
+ border-left-color: #60a5fa;
+ color: #e5e7eb;
+ }
+
+ .rest-api-parameter-input input,
+ .rest-api-parameter-input textarea {
+ background-color: #1f2937;
+ border-color: #374151;
+ color: #f3f4f6;
+ }
+
+ .rest-api-parameter-input label {
+ color: #e5e7eb;
+ }
+}
diff --git a/layouts/docs/rest-apis.html b/layouts/docs/rest-apis.html
index 27518e30cb..49dae381b4 100644
--- a/layouts/docs/rest-apis.html
+++ b/layouts/docs/rest-apis.html
@@ -21,6 +21,8 @@
{{ .Title }}
{{ partial "page-meta-lastmod.html" . }}
+
+
{{ partial "video-section-related.html" . -}}
{{ partial "recent-discussions.html" . -}}
diff --git a/layouts/partials/rest-apis/auth-input.html b/layouts/partials/rest-apis/auth-input.html
new file mode 100644
index 0000000000..4d7045547b
--- /dev/null
+++ b/layouts/partials/rest-apis/auth-input.html
@@ -0,0 +1,26 @@
+{{/*
+ Authentication Input Partial
+ Provides bearer token input for authenticated requests
+ Context expects: operationId, requiresAuth
+*/}}
+{{ if .requiresAuth }}
+
+{{ end }}
diff --git a/layouts/partials/rest-apis/execute-button.html b/layouts/partials/rest-apis/execute-button.html
new file mode 100644
index 0000000000..2221d7335e
--- /dev/null
+++ b/layouts/partials/rest-apis/execute-button.html
@@ -0,0 +1,15 @@
+{{/*
+ Execute Button Partial
+ Provides the button to trigger API request execution
+ Context expects: operationId, method, path
+*/}}
+
+ ▶
+ Execute Request
+
diff --git a/layouts/partials/rest-apis/parameter-inputs.html b/layouts/partials/rest-apis/parameter-inputs.html
new file mode 100644
index 0000000000..39b963f004
--- /dev/null
+++ b/layouts/partials/rest-apis/parameter-inputs.html
@@ -0,0 +1,75 @@
+{{/*
+ Parameter Input Partial
+ Renders interactive input fields for API parameters
+ Context expects: parameters (array), operationId
+*/}}
+{{ if gt (len .parameters) 0 }}
+ {{ $locations := slice
+ (dict "key" "path" "label" "Path parameters")
+ (dict "key" "query" "label" "Query parameters")
+ (dict "key" "header" "label" "Header parameters")
+ }}
+
+ {{ range $locations }}
+ {{ $rows := where $.parameters "in" .key }}
+ {{ if gt (len $rows) 0 }}
+
+
{{ .label }}
+ {{ range $rows }}
+ {{ $paramSchema := index . "schema" | default dict }}
+ {{ $paramType := partial "rest-apis/schema-type.html" (dict "schema" $paramSchema "schemas" $.schemas) | strings.TrimSpace }}
+ {{ $isRequired := .required | default false }}
+ {{ $paramId := printf "param-%s-%s-%s" $.operationId .in .name }}
+
+
+ {{ end }}
+
+ {{ end }}
+ {{ end }}
+{{ end }}
diff --git a/layouts/partials/rest-apis/server-selector.html b/layouts/partials/rest-apis/server-selector.html
new file mode 100644
index 0000000000..3ae551ae80
--- /dev/null
+++ b/layouts/partials/rest-apis/server-selector.html
@@ -0,0 +1,21 @@
+{{/*
+ Server Selector Partial
+ Allows users to select which API server to target
+ Context expects: servers, operationId
+*/}}
+{{ if gt (len .servers) 0 }}
+
+ API Server
+
+ {{ range $index, $server := .servers }}
+
+ {{ index $server "description" | default (index $server "url") }}
+
+ {{ end }}
+
+
+{{ end }}
diff --git a/layouts/partials/rest-apis/url-preview.html b/layouts/partials/rest-apis/url-preview.html
new file mode 100644
index 0000000000..8a7d18705b
--- /dev/null
+++ b/layouts/partials/rest-apis/url-preview.html
@@ -0,0 +1,12 @@
+{{/*
+ URL Preview Partial
+ Shows the complete URL that will be requested
+ Context expects: operationId, path, servers
+*/}}
+
+ {{ if gt (len .servers) 0 }}
+ {{ index (index .servers 0) "url" }}{{ .path }}
+ {{ else }}
+ https://cloud.layer5.io{{ .path }}
+ {{ end }}
+
diff --git a/layouts/partials/rest-apis/viewer.html b/layouts/partials/rest-apis/viewer.html
index 5bac898e59..de59bce509 100644
--- a/layouts/partials/rest-apis/viewer.html
+++ b/layouts/partials/rest-apis/viewer.html
@@ -372,7 +372,8 @@
Select an endpoint
{{ $servers = $servers | append $defaultCloudServer }}
{{ end }}
-
+