Your videos. Your workflow. Our API.

Upload, organise and deliver video from your own applications. Choose the API that fits your integration.

For existing integrations: familiar query parameters and Doodstream response formats.

Base URL
https://api.streamvault.example/api
Authentication
?key=YOUR_API_KEY
Responses
Doodstream envelope
Rate limit
10 requests per second

Quickstart

  1. 1Copy your API key from your account settings.
  2. 2Paste it into the console below and send account/info.
  3. 3Moving from Doodstream? Point your existing base URL at https://api.streamvault.example/api. Nothing else changes.

Authentication

Pass your key as the key query parameter on every request. Rotating it in Settings invalidates the old key immediately, so treat it like a password and keep it on your server.

HTTPS and API key safety

Send every API and upload request directly over HTTPS. Do not send a key to an HTTP URL and rely on a redirect. The example hostname is a placeholder unless this site has a public API origin configured.

Legacy puts the key in the URL. Keep it out of browser links, screenshots and access logs. Prefer the Latest API’s Authorization header for new integrations. Local HTTP is for isolated development only.

Respect the fair usage limits. For integration help, visit Support.

Responses and errors

Every response uses the same envelope. Like Doodstream, errors also return HTTP 200, so check status in the body, not the HTTP code.

{
  "msg": "OK",
  "server_time": "2026-10-14 09:12:44",
  "status": 200,
  "result": "…"
}
Error statuses
statusmsgMeaning
403No API key passedThe key parameter is missing.
403Wrong AuthThe key is wrong or was rotated.
400A message naming the parameterA required parameter is missing or invalid.
404A not-found messageThe file or folder does not exist in your account.
429Rate limit messageMore than 10 requests in a second. Retry after the Retry-After header.

Rate limits

Each account can make 10 requests per second. Over the limit, the body carries status "429" and the response includes a Retry-After header. Wait that many seconds and retry.

API console

Requests run against your real account. Read-only calls are safe to try; calls marked as changing your account do exactly that.

Kept in this browser tab only and sent with each test request.

Balance, storage used and premium expiry for the key’s account.

No parameters.

Response
Send a request to see the live response.
curl "https://api.streamvault.example/api/account/info?key=$API_KEY"

Endpoints

Account

GET/api/account/info

Balance, storage used and premium expiry for the key’s account.

Only the key.

Example response

{
  "msg": "OK",
  "server_time": "2026-10-14 09:12:44",
  "status": 200,
  "result": {
    "email": "you@example.com",
    "balance": "12.48510",
    "storage_used": "48318382080",
    "storage_left": 166430781440,
    "premim_expire": ""
  }
}

GET/api/account/stats

Daily views, downloads and earnings.

last
Number of recent days to return.
from_date
Start day, YYYY-MM-DD. Use with to_date instead of last.
to_date
End day, YYYY-MM-DD.

Example response

{
  "msg": "OK",
  "server_time": "2026-10-14 09:12:44",
  "status": 200,
  "result": [
    {
      "day": "2026-10-13",
      "views": "1840",
      "downloads": "22",
      "profit_views": "4.21000",
      "profit_downloads": "0.08000",
      "profit_refs": "0.00000",
      "profit_total": "4.29000"
    }
  ]
}

GET/api/dmca/list

Files that were reported or disabled after a copyright notice.

page
Page number, starting at 1.
per_page
Results per page.

Example response

{
  "msg": "OK",
  "server_time": "2026-10-14 09:12:44",
  "status": 200,
  "result": [
    {
      "file_code": "k2x9fj3mq7",
      "fld_id": "0",
      "protected_embed": "/e/7hq2…",
      "protected_download": "/d/m1c8…",
      "reported_on": "2026-10-10 14:02:11",
      "disabled_on": ""
    }
  ]
}

Upload

GET/api/upload/server

Returns the URL to POST a multipart upload to, with fields api_key and file.

Only the key.

Example response

{
  "msg": "OK",
  "server_time": "2026-10-14 09:12:44",
  "status": 200,
  "result": "https://upload.example.com/upload/01"
}

Remote upload

GET/api/upload/urlChanges data

Queue a remote URL for download into your account.

urlrequired
Direct link to the video file.
fld_id
Folder to place the file in.
new_title
Title for the new file.

Example response

{
  "msg": "OK",
  "server_time": "2026-10-14 09:12:44",
  "status": 200,
  "new_title": "Summer trip",
  "total_slots": "20",
  "used_slots": "1",
  "result": {
    "filecode": "k2x9fj3mq7"
  }
}

