Create upload
POST/uploads
Create upload
Request
Body
filenamestringrequired
byteSizeintegerrequired
checksumstringrequired
contentTypestringrequired
Example (auto)
{
"filename": "string",
"byteSize": 0,
"checksum": "string",
"contentType": "string"
}201
Creates a direct-upload session and returns a presigned URL
objectstringrequired
idstringrequired
uploadUrlstringrequired
uploadHeadersobjectrequired
Content-Typestringrequired
maxBytesintegerrequired
expiresAtstringrequired
metaobjectrequired
requestIdstringrequired
Example: creates_a_direct-upload_session_and_returns_a_presigned_url
{
"object": "direct_upload",
"id": "eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--161ba473747c84659e86b7c7109241c572d396e0",
"uploadUrl": "https://storage.viewcy.com/direct-upload/presigned-url",
"uploadHeaders": {
"Content-Type": "image/jpeg"
},
"maxBytes": 31457280,
"expiresAt": "2026-06-15T12:05:00Z",
"meta": {
"requestId": "00000000-0000-0000-0000-000000000000"
}
}Example: re-presigns_rather_than_replaying_a_cached_url_when_the_same_idempotency-key_repeats
{
"object": "direct_upload",
"id": "eyJfcmFpbHMiOnsiZGF0YSI6MiwicHVyIjoiYmxvYl9pZCJ9fQ==--8e8a8dd643d4278f52deb1edb8f870980752635e",
"uploadUrl": "https://storage.viewcy.com/direct-upload/presigned-url",
"uploadHeaders": {
"Content-Type": "image/jpeg"
},
"maxBytes": 31457280,
"expiresAt": "2026-06-15T12:05:00Z",
"meta": {
"requestId": "00000000-0000-0000-0000-000000000000"
}
}400
Returns 400 when required metadata is missing
objectstringrequired
statusintegerrequired
messagestringrequired
errorsobject[]required
fieldstring
messagestring
metaobjectrequired
requestIdstringrequired
Example: returns_400_when_required_metadata_is_missing
{
"object": "error",
"status": 400,
"message": "Byte size can't be blank, Checksum can't be blank, Content type can't be blank",
"errors": [
{
"field": "byteSize",
"message": "can't be blank"
},
{
"field": "checksum",
"message": "can't be blank"
},
{
"field": "contentType",
"message": "can't be blank"
}
],
"meta": {
"requestId": "00000000-0000-0000-0000-000000000000"
}
}401
Returns 401
objectstringrequired
statusintegerrequired
messagestringrequired
metaobjectrequired
requestIdstringrequired
Example: returns_401
{
"object": "error",
"status": 401,
"message": "Authentication required",
"meta": {
"requestId": "00000000-0000-0000-0000-000000000000"
}
}403
Creates a direct-upload session and returns a presigned URL
objectstringrequired
statusintegerrequired
messagestringrequired
metaobjectrequired
requestIdstringrequired
Example (auto)
{
"object": "string",
"status": 0,
"message": "string",
"meta": {
"requestId": "string"
}
}413
Returns 413 when bytesize exceeds the maximum
objectstringrequired
statusintegerrequired
messagestringrequired
errorsobject[]required
fieldstring
messagestring
metaobjectrequired
requestIdstringrequired
Example: returns_413_when_bytesize_exceeds_the_maximum
{
"object": "error",
"status": 413,
"message": "Byte size must be less than 30 MB",
"errors": [
{
"field": "byteSize",
"message": "must be less than 30 MB"
}
],
"meta": {
"requestId": "00000000-0000-0000-0000-000000000000"
}
}415
Returns 415 for a non-image content type
objectstringrequired
statusintegerrequired
messagestringrequired
errorsobject[]required
fieldstring
messagestring
metaobjectrequired
requestIdstringrequired
Example: returns_415_for_a_non-image_content_type
{
"object": "error",
"status": 415,
"message": "Content type isn't an image",
"errors": [
{
"field": "contentType",
"message": "isn't an image"
}
],
"meta": {
"requestId": "00000000-0000-0000-0000-000000000000"
}
}