---
title: "Slack Callback"
method: GET
path: "/v1/auth/slack/callback"
tags: ["auth"]
---

# Slack Callback

`GET /v1/auth/slack/callback`

## 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/callback`
- Auth: none declared

Exchange the code, issue the session, and hand tokens to the originating SPA.

One callback path serves three purposes, dispatched by the VERIFIED contents of the signed state.
Sharing the path is deliberate: a second callback would need a second ``redirect_uri``, which is
a change to the live Slack app.

The connect-redemption purpose is checked first and is a strictly separate branch — it never
reaches ``service.complete`` and therefore never reaches ``AuthService.login_with_identity``,
which creates a ``User`` and activates a pending membership. Proving who asked for a connect
link must do neither. The self-link branch is next and likewise never reaches login.

## Query parameters

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

## Other responses

- `307`: Successful Response
- `422`: Validation Error
- `503`: Fixed temporary member-connect page after requester proof; the link was not spent.

---

[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)
