docs: def api_upload(service, encData, encMeta, keys):
      '''
         Uploads data to Send.
         Caution! Data is uploaded as given, this function will not encrypt it for you
      '''
      service += 'api/upload'
      files = requests_toolbelt.MultipartEncoder(fields={'file': ('blob', encData, 'application/octet-stream') })
      pbar = progbar(files.len)
      monitor = requests_toolbelt.MultipartEncoderMonitor(files, lambda files: pbar.update(monitor.bytes_read - pbar.n))
  
      headers = {
          'X-File-Metadata' : unpadded_urlsafe_b64encode(encMeta),
          'Authorization' : 'send-v1 ' + unpadded_urlsafe_b64encode(keys.authKey),
          'Content-type' : monitor.content_type
      }
  
      r = requests.post(service, data=monitor, headers=headers, stream=True)
      r.raise_for_status()
      pbar.close()
  
      body_json = r.json()
      secretUrl = body_json['url'] + '#' + unpadded_urlsafe_b64encode(keys.secretKey)
      fileId = body_json['id']
      fileNonce = unpadded_urlsafe_b64decode(r.headers['WWW-Authenticate'].replace('send-v1 ', ''))
      try:
          owner_token = body_json['owner']
      except:
          owner_token = body_json['delete']
      return secretUrl, fileId, fileNonce, owner_token