> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://fastpix.com/docs/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://fastpix.com/docs/_mcp/server.

# Get what a channel plays

GET https://api.fastpix.com/v1/cloud-playout/channels/{channelId}/schedule

This endpoint returns what a Cloud Playout channel plays and when, as a flat timeline. It works for both channel types, and is the endpoint to use when you want the actual running order rather than the configuration behind it.

#### How it works

1. Make a GET request to this endpoint with the `channelId` and the channel's `type`.

2. The response returns the timeline in play order, with every entry carrying its own `startTime`, `endTime` and `duration`.

3. Narrow the response to a period with `startTime` and `endTime`.

For a loop channel the programs are expanded into the times they actually play, pass after pass, so an item that comes round four times appears four times. Bumpers appear as entries of their own, in the place they play, carrying `bumperId` and `bumperName`.

For a schedule channel the bumpers belong to the event instead, and are returned in the entry's `bumper` object rather than as entries of their own.

#### Example

A channel guide shows viewers what is on now and next by asking for the timeline between now and two hours ahead.


Reference: https://fastpix.com/docs/cloud-playout-api/schedule-and-epg/get-cloud-playout-channel-schedule

## Authentication

- `Authorization` header (basic auth, required) — FastPix APIs are secured with Basic Authentication. Use your Access Token ID as the username and Secret Key as the password in the Authorization header of each API request. * Username: Access Token ID * Password: Secret Key Activate your FastPix account to generate your API credentials. See the guide here

## Request

### Path parameters

- `channelId` (string, required) — The unique identifier of the channel whose timeline is retrieved.

### Query parameters

- `type` (enum, required) — The type of the channel. It must match the channel's own type.
  - Allowed values: `loop`, `schedule`
- `startTime` (string, optional) — Only return what plays at or after this time, in `yyyy-MM-dd'T'HH:mm:ss` format and interpreted as UTC.
- `endTime` (string, optional) — Only return what plays at or before this time, in `yyyy-MM-dd'T'HH:mm:ss` format and interpreted as UTC. It must be later than `startTime`.

## Response

### 200

Channel timeline retrieved successfully

- `success` (boolean, optional) — Shows the request status. Returns true for success and false for failure.
- `data` (CloudPlayoutChannelScheduleResponseData, optional)

## Types

### CloudPlayoutChannelScheduleResponseData

- `schedule` (list of CloudPlayoutScheduleItem, optional) — What the channel plays, in play order.
- `videoCount` (integer, optional) — The number of entries in the timeline.

### CloudPlayoutScheduleItem

One thing a Cloud Playout channel plays, at the time it plays.

- `id` (string, optional) — The unique identifier of the media that plays.
- `name` (string, optional) — The name of what plays.
- `type` (enum, optional) — What plays. `vod` is a media item, `live` is the channel's live input, and `bumper` is a short clip that plays around an item.
  - Allowed values: `vod`, `live`, `bumper`
- `startTime` (datetime, optional) — When it starts, defined as a localDateTime (UTC Time).
- `endTime` (datetime, optional) — When it ends, defined as a localDateTime (UTC Time).
- `duration` (string, optional) — How long it runs, formatted as `HH:MM:SS`.
- `thumbnail` (string, optional, nullable) — A URL to its thumbnail image.
- `sourceResolution` (string, optional, nullable) — The resolution it is played out at.
- `bumperId` (string, optional, nullable) — The unique identifier of the bumper. Returned on loop channels, for entries whose `type` is `bumper`.
- `bumperName` (string, optional, nullable) — The name of the bumper. Returned on loop channels, for entries whose `type` is `bumper`.
- `bumper` (CloudPlayoutScheduleEventBumper, optional) — The bumpers that play around this entry. Returned on schedule channels, where bumpers belong to the event rather than being entries of their own.
- `programId` (string, optional, nullable) — The unique identifier of the program this entry belongs to. Returned for loop channels.
- `programName` (string, optional, nullable) — The name of the program this entry belongs to. Returned for loop channels.
- `programMediaId` (string, optional, nullable) — The unique identifier of the item within its program. Returned for loop channels.

### CloudPlayoutScheduleEventBumper

