Skip to main content

This page is also available as plain markdown · OpenAPI spec

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"
  }
}