Вот мой подход API (я использую пример) - как вы можете видеть, вы не используете file_id (идентификатор загруженного файла на сервере) в API:
1.Создать объект 'photo' на сервере:
POST: /projects/{project_id}/photos
params in: {name:some_schema.jpg, comment:blah}
return: photo_id
2.Загрузить файл (обратите внимание, что «файл» находится в единственном числе, потому что он только один на фотографию):
POST: /projects/{project_id}/photos/{photo_id}/file
params in: file to upload
return: -
А потом, например:
3. Список фотографий
GET: /projects/{project_id}/photos
params in: -
return: array of objects: [ photo, photo, photo, ... ]
4.Читайте несколько деталей фотографии
GET: /projects/{project_id}/photos/{photo_id}
params in: -
return: photo = { id: 666, name:'some_schema.jpg', comment:'blah'}
5.Читать фото-файл
GET: /projects/{project_id}/photos/{photo_id}/file
params in: -
return: file content
Итак, вывод таков: сначала вы создаете объект (фотографию) по POST, а затем отправляете второй запрос с файлом (снова POST).