Need development and API help? Ask your questions here!
Recently active
I have a Firebase database that mirrors data from an Airtable view. Functionality is in place that allows an Admin user to trigger an import of the Airtable data over to Firebase. This has been working for a few months without issue. Recently, I have started to see that my Firebase function that pulls the images from Airtable records into Firebase is failing. I was wondering if anything has changed or if anyone knows any reason for this. In a Firebase Function I am importing the image from Airtable with code like: let fromUrl = firebaseRecord.fields['Headshot'][0].url; let filename = firebaseRecord.fields['Headshot'][0].filename; firebaseAdmin.storage().bucket(config.firebase.bucket).upload(fromUrl, {destination: filename}) And I get an error like this in Firebase (URL truncated for privacy): ENOENT: no such file or directory, stat 'https://dl.airtable.com/.attachments/be2454...b0c70d14/d3...f0/600-uVJ...B3.jpeg' If I then try to open that URL in a browser, the image is returned and di
Running into this problem: {"error":{"type":"MODEL_ID_NOT_FOUND","message":"Record not found"}} I am doing a PUT request, so I don’t understand why a record needs to be found :confused: PUT assumes your record already exist, that was the problem. There seems to be no way to insert a or update a record if it already exist (like MySQL insert into ... on duplicate key update) in one API call. The above issue got resolved by switching to POST instead of PUT and now I am getting the following error: {"error":{"type":"INVALID_VALUE_FOR_COLUMN","message":"Field \\"lastUpdated\\" cannot accept the provided value"}} I am passing a timestamp (large integer) for a single line text field. Specifying typecast:true or typecast:false doesn’t do anything. Here is the json data posted: {"typecast":false,"fields":{"symbol":"WPC","sector":"finance","lastUpdated":1565899200000,"lastSalePrice":87.955}} Weirdly enough typecast doesn’t do anything. As you can see above, I was posting an integer and a float
I’m trying to create a record using the curl API, and one of the fields in my record is of type “Multiple Select”. The possible values are integers (formatted as strings since that’s the only option for this field), so it’s supposed to be entered as [“1”,“2”,“3”] etc. However, I am using an integration that only supports mustache formatting, and with mustache, JSON arrays get parsed as [1,2,3] and this is not accepted by the API. I’ve tried setting “typecast”:true and it doesn’t work. Is there another way of accomplishing what I’m trying to do here?
Hi, I am new to Airtable and am trying to build a query that will act like a global search across multiple columns. Our members table has the following columns {‘Full Name’,‘Phone’,‘Email’} that I would like to search. I want to have a single search field on our site to look up members by either their Full Name, Phone, or Email. This is the query that I am using, but it doesn’t work, and I have tried many incantations to no avail… record = await table.select({ filterByFormula: OR(‘Full Name’=searchString, ‘Phone’=searchString, ‘Email’=searchString), fields: [‘Member’, ‘Full Name’, ‘Phone’, ‘Email’, ‘Status’, ‘Member Photo’] }).firstPage().then((records) => { rec = records[0][“fields”]; return rec; }).catch((err)=>{ console.error(err) }); The above code works great if I use a simple filterByFormula such as: filterByFormula: 'Member=' + member_id Thanks in advance for any assistance!! Mike
It appears that the record objects returned from the API are dropping any fields that do not have a value. Except in the case of linked table fields, then the field is there but the value is an empty array. This behavior is unexpected for me and I have a few questions… Is the behavior I described in fact the existing/intended behavior? Or am I missing something? If so, then this is unexpected for me because: Empty values are being represented inconsistently based on field type. Why represent a null text field as a field that doesn’t exist, and a null linked records field as an empty collection? I would expect to see fields that I know to be in my table to be faithfully represented in the API, even when those fields have null values. I have to inspect every single record to see what fields it has before I can reliably map it onto a model object. This is less than ideal for several (obvious?) reasons. I noticed this behavior when using the Ruby client, but curl produ
Is there a way to access or recreate the activity feed you get with every entry using the airtable API?
I would like to report a bug. Airtable javascript library has bad error handling when used with promises: The following code demonstrates a wrong function call to table.create(). This function should be called with two parameters, and here I call it with one. Therefore, there should be some reasonable error message or the .catch section should be executed, but instead the program just hangs with the promise left unresolved forever. At a later time, it would log an unclear warning UnhandledPromiseRejectionWarning. But the promise is still left unresolved. Here is the sample code: var Airtable = require('airtable'); var base = new Airtable({apiKey: 'YOUR_API_KEY'}).base('YOUR_BASE_ID'); base('tablename').update({ "something": "wrong" }) .then( (record) => console.log("never gets here.", record)) .catch( (err) => console.error("never gets here neither", err) ); The full error message that appears in the log is: (node:7969) UnhandledPromiseRejectionWarning: [object Object] (n
Hi there, Would love to get more than 100 data points in the state of my app so that I can keep it on the state of my app. How should I go about doing that? This is my take for the first 100 data points and it works as intended. How should I get the other 100+ using the offset? Thank you for the help,
I’m a front end UX guy who would like to create an IOS app backed by a database without having to learn a lot about backend coding. Say I wanted to build an like YELP where the schema includes things like business name, address, phone, rating etc. Could I use airtable to create the backend and store all the data and use the API’s to add/retrieve the records for my app or am I missing something? Is the API designed for this type of scenario?Would it scale if my app had 1,000’s of users? Could I do an API call like get all stores within 10 miles of me? Thanks!
Hello, I would like to create a record via the API. In my table, I have a Single Select Field. It is linked with another table’s data (e.g. north, south, east, west). I am having some issues and errors when trying to POST via the API on this field (422). I see in the API it should be posted in an array, but still no luck selecting this field dynamically and setting data from the other table. Any ideas or help will greatly appreciated.
Have a database of almost 500 pieces of heavy equipment with multiple manufacturers- each having a different style serial number. Each of the manufacturers put our updates by serial number (for software, parts failure issues, saftey issues, etc). Each update document has its own unique code and a list of serial numbers that it applies to. Here’s what I’ve started: I take the s/n list from each document and put it into a spreadsheet and upload it via the .csv block, so each record created represents a single update that applies to that machine. This is done in its own base because I don’t want to use up my record limit, just two update documents meant 700 new records. So I am looking for a way to find the matching serial numbers one machine at a time in the new “imported file” base, and use that collection of info to link the machine in the machine table to the proper update in the update table. Sorry if this is confusing.
>>> a.get_all() Traceback (most recent call last): File "/Users/snatsai/project/airtable/lib/python3.6/site-packages/urllib3/connectionpool.py", line 603, in urlopen chunked=chunked) File "/Users/snatsai/project/airtable/lib/python3.6/site-packages/urllib3/connectionpool.py", line 344, in _make_request self._validate_conn(conn) File "/Users/snatsai/project/airtable/lib/python3.6/site-packages/urllib3/connectionpool.py", line 843, in _validate_conn conn.connect() File "/Users/snatsai/project/airtable/lib/python3.6/site-packages/urllib3/connection.py", line 370, in connect ssl_context=context) File "/Users/snatsai/project/airtable/lib/python3.6/site-packages/urllib3/util/ssl_.py", line 355, in ssl_wrap_socket return context.wrap_socket(sock, server_hostname=server_hostname) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 377, in wrap_socket _context=self) File "/Library/Frameworks/Python.framework/Version
Has anyone out there put this together without needing a 3rd party (like Zapier, Integromat, etc.) involved? :pleading_face: It seems like it wouldn’t be that difficult, but is beyond my skills at the moment. :confused: I could also live with New Record in View -> Google Sheet Row and generate an email from there. I just don’t like my data floating around too many places!
So, I am trying to write a snippet to use in the code step of Zapier. Their documentation says [output] An object or array of objects that will be the “return value” of this code. You can explicitly return early if you like. Setting the output to an array of objects will run the subsequent steps multiple times — once for each object in the array. If Code by Zapier is the Zap’s trigger and an empty array is returned, nothing happens. My problem is that this sure looks like an array of objects to me, but Zapier says its not. Any ideas?
Anyone else running into this? I have the following formula (encoded or not) that throws an INVALID_FILTER_BY_FORMULA error when submitted to the API via JavaScript: AND(IF(FIND(‘GIZELLE’S BUCKET LIST’, Available_Rights) > 0, TRUE(), FALSE())) The only records where this is a problem contain the apostrophe. All others work fine. I’ve explored the forum where people are having problems with commas and similar punctuation within the data and their fixes didn’t work. I’ve also tried looking it up via other available data and that was a bust, too, due to the structure of the tables. Has anyone encountered this? Is this an API problem? Any thoughts or fix ideas welcome. Thanks in advance! Mark
I’m trying to write a function that creates a record from form data but I’m not sure how to construct the request body. Especially since data that going into a multiple select field have to be converted to an array. Any ideas on how to solve this?
I have 20 fields in my table that are named ACH001, ACH002, ACH003, etc. (They’re achievements for a game.) I want to update a specific field when a user completes the achievement, but I don’t know which one they’re completing until I’m ready to make the update call to the database. So, I’m creating a variable called “fieldName” that contains the name of the field. This doesn’t seem to work, however. I get an UNKNOWN_FIELD_NAME error. Error 422. Anyone have any tips on how I should approach this one? var fieldName = getFieldName(achievementId); var airtable = await new Airtable({apiKey: process.env.airtable_key}).base(“appx5AkeU3qgwlYDn”); airtable(‘User’).update(UserRecord.RecordId, { fieldName: Date.now() }, function(err, record) { if (err) { console.error(err); return; } });
I’m at wit’s end…Any help or hints would be AMAZING. Airtable Python Wrapper is able to find a field using Airtable.Match when executed from the local machine, but It Airtable Python Wrapper is able to find a field using Airtable.MAtch when executed from the local machine, but It cannot make the match on Google Cloud. Declared: - - coding: UTF-8 - - search = d['TITLE'] + d['OFFICE'] try: #THIS WONT WORK?? WHAT? record = airtable.match('mysearch', search) airtable.update(record['id'], d, typecast=True) print (' UPDATED ') except: try: #NO PROBLEM INSERTING - TOO BAD ITS NOT CATCHING DUPLICATES airtable.insert(d,typecast=True) print (' INSERTED ') Expected to find the search var in {mysearch} field. Works great on my machine. Will NOT find the match in GCM. make the match on Google Cloud. I’ve tried adding: - - coding: UTF-8 - - here’s whats failing (airtable.match) search = d['TITLE'] + d['OFFICE'] try: **#THIS WONT WORK?? W
Hello, Over the past month or so, I have been experiencing a significant increase in errors when doing GET requests using the API. We are definitely not hitting the 5 request per second rate limit, and aren’t sure how to diagnose and fix this issue. We were hoping to be able to review a history of API queries, but AT support let us know that no such record exists. Has anyone else experienced a sudden increase in GET errors like this? Any tips for diagnosing or resolving it? Thank you!
I have a table of products with ~5000 records. I’d like to grab a subset of these records (about 1000 of them) using the API, and I already have the list of Record IDs that I want. I’ve figured out two ways to get this data using filterByFormula, but both methods take a long time to fetch 1000 records. First method: takes about 20 seconds OR( RECORD_ID = "a1b2c3", RECORD_ID = "a1b2c4", RECORD_ID = "a1b2c5", RECORD_ID = "a1b2c6" ) Second method: takes about 10 seconds SEARCH(RECORD_ID(), "a1b2c3,a1b2c4,a1b2c5,a1b2c6") != "" Are there any more efficient formulas I could be using here?
Hi, I am fairly new to C# and recently started experimenting with Airtable API nuget package. But don’t know from where to start. Can someone please point me in right direction where I can find some tutorials/Or a part of code that worked for you, etc? I just need an example to get started with. P.S. I know python and have already used airtable API on it. Thanks
I’m using the Airtable API in Wix to create an entry in one of my bases. I can get the entry to create no problem, the issue is I would like to return the entry id after the creation and it returns ‘undefined’. See me code below, I can get the id number to print out at the point shown, but I can’t send it out to my other functions. I’m pretty new to this, I’m sure it’s just a simple oversight, thank you in advance. export function getCustomer (){ var nCustomer; base('Customers').create({ "Name": "John Smith", "Orders": [ ] }, function (err, record) { if (err) { console.error(err); return; } nCustomer = record.getId(); //console.log here I get the record id }); //console.log here, returns 'undefined' return nCustomer; }
Hello! I have two tables linked by a foreign key. How can I get the second table entries that reference the first table entry? The fact is that the record ID is stored in an array. I tried to use the ARRAYJOIN function, but it returns a string from the display names, not an ID Thank you in advance!
I looked at this as well, but not sure if it’s the same problem I haven’t changed my API in a long time, but for some reason when I do the following get: returned_dictionary = at.get(unit_history, view='Default', filter_by_formula = search_term) Where search_term is equal to: '{Unit I.D.} = "510040000751373238393835"' And here is the data in the TABLE and the CORRECT COLUMN. (Click the image to see the record.) but returned_dictionary just returns OrderedDict([('records', [])])
I am trying to update a column that is linked to another record. None of the other fields in the base are linked to another record, and all of those will update. I get an error only when I add the field that is linked to another record. I am using Shortcuts on iOS. This is the error I get: {“error”:{“type”:“INVALID_VALUE_FOR_COLUMN”,“message”:“Value is not an array of record IDs.”}} I have zero experience with APIs, but truly appreciate any help!
Already have an account? Login
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.