GET/api/urlupload/list

Your queued and finished remote uploads.

Only the key.

Example response

{
  "msg": "OK",
  "server_time": "2026-10-14 09:12:44",
  "status": 200,
  "result": [
    {
      "file_code": "k2x9fj3mq7",
      "remote_url": "https://example.com/video.mp4",
      "status": "working",
      "bytes_total": "734003200",
      "bytes_downloaded": "312475648",
      "folder_id": "0",
      "title": "Summer trip",
      "error_msg": null,
      "created": "2026-10-14 09:10:02"
    }
  ]
}

GET/api/urlupload/status

Progress of a single remote upload.

file_coderequired
Code returned by upload/url.

Example response

{
  "msg": "OK",
  "server_time": "2026-10-14 09:12:44",
  "status": 200,
  "result": [
    {
      "file_code": "k2x9fj3mq7",
      "remote_url": "https://example.com/video.mp4",
      "status": "completed",
      "bytes_total": "734003200",
      "bytes_downloaded": "734003200",
      "folder_id": "0",
      "title": "Summer trip",
      "error_msg": null,
      "created": "2026-10-14 09:10:02"
    }
  ]
}

GET/api/urlupload/slots

Remote upload slots in use and available.

Only the key.

Example response

{
  "msg": "OK",
  "server_time": "2026-10-14 09:12:44",
  "status": 200,
  "total_slots": "20",
  "used_slots": "1"
}

GET/api/urlupload/actionsChanges data

Restart or clear failed jobs, clear the queue, or delete one job.

restart_errors
Set to 1 to retry failed jobs.
clear_errors
Set to 1 to remove failed jobs.
clear_all
Set to 1 to remove every job.
delete_code
Remove one job by file code.

Example response

{
  "msg": "Errors restarted",
  "server_time": "2026-10-14 09:12:44",
  "status": 200
}

Files

GET/api/file/list

List files, newest first.

fld_id
Only files in this folder.
page
Page number, starting at 1.
per_page
Results per page.
created
Only newer files: a date (YYYY-MM-DD, optional HH:MM:SS) or a number of minutes.

Example response

{
  "msg": "OK",
  "server_time": "2026-10-14 09:12:44",
  "status": 200,
  "result": {
    "total_pages": 3,
    "results": 20,
    "results_total": "57",
    "files": [
      {
        "file_code": "k2x9fj3mq7",
        "title": "Summer trip",
        "download_url": "https://…/d/k2x9fj3mq7",
        "single_img": "https://…/k2x9fj3mq7.jpg",
        "canplay": 1,
        "length": "642",
        "views": "1840",
        "uploaded": "2026-10-12 08:14:02",
        "public": "1",
        "fld_id": "0"
      }
    ]
  }
}

GET/api/file/info

Metadata, images and playability for one or more files.

file_coderequired
One code, or several separated by commas.

Example response

{
  "msg": "OK",
  "server_time": "2026-10-14 09:12:44",
  "status": 200,
  "result": [
    {
      "status": 200,
      "filecode": "k2x9fj3mq7",
      "title": "Summer trip",
      "fld_id": "0",
      "protected_embed": "/e/7hq2…",
      "protected_dl": "/d/m1c8…",
      "single_img": "https://…/k2x9fj3mq7.jpg",
      "thumb_img": "https://…/k2x9fj3mq7_t.jpg",
      "splash_img": "https://…/k2x9fj3mq7_xt.jpg",
      "canplay": 1,
      "size": "734003200",
      "views": "1840",
      "length": "642",
      "uploaded": "2026-10-12 08:14:02",
      "last_view": "2026-10-14 08:59:40"
    }
  ]
}

GET/api/file/check

Whether files exist and are active.

file_coderequired
One code, or several separated by commas.

Example response

{
  "msg": "OK",
  "server_time": "2026-10-14 09:12:44",
  "status": 200,
  "result": [
    {
      "filecode": "k2x9fj3mq7",
      "status": "Active"
    }
  ]
}

GET/api/file/image

Thumbnail and splash image URLs.

file_coderequired
One code, or several separated by commas.

Example response

