<!-- source: docs/api/2_capi/playbackstream/addevent.md -->
<!-- url: https://docs-internal.braincloudservers.com/api/capi/playbackstream/addevent -->

# AddEvent

Adds a stream event.

| Service | Operation |
| ------- | --------- |
| playbackStream | ADD_EVENT |

## Method Parameters

| Parameter        | Description                           |
| ---------------- | ------------------------------------- |
| playbackStreamId | Identifies the stream to read         |
| eventData        | Describes the event                   |
| summary          | Current summary data as of this event |

## Usage

**C#:**

```csharp
string playbackStreamId = "stream";
string jsonEventData = "{\"value\":1}";
string jsonSummary = "{\"total\":5}";
SuccessCallback successCallback = (response, cbObject) =>
{
    Debug.Log(string.Format("Success | {0}", response));
};
FailureCallback failureCallback = (status, code, error, cbObject) =>
{
    Debug.Log(string.Format("Failed | {0}  {1}  {2}", status, code, error));
};

_bc.PlaybackStreamService.AddEvent(playbackStreamId, jsonEventData, jsonSummary, successCallback, failureCallback);
```

**C++:**

```cpp
const char *playbackStreamId = "stream";
const char *jsonEventData = "{\"value\":1}";
const char *jsonSummary = "{\"total\":5}";

_bc->getPlaybackStreamService()->addEvent(playbackStreamId, jsonEventData, jsonSummary, this);
```

**Obj-C:**

```objectivec
NSString *playbackStreamId = @"stream";
NSString *jsonEventData = @"{\"value\":1}";
NSString *jsonSummary = @"{\"total\":5}";
BCCompletionBlock successBlock;      // define callback
BCErrorCompletionBlock failureBlock; // define callback

[[_bc playbackStreamService] addEvent:playbackStreamId
              jsonEventData:jsonEventData
                jsonSummary:jsonSummary
            completionBlock:successBlock
       errorCompletionBlock:failureBlock
                   cbObject:nil];
```

**Java:**

```java
String playbackStreamId = "stream";
String jsonEventData = "{\"value\":1}";
String jsonSummary = "{\"total\":5}";
this; // implements IServerCallback

_bc.getPlaybackStreamService().addEvent(playbackStreamId, jsonEventData, jsonSummary, this);

public void serverCallback(ServiceName serviceName, ServiceOperation serviceOperation, JSONObject jsonData)
{
    System.out.print(String.format("Success | %s", jsonData.toString()));
}
public void serverError(ServiceName serviceName, ServiceOperation serviceOperation, int statusCode, int reasonCode, String jsonError)
{
    System.out.print(String.format("Failed | %d %d %s", statusCode,  reasonCode, jsonError.toString()));
}
```

**JavaScript:**

```javascript
var playbackStreamId = "stream";
var jsonEventData = {
    "value": 1
};
var jsonSummary = {
    "total": 5
};

_bc.playbackStream.addEvent(playbackStreamId, jsonEventData, jsonSummary, result =>
{
    var status = result.status;
    console.log(status + " : " + JSON.stringify(result, null, 2));
});
```

**Dart:**

```dart
var  playbackStreamId = "stream";
var  eventData = {
    "value": 1
};
var  summary = {
    "total": 5
};

ServerResponse result = await _bc.playbackStreamService.addEvent(playbackStreamId:playbackStreamId, eventData:eventData, summary:summary);

if (result.statusCode == 200) {
    print("Success");
} else {
    print("Failed ${result.error['status_message'] ?? result.error}");
}
```

**Roblox:**

```lua
local playbackStreamId = "stream"
local eventData = {
    value = 1
}
local summary = {
    total = 5
}

local callback = function(success, response)
    if success then
        print("Success")
    else
        print("Failed | " .. tostring(response.status_message))
    end
end

_bc.playbackStream:addEvent(playbackStreamId, eventData, summary, callback)
```

**GDScript:**

```gdscript
var playback_stream_id = "stream"
var event_data = {
    "value": 1
}
var summary = {
    "total": 5
}

var result = await _bc.playback_stream_service.add_event(playback_stream_id, event_data, summary)

if result.status == 200:
	print("Success")
else:
	print("Failed: %s" % result.status_message)
```

**Lua:**

```lua
local playbackStreamId = "stream"
local eventData = { value = 1 }
local summary = { total = 5 }

local callback = function(success, response)
    if success then
        print("Success")
    else
        print("Failed | " .. tostring(response.status_message))
    end
end

_bc.playbackStream:addEvent(playbackStreamId, eventData, summary, callback)
```

**Cloud Code:**

```cfscript
var playbackStreamId = "stream";
var jsonEventData = {
    "value": 1
};
var jsonSummary = {
    "total": 5
};
var playbackStreamProxy = bridge.getPlaybackStreamServiceProxy();

var postResult = playbackStreamProxy.addEvent(playbackStreamId, jsonEventData, jsonSummary);
if (postResult.status == 200) {
    // Success!
}
```

**Raw:**

```r
{
    "service": "playbackStream",
    "operation": "ADD_EVENT",
    "data": {
        "playbackStreamId": "stream",
        "eventData": {
            "value": 1
        },
        "summary": {
            "total": 5
        }
    }
}
```

<details>
<summary>JSON Response</summary>

```json
{
    "data": null,
    "status": 200
}
```

</details>


---

<!-- source: docs/api/2_capi/playbackstream/deletestream.md -->
<!-- url: https://docs-internal.braincloudservers.com/api/capi/playbackstream/deletestream -->

# DeleteStream

Deletes a stream.

| Service | Operation |
| ------- | --------- |
| playbackStream | DELETE_STREAM |

## Method Parameters
Parameter | Description
--------- | -----------
playbackStreamId | Identifies the stream to delete

## Usage

**C#:**

```csharp
string playbackStreamId = "stream";
SuccessCallback successCallback = (response, cbObject) =>
{
    Debug.Log(string.Format("Success | {0}", response));
};
FailureCallback failureCallback = (status, code, error, cbObject) =>
{
    Debug.Log(string.Format("Failed | {0}  {1}  {2}", status, code, error));
};

_bc.PlaybackStreamService.DeleteStream(playbackStreamId, successCallback, failureCallback);
```

**C++:**

```cpp
const char *playbackStreamId = "stream";

_bc->getPlaybackStreamService()->deleteStream(playbackStreamId, this);
```

**Obj-C:**

```objectivec
NSString *playbackStreamId = @"stream";
BCCompletionBlock successBlock;      // define callback
BCErrorCompletionBlock failureBlock; // define callback

[[_bc playbackStreamService] deleteStream:playbackStreamId
            completionBlock:successBlock
       errorCompletionBlock:failureBlock
                   cbObject:nil];
```

**Java:**

