File uploads: streaming support, reliability fixes, and limits

What’s new?

  • Streamed multipart uploads for files:
    • POST /projects/{projectId}/files/upload
    • POST /requests/{requestId}/files/upload
  • You can provide phaseInstanceId either as a form field or as a ?phaseInstanceId= query parameter; the API will include it once in the forwarded payload.

Fixes and improvements

  • Robust parsing: files are fully consumed when building the outgoing multipart/form-data.
  • Getting a project returns the project manager data.
  • Allow files to be added in a certain project or request phase.

Usage notes

  • Send multipart/form-data with a file part; optional fields may include phaseInstanceId.
  • For non‑multipart uploads, send the raw bytes as the request body and pass filename/content type via:
    • Headers X-File-Name and X-File-Content-Type (case‑insensitive), or
    • Query params name and content_type.

Platform limits

  • The API enforces a 10 MB request limit. With base64 encoding and multipart overhead, practical max payload is ~6–7 MB.
  • For larger uploads, use an out‑of‑band approach (e.g., presigned upload) and then create the file record by URL.

Compatibility

  • No response shape changes. Successful uploads return: id, name, downloadUrl, type, updatedAt, createdAt, companyId, metaData, source, createdByUser, isArchived.