### Start ShinyProxy Application Instance Source: https://context7.com/openanalytics/shinyproxy/llms.txt Start a new application instance using the /app_i/{specId}/{appInstanceName} POST endpoint. This example shows starting with default settings and with custom parameters and timezone. ```bash # Start a new app instance with default settings curl -X POST http://localhost:8080/app_i/01_hello/default \ -u jack:password \ -H "Content-Type: application/json" \ -d '{}' # Response: # { # "status": "success", # "data": { # "id": "cdaa8056-4f96-428e-91e8-bc13518d8987", # "status": "New", # "startupTimestamp": 0, # "createdTimestamp": 1671707875757, # "userId": "jack", # "specId": "01_hello", # "displayName": "Hello Application", # "containers": [], # "runtimeValues": { # "SHINYPROXY_FORCE_FULL_RELOAD": false, # "SHINYPROXY_WEBSOCKET_RECONNECTION_MODE": "None", # "SHINYPROXY_MAX_INSTANCES": 100, # "SHINYPROXY_PUBLIC_PATH": "/app_proxy/cdaa8056-4f96-428e-91e8-bc13518d8987/", # "SHINYPROXY_APP_INSTANCE": "default" # } # } # } ``` ```bash # Start app with parameters and timezone curl -X POST http://localhost:8080/app_i/01_hello/myinstance \ -u jack:password \ -H "Content-Type: application/json" \ -d '{ "parameters": { "resources": "2 CPU cores - 8G RAM", "dataset": "production" }, "timezone": "Europe/Brussels" }' ``` -------------------------------- ### Run the ShinyProxy application Source: https://github.com/openanalytics/shinyproxy/blob/master/README.md Starts the ShinyProxy server using the generated JAR file. ```bash java -jar shinyproxy-3.2.0.jar ``` -------------------------------- ### GET /app_direct/{appName}/** Source: https://context7.com/openanalytics/shinyproxy/llms.txt Provides direct access to applications, automatically starting them if they are not currently running. ```APIDOC ## GET /app_direct/{appName}/** ### Description Provides direct access to applications, automatically starting them if not running. This endpoint waits up to 10 minutes for app startup. ### Method GET ### Endpoint /app_direct/{appName}/** ### Parameters #### Path Parameters - **appName** (string) - Required - The name of the application to access. ``` -------------------------------- ### POST /app_i/{specId}/{appInstanceName} Source: https://context7.com/openanalytics/shinyproxy/llms.txt Starts a new application instance for the authenticated user, supporting custom parameters and timezone configuration. ```APIDOC ## POST /app_i/{specId}/{appInstanceName} ### Description Starts a new application instance for the authenticated user. Returns the proxy object with runtime values and connection details. ### Method POST ### Endpoint /app_i/{specId}/{appInstanceName} ### Parameters #### Path Parameters - **specId** (string) - Required - The identifier of the application specification. - **appInstanceName** (string) - Required - The name of the application instance. #### Request Body - **parameters** (object) - Optional - Custom parameters for the application. - **timezone** (string) - Optional - Timezone configuration for the instance. ### Response #### Success Response (200) - **status** (string) - Status of the request. - **data** (object) - The proxy object containing instance details, runtime values, and container information. ### Response Example { "status": "success", "data": { "id": "cdaa8056-4f96-428e-91e8-bc13518d8987", "status": "New", "userId": "jack", "specId": "01_hello", "displayName": "Hello Application" } } ``` -------------------------------- ### Configure Custom App Details Source: https://context7.com/openanalytics/shinyproxy/llms.txt Example configuration in `application.yml` for defining custom application details, including dynamic values using SpEL. ```yaml proxy: specs: - id: 01_hello shiny-proxy: custom-app-details: - name: "Database Connection" description: "Current database endpoint" value: "#{proxy.runtimeValues['DB_HOST']}" ``` -------------------------------- ### Direct Access to ShinyProxy App with Auto-Start Source: https://context7.com/openanalytics/shinyproxy/llms.txt Access applications directly using /app_direct/{appName}/** or /app_direct_i/{appName}/{instanceName}/**. These endpoints automatically start the application if it's not already running. The system waits up to 10 minutes for startup. ```bash # Direct access to app (auto-starts if not running) curl -X GET http://localhost:8080/app_direct/01_hello/ \ -u jack:password ``` ```bash # Direct access with named instance curl -X GET http://localhost:8080/app_direct_i/01_hello/myinstance/ \ -u jack:password # Note: The endpoint waits up to 10 minutes for app startup before timing out ``` -------------------------------- ### Configure ShinyProxy Landing Page Source: https://context7.com/openanalytics/shinyproxy/llms.txt Configure the landing page behavior and authentication settings in application.yml. This example sets a custom title, logo, landing page mode, and simple authentication. ```yaml # application.yml - Landing page configuration proxy: title: "My Shiny Apps" logo-url: https://example.com/logo.png landing-page: / # Options: "/" (index), "SingleApp", "FirstApp" my-apps-mode: Inline # Options: Inline, Modal, None hide-navbar: false authentication: simple users: - name: jack password: password groups: scientists ``` -------------------------------- ### GET /app_proxy/{targetId}/** Source: https://context7.com/openanalytics/shinyproxy/llms.txt Proxies HTTP requests to a running containerized application, handling authentication and iframe script injection. ```APIDOC ## GET /app_proxy/{targetId}/** ### Description Proxies HTTP requests to the running containerized application. It handles authentication verification and injects the ShinyProxy iframe JavaScript. ### Method GET ### Endpoint /app_proxy/{targetId}/** ### Parameters #### Path Parameters - **targetId** (string) - Required - The unique ID of the running proxy instance. #### Query Parameters - **sp_proxy_id** (string) - Optional - Proxy ID for multi-instance scenarios. ``` -------------------------------- ### Initialize Shiny Proxy App Source: https://github.com/openanalytics/shinyproxy/blob/master/src/main/resources/templates/app.html This JavaScript code initializes the Shiny Proxy application on page load. It sets up common functionalities, starts the application with specified parameters, loads default parameter values, and initiates OpenID refresh if enabled. Ensure all variables like contextPath, application_name, etc., are correctly defined in the surrounding scope. ```javascript $(window).on('load', function () { window.Shiny.common.init(\[\[${contextPath}\]\], \[\[${application_\_name}\]\], \[\[${spInstance}\]\], \[\[${appMaxInstances}\]\], \[\[${myAppsMode}\]\], \[\[${pauseSupported}\]\]); window.Shiny.app.start( \[\[${proxy}\]\], \[\[${heartbeatRate}\]\], \[\[${appName}\]\], \[\[${appInstance}\]\], \[\[${parameterAllowedCombinations}\]\], \[\[${parameterDefinitions}\]\], \[\[${parameterIds}\]\], \[\[${appPath}\]\], \[\[${containerSubPath}\]\], ); window.Shiny.ui.loadDefaultParameters(\[\[${parameterDefaults}\]\]); if (\[\[${refreshOpenidEnabled}\]\]) { window.Shiny.connections.startOpenidRefresh(); } }); ``` -------------------------------- ### Custom App Details - Get Runtime App Information Source: https://context7.com/openanalytics/shinyproxy/llms.txt Retrieves custom application details configured for a running proxy, which can include dynamic values. ```APIDOC ## GET /api/proxy/{proxyId}/details ### Description Retrieves custom application details that have been configured for a running proxy. These details can incorporate dynamic values resolved using SpEL expressions. ### Method GET ### Endpoint `/api/proxy/{proxyId}/details` ### Parameters #### Path Parameters - **proxyId** (string) - Required - The unique identifier of the proxy instance. ### Request Example ```bash curl -X GET http://localhost:8080/api/proxy/cdaa8056-4f96-428e-91e8-bc13518d8987/details \ -u jack:password ``` ### Response #### Success Response (200) - **status** (string) - Indicates the success of the operation. - **data** (array) - A list of custom detail objects. - Each object contains `name` (string), `description` (string), and `value` (string). #### Response Example ```json { "status": "success", "data": [ { "name": "example_name", "description": "example_description", "value": "example_value" } ] } ``` ### Configuration Example Custom app details can be configured in `application.yml` under `proxy.specs`. ```yaml proxy: specs: - id: 01_hello shiny-proxy: custom-app-details: - name: "Database Connection" description: "Current database endpoint" value: "#{proxy.runtimeValues['DB_HOST']}" ``` ``` -------------------------------- ### Get Custom App Details Source: https://context7.com/openanalytics/shinyproxy/llms.txt Retrieves custom application details configured for a running ShinyProxy. These details can include dynamic values resolved using SpEL expressions. Requires user authentication. ```bash curl -X GET http://localhost:8080/api/proxy/cdaa8056-4f96-428e-91e8-bc13518d8987/details \ -u jack:password ``` -------------------------------- ### Get Heartbeat Information Source: https://context7.com/openanalytics/shinyproxy/llms.txt Retrieve the last heartbeat timestamp and configured heartbeat rate for a specific ShinyProxy application. Requires user authentication. ```bash curl -X GET http://localhost:8080/heartbeat/cdaa8056-4f96-428e-91e8-bc13518d8987 \ -u jack:password ``` -------------------------------- ### Adjust body padding for navbar height Source: https://github.com/openanalytics/shinyproxy/blob/master/src/main/resources/templates/fragments/navbar.html Calculates the height of the navbar element and applies it to the body's top padding. This ensures the page content starts below the navigation bar. ```javascript // fix padding of body as soon as navbar is rendered let navbarHeight = $('.navbar-height').height(); if (navbarHeight !== undefined) { $('body').css('padding-top', navbarHeight + 'px'); } ``` -------------------------------- ### Build ShinyProxy from source Source: https://github.com/openanalytics/shinyproxy/blob/master/README.md Compiles the project and generates a JAR file in the target directory. ```bash mvn -U clean install ``` -------------------------------- ### Initialize ShinyProxy Common Functionality Source: https://github.com/openanalytics/shinyproxy/blob/master/src/main/resources/templates/index.html This code initializes common ShinyProxy functionalities on page load. Ensure all required context variables are available before execution. ```javascript $(window).on('load', function () { window.Shiny.common.init([[${contextPath}]], [[${application_name}]], [[${spInstance}]], [[${appMaxInstances}]], [[${myAppsMode}]], [[${pauseSupported}]]); window.Shiny.common.startIndex(); }); ``` -------------------------------- ### Configure ShinyProxy Application Settings Source: https://context7.com/openanalytics/shinyproxy/llms.txt Defines the core proxy settings, authentication, Docker backend, and application specifications in a YAML configuration file. ```yaml proxy: title: Open Analytics Shiny Proxy logo-url: https://www.openanalytics.eu/shinyproxy/logo.png landing-page: / heartbeat-rate: 10000 heartbeat-timeout: 60000 port: 8080 # Authentication configuration authentication: simple admin-groups: admins users: - name: jack password: password groups: scientists - name: jeff password: password groups: mathematicians - name: admin password: adminpassword groups: admins # Feature flags allow-transfer-app: true hide-navbar: false my-apps-mode: Inline # Docker backend configuration docker: port-range-start: 20000 # App specifications specs: - id: 01_hello display-name: Hello Application description: Application demonstrating the basics of Shiny container-cmd: ["R", "-e", "shinyproxy::run_01_hello()"] container-image: openanalytics/shinyproxy-demo access-groups: [scientists, mathematicians] shiny-proxy: max-instances: 5 websocket-reconnection-mode: None shiny-force-full-reload: false track-app-url: true template-group: "Data Analysis" - id: 06_tabsets display-name: Tabsets Demo container-cmd: ["R", "-e", "shinyproxy::run_06_tabsets()"] container-image: openanalytics/shinyproxy-demo access-groups: scientists shiny-proxy: max-instances: 3 support-mail-to-address: tabsets-support@example.com support-mail-subject: "Tabsets App Issue" # Support configuration support: mail-to-address: support@example.com mail-from-address: noreply@shinyproxy.io mail-subject: "ShinyProxy Support Request" logging: file: name: shinyproxy.log level: eu.openanalytics: DEBUG ``` -------------------------------- ### Enable App Transfer Configuration Source: https://context7.com/openanalytics/shinyproxy/llms.txt Configuration setting in `application.yml` to enable the app transfer functionality. ```yaml proxy: allow-transfer-app: true ``` -------------------------------- ### List All Active Proxies (Admin Only) Source: https://context7.com/openanalytics/shinyproxy/llms.txt This admin-only endpoint retrieves detailed metadata for all active ShinyProxy instances across all users, including status, uptime, and resource configuration. Requires admin authentication. ```bash curl -X GET http://localhost:8080/admin/data \ -u admin:adminpassword \ -H "Accept: application/json" ``` -------------------------------- ### Initialize ShinyProxy Admin JavaScript Source: https://github.com/openanalytics/shinyproxy/blob/master/src/main/resources/templates/admin.html This JavaScript code initializes ShinyProxy's common and admin functionalities upon page load. It requires context path, application name, instance ID, and pause support status. ```javascript $(window).on('load', function () { window.Shiny.common.init([[${contextPath}]], [[${application_name}]], [[${spInstance}]], [[${pauseSupported}]]); window.Shiny.admin.init(); }); ``` -------------------------------- ### Report an Issue Source: https://context7.com/openanalytics/shinyproxy/llms.txt Allows authenticated users to report issues via email. Container logs can be automatically attached for running apps. Requires user authentication. ```bash curl -X POST http://localhost:8080/issue \ -u jack:password \ -H "Content-Type: application/json" \ -d '{ "message": "The app crashes when I click the submit button", "currentLocation": "http://localhost:8080/app/01_hello/", "proxyId": "cdaa8056-4f96-428e-91e8-bc13518d8987" }' ``` -------------------------------- ### Admin Data - List All Active Proxies Source: https://context7.com/openanalytics/shinyproxy/llms.txt Retrieves information about all active proxies across all users. This is an admin-only endpoint. ```APIDOC ## GET /admin/data ### Description Returns detailed metadata for all active proxies, including status, uptime, and container information. This endpoint is restricted to administrators. ### Method GET ### Endpoint `/admin/data` ### Parameters (No parameters) ### Request Example ```bash curl -X GET http://localhost:8080/admin/data \ -u admin:adminpassword \ -H "Accept: application/json" ``` ### Response #### Success Response (200) - **status** (string) - Indicates the success of the operation. - **data** (array) - A list of active proxy objects. - Each object contains fields like `status`, `proxyId`, `userId`, `appName`, `instanceName`, `endpoint`, `uptime`, `lastHeartBeat`, `imageName`, `imageTag`, `heartbeatTimeout`, `maxLifetime`, `spInstance`, `backendContainerName`, and `parameters`. #### Response Example ```json { "status": "success", "data": [ { "status": "Up", "proxyId": "9cd90bbb-ae9c-4016-9b9c-d2852b3a0bf6", "userId": "jack", "appName": "01_hello", "instanceName": "Default", "endpoint": "N/A", "uptime": "0:00:39", "lastHeartBeat": "0:00:05", "imageName": "openanalytics/shinyproxy-demo", "imageTag": "N/A", "heartbeatTimeout": null, "maxLifetime": "0:02:00", "spInstance": "9bec0d32754eab6a036bf1ee032bca82f98df0c5", "backendContainerName": "900b4f35b283401946db1d7cb8fe31ad5e6209d921b3cb9fd668ed6b9cbf7aa5", "parameters": null } ] } ``` ``` -------------------------------- ### Define Advanced ShinyProxy App Extensions Source: https://context7.com/openanalytics/shinyproxy/llms.txt Configures advanced application-specific settings such as WebSocket reconnection modes, instance limits, and custom runtime details using SpEL expressions. ```yaml # Advanced spec configuration with ShinyProxy extensions proxy: specs: - id: advanced_app display-name: Advanced Analytics App container-image: myregistry/analytics-app:latest container-cmd: ["R", "-e", "shiny::runApp('/app')"] # ShinyProxy-specific extensions shiny-proxy: # WebSocket reconnection behavior websocket-reconnection-mode: None # Options: None, Auto, Confirm # Force full page reload on reconnect shiny-force-full-reload: false # Maximum concurrent instances per user max-instances: 10 # Navigation settings hide-navbar-on-main-page-link: false always-show-switch-instance: true # URL tracking for session restoration track-app-url: true # Grouping for UI organization template-group: "Analytics" template-properties: category: "Production" priority: "High" # Per-app support configuration support-mail-to-address: analytics-team@example.com support-mail-subject: "Analytics App Issue" # Custom runtime details (SpEL expressions supported) custom-app-details: - name: "Container ID" description: "Docker container identifier" value: "#{proxy.containers[0].id}" - name: "Session Start" description: "When this session started" value: "#{proxy.startupTimestamp}" ``` -------------------------------- ### Report Issue - User Feedback System Source: https://context7.com/openanalytics/shinyproxy/llms.txt Allows authenticated users to report issues, with options to attach container logs. ```APIDOC ## POST /issue ### Description Enables authenticated users to report issues. These reports are sent via email to a configured support address. Container logs can be automatically attached for running applications. ### Method POST ### Endpoint `/issue` ### Parameters #### Request Body - **message** (string) - Required - The description of the issue. - **currentLocation** (string) - Optional - The URL where the issue occurred. - **proxyId** (string) - Optional - The ID of the proxy instance related to the issue. ### Request Example ```bash curl -X POST http://localhost:8080/issue \ -u jack:password \ -H "Content-Type: application/json" \ -d '{ "message": "The app crashes when I click the submit button", "currentLocation": "http://localhost:8080/app/01_hello/", "proxyId": "cdaa8056-4f96-428e-91e8-bc13518d8987" }' ``` ### Response #### Success Response (200) - **status** (string) - Indicates the success of the operation. - **data** (null) - No data is returned on success. #### Response Example ```json {"status": "success", "data": null} ``` ### Configuration Issue reporting requires email configuration in `application.yml` and Spring Mail properties. ```yaml proxy: support: mail-to-address: support@example.com mail-from-address: issues@shinyproxy.io mail-subject: "ShinyProxy Error Report" spring: mail: host: smtp.example.com port: 587 username: smtp-user password: smtp-password ``` ``` -------------------------------- ### Access ShinyProxy Index Page Source: https://context7.com/openanalytics/shinyproxy/llms.txt Access the ShinyProxy index page using curl. Basic authentication is required for protected resources. ```bash # Access the index page curl -X GET http://localhost:8080/ \ -u jack:password \ -H "Accept: text/html" ``` -------------------------------- ### Proxy Requests to Running ShinyProxy App Source: https://context7.com/openanalytics/shinyproxy/llms.txt Route HTTP requests to a running containerized application using the /app_proxy/{targetId}/** endpoint. This automatically injects necessary JavaScript for iframe communication. ```bash # Proxy a request to a running app (replace targetId with actual proxy ID) curl -X GET "http://localhost:8080/app_proxy/cdaa8056-4f96-428e-91e8-bc13518d8987/" \ -u jack:password \ -H "Accept: text/html" # The response will be the app's HTML with injected ShinyProxy iframe scripts ``` ```bash # Proxy with specific proxy ID parameter (useful for multi-instance scenarios) curl -X GET "http://localhost:8080/app_proxy/abc123/?sp_proxy_id=cdaa8056-4f96-428e-91e8-bc13518d8987" \ -u jack:password ``` -------------------------------- ### Send Heartbeat to Keep App Alive Source: https://context7.com/openanalytics/shinyproxy/llms.txt Use this endpoint to send a heartbeat signal to keep a ShinyProxy application instance alive. Requires user authentication. ```bash curl -X POST http://localhost:8080/heartbeat/cdaa8056-4f96-428e-91e8-bc13518d8987 \ -u jack:password \ -H "Content-Type: application/json" ``` -------------------------------- ### Stop Delegate Proxies (Admin) Source: https://context7.com/openanalytics/shinyproxy/llms.txt Admin endpoint to stop DelegateProxies. Can stop all, by spec ID, or by individual proxy ID. Requires admin authentication. ```bash curl -X DELETE http://localhost:8080/admin/delegate-proxy \ -u admin:adminpassword ``` ```bash curl -X DELETE "http://localhost:8080/admin/delegate-proxy?specId=01_hello" \ -u admin:adminpassword ``` ```bash curl -X DELETE "http://localhost:8080/admin/delegate-proxy?id=9cd90bbb-ae9c-4016-9b9c-d2852b3a0bf6" \ -u admin:adminpassword ``` -------------------------------- ### Configure Issue Reporting Email Source: https://context7.com/openanalytics/shinyproxy/llms.txt Configuration in `application.yml` for setting up the email sender and receiver for issue reports, along with the email subject. Requires Spring Mail configuration. ```yaml proxy: support: mail-to-address: support@example.com mail-from-address: issues@shinyproxy.io mail-subject: "ShinyProxy Error Report" spring: mail: host: smtp.example.com port: 587 username: smtp-user password: smtp-password ``` -------------------------------- ### Transfer App - Change Proxy Ownership Source: https://context7.com/openanalytics/shinyproxy/llms.txt Transfers ownership of a running proxy to another user. This feature requires specific configuration. ```APIDOC ## PUT /api/proxy/{proxyId}/userId ### Description Transfers ownership of a running proxy to a different user. This functionality must be enabled in the configuration (`proxy.allow-transfer-app: true`) and only applies to proxies in an "Up" status. ### Method PUT ### Endpoint `/api/proxy/{proxyId}/userId` ### Parameters #### Path Parameters - **proxyId** (string) - Required - The unique identifier of the proxy to transfer. #### Request Body - **userId** (string) - Required - The username of the new owner. ### Request Example ```bash curl -X PUT http://localhost:8080/api/proxy/cdaa8056-4f96-428e-91e8-bc13518d8987/userId \ -u jack:password \ -H "Content-Type: application/json" \ -d '{"userId": "jeff"}' ``` ### Response #### Success Response (200) - **status** (string) - Indicates the success of the operation. - **data** (null) - No data is returned on success. #### Response Example (Success) ```json {"status": "success", "data": null} ``` #### Error Response (e.g., 400) - **status** (string) - Indicates failure. - **data** (string) - Error message, e.g., "Cannot transfer app because the proxy is already owned by this user". #### Response Example (Already Owned) ```json {"status": "fail", "data": "Cannot transfer app because the proxy is already owned by this user"} ``` ### Configuration To enable this feature, set `proxy.allow-transfer-app: true` in your `application.yml`. ```yaml proxy: allow-transfer-app: true ``` ``` -------------------------------- ### Stop Delegate Proxies - Admin Proxy Management Source: https://context7.com/openanalytics/shinyproxy/llms.txt Admin endpoint to stop DelegateProxies, with options to stop all, by spec, or by ID. ```APIDOC ## DELETE /admin/delegate-proxy ### Description Stops DelegateProxies. Administrators can use this endpoint to stop all delegate proxies, proxies associated with a specific application spec, or a single delegate proxy by its ID. ### Method DELETE ### Endpoint `/admin/delegate-proxy` ### Parameters #### Query Parameters - **specId** (string) - Optional - The ID of the application spec to stop proxies for. - **id** (string) - Optional - The specific ID of the delegate proxy to stop. *Note: If neither `specId` nor `id` is provided, all delegate proxies will be stopped.* ### Request Example (Stop All) ```bash curl -X DELETE http://localhost:8080/admin/delegate-proxy \ -u admin:adminpassword ``` ### Request Example (Stop by Spec ID) ```bash curl -X DELETE "http://localhost:8080/admin/delegate-proxy?specId=01_hello" \ -u admin:adminpassword ``` ### Request Example (Stop by Proxy ID) ```bash curl -X DELETE "http://localhost:8080/admin/delegate-proxy?id=9cd90bbb-ae9c-4016-9b9c-d2852b3a0bf6" \ -u admin:adminpassword ``` ### Response #### Success Response (200) - **status** (string) - Indicates the success of the operation. - **data** (null) - No data is returned on success. #### Response Example ```json {"status": "success", "data": null} ``` ``` -------------------------------- ### Heartbeat Management Source: https://context7.com/openanalytics/shinyproxy/llms.txt Endpoints for sending heartbeats to keep applications alive and retrieving heartbeat information. ```APIDOC ## POST /heartbeat/{proxyId} ### Description Sends a heartbeat to keep a specific application instance alive. ### Method POST ### Endpoint `/heartbeat/{proxyId}` ### Parameters #### Path Parameters - **proxyId** (string) - Required - The unique identifier of the proxy instance. ### Request Body (No request body specified) ### Request Example ```bash curl -X POST http://localhost:8080/heartbeat/cdaa8056-4f96-428e-91e8-bc13518d8987 \ -u jack:password \ -H "Content-Type: application/json" ``` ### Response #### Success Response (200) - **status** (string) - Indicates the success of the operation. - **data** (null) - No data is returned on success. #### Response Example ```json { "status": "success", "data": null } ``` ## GET /heartbeat/{proxyId} ### Description Retrieves heartbeat information for a specific application instance. ### Method GET ### Endpoint `/heartbeat/{proxyId}` ### Parameters #### Path Parameters - **proxyId** (string) - Required - The unique identifier of the proxy instance. ### Request Example ```bash curl -X GET http://localhost:8080/heartbeat/cdaa8056-4f96-428e-91e8-bc13518d8987 \ -u jack:password ``` ### Response #### Success Response (200) - **status** (string) - Indicates the success of the operation. - **data** (object) - Contains heartbeat details. - **lastHeartbeat** (integer) - Timestamp of the last heartbeat. - **heartbeatRate** (integer) - The configured heartbeat rate in milliseconds. #### Response Example ```json { "status": "success", "data": { "lastHeartbeat": 1704063600, "heartbeatRate": 10000 } } ``` ``` -------------------------------- ### Transfer App Ownership Source: https://context7.com/openanalytics/shinyproxy/llms.txt Transfers ownership of a running ShinyProxy application to another user. This feature must be enabled in `application.yml` and only works for proxies in 'Up' status. Requires user authentication. ```bash curl -X PUT http://localhost:8080/api/proxy/cdaa8056-4f96-428e-91e8-bc13518d8987/userId \ -u jack:password \ -H "Content-Type: application/json" \ -d '{"userId": "jeff"}' ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.