```java
String playbackStreamId = "stream";
this; // implements IServerCallback

_bc.getPlaybackStreamService().deleteStream(playbackStreamId, this);

public void serverCallback(ServiceName serviceName, ServiceOperation serviceOperation, JSONObject jsonData)
{
    System.out.print(String.format("Success | %s", jsonData.toString()));
}
public void serverError(ServiceName serviceName, ServiceOperation serviceOperation, int statusCode, int reasonCode, String jsonError)
{
    System.out.print(String.format("Failed | %d %d %s", statusCode,  reasonCode, jsonError.toString()));
}
```

**JavaScript:**

```javascript
var playbackStreamId = "stream";

_bc.playbackStream.deleteStream(playbackStreamId, result =>
{
    var status = result.status;
    console.log(status + " : " + JSON.stringify(result, null, 2));
});
```

**Dart:**

```dart
var  playbackStreamId = "stream";

ServerResponse result = await _bc.playbackStreamService.deleteStream(playbackStreamId:playbackStreamId);

if (result.statusCode == 200) {
    print("Success");
} else {
    print("Failed ${result.error['status_message'] ?? result.error}");
}
```

**Roblox:**

```lua
local playbackStreamId = "stream"

local callback = function(success, response)
    if success then
        print("Success")
    else
        print("Failed | " .. tostring(response.status_message))
    end
end

_bc.playbackStream:deleteStream(playbackStreamId, callback)
```

**GDScript:**

```gdscript
var playback_stream_id = "stream"

var result = await _bc.playback_stream_service.delete_stream(playback_stream_id)

if result.status == 200:
	print("Success")
else:
	print("Failed: %s" % result.status_message)
```

**Lua:**

```lua
local playbackStreamId = "stream"

local callback = function(success, response)
    if success then
        print("Success")
    else
        print("Failed | " .. tostring(response.status_message))
    end
end

_bc.playbackStream:deleteStream(playbackStreamId, callback)
```

**Cloud Code:**

```cfscript
var playbackStreamId = "stream";
var playbackStreamProxy = bridge.getPlaybackStreamServiceProxy();

var postResult = playbackStreamProxy.deleteStream(playbackStreamId);
if (postResult.status == 200) {
    // Success!
}
```

**Raw:**

```r
{
    "service": "playbackStream",
    "operation": "DELETE_STREAM",
    "data": {
        "playbackStreamId": "stream"
    }
}
```

<details>
<summary>JSON Response</summary>

```json
{
    "status" : 200,
    "data" : null
}
```
</details>


---

<!-- source: docs/api/2_capi/playbackstream/endstream.md -->
<!-- url: https://docs-internal.braincloudservers.com/api/capi/playbackstream/endstream -->

# EndStream

Ends a stream.

| Service | Operation |
| ------- | --------- |
| playbackStream | END_STREAM |

## Method Parameters
Parameter | Description
--------- | -----------
playbackStreamId | Identifies the stream to end

## Usage

**C#:**

```csharp
string playbackStreamId = "stream";
SuccessCallback successCallback = (response, cbObject) =>
{
    Debug.Log(string.Format("Success | {0}", response));
};
FailureCallback failureCallback = (status, code, error, cbObject) =>
{
    Debug.Log(string.Format("Failed | {0}  {1}  {2}", status, code, error));
};

_bc.PlaybackStreamService.EndStream(playbackStreamId, successCallback, failureCallback);
```

**C++:**

```cpp
const char *playbackStreamId = "stream";

_bc->getPlaybackStreamService()->endStream(playbackStreamId, this);
```

**Obj-C:**

```objectivec
NSString *playbackStreamId = @"stream";
BCCompletionBlock successBlock;      // define callback
BCErrorCompletionBlock failureBlock; // define callback

[[_bc playbackStreamService] endStream:playbackStreamId
            completionBlock:successBlock
       errorCompletionBlock:failureBlock
                   cbObject:nil];
```

**Java:**

```java
String playbackStreamId = "stream";
this; // implements IServerCallback

_bc.getPlaybackStreamService().endStream(playbackStreamId, this);

public void serverCallback(ServiceName serviceName, ServiceOperation serviceOperation, JSONObject jsonData)
{
    System.out.print(String.format("Success | %s", jsonData.toString()));
}
public void serverError(ServiceName serviceName, ServiceOperation serviceOperation, int statusCode, int reasonCode, String jsonError)
{
    System.out.print(String.format("Failed | %d %d %s", statusCode,  reasonCode, jsonError.toString()));
}
```

**JavaScript:**

```javascript
var playbackStreamId = "stream";

_bc.playbackStream.endStream(playbackStreamId, result =>
{
    var status = result.status;
    console.log(status + " : " + JSON.stringify(result, null, 2));
});
```

**Dart:**

```dart
var  playbackStreamId = "stream";

ServerResponse result = await _bc.playbackStreamService.endStream(playbackStreamId:playbackStreamId);

if (result.statusCode == 200) {
    print("Success");
} else {
    print("Failed ${result.error['status_message'] ?? result.error}");
}
```

**Roblox:**

```lua
local playbackStreamId = "stream"

local callback = function(success, response)
    if success then
        print("Success")
    else
        print("Failed | " .. tostring(response.status_message))
    end
end

_bc.playbackStream:endStream(playbackStreamId, callback)
```

**GDScript:**

```gdscript
var playback_stream_id = "stream"

var result = await _bc.playback_stream_service.end_stream(playback_stream_id)

if result.status == 200:
	print("Success")
else:
	print("Failed: %s" % result.status_message)
```

**Lua:**

```lua
local playbackStreamId = "stream"

local callback = function(success, response)
    if success then
        print("Success")
    else
        print("Failed | " .. tostring(response.status_message))
    end
end

_bc.playbackStream:endStream(playbackStreamId, callback)
```

**Cloud Code:**

```cfscript
var playbackStreamId = "stream";
var playbackStreamProxy = bridge.getPlaybackStreamServiceProxy();

var postResult = playbackStreamProxy.endStream(playbackStreamId);
if (postResult.status == 200) {
    // Success!
}
```

**Raw:**

```r
{
    "service": "playbackStream",
    "operation": "END_STREAM",
    "data": {
        "playbackStreamId": "stream"
    }
}
```

<details>
<summary>JSON Response</summary>

```json
{
    "status" : 200,
    "data" : null
}
```
</details>


---

<!-- source: docs/api/2_capi/playbackstream/getrecentstreamsforinitiatingplayer.md -->
<!-- url: https://docs-internal.braincloudservers.com/api/capi/playbackstream/getrecentstreamsforinitiatingplayer -->

# GetRecentStreamsForInitiatingPlayer

Get recent streams for initiating player, optional parameter: initiatingPlayerId.

| Service | Operation |
| ------- | --------- |
| playbackStream | GET_RECENT_STREAMS_FOR_INITIATING_PLAYER |

## Method Parameters

| Parameter          | Description                                        |
| ------------------ | -------------------------------------------------- |
| initiatingPlayerId | The player that started the stream                 |
| maxNumStreams      | The max number of stream to return in the response |

## Usage

**C#:**