The bumpers attached to the event. Each key is present only when a bumper of that kind is attached.

- `preroll` (CloudPlayoutScheduleEventRollResponse, optional)
- `postroll` (CloudPlayoutScheduleEventRollResponse, optional)

### CloudPlayoutScheduleEventRollResponse

- `id` (string, optional) — The unique identifier of the bumper.
- `duration` (integer, optional) — The duration of the bumper in seconds.

## Examples

**Response**

```json
{
  "success": true,
  "data": {
    "schedule": [
      {
        "id": "9d9f2c67-0a25-4b3e-9a70-1a5c1d2b6f88",
        "name": "Ad break intro",
        "type": "bumper",
        "startTime": "2026-09-02T17:59:55Z",
        "endTime": "2026-09-02T18:00:00Z",
        "duration": "00:00:05",
        "bumperId": "9d9f2c67-0a25-4b3e-9a70-1a5c1d2b6f88",
        "bumperName": "Ad break intro",
        "programId": "d85083a0-e935-4c29-9c32-6720bdc9b22f",
        "programName": "Morning block"
      },
      {
        "id": "8c2c4ef1-1c2a-4a49-9c5b-8f9c0a7c3d21",
        "name": "Morning headlines",
        "type": "vod",
        "startTime": "2026-09-02T18:00:00Z",
        "endTime": "2026-09-02T18:10:30Z",
        "duration": "00:10:30",
        "thumbnail": "https://images.fastpix.com/8c2c4ef1-1c2a-4a49-9c5b-8f9c0a7c3d21/thumbnail.png",
        "sourceResolution": "1080p",
        "programId": "d85083a0-e935-4c29-9c32-6720bdc9b22f",
        "programName": "Morning block",
        "programMediaId": "4a1e1f3b-2c0d-4c4a-9a02-1d7e5f6b8c90"
      }
    ],
    "videoCount": 2
  }
}
```

**SDK Code**

```python
import requests

url = "https://api.fastpix.com/v1/cloud-playout/channels/cc99cae6-56b4-46ab-9f4a-8b2462d8137c/schedule"

querystring = {"type":"loop"}

response = requests.get(url, params=querystring, auth=("<username>", "<password>"))

print(response.json())
```

```javascript
const url = 'https://api.fastpix.com/v1/cloud-playout/channels/cc99cae6-56b4-46ab-9f4a-8b2462d8137c/schedule?type=loop';
const credentials = btoa("<username>:<password>");

const options = {method: 'GET', headers: {Authorization: `Basic ${credentials}`}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.fastpix.com/v1/cloud-playout/channels/cc99cae6-56b4-46ab-9f4a-8b2462d8137c/schedule?type=loop"

	req, _ := http.NewRequest("GET", url, nil)

	req.SetBasicAuth("<username>", "<password>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.fastpix.com/v1/cloud-playout/channels/cc99cae6-56b4-46ab-9f4a-8b2462d8137c/schedule?type=loop")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request.basic_auth("<username>", "<password>")

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.fastpix.com/v1/cloud-playout/channels/cc99cae6-56b4-46ab-9f4a-8b2462d8137c/schedule?type=loop")
  .basicAuth("<username>", "<password>")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.fastpix.com/v1/cloud-playout/channels/cc99cae6-56b4-46ab-9f4a-8b2462d8137c/schedule?type=loop', [
  'headers' => [
  ],
    'auth' => ['<username>', '<password>'],
]);

echo $response->getBody();
```

```csharp
using RestSharp;
using RestSharp.Authenticators;

var client = new RestClient("https://api.fastpix.com/v1/cloud-playout/channels/cc99cae6-56b4-46ab-9f4a-8b2462d8137c/schedule?type=loop");
client.Authenticator = new HttpBasicAuthenticator("<username>", "<password>");
var request = new RestRequest(Method.GET);

IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let credentials = Data("<username>:<password>".utf8).base64EncodedString()

let headers = ["Authorization": "Basic \(credentials)"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.fastpix.com/v1/cloud-playout/channels/cc99cae6-56b4-46ab-9f4a-8b2462d8137c/schedule?type=loop")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```