---
title: "Connect a dev.to account"
method: POST
path: "/api/v1/channels/connect/devto"
tags: ["channels"]
---

# Connect a dev.to account

`POST /api/v1/channels/connect/devto`

## Request

- Base URL: `https://api.cadencz.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.cadencz.com/api/v1/channels/connect/devto`
- Auth: HTTP bearer

Validates a dev.to API key and stores it encrypted. dev.to rather than Medium because Medium stopped issuing API tokens to new integrations in January 2025 — there is no way to onboard a new user there.

## Request body

- DevToConnectRequest: Connect dev.to by pasting the API key from Settings → Extensions.
  - `api_key` string, required: dev.to API key.
  - `display_name` string, nullable: Optional label for the channel.

## Response `200`

Successful Response

- ChannelRead
  - `id` string, required
  - `workspace_id` string, required
  - `platform` string, required
  - `handle` string, required
  - `display_name` string, nullable, required
  - `avatar_url` string, nullable, required
  - `status` string, required
  - `byo_app` boolean, required
  - `token_expires_at` string, date-time, nullable, required
  - `followers` integer, required
  - `capabilities` object
  - `plan_entitled` boolean
  - `entitlement_status` 'available' | 'plan_paused' | 'disconnected'
  - `plan_pause_reason` 'plan_required' | 'workspace_limit' | 'platform_limit', nullable

## Other responses

- `401`: Missing or invalid Supabase bearer token.
- `422`: Validation Error
- `502`: The upstream provider rejected the request.

---

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