# NervesHub - [Introduction](https://docs.nerves-hub.org/introduction.md): NervesHub is an open-source platform for secure OTA firmware updates and fleet management of Nerves-based IoT devices — self-hosted or on NervesCloud. - [Quickstart: Your First OTA Update](https://docs.nerves-hub.org/quickstart.md): Go from a new Nerves project to your first over-the-air firmware update on NervesCloud in minutes using Shared Secret authentication. - [Architecture](https://docs.nerves-hub.org/architecture.md): Understand how NervesHub's server, device client, CLI, object storage, and security model fit together to manage firmware updates at scale. - [Terminology](https://docs.nerves-hub.org/terminology.md): A glossary of the key entities in NervesHub — organizations, products, devices, firmware, deployment groups, and authentication concepts explained. - [Add NervesHubLink to a Project](https://docs.nerves-hub.org/setup/add-to-project.md): Step-by-step guide to adding nerves_hub_link to your Nerves project mix.exs and configuring authentication for OTA firmware updates. - [Connecting Devices](https://docs.nerves-hub.org/setup/connecting.md): How to configure your Nerves device to connect to NervesCloud or a self-hosted NervesHub server using persistent Phoenix WebSocket channels. - [Create and Manage Products](https://docs.nerves-hub.org/setup/products.md): How to create products, organize devices and firmware into logical groups, and manage product settings including signing keys, extensions, and shared secrets. - [Register and Manage Devices](https://docs.nerves-hub.org/setup/devices.md): How to register devices, assign tags for deployment group targeting, bulk provision via CSV, manage device certificates, and run remote device actions. - [Build, Sign, and Upload Firmware](https://docs.nerves-hub.org/setup/firmware.md): How to build a fwup firmware file with Nerves, sign it, and upload it to NervesHub for delivery to your device fleet. - [Create and Activate Deployment Groups](https://docs.nerves-hub.org/setup/deployments.md): Create deployment groups, target devices by tag and version, ship releases, and set the concurrency and failure limits that keep a bad update contained. - [Shared Secret Authentication](https://docs.nerves-hub.org/auth/shared-secret.md): Use a product key and secret for simple HMAC-based device authentication. The fastest way to connect devices — ideal for development and prototyping. - [X.509 Device Certificates](https://docs.nerves-hub.org/auth/device-certificates.md): Provision each device with a unique X.509 client certificate and register your CA with NervesHub for mutual TLS authentication in production. - [NervesKey Hardware Security](https://docs.nerves-hub.org/auth/nerveskey.md): Use NervesKey with ATECC508A/608A secure elements to store device private keys in hardware. Keys are generated on-chip and never leave the device. - [Fleet Overview](https://docs.nerves-hub.org/management/fleet-overview.md): View real-time online/offline status, connection history, firmware version distribution, and health metrics across your entire device fleet. - [Remote Console and Shell Access](https://docs.nerves-hub.org/management/remote-console.md): Connect to any online device for live debugging with IEx, a system shell, or one-off code execution — no SSH keys or inbound firewall rules required. - [Health Metrics, Alarms, and Logs](https://docs.nerves-hub.org/management/health-monitoring.md): Collect device health metrics, display CPU/memory/load charts, fire alarms on thresholds, and stream live logs from your NervesHub fleet. - [Delta Updates](https://docs.nerves-hub.org/management/delta-updates.md): Use NervesHub delta updates to ship binary diffs instead of full firmware, cutting transfer size by up to 95 percent and speeding up OTA updates. - [Security: PKI and the Chain of Trust](https://docs.nerves-hub.org/concepts/pki.md): How NervesHub uses asymmetric cryptography to authenticate device connections with mTLS and to validate firmware integrity with signed firmware images. - [Firmware Signing](https://docs.nerves-hub.org/concepts/firmware-signing.md): How to create signing keys, embed public keys in your Nerves firmware, sign and upload firmware, and manage multiple keys for production safety. - [Deployment Group Workflows](https://docs.nerves-hub.org/concepts/deployment-workflows.md): Stage a firmware rollout with a workflow definition: per-step targeting, concurrency, failure tolerance, and approval gates, defined in JSON and uploaded to a deployment group. - [Choosing a Device Client](https://docs.nerves-hub.org/integrations/overview.md): The ways a device can connect to NervesHub: NervesHubLink for Nerves, AtomVM on the ESP32, a Rust agent for other Linux systems, and a Yocto layer. - [NervesHubLink for Nerves](https://docs.nerves-hub.org/integrations/nerves-hub-link.md): The reference NervesHub client for Nerves devices: an Elixir library that maintains the device connection, applies firmware updates, and carries the extensions. - [AtomVM on ESP32](https://docs.nerves-hub.org/integrations/atomvm-esp32.md): Connect an ESP32 running AtomVM to NervesHub with the Erlang device agent, or the Elixir layer over it, including the custom VM build both require. - [Linux Agent](https://docs.nerves-hub.org/integrations/linux-agent.md): Connect a Linux device that is not running Nerves using the Rust NervesHub agent, which shells out to fwup or RAUC to write firmware. - [Yocto Layer](https://docs.nerves-hub.org/integrations/yocto.md): Package the NervesHub Linux agent into a Yocto image with meta-nerveshub, including the layers it depends on and the DISTRO_FEATURES it needs. - [Install the nh CLI](https://docs.nerves-hub.org/cli/installation.md): Install the nh CLI on macOS, Linux, or Windows using Homebrew, a prebuilt binary, or Go — no Elixir toolchain required. - [Configure the nh CLI](https://docs.nerves-hub.org/cli/configuration.md): Configure the nh CLI with authentication tokens, a default organization and product, environment variables, and named profiles for different environments. - [nh Command Reference](https://docs.nerves-hub.org/cli/reference.md): Full reference for every nh CLI subcommand: user, org, product, device, firmware, deployment, key, ca, script, config, and migrate commands with flags. - [REST API Overview](https://docs.nerves-hub.org/api/overview.md): Explore the NervesHub HTTP REST API: base URL, OpenAPI spec location, JSON response format, URL structure, and full HTTP status code reference. - [API Authentication](https://docs.nerves-hub.org/api/authentication.md): Learn how to obtain a NervesHub personal access token and authenticate every HTTP API request using Bearer token authorization headers. - [Retrieves a Products details](https://docs.nerves-hub.org/api-reference/products/retrieves-a-products-details.md) - [Update a Product's settings](https://docs.nerves-hub.org/api-reference/products/update-a-products-settings.md) - [Delete an Organizations Product](https://docs.nerves-hub.org/api-reference/products/delete-an-organizations-product.md) - [Update a Product's settings](https://docs.nerves-hub.org/api-reference/products/update-a-products-settings-1.md) - [List all Products for an Organization](https://docs.nerves-hub.org/api-reference/products/list-all-products-for-an-organization.md) - [Create a new Product in an Organization](https://docs.nerves-hub.org/api-reference/products/create-a-new-product-in-an-organization.md) - [List Support Scripts](https://docs.nerves-hub.org/api-reference/support-scripts/list-support-scripts.md) - [Create a Support Script](https://docs.nerves-hub.org/api-reference/support-scripts/create-a-support-script.md) - [Get a Support Script by ID](https://docs.nerves-hub.org/api-reference/support-scripts/get-a-support-script-by-id.md) - [Update a Support Script](https://docs.nerves-hub.org/api-reference/support-scripts/update-a-support-script.md) - [Delete a Support Script by ID](https://docs.nerves-hub.org/api-reference/support-scripts/delete-a-support-script-by-id.md) - [Show an Iroh Endpoint for an Organization](https://docs.nerves-hub.org/api-reference/iroh-endpoints/show-an-iroh-endpoint-for-an-organization.md) - [Delete an Iroh Endpoint for an Organization](https://docs.nerves-hub.org/api-reference/iroh-endpoints/delete-an-iroh-endpoint-for-an-organization.md): An endpoint a device reported is removed too, but the device records it again the next time it connects — deleting one is not a way to stop a device holding a key it holds. - [List all Iroh Endpoints for an Organization](https://docs.nerves-hub.org/api-reference/iroh-endpoints/list-all-iroh-endpoints-for-an-organization.md): Newest first. - [Register an Iroh Endpoint for an Organization](https://docs.nerves-hub.org/api-reference/iroh-endpoints/register-an-iroh-endpoint-for-an-organization.md): Records an endpoint id nobody has proven yet, which is the point and also the risk. A key already registered anywhere is refused, without saying where — whether another organization holds one is that organization's business. - [List all CA Certificates for an Organization](https://docs.nerves-hub.org/api-reference/ca-certificates/list-all-ca-certificates-for-an-organization.md) - [Create a CA Certificate for an Organization](https://docs.nerves-hub.org/api-reference/ca-certificates/create-a-ca-certificate-for-an-organization.md) - [View an Organization's CA Certificate](https://docs.nerves-hub.org/api-reference/ca-certificates/view-an-organizations-ca-certificate.md) - [Delete an Organization's CA Certificate](https://docs.nerves-hub.org/api-reference/ca-certificates/delete-an-organizations-ca-certificate.md) - [Generate a token for verifying the ownership of a CA Certificate](https://docs.nerves-hub.org/api-reference/ca-certificates/generate-a-token-for-verifying-the-ownership-of-a-ca-certificate.md): Used to generate a short lived token for use during the creation of a CA Certificate. - [List the Log Lines a Device has sent](https://docs.nerves-hub.org/api-reference/device-logs/list-the-log-lines-a-device-has-sent.md): The log lines this device sent over the logging extension, newest first. - [Authenticate a user (deprecated)](https://docs.nerves-hub.org/api-reference/auth/authenticate-a-user-deprecated.md) - [Check the CLI authentication progress](https://docs.nerves-hub.org/api-reference/auth/check-the-cli-authentication-progress.md) - [Start the CLI authentication process](https://docs.nerves-hub.org/api-reference/auth/start-the-cli-authentication-process.md) - [Show details of the currently logged in user](https://docs.nerves-hub.org/api-reference/auth/show-details-of-the-currently-logged-in-user.md) - [Authenticate a user](https://docs.nerves-hub.org/api-reference/auth/authenticate-a-user.md) - [Show a Certificate for a Device](https://docs.nerves-hub.org/api-reference/device-certificates/show-a-certificate-for-a-device.md) - [Delete a Device's Certificate](https://docs.nerves-hub.org/api-reference/device-certificates/delete-a-devices-certificate.md) - [List all Certificates for a Device](https://docs.nerves-hub.org/api-reference/device-certificates/list-all-certificates-for-a-device.md) - [Create a Certificate for a Device](https://docs.nerves-hub.org/api-reference/device-certificates/create-a-certificate-for-a-device.md) - [Request a Device upgrade to a different Firmware](https://docs.nerves-hub.org/api-reference/devices/request-a-device-upgrade-to-a-different-firmware.md) - [Request a Device reboot](https://docs.nerves-hub.org/api-reference/devices/request-a-device-reboot.md) - [Clear the penalty box for a Device](https://docs.nerves-hub.org/api-reference/devices/clear-the-penalty-box-for-a-device.md) - [Bulk create Devices from a manifest. Only a Microchip Trust and Go manifest is currently supported.](https://docs.nerves-hub.org/api-reference/devices/bulk-create-devices-from-a-manifest-only-a-microchip-trust-and-go-manifest-is-currently-supported.md) - [Request a Device run some Elixir code in it's console connection](https://docs.nerves-hub.org/api-reference/devices/request-a-device-run-some-elixir-code-in-its-console-connection.md) - [List Devices](https://docs.nerves-hub.org/api-reference/devices/list-devices.md) - [Request a Device reconnect](https://docs.nerves-hub.org/api-reference/devices/request-a-device-reconnect.md) - [Show a Device](https://docs.nerves-hub.org/api-reference/devices/show-a-device.md) - [Update a Device](https://docs.nerves-hub.org/api-reference/devices/update-a-device.md) - [Create a Device](https://docs.nerves-hub.org/api-reference/devices/create-a-device.md) - [Delete a Device](https://docs.nerves-hub.org/api-reference/devices/delete-a-device.md) - [Test a Devices Certificate authentication](https://docs.nerves-hub.org/api-reference/devices/test-a-devices-certificate-authentication.md) - [Move a Device to a different Product](https://docs.nerves-hub.org/api-reference/devices/move-a-device-to-a-different-product.md) - [Send a Support Script to a Device](https://docs.nerves-hub.org/api-reference/devices/send-a-support-script-to-a-device.md) - [Request a Device reconnect](https://docs.nerves-hub.org/api-reference/devices-short-url/request-a-device-reconnect.md) - [List the Log Lines a Device has sent](https://docs.nerves-hub.org/api-reference/devices-short-url/list-the-log-lines-a-device-has-sent.md): The log lines this device sent over the logging extension, newest first. - [Request a Device run some Elixir code in it's console connection](https://docs.nerves-hub.org/api-reference/devices-short-url/request-a-device-run-some-elixir-code-in-its-console-connection.md) - [Send a Support Script to a Device](https://docs.nerves-hub.org/api-reference/devices-short-url/send-a-support-script-to-a-device.md) - [Request a Device upgrade to a different Firmware](https://docs.nerves-hub.org/api-reference/devices-short-url/request-a-device-upgrade-to-a-different-firmware.md) - [Clear the penalty box for a Device](https://docs.nerves-hub.org/api-reference/devices-short-url/clear-the-penalty-box-for-a-device.md) - [List Support Scripts](https://docs.nerves-hub.org/api-reference/devices-short-url/list-support-scripts.md) - [Request a Device reboot](https://docs.nerves-hub.org/api-reference/devices-short-url/request-a-device-reboot.md) - [Move a Device to a different Product](https://docs.nerves-hub.org/api-reference/devices-short-url/move-a-device-to-a-different-product.md) - [Show a Device](https://docs.nerves-hub.org/api-reference/devices-short-url/show-a-device.md) - [Show a Firmware](https://docs.nerves-hub.org/api-reference/firmwares/show-a-firmware.md) - [Delete a Firmware](https://docs.nerves-hub.org/api-reference/firmwares/delete-a-firmware.md) - [List all Firmwares for a Product](https://docs.nerves-hub.org/api-reference/firmwares/list-all-firmwares-for-a-product.md) - [Upload a Firmware for a Product](https://docs.nerves-hub.org/api-reference/firmwares/upload-a-firmware-for-a-product.md): Accepts an fwup archive (`.fw`) or an ESP-IDF application image (`.bin`). The format is determined from the file itself, not its name or extension. - [Download a Firmware](https://docs.nerves-hub.org/api-reference/firmwares/download-a-firmware.md) - [Show a Signing Key for an Organization](https://docs.nerves-hub.org/api-reference/signing-keys/show-a-signing-key-for-an-organization.md) - [Delete a Signing Key for an Organization](https://docs.nerves-hub.org/api-reference/signing-keys/delete-a-signing-key-for-an-organization.md) - [List all Firmware and Archive Signing Keys for an Organization](https://docs.nerves-hub.org/api-reference/signing-keys/list-all-firmware-and-archive-signing-keys-for-an-organization.md) - [Create a new Signing Key for an Organization](https://docs.nerves-hub.org/api-reference/signing-keys/create-a-new-signing-key-for-an-organization.md): The `scheme` decides how `key` is validated and what it can verify: - [List all members of an Organization](https://docs.nerves-hub.org/api-reference/organization-members/list-all-members-of-an-organization.md) - [Add a user to an Organization](https://docs.nerves-hub.org/api-reference/organization-members/add-a-user-to-an-organization.md) - [Show membership details of a user in an Organization](https://docs.nerves-hub.org/api-reference/organization-members/show-membership-details-of-a-user-in-an-organization.md) - [Update a user's role in an Organization](https://docs.nerves-hub.org/api-reference/organization-members/update-a-users-role-in-an-organization.md) - [Remove a user from an Organization](https://docs.nerves-hub.org/api-reference/organization-members/remove-a-user-from-an-organization.md) - [Invite a user to the Organization](https://docs.nerves-hub.org/api-reference/organization-members/invite-a-user-to-the-organization.md) - [List the Network Identities a Device holds](https://docs.nerves-hub.org/api-reference/network-identities/list-the-network-identities-a-device-holds.md): The keys this device has reported holding on other networks — an iroh endpoint id, a NetBird, Tailscale or WireGuard public key. - [Show a Deployment Group](https://docs.nerves-hub.org/api-reference/deployment-groups/show-a-deployment-group.md) - [Update a Deployment Group](https://docs.nerves-hub.org/api-reference/deployment-groups/update-a-deployment-group.md) - [Delete a Product's Deployment Group](https://docs.nerves-hub.org/api-reference/deployment-groups/delete-a-products-deployment-group.md) - [List all Deployment Groups for a Product](https://docs.nerves-hub.org/api-reference/deployment-groups/list-all-deployment-groups-for-a-product.md) - [Create a new Deployment Group for a Product](https://docs.nerves-hub.org/api-reference/deployment-groups/create-a-new-deployment-group-for-a-product.md) - [Check platform status](https://docs.nerves-hub.org/api-reference/platform-status/check-platform-status.md): Provides a simple health check to verify that the application is running, responsive, and can connect to the database. - [List all Organizations the authenticated user belongs to](https://docs.nerves-hub.org/api-reference/organizations/list-all-organizations-the-authenticated-user-belongs-to.md) - [Device WebSocket Protocol](https://docs.nerves-hub.org/device-api/websocket-overview.md): Learn how NervesHub uses Phoenix Channels over WebSocket for long-lived device connections, including connection URI, SSL requirements, and message format. - [WebSocket Channel Events](https://docs.nerves-hub.org/device-api/websocket-events.md): Complete reference for server-to-device and device-to-server events on the NervesHub device WebSocket channel, with full payload schemas and field details. - [Device Extensions](https://docs.nerves-hub.org/device-api/extensions.md): Reference for the NervesHub extensions protocol: the handshake, version negotiation, and every extension's messages and payloads, for client implementers. ## OpenAPI Specs - [openapi](https://manage.nervescloud.com/api/openapi) This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.