v1
latestOpenAPI 3.0.42026-08-06124112344.5 KBCreate a presigned direct-to-S3 upload slot.
Returns a short-lived presigned S3 PUT URL so a client can upload large binary artifacts (e.g. Revel Digital .webapp zip bundles) DIRECTLY to storage without the bytes streaming through the API. After uploading, call POST /media/uploads/{id}/finalize to ingest the object into the media library.
The account is always derived from the authenticated key/token — never from the body. The presigned URL is scoped to a single object key under the account's namespace, so it can never overwrite another account's objects.
Three-step flow:
# 1) Request a slot
curl -X POST "https://api.reveldigital.com/api/media/uploads" \
-H "X-Reveldigital-Apikey: <API_KEY>" \
-H "Content-Type: application/json" \
-d '{ "name": "myapp.webapp", "group_id": "<GROUP_ID>", "tags": ["env=Production"], "content_type": "application/zip" }'
# 2) Upload the bytes straight to S3 (Content-Type MUST match the returned header)
curl -T myapp.webapp -H "Content-Type: application/zip" "<upload_url>"
# 3) Finalize / ingest
curl -X POST "https://api.reveldigital.com/api/media/uploads/<id>/finalize" \
-H "X-Reveldigital-Apikey: <API_KEY>"
All media types supported by the multipart upload work here too (images, audio, video, presentations, PDF, and .webapp bundles): finalize downloads the staged object to the server and runs the SAME ingestion pipeline, so video is transcoded just as it is for a multipart upload.
Request body
Response
Returns the created upload slot