Rendley docs

Uploads

List uploads

GET/v1/uploads

List uploads for a project, or get a single upload when a file hash is provided.

Request

curl "https://api.rendley.com/v1/uploads?project_id=PROJECT_ID" \
  -H "Authorization: Bearer YOUR_API_KEY"
const res = await fetch("https://api.rendley.com/v1/uploads?project_id=PROJECT_ID", {
  headers: { Authorization: "Bearer YOUR_API_KEY" },
});
const { data } = await res.json();
import requests

res = requests.get(
    "https://api.rendley.com/v1/uploads?project_id=PROJECT_ID",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
)
data = res.json()["data"]

Query parameters

NameTypeRequiredDescription
project_idstringRequiredProject ID
hashstringOptionalFile hash to fetch a single upload
Example response
{
  "data": [
    {
      "file_hash": "string",
      "mime_type": "string",
      "status": "string",
      "storage_url": "string"
    }
  ]
}
Response codes
StatusDescription
200OK
400Bad Request
401Unauthorized
403Forbidden

Create an upload

POST/v1/uploads

Create a single upload and get a presigned URL to upload the file bytes to.

Request

curl -X POST "https://api.rendley.com/v1/uploads" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "file_hash": "<file_hash>",
    "media_id": "<media_id>",
    "project_id": "<project_id>"
  }'
const res = await fetch("https://api.rendley.com/v1/uploads", {
  method: "POST",
  headers: { Authorization: "Bearer YOUR_API_KEY", "Content-Type": "application/json" },
  body: JSON.stringify({
    "file_hash": "<file_hash>",
    "media_id": "<media_id>",
    "project_id": "<project_id>"
  }),
});
const { data } = await res.json();
import requests

res = requests.post(
    "https://api.rendley.com/v1/uploads",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    json={
      "file_hash": "<file_hash>",
      "media_id": "<media_id>",
      "project_id": "<project_id>"
    },
)
data = res.json()["data"]

Request body

NameTypeRequiredDescription
durationnumberOptional
file_hashstringRequired
file_sizeintegerOptional
media_idstringRequired
metadatastringOptional
mime_typestringOptional
original_file_namestringOptional
project_idstringRequired
Example response
{
  "data": {
    "presigned_url": "string",
    "upload_id": "string"
  }
}
Response codes
StatusDescription
200OK
400Bad Request
401Unauthorized
403Forbidden

Delete an upload

DELETE/v1/uploads

Delete an upload from a project by its file hash.

Request

curl -X DELETE "https://api.rendley.com/v1/uploads?project_id=PROJECT_ID&hash=HASH" \
  -H "Authorization: Bearer YOUR_API_KEY"
const res = await fetch("https://api.rendley.com/v1/uploads?project_id=PROJECT_ID&hash=HASH", {
  method: "DELETE",
  headers: { Authorization: "Bearer YOUR_API_KEY" },
});
const { data } = await res.json();
import requests

res = requests.delete(
    "https://api.rendley.com/v1/uploads?project_id=PROJECT_ID&hash=HASH",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
)
data = res.json()["data"]

Query parameters

NameTypeRequiredDescription
project_idstringRequiredProject ID
hashstringRequiredFile hash of the upload to delete
Response codes
StatusDescription
200OK
400Bad Request
401Unauthorized
403Forbidden

Complete an upload

POST/v1/uploads/{id}/complete

Mark a single upload as completed by its ID.

Request

curl -X POST "https://api.rendley.com/v1/uploads/ID/complete" \
  -H "Authorization: Bearer YOUR_API_KEY"
const res = await fetch("https://api.rendley.com/v1/uploads/ID/complete", {
  method: "POST",
  headers: { Authorization: "Bearer YOUR_API_KEY" },
});
const { data } = await res.json();
import requests

res = requests.post(
    "https://api.rendley.com/v1/uploads/ID/complete",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
)
data = res.json()["data"]

Path parameters

NameTypeDescription
idstringUpload ID
Response codes
StatusDescription
200OK
401Unauthorized
404Not Found

Create a batch of uploads

POST/v1/uploads/batch

Create multiple uploads at once, returning presigned URLs for accepted files and reasons for rejected ones.

Request

curl -X POST "https://api.rendley.com/v1/uploads/batch" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "files": [
      {
        "duration": 0,
        "file_hash": "string",
        "file_size": 0,
        "media_id": "string",
        "metadata": "string",
        "mime_type": "string",
        "original_file_name": "string",
        "project_id": "string"
      }
    ],
    "project_id": "<project_id>"
  }'
const res = await fetch("https://api.rendley.com/v1/uploads/batch", {
  method: "POST",
  headers: { Authorization: "Bearer YOUR_API_KEY", "Content-Type": "application/json" },
  body: JSON.stringify({
    "files": [
      {
        "duration": 0,
        "file_hash": "string",
        "file_size": 0,
        "media_id": "string",
        "metadata": "string",
        "mime_type": "string",
        "original_file_name": "string",
        "project_id": "string"
      }
    ],
    "project_id": "<project_id>"
  }),
});
const { data } = await res.json();
import requests

res = requests.post(
    "https://api.rendley.com/v1/uploads/batch",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    json={
      "files": [
        {
          "duration": 0,
          "file_hash": "string",
          "file_size": 0,
          "media_id": "string",
          "metadata": "string",
          "mime_type": "string",
          "original_file_name": "string",
          "project_id": "string"
        }
      ],
      "project_id": "<project_id>"
    },
)
data = res.json()["data"]

Request body

