# Create a player
`POST https://octopus.livepush.io/players`
Creates a standalone player. Unlike a stream embed, a player can carry several sources (streams, videos or URLs) behind one embed.

Requires a token with `CanCreatePlayers`.
- **Tag:** Players
- **Operation ID:** `postPlayer`
- **Authentication:** Bearer token required
- **Docs:** https://developers.livepush.io/players/create-a-player/

### Request body

`application/json` (required)

- `name` (string) **required**


```json
{
  "name": "Lobby screen"
}
```


### Example request

```bash
curl -X POST 'https://octopus.livepush.io/players' \
  -H 'Authorization: Bearer YOUR_API_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "Lobby screen"
  }'
```


### Responses


#### 200 — Player created.

- `id` (string)
- `embedId` (string) — Identifier used in the embed URL.
- `user` (string) — Owning account.
- `name` (string)
- `config` (PlayerConfig) — Embed configuration for a standalone player — the player equivalent of the /streams/{streamid}/embed/ endpoints. Note that PUT /players/{playerid}/config replaces this object wholesale rather than merging, so always send the complete configuration. Unknown fields are stripped. The player surface is narrower than the stream embed surface: there is no equivalent of chatconfig, plugins, mode/cdn, mode/external or preferreddestination.
  - `embedTitle` (string)
  - `embedColor` (string)
  - `embedAutoplay` (boolean)
  - `embedAbr` (boolean) — Adaptive bitrate playback.
  - `embedLiveRewind` (boolean)
  - `embedPremier` (boolean)
  - `embedPremierText` (string)
  - `embedOfflineText` (string)
  - `embedOfflineTextAlt` (string)
  - `embedPassword` (string)
  - `embedDomains` (string[]) — Allowed hosting domains. Empty allows every domain.
  - `embedGEOList` (string[]) — Allowed country codes. Empty allows every country.
  - `embedDisableViewersCount` (boolean)
  - `embedDisablePauseControl` (boolean)
  - `embedCoverId` (string)
  - `embedCoverFileName` (string)
  - `embedChannelIconURL` (string)
  - `embedChannelIconSize` (string)
  - `embedChannelIconPosition` (string)
  - `embedChannelIconLayout` (string)
  - `embedChannelIconAnchorURL` (string)
  - `maxConcurrentViewers` (integer) — Hard cap on simultaneous viewers.
- `sources` (PlayerSource[])
  - `type` (string) — Which of the three source fields is in use.
  - `stream` (string) — Stream ID, when type is stream.
  - `video` (string) — Video ID, when type is video.
  - `url` (string) — Playable URL, when type is url.
  - `isDisabled` (boolean)
- `isLocked` (boolean)
- `sessionLockedTill` (string<date-time>)
- `isDisabled` (boolean)
- `unsafeContent` (boolean)
- `createdAt` (string<date-time>)
- `updatedAt` (string<date-time>)


```json
{
  "id": "pl_xxxxxxxxxxxx",
  "embedId": "em_xxxxxxxxxxxx",
  "user": "string",
  "name": "Lobby screen",
  "config": {
    "embedTitle": "Lobby screen",
    "embedColor": "#66d72f",
    "embedAutoplay": true,
    "embedAbr": false,
    "embedLiveRewind": false,
    "embedPremier": false,
    "embedPremierText": "string",
    "embedOfflineText": "string",
    "embedOfflineTextAlt": "string",
    "embedPassword": "string",
    "embedDomains": [
      "string"
    ],
    "embedGEOList": [
      "string"
    ],
    "embedDisableViewersCount": false,
    "embedDisablePauseControl": false,
    "embedCoverId": "string",
    "embedCoverFileName": "string",
    "embedChannelIconURL": "string",
    "embedChannelIconSize": "string",
    "embedChannelIconPosition": "string",
    "embedChannelIconLayout": "string",
    "embedChannelIconAnchorURL": "string",
    "maxConcurrentViewers": 0
  },
  "sources": [
    {
      "type": "stream",
      "stream": "st_xxxxxxxxxxxxx",
      "video": "vd_xxxxxxxxxxxx",
      "url": "string",
      "isDisabled": false
    }
  ],
  "isLocked": false,
  "sessionLockedTill": "2026-01-31T09:00:00.000Z",
  "isDisabled": false,
  "unsafeContent": false,
  "createdAt": "2026-01-31T09:00:00.000Z",
  "updatedAt": "2026-01-31T09:00:00.000Z"
}
```


#### 401 — Response

