Skip to content

Document the Android-only host vitals in the REST API reference - #52603

Open
dantecatalfamo wants to merge 2 commits into
mainfrom
51205-android-vitals-api-docs
Open

Document the Android-only host vitals in the REST API reference#52603
dantecatalfamo wants to merge 2 commits into
mainfrom
51205-android-vitals-api-docs

Conversation

@dantecatalfamo

@dantecatalfamo dantecatalfamo commented Sep 4, 2026

Copy link
Copy Markdown
Member

Related issue: Resolves #51205

Documents the Android host vitals that #51202 already flattens into the single-host API responses. Documentation only — no code changes.

  • GET /api/v1/fleet/hosts/:id and GET /api/v1/fleet/hosts/identifier/:identifier each get an #### Example (Android) response alongside the existing macOS and iOS/iPadOS ones, plus note bullets covering all 15 Android-only fields.
  • GET /api/v1/fleet/device/:token gets a note saying Android hosts can't reach it. The story asked for the vitals to be documented there too, but they can't appear: HostDeviceURL rejects android outright, Android hosts never get a Fleet Desktop token, and certificate auth is iOS/iPadOS-only. Saying so seemed better than documenting a response nobody can get.

meid is described in the notes but deliberately absent from the example — a device reports imei or meid depending on its radio, never both.

Everything documented was checked against the merged implementation with a script: every field name matches a json: tag on HostMDMAndroidDeviceVitals / MDMAndroidTelephonyInfo / MDMAndroidPostureDetail, every key in the example maps to a real tag somewhere in server/fleet or server/service, the cited AMAPI enum values all exist in the vendored client, and the two example blocks differ only in the uuid each endpoint is looked up by.

One pre-existing line changed: the "Get host by identifier" note's lead sentence became a bare > Note: followed by a bullet, matching the equivalent block under "Get host". Without that, the appended Android bullets read as though they were also "supported only for iOS/iPadOS".

Checklist for submitter

  • Changes file added for user-visible changes in changes/, orbit/changes/ or ee/fleetd-chrome/changes.
    See Changes files for more information.

    N/A — documentation only, no user-visible product change.

Testing

  • QA'd all new/changed functionality manually

Verified locally:

  • Both Android example blocks parse as JSON (after stripping the file's pre-existing // Available in Fleet Premium inline comment) and differ only in uuid.
  • All 15 json: tags on HostMDMAndroidDeviceVitals appear in each note's field list — exact set match, no extras or omissions. telephony_infos[] and security_posture_details[] keys match their structs exactly.
  • Diffed the Android example's key set against the iOS/iPadOS one: the only fields absent are additional, disk_encryption_enabled, geolocation, maintenance_window, and users, all omitempty and genuinely absent for an Android host.
  • Repo-wide [here] / [click here] anchor check passes; the new AMAPI link returns 200; both internal anchors (#get-host, #get-host-by-identifier) exist.

To review against a real device: enroll a fully managed Android host and confirm GET /api/v1/fleet/hosts/:id returns the vitals as documented, then confirm a BYOD host returns no telephony_infos, imei, or meid.

Copilot AI lite review requested due to automatic review settings September 4, 2026 18:40

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot wasn't able to review any files in this pull request.


💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

The Android vitals from AMAPI status reports flatten into the responses
of the three single-host endpoints, but nothing in the reference said so.
Add an Android response example alongside the existing macOS and
iOS/iPadOS ones for "Get host" and "Get host by identifier", and note in
all three sections which fields are Android-only, that a vital the device
didn't report is omitted rather than null, and that the phone numbers and
radio identifiers are company-owned only.
Review of the first pass turned up claims the code doesn't back:

- The status reporting caveat named a securityPosture setting that AMAPI
  has no such member for, misspelled deviceSettingsEnabled, and described
  admin-controlled gating that can't happen — applyFleetEnforcedSettings
  overwrites StatusReportingSettings on every policy Fleet applies.
- Android hosts can't reach GET /api/v1/fleet/device/:token at all, so
  the note now says that instead of describing vitals it would return.
- Say the phone numbers and radio identifiers are withheld from personal
  enrollments, which is the gate getHostDetails actually applies, rather
  than framing it as a company-owned-only feature.
- Note that posture advice is AMAPI's non-localized default message.

The example gained the fields the response always carries
(os_update_minimum_version, os_update_deadline, batteries), lost the
geolocation object an Android host can't have with no public_ip, and now
uses the cpu_type, computer name and phone number format the ingestion
really produces. The identifier example answers with the UUID it's looked
up by.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Android Host Vitals: Rest api doc changes

3 participants