```csharp
string initiatingPlayerId = "player";
int maxNumStreams = 5;
SuccessCallback successCallback = (response, cbObject) =>
{
    Debug.Log(string.Format("Success | {0}", response));
};
FailureCallback failureCallback = (status, code, error, cbObject) =>
{
    Debug.Log(string.Format("Failed | {0}  {1}  {2}", status, code, error));
};

_bc.PlaybackStreamService.GetRecentStreamsForInitiatingPlayer(initiatingPlayerId, maxNumStreams, successCallback, failureCallback);
```

**C++:**

```cpp
const char *initiatingPlayerId = "player";
int maxNumStreams = 5;

_bc->getPlaybackStreamService()->getRecentStreamsForInitiatingPlayer(initiatingPlayerId, maxNumStreams, this);
```

**Obj-C:**

```objectivec
NSString *initiatingPlayerId = @"player";
int maxNumStreams = 5;
BCCompletionBlock successBlock;      // define callback
BCErrorCompletionBlock failureBlock; // define callback

[[_bc playbackStreamService] getRecentStreamsForInitiatingPlayer:initiatingPlayerId
              maxNumStreams:maxNumStreams
            completionBlock:successBlock
       errorCompletionBlock:failureBlock
                   cbObject:nil];
```

**Java:**

```java
String initiatingPlayerId = "player";
int maxNumStreams = 5;
this; // implements IServerCallback

_bc.getPlaybackStreamService().getRecentStreamsForInitiatingPlayer(initiatingPlayerId, maxNumStreams, this);

public void serverCallback(ServiceName serviceName, ServiceOperation serviceOperation, JSONObject jsonData)
{
    System.out.print(String.format("Success | %s", jsonData.toString()));
}
public void serverError(ServiceName serviceName, ServiceOperation serviceOperation, int statusCode, int reasonCode, String jsonError)
{
    System.out.print(String.format("Failed | %d %d %s", statusCode,  reasonCode, jsonError.toString()));
}
```

**JavaScript:**

```javascript
var initiatingPlayerId = "player";
var maxNumStreams = 5;

_bc.playbackStream.getRecentStreamsForInitiatingPlayer(initiatingPlayerId, maxNumStreams, result =>
{
    var status = result.status;
    console.log(status + " : " + JSON.stringify(result, null, 2));
});
```

**Dart:**

```dart
var  initiatingPlayerId = "player";
var  maxNumStreams = 5;

ServerResponse result = await _bc.playbackStreamService.getRecentStreamsForInitiatingPlayer(initiatingPlayerId:initiatingPlayerId, maxNumStreams:maxNumStreams);

if (result.statusCode == 200) {
    print("Success");
} else {
    print("Failed ${result.error['status_message'] ?? result.error}");
}
```

**Roblox:**

```lua
local initiatingPlayerId = "player"
local maxNumStreams = 5

local callback = function(success, response)
    if success then
        print("Success")
    else
        print("Failed | " .. tostring(response.status_message))
    end
end

_bc.playbackStream:getRecentStreamsForInitiatingPlayer(initiatingPlayerId, maxNumStreams, callback)
```

**GDScript:**

```gdscript
var initiating_player_id = "player"
var max_num_streams = 5

var result = await _bc.playback_stream_service.get_recent_streams_for_initiating_player(initiating_player_id, max_num_streams)

if result.status == 200:
	print("Success")
else:
	print("Failed: %s" % result.status_message)
```

**Lua:**

```lua
local initiatingPlayerId = "player"
local maxNumStreams = 5

local callback = function(success, response)
    if success then
        print("Success")
    else
        print("Failed | " .. tostring(response.status_message))
    end
end

_bc.playbackStream:getRecentStreamsForInitiatingPlayer(initiatingPlayerId, maxNumStreams, callback)
```

**Cloud Code:**

```cfscript
var initiatingPlayerId = "player";
var maxNumStreams = 5;
var playbackStreamProxy = bridge.getPlaybackStreamServiceProxy();

var postResult = playbackStreamProxy.getRecentStreamsForInitiatingPlayer(initiatingPlayerId, maxNumStreams);
if (postResult.status == 200) {
    // Success!
}
```

**Raw:**

```r
{
    "service": "playbackStream",
    "operation": "GET_RECENT_STREAMS_FOR_INITIATING_PLAYER",
    "data": {
        "initiatingPlayerId": "player",
        "maxNumStreams": 5
    }
}
```

<details>
<summary>JSON Response</summary>

```json
{
    "data": {
        "streams": [
            {
                "playbackStreamId": "6620a4e8-c4a8-4979-b827-0efa6a4a7435",
                "gameId": "10228",
                "initiatingPlayerId": "38ae8a44-1b24-4ad9-9bb4-a016bdfc6644",
                "targetPlayerId": "38ae8a44-1b24-4ad9-9bb4-a016bdfc6644",
                "status": "COMPLETE",
                "summary": {
                    "total": 5
                },
                "expiryTime": null,
                "createdAt": 1526580974204,
                "updatedAt": 1526581097133
            },
            {
                "playbackStreamId": "90802401-806c-4621-afda-7e11ec910ec4",
                "gameId": "10228",
                "initiatingPlayerId": "38ae8a44-1b24-4ad9-9bb4-a016bdfc6644",
                "targetPlayerId": "38ae8a44-1b24-4ad9-9bb4-a016bdfc6644",
                "status": "COMPLETE",
                "summary": {},
                "expiryTime": null,
                "createdAt": 1526578312706,
                "updatedAt": 1526578312706
            }
        ]
    },
    "status": 200
}
```

</details>


---

<!-- source: docs/api/2_capi/playbackstream/getrecentstreamsfortargetplayer.md -->
<!-- url: https://docs-internal.braincloudservers.com/api/capi/playbackstream/getrecentstreamsfortargetplayer -->

# GetRecentStreamsForTargetPlayer

Get recent streams for target player, optional parameter: targetPlayerId.

| Service | Operation |
| ------- | --------- |
| playbackStream | GET_RECENT_STREAMS_FOR_TARGET_PLAYER |

## Method Parameters

| Parameter      | Description                                        |
| -------------- | -------------------------------------------------- |
| targetPlayerId | The player that received the stream                |
| maxNumStreams  | The max number of stream to return in the response |

## Usage

**C#:**

```csharp
string targetPlayerId = "player";
int maxNumStreams = 5;
SuccessCallback successCallback = (response, cbObject) =>
{
    Debug.Log(string.Format("Success | {0}", response));
};
FailureCallback failureCallback = (status, code, error, cbObject) =>
{
    Debug.Log(string.Format("Failed | {0}  {1}  {2}", status, code, error));
};

_bc.PlaybackStreamService.GetRecentStreamsForTargetPlayer(targetPlayerId, maxNumStreams, successCallback, failureCallback);
```

**C++:**

```cpp
const char *targetPlayerId = "player";
int maxNumStreams = 5;

_bc->getPlaybackStreamService()->getRecentStreamsForTargetPlayer(targetPlayerId, maxNumStreams, this);
```

**Obj-C:**

