Skip to content
DunSocial Docs

Upload and gallery

Upload images and videos to your DunSocial workspace gallery through the API: presigned uploads, size and type limits, listing, and deleting media.

Media lives in the workspace gallery. Needs Bearer + X-Workspace-Id.

Limits

Kind Max size Types
Images 8MB jpeg, png, gif, webp
Video 512MB mp4, quicktime, webm

Upload flow

  1. Ask for a presigned URL
  2. Upload bytes to that URL
  3. Confirm the upload so it appears in the gallery

1. Get an upload URL

POST /api/media/upload-url

curl -X POST https://api.dunsocial.com/api/media/upload-url \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "X-Workspace-Id: YOUR_WORKSPACE_ID" \
-H "Content-Type: application/json" \
-d '{
  "filename": "hero.jpg",
  "mimeType": "image/jpeg",
  "fileSize": 245760
}'

Response: { uploadUrl, storageKey, expiresAt }.

2. PUT the file

PUT the raw file to uploadUrl with the correct Content-Type.

3. Complete

POST /api/media/complete

Body: { storageKey, originalFilename, mimeType, fileSize, width?, height?, duration?, altText? }

duration is stored as milliseconds. Values under 1000 are treated as seconds (MCP/API clients) and converted on write.

Returns 201 with the asset and a previewUrl.

Method Path Notes
GET /api/media Paginated assets + preview URLs
GET /api/media/gallery Assets with usage status

Get and batch

Method Path
GET /api/media/:id
POST /api/media/batch — { ids? , storageKeys? }
GET /api/media/:id/relationships — posts/drafts using it + canDelete

Alt text

PATCH /api/media/:id/alt-text with { "altText": "..." }

Validate for a platform

GET /api/media/validate?mediaAssetId=&platform= → { valid, issues[] }

Delete

DELETE /api/media/:id

Optional body: { cleanupDrafts?, forceDeleteScheduled? }

Fails with 400 if the asset is used in a published post (or scheduled without forceDeleteScheduled).