---
title: "Connect or update a publishing destination."
method: POST
path: "/publishing-series/{seriesId}/destinations"
tags: ["Publishing"]
---

# Connect or update a publishing destination.

`POST /publishing-series/{seriesId}/destinations`

## Request

- Base URL: `https://docs.sleeperhit.studio/api/v1`
- URL: `https://docs.sleeperhit.studio/api/v1/publishing-series/{seriesId}/destinations`
- Auth: HTTP bearer

## Headers

- `Idempotency-Key` string, required

## Request body

- PublishingDestinationUpsertRequest
  - `provider` 'rss' | 'apple_podcasts' | 'spotify' | 'youtube' | 'tiktok' | 'instagram' | 'linkedin' | 'x' | 'other'
  - `medium` 'audio' | 'video' | 'short_form' | 'text' | 'mixed'
  - `key` string
  - `label` string, nullable
  - `status` 'draft' | 'connected' | 'needs_auth' | 'needs_setup' | 'disconnected' | 'failed' | 'archived'
  - `providerAccountId` string, nullable
  - `providerConfigId` string, nullable
  - `scopes` string[]
  - `settings` object, nullable
  - `externalUrl` string, uri, nullable

## Response `200`

Publishing destination envelope.

- PublishingDestinationEnvelope
  - `destination` PublishingDestination, required
    - `id` string, required
    - `seriesId` string, required
    - `projectId` string, required
    - `provider` 'rss' | 'apple_podcasts' | 'spotify' | 'youtube' | 'tiktok' | 'instagram' | 'linkedin' | 'x' | 'other', required
    - `medium` 'audio' | 'video' | 'short_form' | 'text' | 'mixed', required
    - `key` string, required
    - `label` string, nullable
    - `status` 'draft' | 'connected' | 'needs_auth' | 'needs_setup' | 'disconnected' | 'failed' | 'archived', required
    - `providerAccountId` string, nullable
    - `providerConfigId` string, nullable
    - `scopes` string[]
    - `settings` unknown
    - `externalUrl` string, uri, nullable
    - `lastVerifiedAt` string, date-time, nullable
    - `createdAt` string, date-time, required
    - `updatedAt` string, date-time, required

## Other responses

- `400`: Request payload failed validation. The error message names the offending field.
- `401`: Missing, malformed, revoked, or expired API key.
- `403`: API key is valid but lacks the scope, is blocked by IP allowlist, or the account is disabled.
- `429`: Rate limit for this API key + IP + route family was exceeded.
- `500`: The API failed unexpectedly. Safe to retry with the same Idempotency-Key.

---

[API](https://skmtc.dev/sleeperhit/apis/sleeper-hit-studio-story-api.md) · [All operations](https://skmtc.dev/sleeperhit/apis/sleeper-hit-studio-story-api/llms.txt) · [OpenAPI document](https://skmtc.dev/sleeperhit/apis/sleeper-hit-studio-story-api/revisions/4534f5d25540?raw)