```objectivec
NSString *targetPlayerId = @"player";
int maxNumStreams = 5;
BCCompletionBlock successBlock;      // define callback
BCErrorCompletionBlock failureBlock; // define callback

[[_bc playbackStreamService] getRecentStreamsForTargetPlayer:targetPlayerId
              maxNumStreams:maxNumStreams
            completionBlock:successBlock
       errorCompletionBlock:failureBlock
                   cbObject:nil];
```

**Java:**

```java
String targetPlayerId = "player";
int maxNumStreams = 5;
this; // implements IServerCallback

_bc.getPlaybackStreamService().getRecentStreamsForTargetPlayer(targetPlayerId, maxNumStreams, this);

public void serverCallback(ServiceName serviceName, ServiceOperation serviceOperation, JSONObject jsonData)
{
    System.out.print(String.format("Success | %s", jsonData.toString()));
}
public void serverError(ServiceName serviceName, ServiceOperation serviceOperation, int statusCode, int reasonCode, String jsonError)
{
    System.out.print(String.format("Failed | %d %d %s", statusCode,  reasonCode, jsonError.toString()));
}
```

**JavaScript:**

```javascript
var targetPlayerId = "player";
var maxNumStreams = 5;

_bc.playbackStream.getRecentStreamsForTargetPlayer(targetPlayerId, maxNumStreams, result =>
{
    var status = result.status;
    console.log(status + " : " + JSON.stringify(result, null, 2));
});
```

**Dart:**

```dart
var  targetPlayerId = "player";
var  maxNumStreams = 5;

ServerResponse result = await _bc.playbackStreamService.getRecentStreamsForTargetPlayer(targetPlayerId:targetPlayerId, maxNumStreams:maxNumStreams);

if (result.statusCode == 200) {
    print("Success");
} else {
    print("Failed ${result.error['status_message'] ?? result.error}");
}
```

**Roblox:**

```lua
local targetPlayerId = "player"
local maxNumStreams = 5

local callback = function(success, response)
    if success then
        print("Success")
    else
        print("Failed | " .. tostring(response.status_message))
    end
end

_bc.playbackStream:getRecentStreamsForTargetPlayer(targetPlayerId, maxNumStreams, callback)
```

**GDScript:**

```gdscript
var target_player_id = "player"
var max_num_streams = 5

var result = await _bc.playback_stream_service.get_recent_streams_for_target_player(target_player_id, max_num_streams)

if result.status == 200:
	print("Success")
else:
	print("Failed: %s" % result.status_message)
```

**Lua:**

```lua
local targetPlayerId = "player"
local maxNumStreams = 5

local callback = function(success, response)
    if success then
        print("Success")
    else
        print("Failed | " .. tostring(response.status_message))
    end
end

_bc.playbackStream:getRecentStreamsForTargetPlayer(targetPlayerId, maxNumStreams, callback)
```

**Cloud Code:**

```cfscript
var targetPlayerId = "player";
var maxNumStreams = 5;
var playbackStreamProxy = bridge.getPlaybackStreamServiceProxy();

var postResult = playbackStreamProxy.getRecentStreamsForTargetPlayer(targetPlayerId, maxNumStreams);
if (postResult.status == 200) {
    // Success!
}
```

**Raw:**

```r
{
    "service": "playbackStream",
    "operation": "GET_RECENT_STREAMS_FOR_TARGET_PLAYER",
    "data": {
        "targetPlayerId": "player",
        "maxNumStreams": 5
    }
}
```

<details>
<summary>JSON Response</summary>

```json
{
    "data": {
        "streams": [
            {
                "playbackStreamId": "6620a4e8-c4a8-4979-b827-0efa6a4a7435",
                "gameId": "10228",
                "initiatingPlayerId": "38ae8a44-1b24-4ad9-9bb4-a016bdfc6644",
                "targetPlayerId": "38ae8a44-1b24-4ad9-9bb4-a016bdfc6644",
                "status": "COMPLETE",
                "summary": {
                    "total": 5
                },
                "expiryTime": null,
                "createdAt": 1526580974204,
                "updatedAt": 1526582826462
            },
            {
                "playbackStreamId": "90802401-806c-4621-afda-7e11ec910ec4",
                "gameId": "10228",
                "initiatingPlayerId": "38ae8a44-1b24-4ad9-9bb4-a016bdfc6644",
                "targetPlayerId": "38ae8a44-1b24-4ad9-9bb4-a016bdfc6644",
                "status": "COMPLETE",
                "summary": {},
                "expiryTime": null,
                "createdAt": 1526578312706,
                "updatedAt": 1526582826463
            }
        ]
    },
    "status": 200
}
```

</details>


---

<!-- source: docs/api/2_capi/playbackstream/index.md -->
<!-- url: https://docs-internal.braincloudservers.com/api/capi/playbackstream -->

# Playback Stream

The **PlaybackStreamService** allows for the creation and replay of a series of events. A Stream can be created using the StartStream call.

One-Way Matches use Playback Streams to track the events of the One-Way Match.

### API Summary

### PlaybackStream

-   [StartStream](/api/capi/playbackstream/startstream) - Start a playback stream.
-   [ReadStream](/api/capi/playbackstream/readstream) - Read a playback stream.
-   [EndStream](/api/capi/playbackstream/endstream) - End a playback stream.
-   [DeleteStream](/api/capi/playbackstream/deletestream) - Delete a playback stream.
-   [GetRecentStreamsForInitiatingPlayer](/api/capi/playbackstream/getrecentstreamsforinitiatingplayer) - Get recent streams for initiating player, optional parameter: initiatingPlayerId.
-   [GetRecentStreamsForTargetPlayer](/api/capi/playbackstream/getrecentstreamsfortargetplayer) - Get recent streams for target player, optional parameter: targetPlayerId.
-   [AddEvent](/api/capi/playbackstream/addevent) - Add event to stream.
-   [ProtectStreamUntil](/api/capi/playbackstream/protectstreamuntil) - Protects a playback stream from being purged (but not deleted) for the given number of days (from now). If the number of days given is less than the normal purge interval days (from createdAt), the longer protection date is applied.


---

<!-- source: docs/api/2_capi/playbackstream/protectstreamuntil.md -->
<!-- url: https://docs-internal.braincloudservers.com/api/capi/playbackstream/protectstreamuntil -->

# ProtectStreamUntil

Protects a playback stream from being purged (but not deleted) for the given number of days (from now). If the number of days given is less than the normal purge interval days (from createdAt), the longer protection date is applied. Can only be called by users involved in the playback stream.

| Service | Operation |
| ------- | --------- |
| playbackStream | PROTECT_STREAM_UNTIL |

## Method Parameters

| Parameter        | Description                                                  |
| ---------------- | ------------------------------------------------------------ |
| playbackStreamId | Identifies the stream to protect.                            |
| numDays          | The number of days the stream is to be protected (from now). |

## Usage

**C#:**

