Skip to main content

Is there any plan for an API to pull metadata? It’s currently very difficult to infer the schema, you have to resort to hacks like reading all records and then trying to infer types and column names from that. It’d be great if you could pull the schema information for a table more easily!



It’d also be awesome if you’d be able to add and change tables from the API, but that’s less pressing to me 🙂

I found a half-way solution that will help in some use-cases while waiting for the metadata API.



Visit https://airtable.com/api and select a base. Then open your browsers console (Developer Tools) and run the following (I tried simply running JSON.stringify(window.application), however there are circular references so I had to manually reconstruct the properties I wanted).



var myapp = {

id:window.application.id,

name:window.application.name,

tables:[]

};



for (let table of window.application.tables){



var mytable = {

id:table.id,

isEmpty:table.isEmpty,

name:table.name,

nameForUrl:table.nameForUrl,

primaryColumnName:table.primaryColumnName,

columns:[]

};



for (let column of table.columns){

var mycolumn = {

id:column.id,

name:column.name,

type:column.type,

typeOptions:column.typeOptions

};



mytable.columns.push(mycolumn);



}



myapp.tables.push(mytable);



}



jQuery('link[rel=stylesheet]').remove();

jQuery("body").html(JSON.stringify(myapp));

console.log(myapp);

is possible implement this code in a function with the link to url?


+1 for this feature request. It would be hugely beneficial and the community has been asking for it for years.


I agree this functionality would be very useful.


+1 Geeeeeeeese. Come on AT.


Sometimes it’s hard to understand whether Airtable really is trying to be a professional solution or not.


+1 Geeeeeeeese. Come on AT.




Are you guys aware of the many ways that have emerged to get at the schema? Here’s one. There are others like this one, and this one.




Are you guys aware of the many ways that have emerged to get at the schema? Here’s one. There are others like this one, and this one.


Yes, because clearly a hack is much better than a proper metadata API.


Is the way to do this now to create a custom block? Looks like its possible through that - Airtable Blocks SDK


I know this is a bit of middle ages as you have to press the button RUN everytime you need to modify your tables…


But i got this as a compromise.



Create a new table where you will store your Schema.


I called it ‘Ledger’ just for clarity.



create a block and use this code, it will populate it with the names of your tables, and then you can use it to make api calls.



let ledger = base.getTable('Ledger');

let tableList = i]



for (table of base.tables) {tableList.push({fields: {'Name' : table.name}})}



await ledger.createRecordsAsync(tableList)



if you want to avoid async random return order of your records you can store it in a string and then parse it as an array in your app.



let ledger = base.getTable('Ledger');

let tableList = ""



for (table of base.tables) {

if (base.tables.indexOf(table) == base.tables.length - 1) {

tableList += table.name

}

else {

tableList += table.name + ", "

}

}



await ledger.createRecordsAsync(A{

fields: {'Name' : tableList }

}])



Are you guys aware of the many ways that have emerged to get at the schema? Here’s one. There are others like this one, and this one.


Should be native, no? 😦


Should be native, no? 😦


I don’t understand your comment. I’m very old; give me more context.


I would love to be able to create an object-oriented Python API for my Airtable base. The current inability to query the schema definition via the API is a problem.


I don’t understand your comment. I’m very old; give me more context.


And I’m feeling old. Perhaps best to move along :grinning_face_with_big_eyes:


I found a half-way solution that will help in some use-cases while waiting for the metadata API.



Visit https://airtable.com/api and select a base. Then open your browsers console (Developer Tools) and run the following (I tried simply running JSON.stringify(window.application), however there are circular references so I had to manually reconstruct the properties I wanted).



var myapp = {

id:window.application.id,

name:window.application.name,

tables:[]

};



for (let table of window.application.tables){



var mytable = {

id:table.id,

isEmpty:table.isEmpty,

name:table.name,

nameForUrl:table.nameForUrl,

primaryColumnName:table.primaryColumnName,

columns:[]

};



for (let column of table.columns){

var mycolumn = {

id:column.id,

name:column.name,

type:column.type,

typeOptions:column.typeOptions

};



mytable.columns.push(mycolumn);



}



myapp.tables.push(mytable);



}



jQuery('link[rel=stylesheet]').remove();

jQuery("body").html(JSON.stringify(myapp));

console.log(myapp);

I tried this and it works great!. I save the json out to a file, then load it into python / dataframe for various uses. Thanks Chester.


See this info about the newly launched Metadata API: Accessing the metadata API.


Reply