---
# System prepended metadata

title: 3Speak.tv API Usage Guide

---

# 3Speak.tv API Usage Guide

## How to log in?

- Send a get request
- https://studio.3speak.tv/mobile/login?username=sagarkothari88
- Here replace `sagarkothari88` with other hive username.
- In response, you'll get encoded memo.
- Decode it using user's private posting key
- You can use [HiveKeychains's `requestVerifyKey` method](requestVerifyKey) to decode it.
- If you're able to decode it, you're considered logged in.
- This is JWT token. Use it in the headers of next requests
- ``'Authorization: Bearer DecodedToken'``

## How to get all videos uploaded by a user?

- API Endpoint - https://studio.3speak.tv/mobile/api/my-videos
- HTTP Headers
    - Content-Type: application/json
    - Authorization: Bearer DecodedJWToken
- HTTP Method - GET
- In response, you'll get an array of video objects
- Please review the `status` attribute carefully.
- It can have following values
    - `uploaded` - 0 - video was just uploaded
    - `encoding_queued` - 1 - video is now queued for encoding
    - `encoding` - 2 - video is now being encoded by encoder node
    - `encoding_failed` - 3 - video encoding failed after 5 attempts from different encoder nodes.
    - `deleted` - 4 - user can mark this video as deleted.
    - `publish_manual` - 5 - video is ready to be published.
    - `published` - 6 - video was published.

## How to upload Video / Thumbnail to 3Speak Infra?

- https://uploads.3speak.tv/files
- Use above URL to initiate tus connection.
- https://tus.io/
- https://github.com/tus/tus-js-client
- Use above specified TUS library to upload content using Resumable upload protocol.
- Upon hitting the `onComplete` method of TUS, Client gets a url
```
onSuccess: function() {
    console.log("Download %s from %s", upload.file.name, upload.url)
}
```
- Grab the Upload URL & replace it with 3Speak infra URL.

```
let fileUrl = upload.url.replace('https://uploads.3speak.tv/files, '')
```

## Create a 3Speak Video Object

- Once done uploading the video, grab the upload url as specified in previous step.
- Use following API to create a 3Speak Video Object
- Request body as json
```
{
    'filename': filename, // string
    'oFilename': oFilename, // string
    'size': size, // int in bytes
    'duration': duration, // int in seconds
    'thumbnail': thumbnail, // string - fileUrl specified above
    'owner': owner, // string - hive username
}
```
- API Endpoint - https://studio.3speak.tv/mobile/api/upload_info?app=ecency
- queryParam - set `app` = `yourFancyAppName`
- HTTP Headers
    - Content-Type: application/json
    - Authorization: Bearer DecodedJWToken
- HTTP Method - POST
- In response, You'll get the Video Object.

## Update MetaData of Video

- Request body as json
```
{
    'videoid': videoid, // String - you get this from video object
    'title': title, // String
    'description': description, // String
    'isNsfwContent': false,
    'tags': tags,  // String - comma separated
    'thumbnail': thumbnail, // String - fileUrl specified above
}
```
- API Endpoint - https://studio.3speak.tv/mobile/api/update_info
- HTTP Headers
    - Content-Type: application/json
    - Authorization: Bearer DecodedJWToken
- HTTP Method - POST

## Publishing on Hive

- Video Status
    - You can use any of the video with status `publish_manual`.
- Permlink
    - Use the permlink from the video object while publishing on hive.
- Bebeficiaries
    - Make sure to add all beneficiaries specified in the video object.
    - You'll find an attribute called beneficiaries
    - Also, don't forget to add following beneficiaries
        - spk.beneficiary - 900 weight (9.0%)
        - threespeakleader - 100 weight (1.0%)
    - In following example, you can see that you're suppose to set 1.00% beneficiary to vaultec as he encoded the video.
```
"beneficiaries": "[{\"account\":\"vaultec\",\"weight\":100,\"src\":\"ENCODER_PAY\"}]",
```

- Making Video available
    - Once you publish the post on hive, use following API to make the video available & playable.
    - Make sure that the post is available via Hive RPC nodes.
    - This API will verify if post contains right set of beneficiaries or not.
    - Upon finding valid beneficiaries, 3Speak will make the video available & playable.
- Request body as json
```
{
    'videoId': videoid,
}
```
- API Endpoint - https://studio.3speak.tv/mobile/api/my-videos/iPublished
- HTTP Headers
    - Content-Type: application/json
    - Authorization: Bearer DecodedJWToken
- HTTP Method - POST