NameTypeRequiredDescription
filesarray<object>Required
project_idstringRequired
Example response
{
  "data": {
    "items": [
      {
        "media_id": "string",
        "presigned_url": "string",
        "upload_id": "string"
      }
    ],
    "rejected": [
      {
        "media_id": "string",
        "reason": "string"
      }
    ]
  }
}
Response codes
StatusDescription
200OK
400Bad Request
401Unauthorized
403Forbidden

Complete a batch of uploads

POST/v1/uploads/batch/complete

Mark a batch of uploads as completed by their upload IDs.

Request

curl -X POST "https://api.rendley.com/v1/uploads/batch/complete" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "upload_ids": [
      "string"
    ]
  }'
const res = await fetch("https://api.rendley.com/v1/uploads/batch/complete", {
  method: "POST",
  headers: { Authorization: "Bearer YOUR_API_KEY", "Content-Type": "application/json" },
  body: JSON.stringify({
    "upload_ids": [
      "string"
    ]
  }),
});
const { data } = await res.json();
import requests

res = requests.post(
    "https://api.rendley.com/v1/uploads/batch/complete",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    json={
      "upload_ids": [
        "string"
      ]
    },
)
data = res.json()["data"]

Request body

NameTypeRequiredDescription
upload_idsarray<string>Required
Example response
{
  "data": {
    "completed": 0,
    "failed": [
      {
        "error": "string",
        "upload_id": "string"
      }
    ]
  }
}
Response codes
StatusDescription
200OK
400Bad Request
401Unauthorized

Abort a multipart upload

POST/v1/uploads/multipart/abort

Abort an in-progress multipart upload.

Request

curl -X POST "https://api.rendley.com/v1/uploads/multipart/abort" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "s3_upload_id": "<s3_upload_id>",
    "upload_id": "<upload_id>"
  }'
const res = await fetch("https://api.rendley.com/v1/uploads/multipart/abort", {
  method: "POST",
  headers: { Authorization: "Bearer YOUR_API_KEY", "Content-Type": "application/json" },
  body: JSON.stringify({
    "s3_upload_id": "<s3_upload_id>",
    "upload_id": "<upload_id>"
  }),
});
const { data } = await res.json();
import requests

res = requests.post(
    "https://api.rendley.com/v1/uploads/multipart/abort",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    json={
      "s3_upload_id": "<s3_upload_id>",
      "upload_id": "<upload_id>"
    },
)
data = res.json()["data"]

Request body

NameTypeRequiredDescription
s3_upload_idstringRequired
upload_idstringRequired
Response codes
StatusDescription
200OK
400Bad Request
401Unauthorized

Complete a multipart upload

POST/v1/uploads/multipart/complete

Complete a multipart upload by submitting the uploaded parts.

Request

curl -X POST "https://api.rendley.com/v1/uploads/multipart/complete" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "parts": [
      {
        "etag": "string",
        "part_number": 0
      }
    ],
    "s3_upload_id": "<s3_upload_id>",
    "upload_id": "<upload_id>"
  }'
const res = await fetch("https://api.rendley.com/v1/uploads/multipart/complete", {
  method: "POST",
  headers: { Authorization: "Bearer YOUR_API_KEY", "Content-Type": "application/json" },
  body: JSON.stringify({
    "parts": [
      {
        "etag": "string",
        "part_number": 0
      }
    ],
    "s3_upload_id": "<s3_upload_id>",
    "upload_id": "<upload_id>"
  }),
});
const { data } = await res.json();
import requests

res = requests.post(
    "https://api.rendley.com/v1/uploads/multipart/complete",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    json={
      "parts": [
        {
          "etag": "string",
          "part_number": 0
        }
      ],
      "s3_upload_id": "<s3_upload_id>",
      "upload_id": "<upload_id>"
    },
)
data = res.json()["data"]

Request body

NameTypeRequiredDescription
partsarray<object>Required
s3_upload_idstringRequired
upload_idstringRequired
Response codes
StatusDescription
200OK
400Bad Request
401Unauthorized

Initiate a multipart upload

POST/v1/uploads/multipart/initiate

Initiate a multipart upload and get presigned URLs for each part.

Request

curl -X POST "https://api.rendley.com/v1/uploads/multipart/initiate" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "file_hash": "<file_hash>",
    "media_id": "<media_id>",
    "part_count": 0,
    "project_id": "<project_id>"
  }'
const res = await fetch("https://api.rendley.com/v1/uploads/multipart/initiate", {
  method: "POST",
  headers: { Authorization: "Bearer YOUR_API_KEY", "Content-Type": "application/json" },
  body: JSON.stringify({
    "file_hash": "<file_hash>",
    "media_id": "<media_id>",
    "part_count": 0,
    "project_id": "<project_id>"
  }),
});
const { data } = await res.json();
import requests

res = requests.post(
    "https://api.rendley.com/v1/uploads/multipart/initiate",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    json={
      "file_hash": "<file_hash>",
      "media_id": "<media_id>",
      "part_count": 0,
      "project_id": "<project_id>"
    },
)
data = res.json()["data"]

Request body

NameTypeRequiredDescription
durationnumberOptional
file_hashstringRequired
file_sizeintegerOptional
media_idstringRequired
metadatastringOptional
mime_typestringOptional
original_file_namestringOptional
part_countintegerRequired
project_idstringRequired
Example response
{
  "data": {
    "presigned_urls": [
      {
        "part_number": 0,
        "url": "string"
      }
    ],
    "s3_upload_id": "string",
    "upload_id": "string"
  }
}
Response codes
StatusDescription
200OK
400Bad Request
401Unauthorized
403Forbidden