---
title: "Oauth Kick Callback"
method: GET
path: "/api/oauth/kick/callback"
---

# Oauth Kick Callback

`GET /api/oauth/kick/callback`

## Request

- Base URL: `https://sleipnir.tv` (the document declares no server; this is the origin it was published from)
- URL: `https://sleipnir.tv/api/oauth/kick/callback`
- Auth: none declared

Kick redirects here with code+state. Exchange the code for
tokens (PKCE), fetch the Kick user, subscribe the channel's
chat.message.sent event to the webhook, then save the connection.

The event subscription is created BEFORE the DB save so a
connection row is never persisted without its subscription_id.

Shared with the destination-connect flow: a dest grant is recognised by
its state matching the ISOLATED dest store. If so we handle the
destination and return; otherwise we fall through to the chat logic.

## Query parameters

- `code` string, nullable
- `state` string, nullable
- `error` string, nullable

## Cookies

- `__Host-connect_nonce` string, nullable
- `relay_session` string, nullable

## Response `200`

Successful Response

- unknown

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/sleipnir/apis/relay-control-plane.md) · [All operations](https://skmtc.dev/sleipnir/apis/relay-control-plane/llms.txt) · [OpenAPI document](https://skmtc.dev/sleipnir/apis/relay-control-plane/revisions/79829f6945a4?raw)
