package elevenlabs import ( "context" "encoding/json" "fmt" "net/http" ) // ListVoices returns all available voices for the authenticated user. func (c *Client) ListVoices(ctx context.Context) ([]Voice, error) { respBody, err := c.doRequest(ctx, http.MethodGet, "/voices", nil) if err != nil { return nil, fmt.Errorf("list voices: %w", err) } var voicesResp VoicesResponse if err := json.Unmarshal(respBody, &voicesResp); err != nil { return nil, fmt.Errorf("unmarshal voices response: %w", err) } return voicesResp.Voices, nil } // GetVoice returns a specific voice by ID. func (c *Client) GetVoice(ctx context.Context, voiceID string) (*Voice, error) { if voiceID == "" { return nil, fmt.Errorf("%w: voice ID is required", ErrInvalidConfig) } path := fmt.Sprintf("/voices/%s", voiceID) respBody, err := c.doRequest(ctx, http.MethodGet, path, nil) if err != nil { return nil, fmt.Errorf("get voice: %w", err) } var voice Voice if err := json.Unmarshal(respBody, &voice); err != nil { return nil, fmt.Errorf("unmarshal voice response: %w", err) } return &voice, nil } // Health verifies the API connectivity and authentication. // Returns nil if the API is reachable and the API key is valid. func (c *Client) Health(ctx context.Context) error { // Use the user endpoint as a lightweight health check _, err := c.doRequest(ctx, http.MethodGet, "/user", nil) if err != nil { return fmt.Errorf("health check: %w", err) } return nil }