Skip to content

Start an upload

POST
/media/uploads
curl --request POST \
--url https://api.dropslate.top/v1/media/uploads \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "filename": "launch.mp4", "mime": "video/mp4", "size": 18874368 }'

Returns a one-time signed URL. PUT the file bytes to it directly (not through this API) - the upload does not count against this request’s body limit.

Media typeapplication/json
object
filename
required
string
mime
required
string
size
required

Bytes.

integer
folderId
string
Example
{
"filename": "launch.mp4",
"mime": "video/mp4",
"size": 18874368
}

A ticket: PUT the file to uploadUrl before expiresAt.

Media typeapplication/json
object
mediaId
string
uploadUrl
string
expiresAt
string format: date-time
Examplegenerated
{
"mediaId": "example",
"uploadUrl": "example",
"expiresAt": "2026-04-15T12:00:00Z"
}

Storage or file-size quota exceeded for the plan.

Media typeapplication/json
object
code
required
string
message
required
string
hint
string
Example
{
"code": "not_found",
"message": "The post does not exist.",
"hint": "Check the id and try again."
}

The key is missing the “write” scope, or this route needs a signed-in session instead of a key.

Media typeapplication/json
object
code
required
string
message
required
string
hint
string
Example
{
"code": "not_found",
"message": "The post does not exist.",
"hint": "Check the id and try again."
}

More than 600 requests in ten minutes for this key, or the workspace hit 60 post requests in an hour.

Media typeapplication/json
object
code
required
string
message
required
string
hint
string
Example
{
"code": "not_found",
"message": "The post does not exist.",
"hint": "Check the id and try again."
}
Retry-After
integer

Seconds to wait.