---
title: "Slack Login"
method: GET
path: "/v1/auth/slack/login"
tags: ["auth"]
---

# Slack Login

`GET /v1/auth/slack/login`

## Request

- Base URL: `https://api.patricia.app` (the document declares no server; this is the origin it was published from)
- URL: `https://api.patricia.app/v1/auth/slack/login`
- Auth: none declared

Redirect to "Sign in with Slack" (OIDC) with a signed, short-TTL state.

The Turnstile verdict is taken HERE, on the one request in the round trip that can carry a
widget token, and sealed into the signed state for the callback to read. The token is
consumed by Cloudflare on this verification, so its appearance in a query string costs
nothing after the redirect. It never gates the sign-in: an existing member with no token
is redirected exactly as before, and only a first-touch bootstrap reads the verdict.

## Query parameters

- `redirect` string, nullable: App-relative path to return to after sign-in.
- `surface` string, nullable: Which first-party app the sign-in started from.
- `captcha_token` string, nullable: Turnstile token solved on the sign-in page (action ``slack_login``). Never required to sign in: a first sign-in that would mint a starter grant is held under ``challenge_verification`` without one, which a card proof releases and a Slack connect does not. A token that is absent, rejected or over-length reads as unsolved; none of them refuses the sign-in.

## Other responses

- `307`: Successful Response
- `422`: Validation Error

---

[API](https://skmtc.dev/patricia/apis/patricia-api.md) · [All operations](https://skmtc.dev/patricia/apis/patricia-api/llms.txt) · [OpenAPI document](https://skmtc.dev/patricia/apis/patricia-api/revisions/0dfb44495ea1?raw)