```csharp
string playbackStreamId = "streamId";
int numDays = 365;

SuccessCallback successCallback = (response, cbObject) =>
{
    Debug.Log(string.Format("Success | {0}", response));
};
FailureCallback failureCallback = (status, code, error, cbObject) =>
{
    Debug.Log(string.Format("Failed | {0}  {1}  {2}", status, code, error));
};

_bc.PlaybackstreamService.ProtectStreamUntil(playbackStreamId, numDays, successCallback, failureCallback);
```

**C++:**

```cpp
const char *playbackStreamId = "streamId";
int numDays = 365;
_bc.getPlaybackstreamService().protectStreamUntil(playbackStreamId, numDays, this);
```

**Obj-C:**

```objectivec
NSString *playbackStreamId = @"streamId";
int numDays = 365;
BCCompletionBlock successBlock; // define callback
BCErrorCompletionBlock failureBlock; // define callback
[[_bc playbackStreamService] protectStreamUntil:
             playbackStreamId:playbackStreamId
                      numDays:numDays
              completionBlock:successBlock
         errorCompletionBlock:failureBlock
                     cbObject:nil]
```

**Java:**

```java
String playbackStreamId = "streamId";
int numDays = 365;
this; // implements IServerCallback
_bc.getPlaybackstreamService.protectStreamUntil(playbackStreamId, numDays, this);

public void serverCallback(ServiceName serviceName, ServiceOperation serviceOperation, JSONObject jsonData)
{
    System.out.print(String.format("Success | %s", jsonData.toString()));
}
public void serverError(ServiceName serviceName, ServiceOperation serviceOperation, int statusCode, int reasonCode, String jsonError)
{
    System.out.print(String.format("Failed | %d %d %s", statusCode,  reasonCode, jsonError.toString()));
}

```

**JavaScript:**

```javascript
var playbackStreamId = "streamId";
var numDays = 365;
_bc.playbackStream.protectStreamUntil(playbackStreamId, numDays, result =>
{
  var status = result.status;
  console.log(status + " : " + JSON.stringify(result, null, 2));
});
```

**Dart:**

```dart
var  playbackStreamId = "streamId";
var  numDays = 365;

ServerResponse result = await _bc.playbackStreamService.protectStreamUntil(playbackStreamId:playbackStreamId, numDays:numDays);

if (result.statusCode == 200) {
    print("Success");
} else {
    print("Failed ${result.error['status_message'] ?? result.error}");
}
```

**Roblox:**

```lua
local playbackStreamId = "streamId"
local numDays = 365

local callback = function(success, response)
    if success then
        print("Success")
    else
        print("Failed | " .. tostring(response.status_message))
    end
end

_bc.playbackStream:protectStreamUntil(playbackStreamId, numDays, callback)
```

**GDScript:**

```gdscript
N/A
```

**Lua:**

```lua
local playbackStreamId = "streamId"
local numDays = 365

local callback = function(success, response)
    if success then
        print("Success")
    else
        print("Failed | " .. tostring(response.status_message))
    end
end

_bc.playbackStream:protectStreamUntil(playbackStreamId, numDays, callback)
```

**Cloud Code:**

```cfscript
var playbackStreamId = "streamId";
var numDays = 365;
var playbackStreamProxy = bridge.getPlaybackStreamServiceProxy();

var postResult = playbackStreamProxy.protectStreamUntil(playbackStreamId, numDays);
```

**Raw:**

```r
{
    "service":"playbackStream",
    "operation":"PROTECT_STREAM_UNTIL",
    "data":{
        "playbackStreamId":"streamId",
        "numDays":365
    }
}
```

<details>
<summary>JSON Response</summary>

```json
{
    "data": {
        "protectedUntil": "2025-10-15 19:46:20"
    },
    "status": 200
}
```

</details>


---

<!-- source: docs/api/2_capi/playbackstream/readstream.md -->
<!-- url: https://docs-internal.braincloudservers.com/api/capi/playbackstream/readstream -->

# ReadStream

Reads a stream.

| Service | Operation |
| ------- | --------- |
| playbackStream | READ_STREAM |

## Method Parameters

| Parameter        | Description                   |
| ---------------- | ----------------------------- |
| playbackStreamId | Identifies the stream to read |

## Usage

**C#:**

```csharp
string playbackStreamId = "stream";
SuccessCallback successCallback = (response, cbObject) =>
{
    Debug.Log(string.Format("Success | {0}", response));
};
FailureCallback failureCallback = (status, code, error, cbObject) =>
{
    Debug.Log(string.Format("Failed | {0}  {1}  {2}", status, code, error));
};

_bc.PlaybackStreamService.ReadStream(playbackStreamId, successCallback, failureCallback);
```

**C++:**

```cpp
const char *playbackStreamId = "stream";

_bc->getPlaybackStreamService()->readStream(playbackStreamId, this);
```

**Obj-C:**

```objectivec
NSString *playbackStreamId = @"stream";
BCCompletionBlock successBlock;      // define callback
BCErrorCompletionBlock failureBlock; // define callback

[[_bc playbackStreamService] readStream:playbackStreamId
            completionBlock:successBlock
       errorCompletionBlock:failureBlock
                   cbObject:nil];
```

**Java:**

```java
String playbackStreamId = "stream";
this; // implements IServerCallback

_bc.getPlaybackStreamService().readStream(playbackStreamId, this);

public void serverCallback(ServiceName serviceName, ServiceOperation serviceOperation, JSONObject jsonData)
{
    System.out.print(String.format("Success | %s", jsonData.toString()));
}
public void serverError(ServiceName serviceName, ServiceOperation serviceOperation, int statusCode, int reasonCode, String jsonError)
{
    System.out.print(String.format("Failed | %d %d %s", statusCode,  reasonCode, jsonError.toString()));
}
```

**JavaScript:**

```javascript
var playbackStreamId = "stream";

_bc.playbackStream.readStream(playbackStreamId, result =>
{
    var status = result.status;
    console.log(status + " : " + JSON.stringify(result, null, 2));
});
```

**Dart:**

```dart
var  playbackStreamId = "stream";

ServerResponse result = await _bc.playbackStreamService.readStream(playbackStreamId:playbackStreamId);

if (result.statusCode == 200) {
    print("Success");
} else {
    print("Failed ${result.error['status_message'] ?? result.error}");
}
```

**Roblox:**

```lua
local playbackStreamId = "stream"

local callback = function(success, response)
    if success then
        print("Success")
    else
        print("Failed | " .. tostring(response.status_message))
    end
end

_bc.playbackStream:readStream(playbackStreamId, callback)
```

**GDScript:**

```gdscript
var playback_stream_id = "stream"

var result = await _bc.playback_stream_service.read_stream(playback_stream_id)

if result.status == 200:
	print("Success")
else:
	print("Failed: %s" % result.status_message)
```

**Lua:**

```lua
local playbackStreamId = "stream"

local callback = function(success, response)
    if success then
        print("Success")
    else
        print("Failed | " .. tostring(response.status_message))
    end
end

_bc.playbackStream:readStream(playbackStreamId, callback)
```

**Cloud Code:**

