Looping in one of Asana’s Developer Relations Leads, @Matt_Bramlage, who I’m hoping can help get your issue addressed!
Hi there!
Sorry for such a long delay - things have been quite active over here!
Setting custom fields with input being form data can be quite tricky. If you’re using JSON, your format is spot on:
"data": {
"custom_fields":{
318336795802518:318336795802520
}
}
with form data (which is what --data-urlencode
sends, setting the content type to application/x-www-form-urlencoded
) you have to get the path specifier just right in order for it to work. This means a successful request would be
curl --request PUT -H "Authorization: Bearer MYAPIKEY" \
https://app.asana.com/api/1.0/tasks/3184015682564611 \
--data-urlencode "custom_fields.318336795802518=318336795802520"
Hopefully this will work for you!
I’m not able to update the custom fields and get “errors”:[{“message”:"custom_fields: Value is not valid JSON:
{
"id":392096801051329,
"custom_fields":{
"24321869754625":"Test",
"188798652655039":197365168746421
},
"due_on":"2017-08-01",
"name":"James",
}
It seems to be in the format provided and If I remove the custom_fields parameter I am able to update my task. What is missing?
Hello,
I would like to recover my tasks with the custom field and others information but I can’t do it.
Can you give me the URL knowing I have this one for now et I want to have theses information too.
https://app.asana.com/api/1.0/projects/557333570332796/tasks?opt_fields=name,due_on,completed,assignee,memberships.section.name&opt_pretty
Thank you !
Same boat here as James_Ferreira. I can’t seem to update the custom field no matter what kind of format I try.
var headers = {
'Authorization': 'Bearer API_KEY'
};
var formData = "custom_fields.661393451384417=123";
// var formData = {
// 'custom_fields': {661393451384417: 123},
// };
//formData['custom_fields'][fieldId.toString()] = value;
var options = {
'method': 'put',
'headers': headers,
'payload': formData
};
var response = UrlFetchApp.fetch('https://app.asana.com/api/1.0/tasks/' + taskId, options);
Logger.log(response.getContentText());
}
What are we doing wrong?
Did you ever hear back from anyone? I’m stuck in the exact same situation. Thanks!
This does not work. Even on regular CURL on the terminal I get “Could not interpret 683685779381761 as an identifier in custom_fields.683685779381761”
This is the CURL request and I am trying to set an number custom field
curl --request PUT -H “Authorization: Bearer MYKEY”
https://app.asana.com/api/1.0/tasks/686202313755564
–data-urlencode “custom_fields.683685779381761=36”
Please Advise
Did anyone get a response to this issue? I am having the exact some problem. I’ve tried every different combination of calls without success.
Help!
Thanks
Hi James,
Can you post some specific code that you’ve tried which hasn’t worked? I think having that as a starting point might make it easier to provide some advice.
Phil_Seeman, nothing form the suggested above does not work. We need just working example of how to update custom field
@Matt_Bramlage Hey Matt, these guys are correct - I just tried the CURL syntax you suggested above (and a bunch of variations of it) and got the same error.
For example, given a task with a text custom field having id 744020393575926, if I do:
curl --request PUT -H "authorization: Bearer MY-PERSONAL-ACCESS-TOKEN" https://app.asana.com/api/1.0/tasks/718125926216046 --data-urlencode "custom_fields.744020393575926=A field updated from CURL"
that results in the error Could not interpret 744020393575926 as an identifier in custom_fields.744020393575926.
Method 1 (with 2 goes at the correct uri):
Dim uri1 As String = String.Format(“https://app.asana.com/api/1.0/tasks/{0}?custom_fields:{1}:{2}”, taskId, customFieldId, value)
Dim uri2 = String.Format(“https://app.asana.com/api/1.0/tasks/{0}?custom_fields.{1}={2}”, taskId, customFieldId, value)
Dim request As HttpWebRequest = WebRequest.Create(uri1)
request.Headers.Add(String.Format("Authorization: Bearer {0}", token))
request.Method = "PUT"
request.ContentType = "application/x-www-form-urlencoded"
Dim response As HttpWebResponse = request.GetResponse()
Method2:
Dim uri As String = String.Format("tasks/{0}", taskId)
request.Headers.Add(String.Format("Authorization: Bearer {0}", token))
request.Method = "PUT"
request.ContentType = "application/json"
Dim cfParams As New Dictionary(Of String, Object)
cfParams.Add(customFieldId, value)
Dim parameters As New Dictionary(Of String, Object)
parameters.Add("custom_fields", cfParams)
Dim json As String = JsonConvert.SerializeObject(parameters)
Using writer As New StreamWriter(request.GetRequestStream())
writer.Write(json)
End Using
Dim response As HttpWebResponse = request.GetResponse()
Any guidance/help would be much appreciated.
Regards
Your Method 2 looks very close; just add this extra line below your “SerializeObject” line:
Dim json As String = JsonConvert.SerializeObject(parameters)
json = "{\"data\":" + json + "}"
Also, I set the following on my request object (this is in C#):
request.AllowWriteStreamBuffering = false;
request.ContentType = "application/json";
request.Accept = "Accept=application/json";
request.SendChunked = false;
request.ContentLength = json.Length;
Great thanks. That has worked I think the API reference could be clearer and provide a code example using the parameters you outlined (and maybe in a couple of different languages). Just for clarity!
PHP example that works for me.
$taskId = ‘830265114072917’;
$customFieldId = ‘832291596179375’;
$value = ‘test value’;
$data = [
'data' => [
'custom_fields' => [
$customFieldId => $value
]
]
];
$url = 'https://app.asana.com/api/1.0/tasks/%s';
$url = sprintf($url, $taskId);
$fetch_request = curl_init($url);
curl_setopt($fetch_request, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
curl_setopt($fetch_request, CURLOPT_HEADER, false);
curl_setopt($fetch_request, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($fetch_request, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($fetch_request, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt($fetch_request, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($fetch_request, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($fetch_request, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
"authorization: Bearer $this->secret",
]);
$response = curl_exec($fetch_request);
$result = json_decode($response, true);
How can I specify multiple custom fields in the one packet? I have tried making "custom_fields
an array but it won’t work. If custom_fields is specified more than once, the last one wins.
I can’t work out how to create a task and specify multiple custom fields in one call.
Your assistance would be greatly appreciated.
Thanks in advance
Joe
Hey all, catching back up on backlog here.
@Phil_Seeman It’s not well documented (I’ll create a follow up task to fix this) but indexing into arrays using form data is done with square brackets both for offset-based arrays (like collaborators[0]
, collaborators[1]
) and for associative arrays (using IDs). Try:
curl --request PUT -H "authorization: Bearer MY-PERSONAL-ACCESS-TOKEN"
https://app.asana.com/api/1.0/tasks/718125926216046 --data-urlencode
"custom_fields[744020393575926]=A field updated from CURL"
This is also how you can set multiple fields at once @joehanna - by sending multiple --data-urlencode
command line params with different custom fields indexed this way I was able to check that this did the right thing:
curl -v -H "Authorization: Bearer $ASANA_PERSONAL_ACCESS_TOKEN"
--request POST --data-urlencode "projects=$ASANA_SANDBOX_PROJECT"
--data-urlencode "custom_fields[166943917002516]=Some string"
--data-urlencode "custom_fields[158477440529071]=5"
https://app.asana.com/api/1.0/tasks
Any solutions on this for JavaScript / App script?
Getting the same error:
Hi @p-g,
In the code you referenced, the gid 197365168746421 needs to be a string, that is, needs to have quotation marks around it.