{"id":40257273,"url":"https://github.com/pexip/go-infinity-sdk","last_synced_at":"2026-01-27T15:06:10.301Z","repository":{"id":312659180,"uuid":"995379938","full_name":"pexip/go-infinity-sdk","owner":"pexip","description":"Go Infinity SDK","archived":false,"fork":false,"pushed_at":"2026-01-19T23:46:00.000Z","size":526,"stargazers_count":2,"open_issues_count":4,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-01-20T06:44:09.062Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pexip.png","metadata":{"files":{"readme":"README.md","changelog":"history/alarm.go","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-06-03T11:49:24.000Z","updated_at":"2026-01-19T23:44:58.000Z","dependencies_parsed_at":"2025-09-01T08:54:00.294Z","dependency_job_id":"c97b7e0e-32b5-49c4-9cae-e39393ffaab7","html_url":"https://github.com/pexip/go-infinity-sdk","commit_stats":null,"previous_names":["pexip/go-infinity-sdk"],"tags_count":21,"template":false,"template_full_name":null,"purl":"pkg:github/pexip/go-infinity-sdk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pexip%2Fgo-infinity-sdk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pexip%2Fgo-infinity-sdk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pexip%2Fgo-infinity-sdk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pexip%2Fgo-infinity-sdk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pexip","download_url":"https://codeload.github.com/pexip/go-infinity-sdk/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pexip%2Fgo-infinity-sdk/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28815385,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-27T12:25:15.069Z","status":"ssl_error","status_checked_at":"2026-01-27T12:25:05.297Z","response_time":168,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-20T01:47:34.665Z","updated_at":"2026-01-27T15:06:10.293Z","avatar_url":"https://github.com/pexip.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003e **Beta Notice:** The go-infinity-sdk is currently in Beta and is not recommended for production deployments. Please use with caution.\n\n# Pexip Infinity Go SDK\n\nA comprehensive Go client library for the Pexip Infinity Management API, providing easy access to all four API categories: Configuration, Status, History, and Command APIs.\n\n## Features\n\n- **Full API Coverage**: Complete support for all Pexip Infinity Management API endpoints\n- **Type-Safe**: Strongly typed Go structs for all API requests and responses\n- **Authentication**: Support for Basic Auth, Token Auth, Bearer Auth, and custom authentication\n- **Retry Mechanism**: Built-in exponential backoff with jitter for reliable API calls\n- **Context Support**: All operations support Go context for cancellation and timeouts\n- **Comprehensive Testing**: Extensive test coverage with mocks using testify/mock\n- **Flexible Configuration**: Configurable base URLs, HTTP clients, and authentication methods\n\n## Installation\n\n```bash\ngo get github.com/pexip/go-infinity-sdk/v38\n```\n\n## Quick Start\n\n### Basic Setup\n\n```go\npackage main\n\nimport (\n    \"context\"\n    \"fmt\"\n    \"log\"\n\n    infinity \"github.com/pexip/go-infinity-sdk/v38\"\n)\n\nfunc main() {\n    // Create a new client with basic authentication and retry configuration\n    client, err := infinity.New(\n        infinity.WithBaseURL(\"https://your-pexip-server.com\"),\n        infinity.WithBasicAuth(\"admin\", \"your-password\"),\n        // Optional: customize retry behavior (default is 3 retries with exponential backoff)\n        infinity.WithMaxRetries(2),\n    )\n    if err != nil {\n        log.Fatal(err)\n    }\n\n    // Get system status\n    ctx := context.Background()\n    status, err := client.Status.GetSystemStatus(ctx)\n    if err != nil {\n        log.Fatal(err)\n    }\n\n    fmt.Printf(\"System Status: %s, Version: %s\\n\", status.Status, status.Version)\n}\n```\n\n### Authentication Options\n\n#### Basic Authentication\n```go\nclient, err := infinity.New(\n    infinity.WithBaseURL(\"https://your-pexip-server.com\"),\n    infinity.WithBasicAuth(\"admin\", \"password\"),\n)\n```\n\n#### Token Authentication\n```go\nclient, err := infinity.New(\n    infinity.WithBaseURL(\"https://your-pexip-server.com\"),\n    infinity.WithTokenAuth(\"your-api-token\"),\n)\n```\n\n#### Bearer Authentication\n```go\nimport \"github.com/pexip/go-infinity-sdk/v38/auth\"\n\nclient, err := infinity.New(\n    infinity.WithBaseURL(\"https://your-pexip-server.com\"),\n    infinity.WithAuth(auth.NewBearerAuth(\"your-bearer-token\")),\n)\n```\n\n#### Custom Authentication\n```go\nimport \"github.com/pexip/go-infinity-sdk/v38/auth\"\n\nclient, err := infinity.New(\n    infinity.WithBaseURL(\"https://your-pexip-server.com\"),\n    infinity.WithAuth(auth.NewCustomAuth(\"X-API-Key\", \"your-api-key\")),\n)\n```\n\n### Retry Configuration\n\nThe SDK includes a robust retry mechanism with exponential backoff to handle transient failures:\n\n#### Default Retry Behavior\n```go\n// Default configuration is applied automatically\nclient, err := infinity.New(\n    infinity.WithBaseURL(\"https://your-pexip-server.com\"),\n    infinity.WithBasicAuth(\"admin\", \"password\"),\n    // Retries up to 3 times with exponential backoff\n)\n```\n\n#### Custom Retry Configuration\n```go\nimport \"time\"\n\nretryConfig := \u0026infinity.RetryConfig{\n    MaxRetries:   5,                      // Maximum number of retries\n    BackoffMin:   500 * time.Millisecond, // Minimum backoff duration\n    BackoffMax:   30 * time.Second,       // Maximum backoff duration\n    Multiplier:   2.0,                    // Backoff multiplier\n    JitterFactor: 0.1,                    // Jitter factor (0.0-1.0)\n}\n\nclient, err := infinity.New(\n    infinity.WithBaseURL(\"https://your-pexip-server.com\"),\n    infinity.WithBasicAuth(\"admin\", \"password\"),\n    infinity.WithRetryConfig(retryConfig),\n)\n```\n\n#### Convenience Options\n```go\n// Disable retries completely\nclient, err := infinity.New(\n    infinity.WithBaseURL(\"https://your-pexip-server.com\"),\n    infinity.WithBasicAuth(\"admin\", \"password\"),\n    infinity.WithNoRetries(),\n)\n\n// Set only max retries (uses default for other settings)\nclient, err := infinity.New(\n    infinity.WithBaseURL(\"https://your-pexip-server.com\"),\n    infinity.WithBasicAuth(\"admin\", \"password\"),\n    infinity.WithMaxRetries(1),\n)\n```\n\nThe retry mechanism automatically retries on:\n- **HTTP Status Codes**: 429, 500, 502, 503, 504\n- **Network Errors**: Connection refused, timeouts, DNS failures\n\nIt will **NOT** retry on:\n- **Client Errors**: 4xx status codes (400, 401, 403, 404, etc.)\n- **Context Cancellation**: Respects context timeouts and cancellation\n\n## API Examples\n\n### Configuration API\n\n#### Managing Conferences\n\n```go\npackage main\n\nimport (\n    \"context\"\n    \"fmt\"\n    \"log\"\n\n    infinity \"github.com/pexip/go-infinity-sdk/v38\"\n    \"github.com/pexip/go-infinity-sdk/v38/config\"\n)\n\nfunc main() {\n    client, err := infinity.New(\n        infinity.WithBaseURL(\"https://your-pexip-server.com\"),\n        infinity.WithBasicAuth(\"admin\", \"password\"),\n    )\n    if err != nil {\n        log.Fatal(err)\n    }\n\n    ctx := context.Background()\n\n    // Create a new conference\n    createReq := \u0026config.ConferenceCreateRequest{\n        Name:        \"My Test Conference\",\n        Description: \"A test conference for demonstration\",\n        ServiceType: \"conference\",\n        AllowGuests: true,\n        GuestsMuted: false,\n    }\n\n    conference, err := client.Config.CreateConference(ctx, createReq)\n    if err != nil {\n        log.Fatal(err)\n    }\n    fmt.Printf(\"Created conference: %s (ID: %d)\\n\", conference.Name, conference.ID)\n\n    // List conferences with pagination and search\n    listOpts := \u0026config.ListOptions{}\n    listOpts.Limit = 10\n    listOpts.Offset = 0\n    listOpts.Search = \"test\"\n\n    conferences, err := client.Config.ListConferences(ctx, listOpts)\n    if err != nil {\n        log.Fatal(err)\n    }\n\n    fmt.Printf(\"Found %d conferences\\n\", len(conferences.Objects))\n    for _, conf := range conferences.Objects {\n        fmt.Printf(\"- %s (ID: %d)\\n\", conf.Name, conf.ID)\n    }\n\n    // Update a conference\n    updateReq := \u0026config.ConferenceUpdateRequest{\n        Description: \"Updated description\",\n    }\n\n    updatedConf, err := client.Config.UpdateConference(ctx, conference.ID, updateReq)\n    if err != nil {\n        log.Fatal(err)\n    }\n    fmt.Printf(\"Updated conference description: %s\\n\", updatedConf.Description)\n\n    // Delete the conference\n    err = client.Config.DeleteConference(ctx, conference.ID)\n    if err != nil {\n        log.Fatal(err)\n    }\n    fmt.Println(\"Conference deleted successfully\")\n}\n```\n\n#### Managing Locations\n\n```go\n// Create a location\ncreateLocReq := \u0026config.LocationCreateRequest{\n    Name:        \"New York Office\",\n    Description: \"Main office location\",\n}\n\nlocation, err := client.Config.CreateLocation(ctx, createLocReq)\nif err != nil {\n    log.Fatal(err)\n}\nfmt.Printf(\"Created location: %s (ID: %d)\\n\", location.Name, location.ID)\n\n// List all locations\nlocations, err := client.Config.ListLocations(ctx, nil)\nif err != nil {\n    log.Fatal(err)\n}\n\nfor _, loc := range locations.Objects {\n    fmt.Printf(\"Location: %s - %s\\n\", loc.Name, loc.Description)\n}\n```\n\n### Status API\n\n#### System and Conference Status\n\n```go\npackage main\n\nimport (\n    \"context\"\n    \"fmt\"\n    \"log\"\n\n    infinity \"github.com/pexip/go-infinity-sdk/v38\"\n    \"github.com/pexip/go-infinity-sdk/v38/status\"\n)\n\nfunc main() {\n    client, err := infinity.New(\n        infinity.WithBaseURL(\"https://your-pexip-server.com\"),\n        infinity.WithBasicAuth(\"admin\", \"password\"),\n    )\n    if err != nil {\n        log.Fatal(err)\n    }\n\n    ctx := context.Background()\n\n    // Get system status\n    sysStatus, err := client.Status.GetSystemStatus(ctx)\n    if err != nil {\n        log.Fatal(err)\n    }\n\n    fmt.Printf(\"System Status: %s\\n\", sysStatus.Status)\n    fmt.Printf(\"Version: %s\\n\", sysStatus.Version)\n    fmt.Printf(\"Uptime: %d seconds\\n\", sysStatus.Uptime)\n    fmt.Printf(\"CPU Load: %.2f%%\\n\", sysStatus.CPULoad)\n    fmt.Printf(\"Memory Usage: %d/%d MB\\n\", \n        sysStatus.UsedMemory/1024/1024, \n        sysStatus.TotalMemory/1024/1024)\n\n    // List active conferences\n    conferences, err := client.Status.ListConferences(ctx, nil)\n    if err != nil {\n        log.Fatal(err)\n    }\n\n    fmt.Printf(\"\\nActive Conferences: %d\\n\", len(conferences.Objects))\n    for _, conf := range conferences.Objects {\n        fmt.Printf(\"- %s: %d participants (Started: %t)\\n\", \n            conf.Name, conf.ParticipantCount, conf.Started)\n    }\n\n    // List participants with pagination\n    participantOpts := \u0026status.ListOptions{}\n    participantOpts.Limit = 20\n    participants, err := client.Status.ListParticipants(ctx, participantOpts)\n    if err != nil {\n        log.Fatal(err)\n    }\n\n    fmt.Printf(\"\\nActive Participants: %d\\n\", len(participants.Objects))\n    for _, participant := range participants.Objects {\n        fmt.Printf(\"- %s (%s) in %s - Muted: %t\\n\", \n            participant.DisplayName, \n            participant.Role,\n            participant.ConferenceName,\n            participant.IsMuted)\n    }\n\n    // List worker nodes\n    workers, err := client.Status.ListWorkers(ctx, nil)\n    if err != nil {\n        log.Fatal(err)\n    }\n\n    fmt.Printf(\"\\nWorker Nodes: %d\\n\", len(workers.Objects))\n    for _, worker := range workers.Objects {\n        fmt.Printf(\"- %s (%s): CPU %.1f%%, Memory %.1f%%, %d conferences\\n\", \n            worker.HostName, \n            worker.Status,\n            worker.CPU,\n            worker.Memory,\n            worker.Conferences)\n    }\n\n    // List system alarms\n    alarms, err := client.Status.ListAlarms(ctx, nil)\n    if err != nil {\n        log.Fatal(err)\n    }\n\n    fmt.Printf(\"\\nSystem Alarms: %d\\n\", len(alarms.Objects))\n    for _, alarm := range alarms.Objects {\n        status := \"ACTIVE\"\n        if alarm.Cleared {\n            status = \"CLEARED\"\n        }\n        fmt.Printf(\"- [%s] %s: %s (%s)\\n\", \n            alarm.Level, \n            alarm.Name, \n            alarm.Details,\n            status)\n    }\n}\n```\n\n### History API\n\n#### Conference and Participant History\n\n```go\npackage main\n\nimport (\n    \"context\"\n    \"fmt\"\n    \"log\"\n    \"time\"\n\n    infinity \"github.com/pexip/go-infinity-sdk/v38\"\n    \"github.com/pexip/go-infinity-sdk/v38/history\"\n)\n\nfunc main() {\n    client, err := infinity.New(\n        infinity.WithBaseURL(\"https://your-pexip-server.com\"),\n        infinity.WithBasicAuth(\"admin\", \"password\"),\n    )\n    if err != nil {\n        log.Fatal(err)\n    }\n\n    ctx := context.Background()\n\n    // Get conference history for the last 24 hours\n    yesterday := time.Now().Add(-24 * time.Hour)\n    listOpts := \u0026history.ListOptions{}\n    listOpts.Limit = 50\n    listOpts.StartTime = \u0026yesterday\n    listOpts.Search = \"weekly\"\n\n    conferences, err := client.History.ListConferences(ctx, listOpts)\n    if err != nil {\n        log.Fatal(err)\n    }\n\n    fmt.Printf(\"Conference History (last 24h): %d conferences\\n\", len(conferences.Objects))\n    for _, conf := range conferences.Objects {\n        duration := time.Duration(conf.DurationSeconds) * time.Second\n        fmt.Printf(\"- %s: %v duration, %d participants\\n\", \n            conf.Name, \n            duration,\n            conf.TotalParticipants)\n    }\n\n    // Get participant history for a specific conference\n    if len(conferences.Objects) \u003e 0 {\n        confID := conferences.Objects[0].ID\n        participants, err := client.History.ListParticipantsByConference(ctx, confID, nil)\n        if err != nil {\n            log.Fatal(err)\n        }\n\n        fmt.Printf(\"\\nParticipants in conference %d:\\n\", confID)\n        for _, participant := range participants.Objects {\n            duration := time.Duration(participant.DurationSeconds) * time.Second\n            fmt.Printf(\"- %s (%s): %v duration, %s reason\\n\",\n                participant.DisplayName,\n                participant.Role,\n                duration,\n                participant.DisconnectReason)\n        }\n\n        // Get media stream details for the first participant\n        if len(participants.Objects) \u003e 0 {\n            participantID := participants.Objects[0].ID\n            streams, err := client.History.ListMediaStreamsByParticipant(ctx, participantID, nil)\n            if err != nil {\n                log.Fatal(err)\n            }\n\n            fmt.Printf(\"\\nMedia streams for participant %d:\\n\", participantID)\n            for _, stream := range streams.Objects {\n                fmt.Printf(\"- %s %s: %s codec, %d kbps\\n\",\n                    stream.StreamType,\n                    stream.Direction,\n                    stream.Codec,\n                    stream.Bitrate/1000)\n            }\n        }\n    }\n}\n```\n\n### Command API\n\n#### Conference and Participant Control\n\n```go\npackage main\n\nimport (\n    \"context\"\n    \"fmt\"\n    \"log\"\n\n    infinity \"github.com/pexip/go-infinity-sdk/v38\"\n    \"github.com/pexip/go-infinity-sdk/v38/command\"\n)\n\nfunc main() {\n    client, err := infinity.New(\n        infinity.WithBaseURL(\"https://your-pexip-server.com\"),\n        infinity.WithBasicAuth(\"admin\", \"password\"),\n    )\n    if err != nil {\n        log.Fatal(err)\n    }\n\n    ctx := context.Background()\n\n    // Get current participants to demonstrate commands\n    participants, err := client.Status.ListParticipants(ctx, nil)\n    if err != nil {\n        log.Fatal(err)\n    }\n\n    if len(participants.Objects) == 0 {\n        fmt.Println(\"No active participants found\")\n        return\n    }\n\n    participant := participants.Objects[0]\n    participantUUID := participant.UUID\n    conferenceID := participant.ConferenceID\n\n    fmt.Printf(\"Managing participant: %s (UUID: %s)\\n\", participant.DisplayName, participantUUID)\n\n    // Mute a participant\n    result, err := client.Command.MuteParticipant(ctx, participantUUID)\n    if err != nil {\n        log.Fatal(err)\n    }\n    fmt.Printf(\"Mute result: %s - %s\\n\", result.Status, result.Message)\n\n    // Send a message to the participant\n    result, err = client.Command.SendMessageToParticipant(ctx, participantUUID, \"Welcome to the conference!\")\n    if err != nil {\n        log.Fatal(err)\n    }\n    fmt.Printf(\"Message sent: %s\\n\", result.Status)\n\n    // Spotlight the participant\n    result, err = client.Command.SpotlightParticipant(ctx, participantUUID)\n    if err != nil {\n        log.Fatal(err)\n    }\n    fmt.Printf(\"Spotlight result: %s\\n\", result.Status)\n\n    // Promote participant to chair\n    result, err = client.Command.PromoteParticipant(ctx, participantUUID)\n    if err != nil {\n        log.Fatal(err)\n    }\n    fmt.Printf(\"Promotion result: %s\\n\", result.Status)\n\n    // Lock the conference\n    result, err = client.Command.LockConference(ctx, conferenceID)\n    if err != nil {\n        log.Fatal(err)\n    }\n    fmt.Printf(\"Conference lock result: %s\\n\", result.Status)\n\n    // Send message to all participants in the conference\n    result, err = client.Command.SendMessageToConference(ctx, conferenceID, \"This conference is now locked\")\n    if err != nil {\n        log.Fatal(err)\n    }\n    fmt.Printf(\"Conference message result: %s\\n\", result.Status)\n\n    // Transfer participant to another conference\n    transferOpts := \u0026command.TransferOptions{\n        Role: \"guest\",\n    }\n    result, err = client.Command.TransferParticipant(ctx, participantUUID, \"other-conference\", transferOpts)\n    if err != nil {\n        log.Printf(\"Transfer failed (expected if 'other-conference' doesn't exist): %v\\n\", err)\n    } else {\n        fmt.Printf(\"Transfer result: %s\\n\", result.Status)\n    }\n\n    // Start a conference programmatically\n    result, err = client.Command.StartConference(ctx, \"scheduled-meeting\")\n    if err != nil {\n        log.Printf(\"Start conference failed (expected if conference doesn't exist): %v\\n\", err)\n    } else {\n        fmt.Printf(\"Conference start result: %s\\n\", result.Status)\n    }\n}\n```\n\n## Advanced Usage\n\n### Custom HTTP Client\n\n```go\nimport (\n    \"net/http\"\n    \"time\"\n)\n\n// Create a custom HTTP client with timeout and custom transport\nhttpClient := \u0026http.Client{\n    Timeout: 60 * time.Second,\n    Transport: \u0026http.Transport{\n        MaxIdleConns:        100,\n        MaxIdleConnsPerHost: 10,\n        IdleConnTimeout:     90 * time.Second,\n    },\n}\n\nclient, err := infinity.New(\n    infinity.WithBaseURL(\"https://your-pexip-server.com\"),\n    infinity.WithHTTPClient(httpClient),\n    infinity.WithBasicAuth(\"admin\", \"password\"),\n)\n```\n\n### Custom HTTP Transport\n\nFor more fine-grained control over HTTP transport settings (proxies, TLS configuration, connection pooling), you can use `WithTransport`:\n\n```go\nimport (\n    \"crypto/tls\"\n    \"net/http\"\n    \"net/url\"\n    \"time\"\n)\n\n// Example 1: Custom transport with proxy and TLS settings\nproxyURL, _ := url.Parse(\"http://proxy.company.com:8080\")\ncustomTransport := \u0026http.Transport{\n    Proxy: http.ProxyURL(proxyURL),\n    TLSClientConfig: \u0026tls.Config{\n        InsecureSkipVerify: true, // Only for testing!\n    },\n    MaxIdleConns:        50,\n    MaxIdleConnsPerHost: 10,\n    IdleConnTimeout:     30 * time.Second,\n    DisableCompression:  true,\n}\n\nclient, err := infinity.New(\n    infinity.WithBaseURL(\"https://your-pexip-server.com\"),\n    infinity.WithTransport(customTransport),\n    infinity.WithBasicAuth(\"admin\", \"password\"),\n)\n\n// Example 2: Transport with client certificates\ncert, _ := tls.LoadX509KeyPair(\"client.crt\", \"client.key\")\ntlsTransport := \u0026http.Transport{\n    TLSClientConfig: \u0026tls.Config{\n        Certificates: []tls.Certificate{cert},\n    },\n}\n\ntlsClient, err := infinity.New(\n    infinity.WithBaseURL(\"https://your-pexip-server.com\"),\n    infinity.WithTransport(tlsTransport),\n    infinity.WithBasicAuth(\"admin\", \"password\"),\n)\n```\n\n### Error Handling\n\n```go\nimport \"github.com/pexip/go-infinity-sdk/v38\"\n\n// All API calls return typed errors\nconferences, err := client.Config.ListConferences(ctx, nil)\nif err != nil {\n    // Check if it's an API error\n    if apiErr, ok := err.(*infinity.APIError); ok {\n        fmt.Printf(\"API Error %d: %s\\n\", apiErr.StatusCode, apiErr.Message)\n        if apiErr.Details != \"\" {\n            fmt.Printf(\"Details: %s\\n\", apiErr.Details)\n        }\n    } else {\n        // Handle other types of errors (network, timeout, etc.)\n        fmt.Printf(\"Other error: %v\\n\", err)\n    }\n}\n```\n\n### Context and Timeouts\n\n```go\nimport (\n    \"context\"\n    \"time\"\n)\n\n// Create a context with timeout\nctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)\ndefer cancel()\n\n// Use the context for all API calls\nconferences, err := client.Config.ListConferences(ctx, nil)\nif err != nil {\n    if ctx.Err() == context.DeadlineExceeded {\n        fmt.Println(\"Request timed out\")\n    }\n}\n```\n\n## Support\n\nFor questions and support, please refer to the [Pexip Infinity API Documentation](https://docs.pexip.com/admin/integrate_api.htm) or open an issue in this repository.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpexip%2Fgo-infinity-sdk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpexip%2Fgo-infinity-sdk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpexip%2Fgo-infinity-sdk/lists"}