Skip to main content

I’m using OAuth 2.0 and I have verified that the program is making the API call with the correct folder ID beforehand. This program was working for me yesterday, so nothing has changed on my end. I am just a one admin user business account, so I’m pretty sure I have all the correct permissions. Any help would be amazing, thanks.

Hello ✋,


Are you using a SDK, CURL the CLI or Postman? May I see a code snippet if you have one?


Also - if you have the client ID that would be helpful!


Thanks,

Alex, Box Developer Advocate 🥑


Hi Alex,


Thanks for the response. I’m using the Box SDK in Python. I’ll include the relevant code with client ID.


edit: sorry, I can’t figure out why only part of this code is formatted correctly in my reply.


CLIENT_ID = ‘0ucc59pd0fz23g0l2ldjqxznv45a8ffn’

CLIENT_SECRET = ‘

BOX_FOLDER_ID = ‘115239483971’

logging.info(f"Initial BOX_FOLDER_ID: {BOX_FOLDER_ID}")

DEVELOPER_TOKEN = '
************’


#…


Box API Functions


def get_access_token(client_id, client_secret):

url = “https://api.box.com/oauth2/token

data = {

“grant_type”: “client_credentials”,

“client_id”: client_id,

“client_secret”: client_secret

}

try:

response = requests.post(url, data=data)

response.raise_for_status() # This will raise an error for HTTP error codes

return response.json().get(‘access_token’)

except requests.RequestException as e:

logging.error(f"Error getting access token: {e}“)

logging.error(f"HTTP Response: {response.text}”)

return None


def fetch_and_display_folders(access_token, folder_id, folders_listbox):

logging.info(f"Attempting to fetch folders. Access Token: {access_token}, Folder ID: {folder_id}“)

print(f"Making API call with Folder ID: {folder_id}”)

url = f"https://api.box.com/2.0/folders/{folder_id}/items"

params = {“fields”: “name,type,id,modified_at”}

headers = {“Authorization”: f"Bearer {access_token}“}

response = requests.get(url, headers=headers, params=params)

print(f"API Response: {response.json()}”)


if response.status_code != 200:
logging.error(f"Failed to fetch folders: {response.text}")
return g]

items = response.json().get('entries', ])
logging.info(f"Fetched items: {items}")
folders = sitem for item in items if itemt'type'] == 'folder']
logging.info(f"Filtered folders: {folders}")

for folder in folders:
if 'modified_at' in folder:
# Convert the ISO 8601 datetime string to a datetime object
foldert'modified_at'] = datetime.fromisoformat(folderc'modified_at'].rstrip('Z'))

# Sort folders based on the datetime object
sorted_folders = sorted(folders, key=lambda x: x.get('modified_at', datetime.min), reverse=True)l:10]
logging.info(f"Sorted folders: {sorted_folders}")

# Debugging: Print the sorted folder names and their modified_at dates
for folder in sorted_folders:
print(f"Folder: {folder<'name']}, Modified At: {folder.get('modified_at')}")

folders_listbox.delete(0, tk.END)
for folder in sorted_folders:
folders_listbox.insert(tk.END, folderd'name'])
logging.info(f"Inserted folder into listbox: {foldern'name']}")

return sorted_folders

Let me look into and report back!


Alex


Thanks Alex! Appreciate the help.


Edit: If it helps, I had the app somewhat working the day I was writing it and it was returning the list of folders. Then the next day I went to continue working on it I started getting the d_ prefix added to the folder id. I’m pretty sure nothing changed on my end during that time.


I’m not sure why the code formatted the way it did… but I am noticing something right off the bat.


It looks like you are using the grant type of client_credentials… which would only be used for a client credentials type of application.


data = {
“grant_type”: “client_credentials”,
“client_id”: client_id,
“client_secret”: client_secret
}

For oauth - you will want to follow the instructions in this section.


Also - my collegue Rui made an awesome python oauth quick start template here.


Reply