henrygd/beszel · error

no fingerprint in response

Error message

no fingerprint in response

What it means

unmarshalLegacyResponse returns this when a CheckFingerprint response has resp.Fingerprint == nil, so no FingerprintResponse can be written to dest. The legacy agent answered but omitted the fingerprint data.

Source

Thrown at internal/hub/transport/transport.go:66

func unmarshalLegacyResponse(resp common.AgentResponse, action common.WebSocketAction, dest any) error {
	switch action {
	case common.GetData:
		d, ok := dest.(*system.CombinedData)
		if !ok {
			return fmt.Errorf("unexpected dest type for GetData: %T", dest)
		}
		if resp.SystemData == nil {
			return errors.New("no system data in response")
		}
		*d = *resp.SystemData
		return nil
	case common.CheckFingerprint:
		d, ok := dest.(*common.FingerprintResponse)
		if !ok {
			return fmt.Errorf("unexpected dest type for CheckFingerprint: %T", dest)
		}
		if resp.Fingerprint == nil {
			return errors.New("no fingerprint in response")
		}
		*d = *resp.Fingerprint
		return nil
	case common.GetContainerLogs:
		d, ok := dest.(*string)
		if !ok {
			return fmt.Errorf("unexpected dest type for GetContainerLogs: %T", dest)
		}
		if resp.String == nil {
			return errors.New("no logs in response")
		}
		*d = *resp.String
		return nil
	case common.GetContainerInfo:
		d, ok := dest.(*string)
		if !ok {
			return fmt.Errorf("unexpected dest type for GetContainerInfo: %T", dest)
		}

View on GitHub (pinned to b38fb7dafa)

Solutions

  1. Update the agent on the host to a hub-compatible version
  2. Delete the stored fingerprint for the host and reconnect so it is re-established
  3. Confirm you're not mixing transports/agent types
  4. Inspect agent logs to see why it didn't return a fingerprint
Defensive patterns

Strategy: validation

Validate before calling

// ensure a compatible agent is reachable before fingerprint check
v, err := client.Request(common.GetVersion, new(string))
if err != nil { return fmt.Errorf("agent not compatible: %w", err) }

Try / catch

if err := UnmarshalResponse(resp, common.CheckFingerprint, dest); err != nil {
    if strings.Contains(err.Error(), "no fingerprint") {
        // clear stored fingerprint and reconnect
    }
    return err
}

Prevention

When it happens

Trigger: UnmarshalResponse on a CheckFingerprint request whose legacy AgentResponse lacks the Fingerprint field.

Common situations: Agent/hub version mismatch during first connection/fingerprint verification; custom or very old agent that doesn't implement fingerprint checks; corrupted response producing empty fields.

Related errors


AI-assisted analysis of henrygd/beszel@b38fb7dafa (2026-08-31). Data as JSON: /api/errors/9f065a9b9fc50b61. Report an issue: GitHub.