Creating an item with column values

Hi,
I am trying to use the API to create a new item on an existing board, populated with column values. I can successfully create the item without column values, but as soon as I try to add them I get errors.

let query ='mutation { create_item (board_id: [boardid], group_id: [groupid], item_name: "Just put those column values in please", column_values: \"{ \"long_text\": {\"text\":\"Testing testing\" }}\") { id }}'
const response = await fetch('https://api.monday.com/v2/', {
				method: 'POST',
				headers: {
					'Content-Type': 'application/json',
					'Authorization': process.env.GATSBY_MONDAY_TOKEN,
				},
				body: JSON.stringify({
					query: query
				})	
			})

current error is: “Parse error on ": " (STRING) at [1, 153]”, but I have played around with so many different variations of escaping quotes, different fields, etc. that I have gotten different variations on that error. I can successfully pass column values using graphQL from Postman, just not from my JS code (in React/Gatsby). I also tried passing query variables following the responses to several other users’ issues, but in that case I always get “variable is referenced but not defined” errors.

Thanks for any help on this - I have been pulling my hair out for hours on this now!

Hi @samanthaff,

I would recommend logging your “query” to see if all your IDs are being passed in correctly.
Have you tried passing in the IDs using string interpolation? e.g. ${boardId}

Let me know what you find from these suggestions :slight_smile:

Hi Alessandra - thanks for the suggestion. The board ID and group ID are being passed correctly - I actually have them hardcoded in my project and replaced them just for privacy in this post but I see how that could be unclear to look at. I am successfully able to create the item when the query consists of only board id, group id, and item name. As soon as I add the column_values key is when it breaks.

Hello @samanthaff,

I think you might be having issues because of how you are escaping quotes.

Can you please try the following?

column_values: "{ \"long_text\": {\"text\":\"Testing testing\"} }"

Please let me know if that worked for you!

Cheers,
Matias

Hi @Matias.Monday

I have a similar problem. Except that my request worked for weeks until yesterday.
There is my query :

$query =
            'mutation {
            create_item ( board_id: 409788845, group_id: "topics", item_name: "TEST MODULE",
                column_values: "{
                    \"texte5\" : \"test tex\",
                    \"texte\" : \"Dev\",
                    \"person\" : \"2556545674\",
                    \"connecter_les_tableaux7\" : {\"item_ids\" : [14564564960]},
                    \"date\" : {\"date\" : \"2023-03-30\", \"time\" : \"08:49:02\"},
                    \"date6\" : {\"date\" : \"2023-03-30\", \"time\" : \"10:25:00\"},
                    \"chiffres\" : \"1.6\",
                    \"chiffres0\" : \"372847239\"
                }")  {
                    id
                }
            }';

This return me this error :

