Help

Re: How can I prevent the "INVALID MULTIPLE CHOICE OPTIONS" error?

3141 0
cancel
Showing results for 
Search instead for 
Did you mean: 
Matthew_Knight
4 - Data Explorer
4 - Data Explorer

Hi

I’m trying to add data to a table using the API, one field of which is a ‘Multiple Choice’ field, so i’m passing data as an array.

However, it will only accept the POST if the table has predefined multiple choice options and you’re sending a POST with one or more those options, else it throws a ‘INVALID_MULTIPLE_CHOICE_OPTIONS’ error.

And, from what I see you cannot create multiple choice options by using the API either.

I assume this is expected behaviour, but… is there a way of programmatically adding new options to a multiple choice typed field, or even getting a list of acceptable values for that field, so i can check the data before calling the API?

Thanks!

mk

8 Replies 8
Tuur
10 - Mercury
10 - Mercury

Not that I’m aware of. Everything metadata related is basically non-existent.

Neil_Poulin
4 - Data Explorer
4 - Data Explorer

I’m also having this problem. How can I create a record that has a “multiple choice” column for values that are going to be an unknown set of “tags”? So far the only work-around I have found is to set the column type to be a “single line text” and upload my tags as a comma-delimited string, then when I am done with the API, going to the graphical interface and converting the column type to be a multi-select.

Matt_Langston
5 - Automation Enthusiast
5 - Automation Enthusiast

Having this problem as well. Unfortunately, the API gives you no way of creating the new options. I’m having to forego the nice pill formatting to just string delimit my values. Another option if you are just wanting the pill formatting would be to make a lookup table that you can write the new values to, then send an array of those value ids from the lookup table as an array to your original linked column; that’s more work than I want to do at the moment though.

Jeff_Rose
4 - Data Explorer
4 - Data Explorer

One solution that worked for me is to convert the column to a single line text type. Import your data, and then switch back to single select and it will automatically use the existing values to initialize the set of options.

Elmawkaa_Admin
5 - Automation Enthusiast
5 - Automation Enthusiast

It works when you use the {typecast: true} parameter
example:

base(‘Deal’).create({
“Quantity”: 720,
“PaymentMethod”: “Cash”,
}, {typecast: true}, function(err, record) {
if (err) {
console.error(err);
return;
}
console.log(record.getId());
});

Willy_Wu
4 - Data Explorer
4 - Data Explorer

For some more context, this is what the Airtable API’s documentation says when you look at a “Single select” or “Multiple select” field:

When creating or updating records, if the choice string does not exactly match an existing option, the request will fail with an INVALID_MULTIPLE_CHOICE_OPTIONS error unless the typecast parameter is enabled. If typecast is enabled, a new choice will be created if one does not exactly match.

Abdullah_Oladip
4 - Data Explorer
4 - Data Explorer

Here is an example of where to add the typecast

var Airtable = require('airtable');
var base = new Airtable({apiKey: 'YOUR_API_KEY'}).base('baseId');

base('Table 1').create([
  {
    "fields": {}
  },
  {
    "fields": {}
  }
], {typecast: true}, function(err, records) {
  if (err) {
    console.error(err);
    return;
  }
  records.forEach(function (record) {
    console.log(record.getId());
  });
});
hek
4 - Data Explorer
4 - Data Explorer

Example for python users, very similar. I use this function to call up the format and then just drop w.e. data I'm working on in.

def get_json_obj(typecast=True, fields_to_merge_on="Name", perform_upsert=True):
    """
    if perform_upsert:
        json_obj = {
            "performUpsert": {
                "fieldsToMergeOn": [
                    fields_to_merge_on
                ]
            },
            "records": [],
            "typecast": typecast
        }
    else:
        json_obj = {
            "records": [],
            "typecast": typecast
        }
    return json_obj