{
  "msg": "OK",
  "server_time": "2026-10-14 09:12:44",
  "status": 200,
  "result": [
    {
      "status": 200,
      "filecode": "k2x9fj3mq7",
      "title": "Summer trip",
      "single_img": "https://…/k2x9fj3mq7.jpg",
      "thumb_img": "https://…/k2x9fj3mq7_t.jpg",
      "splash_img": "https://…/k2x9fj3mq7_xt.jpg"
    }
  ]
}

GET/api/file/renameChanges data

Change a file’s title.

file_coderequired
File to rename.
titlerequired
New title.

Example response

{
  "msg": "OK",
  "server_time": "2026-10-14 09:12:44",
  "status": 200,
  "result": "true"
}

GET/api/file/moveChanges data

Move a file to another folder, or to the root when fld_id is empty.

file_coderequired
File to move.
fld_id
Destination folder.

Example response

{
  "msg": "OK",
  "server_time": "2026-10-14 09:12:44",
  "status": 200,
  "result": "true"
}

GET/api/file/cloneChanges data

Copy a public file into your account without re-uploading it.

file_coderequired
Public file to copy.
fld_id
Folder for the copy.

Example response

{
  "msg": "OK",
  "server_time": "2026-10-14 09:12:44",
  "status": 200,
  "result": {
    "filecode": "p8r2ma0zt1",
    "embed_url": "https://…/e/p8r2ma0zt1",
    "download_url": "https://…/d/p8r2ma0zt1",
    "protected_embed": "https://…/e/c4n7…",
    "protected_download": "https://…/d/q0w5…"
  }
}

GET/api/search/videos

Search your files by title.

search_termrequired
Words to match.

Example response

{
  "msg": "OK",
  "server_time": "2026-10-14 09:12:44",
  "status": 200,
  "result": [
    {
      "status": 200,
      "filecode": "k2x9fj3mq7",
      "title": "Summer trip",
      "fld_id": "0",
      "protected_embed": "/e/7hq2…",
      "protected_dl": "/d/m1c8…",
      "single_img": "https://…/k2x9fj3mq7.jpg",
      "thumb_img": "https://…/k2x9fj3mq7_t.jpg",
      "splash_img": "https://…/k2x9fj3mq7_xt.jpg",
      "canplay": 1,
      "size": "734003200",
      "views": "1840",
      "length": "642",
      "uploaded": "2026-10-12 08:14:02",
      "last_view": "2026-10-14 08:59:40"
    }
  ]
}

Folders

GET/api/folder/list

Folders and files inside a folder.

fld_id
Folder to list; the root when empty.
only_folders
Set to 1 to skip files.

Example response

{
  "msg": "OK",
  "server_time": "2026-10-14 09:12:44",
  "status": 200,
  "result": {
    "folders": [
      {
        "name": "Travel",
        "code": "a8f2k1",
        "fld_id": "12"
      }
    ],
    "files": []
  }
}

GET/api/folder/createChanges data

Create a folder.

namerequired
Folder name.
parent_id
Parent folder; the root when empty.

Example response

{
  "msg": "OK",
  "server_time": "2026-10-14 09:12:44",
  "status": 200,
  "result": {
    "fld_id": "13"
  }
}

GET/api/folder/renameChanges data

Rename a folder.

fld_idrequired
Folder to rename.
namerequired
New name.

Example response

{
  "msg": "OK",
  "server_time": "2026-10-14 09:12:44",
  "status": 200,
  "result": "true"
}

Uploading files

Ask for an upload server, then POST the file to it as multipart form data with your key in api_key. The response lists the new file with its embed and download links.

SERVER=$(curl -s "https://api.streamvault.example/api/upload/server?key=$API_KEY" | jq -r .result)
curl -F "api_key=$API_KEY" -F "file=@video.mp4" "$SERVER"

Files on another server? Use upload/url to queue a remote download instead.

Embed parameters

Every file plays at /e/{file_code}. Add these query parameters to customise the player; they match Doodstream’s.

c_poster
Poster image URL shown before playback.
c1_file … c10_file
Subtitle tracks. SRT and ASS are converted to WebVTT automatically.
c1_label … c10_label
Name shown in the player for each track.
subtitle_json
URL of a JSON list of { "src", "label", "default" } tracks.
autoplay
Set to 1 to start playing when loaded, where the browser allows it.

Embed builder

Set the options, copy the code, and preview the real player with one of your files.

c1_file … c10_filesubtitle tracks
Embed URL
https://streamvault.example/e/FILE_CODE
iframe
<iframe src="https://streamvault.example/e/FILE_CODE" width="640" height="360" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe>

Enter a file code to preview the player.