```cfscript
var playbackStreamId = "stream";
var playbackStreamProxy = bridge.getPlaybackStreamServiceProxy();

var postResult = playbackStreamProxy.readStream(playbackStreamId);
if (postResult.status == 200) {
    // Success!
}
```

**Raw:**

```r
{
    "service": "playbackStream",
    "operation": "READ_STREAM",
    "data": {
        "playbackStreamId": "a-stream-id"
    }
}
```

<details>
<summary>JSON Response</summary>

```json
{
    "data": {
        "playbackStreamId": "6620a4e8-c4a8-4979-b827-0efa6a4a7435",
        "initiatingPlayerId": "38ae8a44-1b24-4ad9-9bb4-a016bdfc6644",
        "targetPlayerId": "38ae8a44-1b24-4ad9-9bb4-a016bdfc6644",
        "status": "IN_PROGRESS",
        "summary": {
            "SUMMARY": "User moved back and spent coins on a potion.",
            "POINTS": 5
        },
        "initialSharedData": {
            "entities": [],
            "statistics": {}
        },
        "events": [
            {
                "MOVE": "FORWARD",
                "EVENT": "FOUND_COINS"
            },
            {
                "MOVE": "BACK",
                "EVENT": "SPENT_COINS",
                "ITEM_AQUIRED": "POTION"
            }
        ],
        "expiryTime": null,
        "createdAt": 1526580974204,
        "updatedAt": 1526581097133
    },
    "status": 200
}
```

</details>


---

<!-- source: docs/api/2_capi/playbackstream/startstream.md -->
<!-- url: https://docs-internal.braincloudservers.com/api/capi/playbackstream/startstream -->

# StartStream

Starts a stream.

| Service | Operation |
| ------- | --------- |
| playbackStream | START_STREAM |

## Method Parameters

| Parameter         | Description                                  |
| ----------------- | -------------------------------------------- |
| targetPlayerId    | The player to start a stream with            |
| includeSharedData | Whether to include shared data in the stream |

## Usage

**C#:**

```csharp
string targetPlayerId = "player";
bool includeSharedData = false;
SuccessCallback successCallback = (response, cbObject) =>
{
    Debug.Log(string.Format("Success | {0}", response));
};
FailureCallback failureCallback = (status, code, error, cbObject) =>
{
    Debug.Log(string.Format("Failed | {0}  {1}  {2}", status, code, error));
};

_bc.PlaybackStreamService.StartStream(targetPlayerId, includeSharedData, successCallback, failureCallback);
```

**C++:**

```cpp
const char *targetPlayerId = "player";
bool includeSharedData = false;
_bc->getPlaybackStreamService()->startStream(targetPlayerId, includeSharedData, this);
```

**Obj-C:**

```objectivec
NSString *targetPlayerId = @"player";
bool includeSharedData = false;
BCCompletionBlock successBlock;      // define callback
BCErrorCompletionBlock failureBlock; // define callback

[[_bc playbackStreamService] startStream:targetPlayerId
          includeSharedData:includeSharedData
            completionBlock:successBlock
       errorCompletionBlock:failureBlock
                   cbObject:nil];
```

**Java:**

```java
String targetPlayerId = "player";
boolean includeSharedData = false;
this; // implements IServerCallback

_bc.getPlaybackStreamService().startStream(targetPlayerId, includeSharedData, this);

public void serverCallback(ServiceName serviceName, ServiceOperation serviceOperation, JSONObject jsonData)
{
    System.out.print(String.format("Success | %s", jsonData.toString()));
}
public void serverError(ServiceName serviceName, ServiceOperation serviceOperation, int statusCode, int reasonCode, String jsonError)
{
    System.out.print(String.format("Failed | %d %d %s", statusCode,  reasonCode, jsonError.toString()));
}
```

**JavaScript:**

```javascript
var targetPlayerId = "player";
var includeSharedData = false;

_bc.playbackStream.startStream(targetPlayerId, includeSharedData, result =>
{
    var status = result.status;
    console.log(status + " : " + JSON.stringify(result, null, 2));
});
```

**Dart:**

```dart
var  targetPlayerId = "player";
var  includeSharedData = false;

ServerResponse result = await _bc.playbackStreamService.startStream(targetPlayerId:targetPlayerId, includeSharedData:includeSharedData);

if (result.statusCode == 200) {
    print("Success");
} else {
    print("Failed ${result.error['status_message'] ?? result.error}");
}
```

**Roblox:**

```lua
local targetPlayerId = "player"
local includeSharedData = false

local callback = function(success, response)
    if success then
        print("Success")
    else
        print("Failed | " .. tostring(response.status_message))
    end
end

_bc.playbackStream:startStream(targetPlayerId, includeSharedData, callback)
```

**GDScript:**

```gdscript
var target_player_id = "player"
var include_shared_data = false

var result = await _bc.playback_stream_service.start_stream(target_player_id, include_shared_data)

if result.status == 200:
	print("Success")
else:
	print("Failed: %s" % result.status_message)
```

**Lua:**

```lua
local targetPlayerId = "player"
local includeSharedData = false

local callback = function(success, response)
    if success then
        print("Success")
    else
        print("Failed | " .. tostring(response.status_message))
    end
end

_bc.playbackStream:startStream(targetPlayerId, includeSharedData, callback)
```

**Cloud Code:**

```cfscript
var targetPlayerId = "player";
var includeSharedData = false;
var playbackStreamProxy = bridge.getPlaybackStreamServiceProxy();

var postResult = playbackStreamProxy.startStream(targetPlayerId, includeSharedData);
if (postResult.status == 200) {
    // Success!
}
```

**Raw:**

```r
{
    "service": "playbackStream",
    "operation": "START_STREAM",
    "data": {
        "targetPlayerId": "player",
        "includeSharedData": false
    }
}
```

<details>
<summary>JSON Response</summary>

```json
{
    "status": 200,
    "data": {
        "playbackStreamId": "b8da4619-2ddc-4184-b654-cd11d12a3275",
        "initiatingPlayerId": "198bcafcd-6e84-4c30-9f6e-3f9f016440c6",
        "targetPlayerId": "a6943c74-6655-4245-8b2b-13bb908d3f88",
        "status": "STARTED",
        "summary": {},
        "initialSharedData": {
            "entities": [],
            "statistics": {}
        },
        "events": [],
        "createdAt": 1425481184200,
        "updatedAt": 1425481184200
    }
}
```

</details>


---

<!-- source: docs/api/2_capi/playbackstream/sysaddevent.md -->
<!-- url: https://docs-internal.braincloudservers.com/api/capi/playbackstream/sysaddevent -->

# SysAddEvent

Add event to stream.

| Service | Operation |
| ------- | --------- |
| playbackStream | SYS_ADD_EVENT |

## Method Parameters

| Parameter        | Description                            |
| ---------------- | -------------------------------------- |
| profileId        | The player adding an event.            |
| playbackStreamId | Identifies the stream to read.         |
| eventData        | Describes the event.                   |
| summary          | Current summary data as of this event. |

## Usage

**C#:**

```csharp
// Cloud Code only. To view example, switch to the Cloud Code tab
```

