{"id":39956040,"url":"https://github.com/henrikah/kick-go-sdk","last_synced_at":"2026-01-21T00:14:42.189Z","repository":{"id":311814340,"uuid":"1045026250","full_name":"henrikah/kick-go-sdk","owner":"henrikah","description":"SDK for the Kick API and webhook service.","archived":false,"fork":false,"pushed_at":"2026-01-18T19:08:24.000Z","size":174,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-19T03:24:06.077Z","etag":null,"topics":["api","go","kick","sdk","webhook"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/henrikah.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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-08-26T14:47:04.000Z","updated_at":"2026-01-18T19:07:42.000Z","dependencies_parsed_at":"2025-08-27T03:00:01.334Z","dependency_job_id":"d953a38f-fbea-496c-9d4c-b078ce7be908","html_url":"https://github.com/henrikah/kick-go-sdk","commit_stats":null,"previous_names":["henrikah/kick-go-sdk"],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/henrikah/kick-go-sdk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/henrikah%2Fkick-go-sdk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/henrikah%2Fkick-go-sdk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/henrikah%2Fkick-go-sdk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/henrikah%2Fkick-go-sdk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/henrikah","download_url":"https://codeload.github.com/henrikah/kick-go-sdk/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/henrikah%2Fkick-go-sdk/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28618916,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-20T23:49:58.628Z","status":"ssl_error","status_checked_at":"2026-01-20T23:47:29.996Z","response_time":117,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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":["api","go","kick","sdk","webhook"],"created_at":"2026-01-18T21:00:46.809Z","updated_at":"2026-01-21T00:14:42.184Z","avatar_url":"https://github.com/henrikah.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Kick Go SDK\n\n[![Go Reference](https://pkg.go.dev/badge/github.com/henrikah/kick-go-sdk/v2.svg)](https://pkg.go.dev/github.com/henrikah/kick-go-sdk/v2)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n[![Release](https://img.shields.io/github/v/release/henrikah/kick-go-sdk)](https://github.com/henrikah/kick-go-sdk/releases)\n[![Build](https://github.com/henrikah/kick-go-sdk/actions/workflows/main.yaml/badge.svg)](https://github.com/henrikah/kick-go-sdk/actions/workflows/main.yaml)\n\nA Go SDK for interacting with the [Kick API](https://docs.kick.com/) and handling webhooks.\n\nThis SDK provides clients for accessing Kick's API and for processing webhook events. Designed to be easy to use.\n\n---\n\n## Features\n\n- **API Client** – Access Kick API endpoints such as users, livestreams, events, and moderation.\n- **OAuth Client** – Support for PKCE OAuth2 flow and app access tokens.\n- **Webhook Client** – Handle incoming Kick webhook events securely using the public key.\n- **Typed Event Data** – Handlers receive typed structs for each event type.\n- **Combined Workflow** – Retrieve the webhook public key directly from the API to set up your webhook client automatically.\n\n---\n\n## Installation\n\n```bash\ngo get github.com/henrikah/kick-go-sdk/v2\n```\n\n---\n\n## Quickstart: API Client\n\n```go\noAuthClient, err := kick.NewOAuthClient(kickapitypes.APIClientConfig{\n    ClientID:     \"your-client-id\",\n    ClientSecret: \"your-client-secret\",\n    HTTPClient:   http.DefaultClient,\n})\nif err != nil {\n    log.Fatalf(\"could not create OAuthClient: %v\", err)\n}\n\napiClient, err := kick.NewAPIClient(kickapitypes.APIClientConfig{\n    HTTPClient:   http.DefaultClient,\n})\nif err != nil {\n    log.Fatalf(\"could not create APIClient: %v\", err)\n}\n\naccessToken, err := oAuthClient.GetAppAccessToken(context.TODO())\nif err != nil {\n\tvar apiErr *kickerrors.APIError\n\tif errors.As(err, \u0026apiErr) {\n\t\tlog.Fatalf(\"API error: %d %s\", apiErr.StatusCode, apiErr.Message)\n\t} else {\n\t\tlog.Fatalf(\"internal error: %v\", err)\n\t}\n}\n\ncategorySearchData, err := apiClient.Category().SearchCategories(context.TODO(), accessToken, kickfilters.NewCategoriesFilter().WithNames([]string{\"Software Development\"}))\nif err != nil {\n\tvar apiErr *kickerrors.APIError\n\tif errors.As(err, \u0026apiErr) {\n\t\tlog.Fatalf(\"API error: %d %s\", apiErr.StatusCode, apiErr.Message)\n\t} else {\n\t\tlog.Fatalf(\"internal error: %v\", err)\n\t}\n}\nlog.Println(\"Found category:\", categorySearchData.Data[0].Name)\n```\n\n---\n\n## Quickstart: Webhook Client\n\n```go\nwebhookClient, err := kick.NewWebhookClient(\"your-public-key\")\nif err != nil {\n    log.Fatalf(\"could not create WebhookClient: %v\", err)\n}\n\nerr = webhookClient.RegisterChatMessageSentHandler(func(\n    writer http.ResponseWriter,\n    request *http.Request,\n    headers kickwebhooktypes.KickWebhookHeaders,\n    data kickwebhooktypes.ChatMessageSent,\n) {\n    writer.WriteHeader(http.StatusOK)\n})\nif err != nil {\n    log.Printf(\"error registering chat message sent handler: %v\", err)\n}\n\nhttp.HandleFunc(\"/webhook\", webhookClient.WebhookHandler)\n```\n\n---\n\n## Quickstart: Combined API + Webhook Client\n\nYou can automatically retrieve the public key from the API and use it to set up the webhook client without manually copying the key.\n\n```go\napiClient, err := kick.NewAPIClient(kickapitypes.APIClientConfig{\n    HTTPClient:   http.DefaultClient,\n})\nif err != nil {\n    log.Fatalf(\"could not create APIClient: %v\", err)\n}\n\n// Fetch the webhook public key directly from the API\npublicKeyResp, err := apiClient.PublicKey().GetWebhookPublicKey(context.TODO())\nif err != nil {\n\tvar apiErr *kickerrors.APIError\n\tif errors.As(err, \u0026apiErr) {\n\t\tlog.Fatalf(\"API error: %d %s\", apiErr.StatusCode, apiErr.Message)\n\t} else {\n\t\tlog.Fatalf(\"internal error: %v\", err)\n\t}\n}\n\nwebhookClient, err := kick.NewWebhookClient(publicKeyResp.Data.PublicKey)\nif err != nil {\n    log.Fatalf(\"could not create WebhookClient: %v\", err)\n}\n\n// Register handlers\nerr = webhookClient.RegisterChatMessageSentHandler(func(writer http.ResponseWriter, request *http.Request, headers kickwebhooktypes.KickWebhookHeaders, data kickwebhooktypes.ChatMessageSent) {\n    writer.WriteHeader(http.StatusOK)\n})\nif err != nil {\n    log.Printf(\"error registering chat message sent handler: %v\", err)\n}\n\nhttp.HandleFunc(\"/webhook\", webhookClient.WebhookHandler)\n```\n\n---\n\n## Disclaimer\n\nThe Kick API documentation is sometimes ambiguous. This SDK makes educational guesses about certain endpoints and behaviors. There may be limitations or quirks in the API that are not handled by this SDK.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhenrikah%2Fkick-go-sdk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhenrikah%2Fkick-go-sdk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhenrikah%2Fkick-go-sdk/lists"}