Skip to content

Media uploads

Binary bytes are never sent on JSON create/update. Integrators:

  1. Create metadata (or a form instance) over JSON
  2. Upload bytes with POST /v0/media/...
  3. Discover opaque ids / partKeys from GET responses
  4. Download with GET /v0/media/...

Storage paths are never returned on /v0.

  1. POST /v0/spaces/{spaceId}/assets — metadata only; returns newPublishedAssetId (subject to spaces.publishedAssets.perDay)
  2. POST /v0/media/spaces/{spaceId}/assets/{assetId} — multipart field file
  3. GET /v0/media/spaces/{spaceId}/assets/{assetId}?part=base — stream bytes

Owners list awaiting approval with GET /v0/spaces/{spaceId}/assets/awaiting-approval (part descriptors only).

  1. POST / PATCH /v0/forms/{formId} with file fields as []
  2. POST /v0/media/forms/{formId}/attachments — multipart repeated fieldIds + files (same order/length)
  3. GET /v0/forms/{formId} — file fields become descriptors (fieldId, partKey, contentType, bytes, filename)
  4. GET /v0/media/forms/{formId}/attachments/{partKey} — raw bytes
  5. DELETE .../attachments/{partKey}?fieldId=... — remove a part

Uploads enforce schema maxFiles and entitlement forms.attachments.uploadPerDay. Optional workflow query params: workflowConfigurationId + workflowViewId (both required together).

  • GET /v0/media/users/{dbHash}/{userId}/avatar/{picId} — ids from profile/search
  • POST / DELETE /v0/media/users/me/avatar — resolves identity from the session profile

See Errors & limits for ENTITLEMENT_LIMIT_EXCEEDED (803 → HTTP 403) and MEDIA_UNAVAILABLE.