Hi guys, I’m trying to upload a .csv file to file manager via Accounts Dashboard | HubSpot but I get a 400. The lack of example on documentation made me come here.
My headers and url are:
headers = {'content-type' : 'multipart/form-data', 'authorization': myauth}url = 'https://api.hubapi.com/files/v3/files'
Im trying to:
with open(path_to_csv_file) as fh: data = {'file': fh, 'folderId': '89858067367', 'fileName': 'test', 'options': json.dumps({ 'access': 'PRIVATE', 'overwrite': False, 'duplicateValidationStrategy': 'NONE', 'duplicateValidationScope': 'EXACT_FOLDER' }) } req = requests.post(url, files=data, headers=headers)
Where am I goind wrong?
Hi, @PedroTayer
Thanks for reaching out! Hey, @taran42 @JBeatty, do you have any experience or troubleshooting tips you can share with @PedroTayer?
Thank you very much! — Jaycee
Hi @PedroTayer,
2 things, first you don’t want to specify the content type, because for multipart/form-data encoding that contains the boundary and you are overwriting that, and secondly you want to use the files parameter for the post function to tell requests to do multipart/form-data. Here is some sample code I got working:
import json, requests, os
BEARER_TOKEN = os.environ['BEARER_TOKEN']
headers = {'authorization': "Bearer " + BEARER_TOKEN}
url = 'https://api.hubapi.com/files/v3/files'
with open("test.txt") as fh:
files = {'file': fh}
data = {
'folderId': '',
'fileName': 'testFileName',
'options': json.dumps({
'access': 'PRIVATE',
'overwrite': False,
'duplicateValidationStrategy': 'NONE',
'duplicateValidationScope': 'EXACT_FOLDER'
})
}
resp = requests.post(url, files=files, data=data, headers=headers)
Best,
Thank you very much it worked! I’ve uploaded it and associated with deal using v1 engagement considering the file as a note.
Just another thing, might help someone, I’ve managed to upload the file directly from a dataframe by using (the encoding is according to portuguese-br):
import iocsv_buffer = io.BytesIO()df.to_csv(csv_buffer, sep=",", index=False, mode="wb", encoding="ISO-8859-1")csv_buffer.seek(0)files = {'file': csv_buffer}