AlexxIT/go2rtc · error

failed to unmarshal socket ticket response

Error message

failed to unmarshal socket ticket response: %w

What it means

Raised in GetSocketTicket when the JSON body returned by Ring's clap/ticket/request/signalsocket endpoint cannot be unmarshalled into a SocketTicketResponse, typically because the endpoint returned an error page or an unexpected schema.

Solutions

  1. Retry the ticket request
  2. Update SocketTicketResponse to match the current API schema
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at pkg/ring/api.go:397 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of AlexxIT/go2rtc@c245815e75 (2026-09-07). Data as JSON: /api/errors/894a83ca160de0b0. Report an issue: GitHub.

Appendix: source

Thrown at pkg/ring/api.go:397

	allCameras = append(allCameras, interfaceSlice(devices.StickupCams)...)
	allCameras = append(allCameras, interfaceSlice(devices.AuthorizedDoorbots)...)
	allCameras = append(allCameras, interfaceSlice(onvifCameras)...)
	allCameras = append(allCameras, interfaceSlice(intercoms)...)

	devices.AllCameras = allCameras

	return &devices, nil
}

func (c *RingApi) GetSocketTicket() (*SocketTicketResponse, error) {
	response, err := c.Request("POST", AppAPI("clap/ticket/request/signalsocket"), nil)
	if err != nil {
		return nil, fmt.Errorf("failed to fetch socket ticket: %w", err)
	}

	var ticket SocketTicketResponse
	if err := json.Unmarshal(response, &ticket); err != nil {
		return nil, fmt.Errorf("failed to unmarshal socket ticket response: %w", err)
	}

	return &ticket, nil
}

func (c *RingApi) Request(method, url string, body interface{}) ([]byte, error) {
	// Ensure we have a valid session
	if err := c.ensureSession(); err != nil {
		return nil, fmt.Errorf("session validation failed: %w", err)
	}

	var bodyReader io.Reader
	if body != nil {
		jsonBody, err := json.Marshal(body)
		if err != nil {
			return nil, fmt.Errorf("failed to marshal request body: %w", err)
		}
		bodyReader = bytes.NewReader(jsonBody)

View on GitHub (pinned to c245815e75)