cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Announcements
Want to learn some quick and useful tips to make your day easier? Check out how Calvin uses Replay to get feedback from other teams at Dropbox here.

Dropbox API Support & Feedback

Find help with the Dropbox API from other developers.

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Sharing - how to share a folder with edit access when don't know my friend's dropbox user id?

Sharing - how to share a folder with edit access when don't know my friend's dropbox user id?

elsigh
Helpful | Level 5
Go to solution

I have an App built on the Dropbox API (https://songdocs.io).

 

I want to send a link to a folder to a friend, and I know I can get a shared link (which gives anyone with it view permissions) and send that to them.

 

I would like to give them editable accessto the folder but a) I don't know how I would figure out their dropbox user id. Is there a way to get that? (assuming I've never shared anything with them before fwiw). I don't see anything about Contacts in the API.

 

Maybe there's another way to accomplish this though too? Totally open to suggestions here. But if user #2 has the shared view link and they gain access to it in my app is there a way for user #2 to request access to mount the folder with edit permissions somehow from my app and for me to communicate that to user #1?

25 Replies 25

elsigh
Helpful | Level 5
Go to solution

So those interactions need to happen in Dropbox and can't be done via API right?

 

Also, at the end of it all, how will I as a developer on behalf of user #2, know that User #1 has granted access? I guess once I know that I can 1) mount the folder if needed and then 2) get it's real id to store in my app and fetch contents from there. (not sure how exactly I'll get that when all I have in the app is the preview_url, e.g. my app won't know about anything happening behind the scenes in dropbox I don't believe.

Greg-DB
Dropbox Staff
Go to solution

That's correct, this flow is part of the Dropbox web site, not the API.

 

From the app's perspective, it can also store the shared folder ID when retrieving the preview_url. The shared folder ID is unique for shared folders across Dropbox, and consistent across accounts. So, you would see the same shared folder ID for API calls for any member of the folder.

The app can also check on the current members of the shared folder at any point in time via /2/sharing/list_folder_members[/continue], e.g., from user #1's account in this case.

The app can also check for any shared folders that the user has been given access to via /2/sharing/list_mountable_folders[/continue], e.g., from user #2's account in this case.

elsigh
Helpful | Level 5
Go to solution

So I'm taking a stab at this.. My User #2 who has a shared link sends a request to sharingGetSharedLinkMetadata and gets back a folder object but the id in that response doesn't work as the shared_folder_id arg to sharingGetFolderMetadata

 

When I get a files within that folder though each file object includes a parent_shared_folder_id that looks like the correct format for sharingGetFolderMetadata. Seems like I'm doing something wrong and I should be able to get the shared_folder_id somehow with 1 API call and the shared link url. I'm probably missing something obvious.. Thoughts? 

Greg-DB
Dropbox Staff
Go to solution

The 'id' for a file or folder, such as returned by sharingGetSharedLinkMetadata, is not the same thing as a 'shared_folder_id', and the two are not interchangeable.

 

In the flow we discussed, you would get the shared folder ID from user 1's side, anywhere you can get the metadata for the folder, such as from filesGetMetadata. You can then use that to get the 'preview_url' from sharingGetFolderMetadata as user 1. User 2 doesn't need the shared_folder_id in that flow. User 2 just receives the shared link, for viewing the file/folder, or the preview_url, for requesting access to the folder.

elsigh
Helpful | Level 5
Go to solution

Yeah, I think when I've talked to the designer about a flow that makes sense we settled on:

 

User #1 shares a sharedLink with User #2, which gives User #2 read-access in our App to all the content in the folder. This way we at least can deliver value to user #2 as context. Otherwise someone is just going to out of the blue get a dropbox email that doesn't appear to be related to our application.

 

Once User #2 wants to "upgrade" to contribute or make edits they would then ask for permission and we'd bounce them out to the preview_url. Once User #1 grants User #2 permission, I'm hoping be able to make some change (if needed) so that User #2 can now write back new files to the folder or edit files in that folder.

 

It's odd to me that as a developer I can peek into any of the files inside of the sharedLink folder contents to obtain the parent_shared_folder_id that I'll need to use to get at the preview url. So I kind of wondered if I was doing something wrong or missing an API endpoint that might have it. I suppose this means that a sharedLink to a folder without files in it would be busted (not the end of the world). 

 

Let me paint a picture of the App in case it gives you any other ideas..

 

I'm a songwriter. I write chords and lyrics in my app which saves a text file to a folder inside of an App Folder. 

You and I are going camping and we both play guitar and you write songs too.

 

I want to share a folder of all my songs with you so we can play them together. So I send you a magic link to my app that gives you the sharedLink and then when you open my app you see my songs which makes you excited to participate.

 

Now if you want to add yours too (which I hope, but don't presume that you'll necessarily want to), so you sign in to dropbox, and then ask me for edit permission to the shared folder (via the preview_url). Once I grant you access I hope that you can just refresh the App and then you can add your songs to the folder.

 

That's at least the flow we're trying to build. Not sure if you can think of a better pattern. 

Greg-DB
Dropbox Staff
Go to solution

I see, thanks for the additional context. I can't think of a better system for this use case unfortunately.

elsigh
Helpful | Level 5
Go to solution

Hey @Greg-DB 

 

So I'm trying to get the `shared_folder_id` as user #1 but I'm not successful.

 

Heres' what I see in Dropbox for the folder. I'm the owner:

myfolder.png

 

 

I call `/files/get_metadat` but I don't see anything to use as a `shared_folder_id`:

 

get_metadata.png

 

response.png

 

The folder is link-shared:

link-share.png

 

So it seems I don't have what I need to programmatically add someone by email address. Ideas?

elsigh
Helpful | Level 5
Go to solution

Ah, I'm just now seeing the "This folder can only be shared as a link" banner, which must be relevant.. I wonder if it's because this is a folder at the root level of my App Folder? aka it's /Apps/Songbook.Studio/Commoner .. maybe I'm heading into the rabbit hole.

elsigh
Helpful | Level 5
Go to solution

I tried to share the folder in the Dropbox MacOS client but get this:

share-in-db.png

 

Starting to wonder if the "App Folder" permission is at the root of what's dogging me. I don't recall being so hamstrung until we made the decision to change that in the interest of user privacy.

elsigh
Helpful | Level 5
Go to solution

I tried creating another folder in the Dropbox web client and choosing "Share with specific people" and got this, which is stuck:

test-hanging.png

Need more support?
Who's talking

Top contributors to this post

  • User avatar
    Greg-DB Dropbox Staff
  • User avatar
    elsigh Helpful | Level 5
What do Dropbox user levels mean?