{
    "errors": [
        {
            "message": "Parse error on bad Unicode escape sequence: \"{\\n                    \\\\\\\"texte5\\\\\\\" : \\\\\\\"test tex\\\\\\\",\\n                    \\\\\\\"texte\\\\\\\" : \\\\\\\"Dev\\\\\\\",\\n                    \\\\\\\"person\\\\\\\" : \\\\\\\"2556545674\\\\\\\",\\n                    \\\\\\\"connecter_les_tableaux7\\\\\\\" : {\\\\\\\"item_ids\\\\\\\" : [14564564960]},\\n                    \\\\\\\"date\\\\\\\" : {\\\\\\\"date\\\\\\\" : \\\\\\\"2023-03-30\\\\\\\", \\\\\\\"time\\\\\\\" : \\\\\\\"08:49:02\\\\\\\"},\\n                    \\\\\\\"date6\\\\\\\" : {\\\\\\\"date\\\\\\\" : \\\\\\\"2023-03-30\\\\\\\", \\\\\\\"time\\\\\\\" : \\\\\\\"10:25:00\\\\\\\"},\\n                    \\\\\\\"chiffres\\\\\\\" : \\\\\\\"1.6\\\\\\\",\\n                    \\\\\\\"chiffres0\\\\\\\" : \\\\\\\"372847239\\\\\\n                }\" (error) at [3, 32]",
            "locations": [
                {
                    "line": 3,
                    "column": 32
                }
            ]
        }
    ],

Here is how I send the data in PHP :

 $result = @file_get_contents($this->apiUrl, false, stream_context_create([
            'http' => [
                'method' => 'POST',
                'header' => $this->headers,
                'content' => json_encode(['query' => $query]),
            ]
        ]));

Again I want to specify that my request were working yesterday (I have tried with the exact data who works yesterday).

Could you take a look at this ?

Thanks.
Clement.

Now I get the error Parse error on “: {” (STRING) at [1, 156]

Hello @Cleement and welcome to the community!

I hope you like it here :muscle:

I have checked with the team and it looks like you might be seeing this errors because of a migration that was done on our end.

The new changes follow the GraphQL specifications more closely and patches lots of different gaps, just like strings with line endings.

To have a multiline string you need to use block strings """text""" , not "text".

You can also remove line endings from the query and keep it in one line.

You can also use GraphQL variables to put in any text as a JSON. It’s recommended to use this approach for big values, as this improves readability of queries.

I attached some examples of valid and invalid queries.

Valid:

Valid:

Invalid:

I hope that helps!

1 Like

Hello again @samanthaff,

I just created a working example in Postman and exported it to JS:

Javascript - fetch:

var myHeaders = new Headers();
myHeaders.append("Authorization", "MYAPIKEYHERE");
myHeaders.append("Content-Type", "application/json");

var graphql = JSON.stringify({
  query: "mutation { create_item (board_id: 1234567890, group_id: \"topics\", item_name: \"Just put those column values in please\", column_values: \"{ \\\"long_text\\\": {\\\"text\\\":\\\"Testing testing\\\" }}\") { id }}",
  variables: {"myColumnValues":"{\"text\":\"Some text\"}"}
})
var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: graphql,
  redirect: 'follow'
};

fetch("https://api.monday.com/v2", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));

Javascript JQuery:

var settings = {
  "url": "https://api.monday.com/v2",
  "method": "POST",
  "timeout": 0,
  "headers": {
    "Authorization": "MYAPIKEYHERE",
    "Content-Type": "application/json",
  },
  "data": JSON.stringify({
    query: "mutation { create_item (board_id: 1234567890, group_id: \"topics\", item_name: \"Just put those column values in please\", column_values: \"{ \\\"long_text\\\": {\\\"text\\\":\\\"Testing testing\\\" }}\") { id }}",
    variables: {"myColumnValues":"{\"text\":\"Some text\"}"}
  })
};

$.ajax(settings).done(function (response) {
  console.log(response);
});

Let me know if that helps!

Cheers,
Matias

Thanks Matias, that worked for me.

I’m still not sure what the critical difference was between my original attempts and your fix - the extra backslashes around the column value key/values? Which step I stringified it? In any case, hoping I can successfully pattern match yours as I add more column values of different types.

Thanks again!

@Matias.Monday Although the hardcoded string example worked, I am now still having the same issue as before with passing query variables. I tried creating a columnValues variable as above in your fetch example, and substituted $columnValues in the query in place of the entire JSON. I get the error: “Variable $columnValues is used by anonymous mutation but not declared”

Hello again @samanthaff,

Sorry about that, if you want to use the variables, you have to define them like this:

var myHeaders = new Headers();
myHeaders.append("Authorization", "YOURAPIKEY");
myHeaders.append("Content-Type", "application/json");

var graphql = JSON.stringify({
  query: "mutation ($columnValues: JSON!) { create_item (board_id: 1234567890, group_id: \"topics\", item_name: \"Just put those column values in please\", column_values: $columnValues) { id }}",
  variables: {"columnValues":"{\"text\":\"Some text\"}"}
})
var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: graphql,
  redirect: 'follow'
};

fetch("https://api.monday.com/v2", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));

Let me know if you have any questions!

Cheers,
Matias