post
https://api.sintalk.com.br/v3/files/upload-url
Step 1 of the three-step direct upload. File bytes never travel through this API; they go straight to storage.
POST /files/upload-url— declareusage,content_typeandsize_bytes. The response carries the newfile_idand a presignedurl, and the file starts in statuspending.PUTthe bytes to thaturl, withContent-Typeequal to the declaredcontent_typeandContent-Lengthequal tosize_bytes. Both are signed into the URL, so storage rejects aPUTthat deviates from either. Send no API credentials on this request.POST /files/{file_id}/confirm— the file flips touploadedand can be used.
kind is derived from content_type and must be one the declared usage allows; size_bytes must fit that kind's limit. GET /files/constraints lists both. Past expires_at the URL no longer works — request a new one, which creates a new file.