Skip to content

Update Tenant Device Model

Request

Configures the auto-update behavior for a Foundation device model — enabling or disabling automatic OS updates and optionally locking updates to a specific approved build or to the latest approved build.

Use this endpoint to control how and when a device model receives Foundation OS updates over the air, as the programmatic equivalent of the auto-update toggle and version selector in Esper Software Updates for Foundation.

About Update Tenant Device Model

Once a Foundation build is approved, auto-update must be separately enabled on the device model before devices begin receiving it. This endpoint manages that configuration. Setting auto_update: true enables OTA delivery; latest: true instructs Foundry to automatically track the newest approved build as it becomes available; locked_build_id pins updates to a specific build UUID. Note that latest and locked_build_id are only processed when auto_update is true. Once auto-update is active, enrolled devices on older builds will receive the update over a rolling 24-hour window — devices not currently communicating with Esper will update when they reconnect.

Key Fields / Query Parameters

device_model_id (path, required) — UUID of the device model to update

auto_update (body) — true to enable automatic OTA updates for this device model; false to disable

latest (body) — When true, Foundry automatically locks to the newest approved build whenever one becomes available; processed only when auto_update is true

locked_build_id (body) — UUID of the specific approved build to lock for auto-update; processed only when auto_update is true

Common Use Cases

Enabling auto-update after approving a new Foundation build so enrolled devices begin receiving it within the 24-hour rollout window

Pinning a device model to a specific build version (locked_build_id) to control the exact OS version deployed across that hardware

Disabling auto-update (auto_update: false) to pause OTA rollouts while investigating a reported issue with a new build

Best Practices

Approve the target build via PUT /v1/foundry/builds/{build_id}/ before enabling auto-update — auto-update only delivers approved builds

Use locked_build_id rather than latest in production environments where you want explicit control over which version is deployed; reserve latest for test or canary device models

Ensure devices are configured to accept system updates (via blueprint System Updates policy) before enabling auto-update here — both the device policy and the Foundry model config must align for updates to apply

Workflow

Approve the target build using PUT /v1/foundry/builds/{build_id}/ with approve: true

Call PUT /v1/foundry/device-models/{device_model_id}/ with auto_update: true and either locked_build_id (specific version) or latest: true (track newest approved)

Monitor the Foundation Event Feed (GET /v1/foundry/events/) to confirm the configuration change was recorded and track rollout progress

Security
foundation_AuthToken
Path
device_model_idstring, (uuid)required

An UUID specifying the Device Model

Bodyapplication/jsonrequired
auto_updateboolean

Enables/disables automatic updates for the device model. The other properties (latest and locked_build_id) are processed only if autoupdate is set to true.

latestboolean

Configures Foundry service to automatically lock to the latest approved build (whenever available) if set to true.

locked_build_idstring

Specifies the UUID of the build which needs to be locked for automatic updates.

cURL
curl -i -X PUT \
  'https://api.esper.io/_mock/openapi/v1/foundry/device-models/{device_model_id}/' \
  -H 'Authorization: YOUR_API_KEY_HERE' \
  -H 'Content-Type: application/json' \
  -d '{
    "auto_update": true,
    "latest": true,
    "locked_build_id": "string"
  }'

Responses

Updated

Bodyapplication/json
dataobject(foundation_Build_V1)
Response
{ "data": { "build_id": "string", "created_at": "2019-08-24T14:15:22Z", "updated_at": "2019-08-24T14:15:22Z", "deprecated_on": "2019-08-24T14:15:22Z", "created_by": "string", "updated_by": "string", "ab_update": true, "android_major_version": 0, "android_minimum_sdk_level": 0, "android_minor_version": "string", "android_sdk_level": 0, "build_arch": "string", "build_flavor": "string", "build_hash": "string", "build_ota_hash": "string", "build_job_url": "string", "build_job_id": 0, "build_fingerprint_hash": "string", "build_type": "string", "build_url": "string", "build_update_meta_data": "string", "build_update_url": "string", "file_size_kb": 0, "foundation_build_number": 0, "foundation_major_number": 0, "foundation_minor_number": 0, "foundation_name": "string", "model_display_name": "string", "build_job_params": "string", "prebuilt_app_info": "string", "release_notes": "string", "release_rating": "string", "source_build_id": "string", "build_state": "released", "device_model_id": "string", "approved": true } }