Skip to content

Introduction

The Dropslate REST API is the same contract the dashboard and MCP both use - apps/api/openapi.json, also served live at GET /v1/openapi.json. This page is the practical path: get a key, run the upload → post → status scenario end to end, then use the generated OpenAPI reference for every field.

Settings → API keys → New key. Name it for what it’s for, and grant write if it needs to publish - without it, a key only reads accounts, media and posts. The full key (ds_live_...) is shown once, right after creation - copy it then, because the server stores only its hash and prefix afterward.

The key is not for a prompt. It belongs in a client’s environment or a workflow tool’s credential store (an n8n credential, a Make connection, a .env file), never in text an AI agent reads: an agent that can read its own instructions can read a key pasted into them just as easily.

The acceptance scenario for this API - it must run end to end against the live server.

Terminal window
export KEY="ds_live_..."
export API="https://api.dropslate.top/v1"
# 1) Who we are, and which account publishes
ACCOUNT_ID=$(curl -s "$API/accounts" -H "Authorization: Bearer $KEY" | jq -r '.accounts[0].id')
# 2) Start an upload
TICKET=$(curl -s -X POST "$API/media/uploads" \
-H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{"filename":"launch.mp4","mime":"video/mp4","size":18874368}')
MEDIA_ID=$(echo "$TICKET" | jq -r '.mediaId')
UPLOAD_URL=$(echo "$TICKET" | jq -r '.uploadUrl')
# 3) PUT the file's bytes to uploadUrl (not through /v1 - the URL is signed on its own)
curl -s -X PUT "$UPLOAD_URL" --data-binary @launch.mp4 -H "Content-Type: video/mp4"
# 4) Create the post (needs the write scope)
POST=$(curl -s -X POST "$API/posts" \
-H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d "{
\"targets\": {\"accountIds\": [\"$ACCOUNT_ID\"]},
\"mediaIds\": [\"$MEDIA_ID\"],
\"text\": \"Launch day.\",
\"when\": \"now\",
\"confirm\": true
}")
POST_ID=$(echo "$POST" | jq -r '.posts[0].id')
# 5) Check its status
curl -s "$API/posts/$POST_ID" -H "Authorization: Bearer $KEY" | jq .status

Next: Authentication, Rate limits, Errors, or the field-by-field OpenAPI reference.