**C++:**

```cpp
// Cloud Code only. To view example, switch to the Cloud Code tab
```

**Obj-C:**

```objectivec
// Cloud Code only. To view example, switch to the Cloud Code tab
```

**Java:**

```java
// Cloud Code only. To view example, switch to the Cloud Code tab
```

**JavaScript:**

```javascript
// Cloud Code only. To view example, switch to the Cloud Code tab
```

**Dart:**

```dart
// Cloud Code only. To view example, switch to the Cloud Code tab
```

**Roblox:**

```lua
-- N/A
```

**GDScript:**

```gdscript
N/A
```

**Lua:**

```lua
-- Cloud Code only. To view example, switch to the Cloud Code tab
```

**Cloud Code:**

```cfscript
var profileId = "player";
var playbackStreamId = "stream";
var eventData = {
    "value": 1
};
var summary = {
    "total": 5
};
var playbackStreamProxy = bridge.getPlaybackStreamServiceProxy();

var postResult = playbackStreamProxy.sysAddEvent(profileId, playbackStreamId, eventData, summary);
```

**Raw:**

```r
{
    "service":"playbackStream",
    "operation":"SYS_ADD_EVENT",
    "data":{
        "profileId":"player",
        "playbackStreamId":"stream",
        "eventData":{
            "value":1
        },
        "summary":{
            "total":5
        }
    }
}
```

<details>
<summary>JSON Response</summary>

```json
{
    "status": 200,
    "data": null
}
```

</details>


---

<!-- source: docs/api/2_capi/playbackstream/sysdeletestream.md -->
<!-- url: https://docs-internal.braincloudservers.com/api/capi/playbackstream/sysdeletestream -->

# SysDeleteStream

Delete a playback stream.

| Service | Operation |
| ------- | --------- |
| playbackStream | SYS_DELETE_STREAM |

## Method Parameters

| Parameter        | Description                      |
| ---------------- | -------------------------------- |
| profileId        | The player deleting the stream.  |
| playbackStreamId | Identifies the stream to delete. |

## Usage

**C#:**

```csharp
// Cloud Code only. To view example, switch to the Cloud Code tab
```

**C++:**

```cpp
// Cloud Code only. To view example, switch to the Cloud Code tab
```

**Obj-C:**

```objectivec
// Cloud Code only. To view example, switch to the Cloud Code tab
```

**Java:**

```java
// Cloud Code only. To view example, switch to the Cloud Code tab
```

**JavaScript:**

```javascript
// Cloud Code only. To view example, switch to the Cloud Code tab
```

**Dart:**

```dart
// Cloud Code only. To view example, switch to the Cloud Code tab
```

**Roblox:**

```lua
-- N/A
```

**GDScript:**

```gdscript
N/A
```

**Lua:**

```lua
-- Cloud Code only. To view example, switch to the Cloud Code tab
```

**Cloud Code:**

```cfscript
var profileId = "player";
var playbackStreamId = "stream";
var playbackStreamProxy = bridge.getPlaybackStreamServiceProxy();

var postResult = playbackStreamProxy.sysDeleteStream(profileId, playbackStreamId);
```

**Raw:**

```r
{
    "service":"playbackStream",
    "operation":"SYS_DELETE_STREAM",
    "data":{
        "profileId":"player",
        "playbackStreamId":"stream"
    }
}
```

<details>
<summary>JSON Response</summary>

```json
{
    "status": 200,
    "data": null
}
```

</details>


---

<!-- source: docs/api/2_capi/playbackstream/sysendstream.md -->
<!-- url: https://docs-internal.braincloudservers.com/api/capi/playbackstream/sysendstream -->

# SysEndStream

End a playback stream.

| Service | Operation |
| ------- | --------- |
| playbackStream | SYS_END_STREAM |

## Method Parameters

| Parameter        | Description                   |
| ---------------- | ----------------------------- |
| profileId        | The player ending the stream. |
| playbackStreamId | Identifies the stream to end. |

## Usage

**C#:**

```csharp
// Cloud Code only. To view example, switch to the Cloud Code tab
```

**C++:**

```cpp
// Cloud Code only. To view example, switch to the Cloud Code tab
```

**Obj-C:**

```objectivec
// Cloud Code only. To view example, switch to the Cloud Code tab
```

**Java:**

```java
// Cloud Code only. To view example, switch to the Cloud Code tab
```

**JavaScript:**

```javascript
// Cloud Code only. To view example, switch to the Cloud Code tab
```

**Dart:**

```dart
// Cloud Code only. To view example, switch to the Cloud Code tab
```

**Roblox:**

```lua
-- N/A
```

**GDScript:**

```gdscript
N/A
```

**Lua:**

```lua
-- Cloud Code only. To view example, switch to the Cloud Code tab
```

**Cloud Code:**

```cfscript
var profileId = "player";
var playbackStreamId = "stream";
var playbackStreamProxy = bridge.getPlaybackStreamServiceProxy();

var postResult = playbackStreamProxy.sysEndStream(profileId, playbackStreamId);
```

**Raw:**

```r
{
    "service":"playbackStream",
    "operation":"SYS_END_STREAM",
    "data":{
        "profileId":"player",
        "playbackStreamId":"stream"
    }
}
```

<details>
<summary>JSON Response</summary>

```json
{
    "status": 200,
    "data": null
}
```

</details>


---

<!-- source: docs/api/2_capi/playbackstream/sysprotectstreamuntil.md -->
<!-- url: https://docs-internal.braincloudservers.com/api/capi/playbackstream/sysprotectstreamuntil -->

# SysProtectStreamUntil

Protects a playback stream from being purged (but not deleted) for the given number of days (from now). If the number of days given is less than the normal purge interval days (from createdAt), the longer protection date is applied.

| Service | Operation |
| ------- | --------- |
| playbackStream | SYS_PROTECT_STREAM_UNTIL |

## Method Parameters

| Parameter        | Description                                                  |
| ---------------- | ------------------------------------------------------------ |
| playbackStreamId | Identifies the stream to protect.                            |
| numDays          | The number of days the stream is to be protected (from now). |

## Usage

**C#:**

```csharp
// Cloud Code only. To view example, switch to the Cloud Code tab
```

**C++:**

```cpp
// Cloud Code only. To view example, switch to the Cloud Code tab
```

**Obj-C:**

```objectivec
// Cloud Code only. To view example, switch to the Cloud Code tab
```

**Java:**

```java
// Cloud Code only. To view example, switch to the Cloud Code tab
```

**JavaScript:**

```javascript
// Cloud Code only. To view example, switch to the Cloud Code tab
```

**Dart:**

```dart
// Cloud Code only. To view example, switch to the Cloud Code tab
```

**Roblox:**

```lua
-- N/A
```

**GDScript:**

```gdscript
N/A
```

**Lua:**

```lua
-- Cloud Code only. To view example, switch to the Cloud Code tab
```

**Cloud Code:**

