Uploading Files - Guide

File upload to EditKits is a two-step process. First you request an upload URL, then you upload your file directly to cloud storage using that URL.

Step 1: Request an Upload URL

Call the /api/v1/b/file/upload endpoint with your API credentials and file details.

curl --request POST \
  --url "https://api.editkits.com/api/v1/b/file/upload" \
  --header "X-API-ID: your-api-id" \
  --header "X-API-KEY: your-api-key" \
  --header "Content-Type: application/json" \
  --data '{
    "file_name": "my-video.mp4",
    "content_length": 52428800
  }'

You'll get back a file ID and a presigned URL.

{
  "file_id": "638a50e0-1ed2-4da6-860d-ac731bf899d1",
  "url": "https://uploads.editkits.com/temp-files/638a50e0-1ed2-4da6-860d-ac731bf899d1.mp4?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=...",
  "expires_at": "2026-05-19T11:43:50Z"
}

The URL expires after the time shown in expires_at. Make sure you upload within that window.

Step 2: Upload Your File

PUT your file to the presigned URL. Send the raw file bytes with no extra headers.

curl --request PUT \
  --url "https://uploads.editkits.com/temp-files/638a50e0-1ed2-4da6-860d-ac731bf899d1.mp4?X-Goog-Algorithm=..." \
  --upload-file "/path/to/my-video.mp4"

Important:

  • Use the URL exactly as returned. Do not add, remove, or modify any query parameters.
  • Do not send a Content-Type header. The URL already has the authentication baked in, and any extra headers will break the signature.
  • Send the raw file bytes. If your HTTP client wraps the body in JSON or form-data, the upload will fail.

If the signature doesn't match or the URL has expired, you'll get a 403. Request a new upload URL and try again.

After Upload

Once the file is uploaded, use the file_id to create a job or check the file status.

curl --request GET \
  --url "https://api.editkits.com/api/v1/b/file/status?file_id=638a50e0-1ed2-4da6-860d-ac731bf899d1" \
  --header "X-API-ID: your-api-id" \
  --header "X-API-KEY: your-api-key"

The file goes through a few states: DRAFT right after upload, ANALYZING while we inspect it, then COMMITTED when it's ready for use in a job.