{"id":2452,"date":"2021-06-23T19:38:31","date_gmt":"2021-06-24T00:38:31","guid":{"rendered":"https:\/\/xlinesoft.com\/blog\/?p=2452"},"modified":"2026-08-16T15:37:15","modified_gmt":"2026-08-16T20:37:15","slug":"working-with-airtables-rest-api","status":"publish","type":"post","link":"https:\/\/xlinesoft.com\/blog\/2021\/06\/23\/working-with-airtables-rest-api\/","title":{"rendered":"Working with Airtable&#8217;s REST API"},"content":{"rendered":"<p>Airtable can be used as an external data source through its Web API. This tutorial shows how to connect a PHPRunner or ASPRunner.NET application to Airtable and work with records through REST endpoints.<\/p>\n<p><a href=\"https:\/\/xlinesoft.com\/blog\/wp-content\/uploads\/2021\/06\/airtable.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/xlinesoft.com\/blog\/wp-content\/uploads\/2021\/06\/airtable-600x386.png\" alt=\"\" width=\"600\" height=\"386\" class=\"alignnone size-medium wp-image-2468\" srcset=\"https:\/\/xlinesoft.com\/blog\/wp-content\/uploads\/2021\/06\/airtable-600x386.png 600w, https:\/\/xlinesoft.com\/blog\/wp-content\/uploads\/2021\/06\/airtable-768x495.png 768w, https:\/\/xlinesoft.com\/blog\/wp-content\/uploads\/2021\/06\/airtable-1024x659.png 1024w, https:\/\/xlinesoft.com\/blog\/wp-content\/uploads\/2021\/06\/airtable.png 1320w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><br \/>\n<!--more--><\/p>\n<p><strong>Updated August 2026:<\/strong> Airtable no longer supports the legacy user API keys used when this article was originally published. The setup below now uses a Personal Access Token.<\/p>\n<p>With this connection you can retrieve Airtable records and also create, update and delete records from a generated PHPRunner or ASPRunner.NET application.<\/p>\n<h2>Airtable account setup<\/h2>\n<p>Before you start, create or open the Airtable base you want to use.<\/p>\n<p>Airtable Web API requests now use a <strong>Personal Access Token (PAT)<\/strong>. Open the <a href=\"https:\/\/airtable.com\/create\/tokens\">Airtable Personal Access Tokens page<\/a> and create a token for this integration.<\/p>\n<p>For the examples in this article, the token needs access to the Airtable base you are connecting to and the appropriate record permissions. For a connection that both reads and modifies records, use the following scopes:<\/p>\n<ul>\n<li><strong>data.records:read<\/strong><\/li>\n<li><strong>data.records:write<\/strong><\/li>\n<\/ul>\n<p>When creating the token, also add the specific Airtable base that the application should be allowed to access. Avoid granting access to unrelated bases unless the application actually needs them.<\/p>\n<p>You will also need the <strong>Base ID<\/strong>. Airtable base IDs normally begin with <strong>app<\/strong>.<\/p>\n<p>The Airtable Web API URL follows this format:<\/p>\n<div class=\"my-syntax-highlighter\">\n<pre><textarea id=\"mshighlighter\" class=\"mshighlighter\" language=\"\" name=\"mshighlighter\" >\r\nhttps:\/\/api.airtable.com\/v0\/YOUR_BASE_ID\/<\/textarea><\/pre>\n<\/div>\n<p>You can find your base ID and table information in Airtable&#8217;s <a href=\"https:\/\/airtable.com\/developers\/web\/api\/introduction\">Web API documentation<\/a>.<\/p>\n<p>The screenshot below comes from the original version of this tutorial. Airtable&#8217;s developer interface has changed, but the base\/table information and sample API requests serve the same purpose.<\/p>\n<p><a href=\"https:\/\/xlinesoft.com\/blog\/wp-content\/uploads\/2021\/06\/airtable_api_manual.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/xlinesoft.com\/blog\/wp-content\/uploads\/2021\/06\/airtable_api_manual-600x368.png\" alt=\"\" width=\"600\" height=\"368\" class=\"alignnone size-medium wp-image-2454\" srcset=\"https:\/\/xlinesoft.com\/blog\/wp-content\/uploads\/2021\/06\/airtable_api_manual-600x368.png 600w, https:\/\/xlinesoft.com\/blog\/wp-content\/uploads\/2021\/06\/airtable_api_manual-768x471.png 768w, https:\/\/xlinesoft.com\/blog\/wp-content\/uploads\/2021\/06\/airtable_api_manual-1024x627.png 1024w, https:\/\/xlinesoft.com\/blog\/wp-content\/uploads\/2021\/06\/airtable_api_manual.png 1534w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><\/p>\n<h2>PHPRunner \/ ASPRunner.NET setup<\/h2>\n<p>Create a REST API connection in your project.<\/p>\n<p>For more information about REST API connections, see the <a href=\"https:\/\/xlinesoft.com\/phprunner\/docs\/rest-api-connections.htm\">PHPRunner REST API Connections documentation<\/a> or the <a href=\"https:\/\/xlinesoft.com\/asprunnernet\/docs\/rest-api-connections.htm\">ASPRunner.NET REST API Connections documentation<\/a>.<\/p>\n<h3>REST API connection<\/h3>\n<p>Use the following URL as the REST API connection URL:<\/p>\n<div class=\"my-syntax-highlighter\">\n<pre><textarea id=\"mshighlighter\" class=\"mshighlighter\" language=\"\" name=\"mshighlighter\" >\r\nhttps:\/\/api.airtable.com\/v0\/YOUR_BASE_ID\/<\/textarea><\/pre>\n<\/div>\n<p>Replace <strong>YOUR_BASE_ID<\/strong> with the ID of your Airtable base.<\/p>\n<p>For authentication, configure the token so each request contains this HTTP header:<\/p>\n<div class=\"my-syntax-highlighter\">\n<pre><textarea id=\"mshighlighter\" class=\"mshighlighter\" language=\"\" name=\"mshighlighter\" >\r\nAuthorization: Bearer YOUR_PERSONAL_ACCESS_TOKEN<\/textarea><\/pre>\n<\/div>\n<p>In the REST API connection settings, this can be configured as API Key authentication with the token sent in the HTTP header.<\/p>\n<p>Do not place the Personal Access Token directly into application code or expose it to client-side JavaScript.<\/p>\n<p><a href=\"https:\/\/xlinesoft.com\/blog\/wp-content\/uploads\/2021\/06\/airtable_rest_connection.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/xlinesoft.com\/blog\/wp-content\/uploads\/2021\/06\/airtable_rest_connection-600x417.png\" alt=\"\" width=\"600\" height=\"417\" class=\"alignnone size-medium wp-image-2456\" srcset=\"https:\/\/xlinesoft.com\/blog\/wp-content\/uploads\/2021\/06\/airtable_rest_connection-600x417.png 600w, https:\/\/xlinesoft.com\/blog\/wp-content\/uploads\/2021\/06\/airtable_rest_connection-768x533.png 768w, https:\/\/xlinesoft.com\/blog\/wp-content\/uploads\/2021\/06\/airtable_rest_connection.png 834w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><\/p>\n<p>The screenshot above was created with the older Airtable API-key setup. The important difference today is that the value is a <strong>Personal Access Token<\/strong>, not a legacy Airtable API key.<\/p>\n<h3>List records<\/h3>\n<p>For the List operation, specify the Airtable table name as the Resource. For example:<\/p>\n<div class=\"my-syntax-highlighter\">\n<pre><textarea id=\"mshighlighter\" class=\"mshighlighter\" language=\"\" name=\"mshighlighter\" >\r\nCustomers<\/textarea><\/pre>\n<\/div>\n<p>The REST connection URL already contains the base ID, so the resulting request is equivalent to:<\/p>\n<div class=\"my-syntax-highlighter\">\n<pre><textarea id=\"mshighlighter\" class=\"mshighlighter\" language=\"\" name=\"mshighlighter\" >\r\nhttps:\/\/api.airtable.com\/v0\/YOUR_BASE_ID\/Customers<\/textarea><\/pre>\n<\/div>\n<p>Run the request and add the fields you need to the REST view.<\/p>\n<p>Make sure to include Airtable&#8217;s <strong>id<\/strong> value. This is the Airtable record ID and is required when you later view, edit or delete an individual record.<\/p>\n<p><a href=\"https:\/\/xlinesoft.com\/blog\/wp-content\/uploads\/2021\/06\/airtable_rest_list.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/xlinesoft.com\/blog\/wp-content\/uploads\/2021\/06\/airtable_rest_list-600x415.png\" alt=\"\" width=\"600\" height=\"415\" class=\"alignnone size-medium wp-image-2458\" srcset=\"https:\/\/xlinesoft.com\/blog\/wp-content\/uploads\/2021\/06\/airtable_rest_list-600x415.png 600w, https:\/\/xlinesoft.com\/blog\/wp-content\/uploads\/2021\/06\/airtable_rest_list-768x531.png 768w, https:\/\/xlinesoft.com\/blog\/wp-content\/uploads\/2021\/06\/airtable_rest_list-1024x707.png 1024w, https:\/\/xlinesoft.com\/blog\/wp-content\/uploads\/2021\/06\/airtable_rest_list.png 1281w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><\/p>\n<p>Proceed to the Pages screen in PHPRunner or ASPRunner.NET, select <strong>id<\/strong> as the key column and enable the pages you need, such as View, Edit, Add and Delete.<\/p>\n<p><a href=\"https:\/\/xlinesoft.com\/blog\/wp-content\/uploads\/2021\/06\/airtable_rest_pages.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/xlinesoft.com\/blog\/wp-content\/uploads\/2021\/06\/airtable_rest_pages-600x359.png\" alt=\"\" width=\"600\" height=\"359\" class=\"alignnone size-medium wp-image-2461\" srcset=\"https:\/\/xlinesoft.com\/blog\/wp-content\/uploads\/2021\/06\/airtable_rest_pages-600x359.png 600w, https:\/\/xlinesoft.com\/blog\/wp-content\/uploads\/2021\/06\/airtable_rest_pages-768x459.png 768w, https:\/\/xlinesoft.com\/blog\/wp-content\/uploads\/2021\/06\/airtable_rest_pages.png 866w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><\/p>\n<h3>Single record<\/h3>\n<p>To retrieve one Airtable record, include its record ID in the resource.<\/p>\n<p>For a table named Customers:<\/p>\n<div class=\"my-syntax-highlighter\">\n<pre><textarea id=\"mshighlighter\" class=\"mshighlighter\" language=\"\" name=\"mshighlighter\" >\r\nCustomers\/:{keys.id}<\/textarea><\/pre>\n<\/div>\n<p>Replace <strong>Customers<\/strong> with your own Airtable table name.<\/p>\n<p><a href=\"https:\/\/xlinesoft.com\/blog\/wp-content\/uploads\/2021\/06\/airtable_rest_single.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/xlinesoft.com\/blog\/wp-content\/uploads\/2021\/06\/airtable_rest_single-600x288.png\" alt=\"\" width=\"600\" height=\"288\" class=\"alignnone size-medium wp-image-2462\" srcset=\"https:\/\/xlinesoft.com\/blog\/wp-content\/uploads\/2021\/06\/airtable_rest_single-600x288.png 600w, https:\/\/xlinesoft.com\/blog\/wp-content\/uploads\/2021\/06\/airtable_rest_single-768x369.png 768w, https:\/\/xlinesoft.com\/blog\/wp-content\/uploads\/2021\/06\/airtable_rest_single.png 802w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><\/p>\n<h3>Delete<\/h3>\n<p>For the Delete operation, use the HTTP method <strong>DELETE<\/strong> and include the Airtable record ID in the resource:<\/p>\n<div class=\"my-syntax-highlighter\">\n<pre><textarea id=\"mshighlighter\" class=\"mshighlighter\" language=\"\" name=\"mshighlighter\" >\r\nCustomers\/:{keys.id}<\/textarea><\/pre>\n<\/div>\n<p>Again, replace <strong>Customers<\/strong> with your table name.<\/p>\n<p><a href=\"https:\/\/xlinesoft.com\/blog\/wp-content\/uploads\/2021\/06\/airtable_rest_delete.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/xlinesoft.com\/blog\/wp-content\/uploads\/2021\/06\/airtable_rest_delete-600x273.png\" alt=\"\" width=\"600\" height=\"273\" class=\"alignnone size-medium wp-image-2464\" srcset=\"https:\/\/xlinesoft.com\/blog\/wp-content\/uploads\/2021\/06\/airtable_rest_delete-600x273.png 600w, https:\/\/xlinesoft.com\/blog\/wp-content\/uploads\/2021\/06\/airtable_rest_delete-768x349.png 768w, https:\/\/xlinesoft.com\/blog\/wp-content\/uploads\/2021\/06\/airtable_rest_delete.png 800w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><\/p>\n<h3>Insert<\/h3>\n<p>Insert and update operations require a custom JSON request body because Airtable expects field values inside a <strong>fields<\/strong> object.<\/p>\n<p>For the Insert operation, set the HTTP method to <strong>POST<\/strong>. The resource in this example is:<\/p>\n<div class=\"my-syntax-highlighter\">\n<pre><textarea id=\"mshighlighter\" class=\"mshighlighter\" language=\"\" name=\"mshighlighter\" >\r\nCustomers<\/textarea><\/pre>\n<\/div>\n<p>Click <strong>Generate PHP (C#) code<\/strong> and customize the generated request. Replace field names such as <strong>ContactName<\/strong>, <strong>City<\/strong> and <strong>CompanyName<\/strong> with fields from your Airtable table.<\/p>\n<p><strong>PHPRunner PHP code<\/strong><\/p>\n<div class=\"my-syntax-highlighter\">\n<pre><textarea id=\"mshighlighter\" class=\"mshighlighter\" language=\"php\" name=\"mshighlighter\" >\r\n$method = \"POST\";\r\n$url = \"Customers\";\r\n\r\n\/\/ replace variables in the URL\r\n$url = RunnerContext::PrepareRest($url);\r\n\r\n\/\/ prepare request body\r\n$body = array();\r\n$body[] = array(\r\n\t\"name\" => \"Content-Type\",\r\n\t\"value\" => \"application\/json\",\r\n\t\"location\" => \"header\",\r\n\t\"skipEmpty\" => true\r\n);\r\n\r\n$body = $dataSource->preparePayload($body);\r\n\r\n$jsonBody = array(\r\n\t\"fields\" => array(\r\n\t\t\"ContactName\" => RunnerContext::PrepareRest(\":{ContactName}\", false),\r\n\t\t\"City\" => RunnerContext::PrepareRest(\":{City}\", false),\r\n\t\t\"CompanyName\" => RunnerContext::PrepareRest(\":{CompanyName}\", false)\r\n\t)\r\n);\r\n\r\n\/\/ do the API request\r\n$response = $dataSource->getConnection()->requestJson(\r\n\t$url,\r\n\t$method,\r\n\t$jsonBody,\r\n\t$body[\"header\"],\r\n\t$body[\"url\"]\r\n);\r\n\r\nglobal $restResultCache;\r\n$restResultCache = array();\r\n\r\nif ($response === false)\r\n{\r\n\t$dataSource->setError(\r\n\t\t$dataSource->getConnection()->lastError()\r\n\t);\r\n\treturn false;\r\n}\r\n\r\nreturn true;<\/textarea><\/pre>\n<\/div>\n<p><strong>ASPRunner.NET C# code<\/strong><\/p>\n<div class=\"my-syntax-highlighter\">\n<pre><textarea id=\"mshighlighter\" class=\"mshighlighter\" language=\"\" name=\"mshighlighter\" >\r\ndynamic body = XVar.Array(), jsonBody = null, method = null, url = null, var_response = null;\r\n\r\nmethod = new XVar(\"POST\");\r\nurl = new XVar(\"Customers\");\r\n\r\nurl = XVar.Clone(\r\n\tRunnerContext.PrepareRest((XVar)(url))\r\n);\r\n\r\nbody = XVar.Clone(XVar.Array());\r\n\r\nbody.InitAndSetArrayItem(\r\n\tnew XVar(\r\n\t\t\"name\", \"Content-Type\",\r\n\t\t\"value\", \"application\/json\",\r\n\t\t\"location\", \"header\",\r\n\t\t\"skipEmpty\", true\r\n\t),\r\n\tnull\r\n);\r\n\r\nbody = XVar.Clone(\r\n\tdataSource.preparePayload((XVar)(body))\r\n);\r\n\r\njsonBody = XVar.Clone(\r\n\tnew XVar(\r\n\t\t\"fields\",\r\n\t\tnew XVar(\r\n\t\t\t\"ContactName\",\r\n\t\t\tRunnerContext.PrepareRest(\r\n\t\t\t\tnew XVar(\":{ContactName}\"),\r\n\t\t\t\tnew XVar(false)\r\n\t\t\t),\r\n\t\t\t\"City\",\r\n\t\t\tRunnerContext.PrepareRest(\r\n\t\t\t\tnew XVar(\":{City}\"),\r\n\t\t\t\tnew XVar(false)\r\n\t\t\t),\r\n\t\t\t\"CompanyName\",\r\n\t\t\tRunnerContext.PrepareRest(\r\n\t\t\t\tnew XVar(\":{CompanyName}\"),\r\n\t\t\t\tnew XVar(false)\r\n\t\t\t)\r\n\t\t)\r\n\t)\r\n);\r\n\r\nvar_response = XVar.Clone(\r\n\tdataSource.getConnection().requestJson(\r\n\t\t(XVar)(url),\r\n\t\t(XVar)(method),\r\n\t\t(XVar)(jsonBody),\r\n\t\t(XVar)(body[\"header\"]),\r\n\t\t(XVar)(body[\"url\"])\r\n\t)\r\n);\r\n\r\nGlobalVars.restResultCache = XVar.Clone(XVar.Array());\r\n\r\nif (XVar.Equals(\r\n\tXVar.Pack(var_response),\r\n\tXVar.Pack(false)\r\n))\r\n{\r\n\tdataSource.setError(\r\n\t\t(XVar)(dataSource.getConnection().lastError())\r\n\t);\r\n\treturn false;\r\n}\r\n\r\nreturn true;<\/textarea><\/pre>\n<\/div>\n<h3>Update<\/h3>\n<p>Updating a record is similar to inserting one, except that the HTTP method is <strong>PATCH<\/strong> and the Airtable record ID is included in the resource.<\/p>\n<p><strong>PHPRunner PHP code<\/strong><\/p>\n<div class=\"my-syntax-highlighter\">\n<pre><textarea id=\"mshighlighter\" class=\"mshighlighter\" language=\"php\" name=\"mshighlighter\" >\r\n$method = \"PATCH\";\r\n$url = \"Customers\/:{id}\";\r\n\r\n\/\/ replace variables in the URL\r\n$url = RunnerContext::PrepareRest($url);\r\n\r\n\/\/ prepare request body\r\n$body = array();\r\n$body[] = array(\r\n\t\"name\" => \"Content-Type\",\r\n\t\"value\" => \"application\/json\",\r\n\t\"location\" => \"header\",\r\n\t\"skipEmpty\" => true\r\n);\r\n\r\n$body = $dataSource->preparePayload($body);\r\n\r\n$jsonBody = array(\r\n\t\"fields\" => array(\r\n\t\t\"ContactName\" => RunnerContext::PrepareRest(\":{ContactName}\", false),\r\n\t\t\"City\" => RunnerContext::PrepareRest(\":{City}\", false),\r\n\t\t\"CompanyName\" => RunnerContext::PrepareRest(\":{CompanyName}\", false)\r\n\t)\r\n);\r\n\r\n\/\/ do the API request\r\n$response = $dataSource->getConnection()->requestJson(\r\n\t$url,\r\n\t$method,\r\n\t$jsonBody,\r\n\t$body[\"header\"],\r\n\t$body[\"url\"]\r\n);\r\n\r\nglobal $restResultCache;\r\n$restResultCache = array();\r\n\r\nif ($response === false)\r\n{\r\n\t$dataSource->setError(\r\n\t\t$dataSource->getConnection()->lastError()\r\n\t);\r\n\treturn false;\r\n}\r\n\r\nreturn true;<\/textarea><\/pre>\n<\/div>\n<p><strong>ASPRunner.NET C# code<\/strong><\/p>\n<div class=\"my-syntax-highlighter\">\n<pre><textarea id=\"mshighlighter\" class=\"mshighlighter\" language=\"\" name=\"mshighlighter\" >\r\ndynamic body = XVar.Array(), jsonBody = null, method = null, url = null, var_response = null;\r\n\r\nmethod = new XVar(\"PATCH\");\r\nurl = new XVar(\"Customers\/:{id}\");\r\n\r\nurl = XVar.Clone(\r\n\tRunnerContext.PrepareRest((XVar)(url))\r\n);\r\n\r\nbody = XVar.Clone(XVar.Array());\r\n\r\nbody.InitAndSetArrayItem(\r\n\tnew XVar(\r\n\t\t\"name\", \"Content-Type\",\r\n\t\t\"value\", \"application\/json\",\r\n\t\t\"location\", \"header\",\r\n\t\t\"skipEmpty\", true\r\n\t),\r\n\tnull\r\n);\r\n\r\nbody = XVar.Clone(\r\n\tdataSource.preparePayload((XVar)(body))\r\n);\r\n\r\njsonBody = XVar.Clone(\r\n\tnew XVar(\r\n\t\t\"fields\",\r\n\t\tnew XVar(\r\n\t\t\t\"ContactName\",\r\n\t\t\tRunnerContext.PrepareRest(\r\n\t\t\t\tnew XVar(\":{ContactName}\"),\r\n\t\t\t\tnew XVar(false)\r\n\t\t\t),\r\n\t\t\t\"City\",\r\n\t\t\tRunnerContext.PrepareRest(\r\n\t\t\t\tnew XVar(\":{City}\"),\r\n\t\t\t\tnew XVar(false)\r\n\t\t\t),\r\n\t\t\t\"CompanyName\",\r\n\t\t\tRunnerContext.PrepareRest(\r\n\t\t\t\tnew XVar(\":{CompanyName}\"),\r\n\t\t\t\tnew XVar(false)\r\n\t\t\t)\r\n\t\t)\r\n\t)\r\n);\r\n\r\nvar_response = XVar.Clone(\r\n\tdataSource.getConnection().requestJson(\r\n\t\t(XVar)(url),\r\n\t\t(XVar)(method),\r\n\t\t(XVar)(jsonBody),\r\n\t\t(XVar)(body[\"header\"]),\r\n\t\t(XVar)(body[\"url\"])\r\n\t)\r\n);\r\n\r\nGlobalVars.restResultCache = XVar.Clone(XVar.Array());\r\n\r\nif (XVar.Equals(\r\n\tXVar.Pack(var_response),\r\n\tXVar.Pack(false)\r\n))\r\n{\r\n\tdataSource.setError(\r\n\t\t(XVar)(dataSource.getConnection().lastError())\r\n\t);\r\n\treturn false;\r\n}\r\n\r\nreturn true;<\/textarea><\/pre>\n<\/div>\n<h2>Troubleshooting<\/h2>\n<p>If Airtable returns an authentication or permissions error, check all three parts of the Personal Access Token setup:<\/p>\n<ul>\n<li>the token has the required read\/write scopes;<\/li>\n<li>the token has access to the Airtable base you are using;<\/li>\n<li>the Airtable user who created the token has permission to perform the requested operation.<\/li>\n<\/ul>\n<p>Also verify that the Base ID in the REST API connection and the table name in the resource are correct.<\/p>\n<p>Airtable limits the number of API requests that can be made in a short period of time, so applications that repeatedly poll Airtable should also take API rate limits into account.<\/p>\n<p>For current Airtable authentication information, see the <a href=\"https:\/\/support.airtable.com\/docs\/creating-personal-access-tokens\">Personal Access Token documentation<\/a> and the <a href=\"https:\/\/airtable.com\/developers\/web\/api\/introduction\">Airtable Web API documentation<\/a>.<\/p>\n<p>For PHPRunner and ASPRunner.NET configuration details, see the <a href=\"https:\/\/xlinesoft.com\/phprunner\/docs\/rest-api-connections.htm\">PHPRunner REST API Connections documentation<\/a> or the <a href=\"https:\/\/xlinesoft.com\/asprunnernet\/docs\/rest-api-connections.htm\">ASPRunner.NET REST API Connections documentation<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Airtable can be used as an external data source through its Web API. This tutorial shows how to connect a PHPRunner or ASPRunner.NET application to Airtable and work with records through REST endpoints.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[16,1,8],"tags":[],"class_list":["post-2452","post","type-post","status-publish","format-standard","hentry","category-asp-net","category-php-category","category-tutorials"],"_links":{"self":[{"href":"https:\/\/xlinesoft.com\/blog\/wp-json\/wp\/v2\/posts\/2452","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/xlinesoft.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/xlinesoft.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/xlinesoft.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/xlinesoft.com\/blog\/wp-json\/wp\/v2\/comments?post=2452"}],"version-history":[{"count":15,"href":"https:\/\/xlinesoft.com\/blog\/wp-json\/wp\/v2\/posts\/2452\/revisions"}],"predecessor-version":[{"id":3443,"href":"https:\/\/xlinesoft.com\/blog\/wp-json\/wp\/v2\/posts\/2452\/revisions\/3443"}],"wp:attachment":[{"href":"https:\/\/xlinesoft.com\/blog\/wp-json\/wp\/v2\/media?parent=2452"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/xlinesoft.com\/blog\/wp-json\/wp\/v2\/categories?post=2452"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/xlinesoft.com\/blog\/wp-json\/wp\/v2\/tags?post=2452"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}