```cfscript
var playbackStreamId = "streamId";
var numDays = 365;
var playbackStreamProxy = bridge.getPlaybackStreamServiceProxy();

var postResult = playbackStreamProxy.sysProtectStreamUntil(playbackStreamId, numDays);
```

**Raw:**

```r
{
    "service":"playbackStream",
    "operation":"SYS_PROTECT_STREAM_UNTIL",
    "data":{
        "playbackStreamId":"streamId",
        "numDays":365
    }
}
```

<details>
<summary>JSON Response</summary>

```json
{
    "data": {
        "protectedUntil": "2025-10-15 19:46:20"
    },
    "status": 200
}
```

</details>


---

<!-- source: docs/api/2_capi/playbackstream/sysreadstream.md -->
<!-- url: https://docs-internal.braincloudservers.com/api/capi/playbackstream/sysreadstream -->

# SysReadStream

Read a playback stream.

| Service | Operation |
| ------- | --------- |
| playbackStream | SYS_READ_STREAM |

## Method Parameters

| Parameter        | Description                    |
| ---------------- | ------------------------------ |
| playbackStreamId | Identifies the stream to read. |

## Usage

**C#:**

```csharp
// Cloud Code only. To view example, switch to the Cloud Code tab
```

**C++:**

```cpp
// Cloud Code only. To view example, switch to the Cloud Code tab
```

**Obj-C:**

```objectivec
// Cloud Code only. To view example, switch to the Cloud Code tab
```

**Java:**

```java
// Cloud Code only. To view example, switch to the Cloud Code tab
```

**JavaScript:**

```javascript
// Cloud Code only. To view example, switch to the Cloud Code tab
```

**Dart:**

```dart
// Cloud Code only. To view example, switch to the Cloud Code tab
```

**Roblox:**

```lua
-- N/A
```

**GDScript:**

```gdscript
N/A
```

**Lua:**

```lua
-- Cloud Code only. To view example, switch to the Cloud Code tab
```

**Cloud Code:**

```cfscript
var playbackStreamId = "a-stream-id";
var playbackStreamProxy = bridge.getPlaybackStreamServiceProxy();

var postResult = playbackStreamProxy.sysReadStream(playbackStreamId);
```

**Raw:**

```r
{
    "service":"playbackStream",
    "operation":"SYS_READ_STREAM",
    "data":{
        "playbackStreamId":"a-stream-id"
    }
}
```

<details>
<summary>JSON Response</summary>

```json
{
    "data": {
        "playbackStreamId": "3f9799c1-67db-46bf-87b1-ff3d6ef54090",
        "initiatingPlayerId": "c5ecdbda-5f91-41a9-96aa-174f412f7657",
        "targetPlayerId": "c5ecdbda-5f91-41a9-96aa-174f412f7657",
        "status": "IN_PROGRESS",
        "summary": {
            "total": 5
        },
        "initialSharedData": {
            "entities": [],
            "statistics": {}
        },
        "events": [
            {
                "value": 1
            }
        ],
        "expiryTime": null,
        "createdAt": 1717016614483,
        "updatedAt": 1717016652518
    },
    "status": 200
}
```

</details>


---

<!-- source: docs/api/2_capi/playbackstream/sysstartstream.md -->
<!-- url: https://docs-internal.braincloudservers.com/api/capi/playbackstream/sysstartstream -->

# SysStartStream

Start a playback stream.

| Service | Operation |
| ------- | --------- |
| playbackStream | SYS_START_STREAM |

## Method Parameters

| Parameter         | Description                                   |
| ----------------- | --------------------------------------------- |
| profileId         | The player starting the stream.               |
| targetProfileId   | The player to start a stream with.            |
| includeSharedData | Whether to include shared data in the stream. |

## Usage

**C#:**

```csharp
// Cloud Code only. To view example, switch to the Cloud Code tab
```

**C++:**

```cpp
// Cloud Code only. To view example, switch to the Cloud Code tab
```

**Obj-C:**

```objectivec
// Cloud Code only. To view example, switch to the Cloud Code tab
```

**Java:**

```java
// Cloud Code only. To view example, switch to the Cloud Code tab
```

**JavaScript:**

```javascript
// Cloud Code only. To view example, switch to the Cloud Code tab
```

**Dart:**

```dart
// Cloud Code only. To view example, switch to the Cloud Code tab
```

**Roblox:**

```lua
-- N/A
```

**GDScript:**

```gdscript
N/A
```

**Lua:**

```lua
-- Cloud Code only. To view example, switch to the Cloud Code tab
```

**Cloud Code:**

```cfscript
var profileId = "player";
var targetProfileId = "player";
var includeSharedData = False;
var playbackStreamProxy = bridge.getPlaybackStreamServiceProxy();

var postResult = playbackStreamProxy.sysStartStream(profileId, targetProfileId, includeSharedData);
```

**Raw:**

```r
{
    "service":"playbackStream",
    "operation":"SYS_START_STREAM",
    "data":{
        "profileId":"player",
        "targetProfileId":"player",
        "includeSharedData":false
    }
}
```

<details>
<summary>JSON Response</summary>

```json
{
    "status": 200,
    "data": {
        "playbackStreamId": "b8da4619-2ddc-4184-b654-cd11d12a3275",
        "initiatingPlayerId": "198bcafcd-6e84-4c30-9f6e-3f9f016440c6",
        "targetPlayerId": "a6943c74-6655-4245-8b2b-13bb908d3f88",
        "status": "STARTED",
        "summary": {},
        "initialSharedData": {
            "entities": [],
            "statistics": {}
        },
        "events": [],
        "createdAt": 1425481184200,
        "updatedAt": 1425481184200
    }
}
```

</details>


---

<!-- source: docs/api/4_s2s/playbackstream/index.md -->
<!-- url: https://docs-internal.braincloudservers.com/api/s2s/playbackstream -->

# Playback Stream

The **PlaybackStreamService** allows for the creation and replay of a series of events. A Stream can be created using the StartStream call.

One-Way Matches use Playback Streams to track the events of the One-Way Match.

### API Summary

### PlaybackStream

-   [SysStartStream](/api/capi/playbackstream/sysstartstream) - Start a playback stream.
-   [SysReadStream](/api/capi/playbackstream/sysreadstream) - Read a playback stream.
-   [SysEndStream](/api/capi/playbackstream/sysendstream) - End a playback stream.
-   [SysDeleteStream](/api/capi/playbackstream/sysdeletestream) - Delete a playback stream.
-   [SysAddEvent](/api/capi/playbackstream/sysaddevent) - Add event to stream.
-   [SysProtectStreamUntil](/api/capi/playbackstream/sysprotectstreamuntil) - Protects a playback stream from being purged (but not deleted) for the given number of days (from now). If the number of days given is less than the normal purge interval days (from createdAt), the longer protection date is applied.

> **Tip:** All the client APIs that the names beigin with <strong>"Sys"</strong> <em>are</em> also available to S2S.
> For the usages of the S2S playbackStream APIs (if they are not listed at this section),
> refer to brainCloud client [playbackStream](/api/capi/playbackStream) APIs.
