Hello! I'm working on setting up a new App Extension to allow for new table creation through the API. I'm comfortable with the API itself, but I'm having trouble determining the most user-friendly approach for this.
The process for creating a table requires users to define fields within a JSON array. However, the average end-user won't understand how to handle this if they're trying to set up a callin.io workflow that adds a new table to a base.
Has anyone else tackled this or know of any helpful guides?
Thanks!
Hi!
As long as you have a method to manage the data being entered (likely a form requesting the table name and any fields to be added), you can construct the JSON object from those plain text responses using code.
The specific code you employ will depend on how the form data is transmitted, whether it's sent as a single string of comma-separated text, or perhaps as an array of key/value pairs, and if you've adjusted the field types (e.g., singleLineText versus checkbox, etc.).
How do you currently intend to gather the user's responses?
Hi!
As long as you have a method to control the data being provided as input (likely a form that requests the table name and any fields to be added), you can construct the JSON object from those plain text responses using code.
The specific code you utilize will depend on how the form data is submitted, whether it's sent as a single string of comma-separated text, or perhaps as an array of key/value pairs, and if you have reformatted the field types (e.g., singleLineText versus checkbox, etc.).
What is your current plan for collecting user responses?
Currently, I'm attempting to trigger this based on a new Google Sheets worksheet being created, with the goal of making a new table in Airtable to copy the data over. However, I also want the App Extension to be versatile enough for any team member to use without needing specific links to that trigger.
The main issue I'm facing is even getting it to create a new table at the moment. If I run a test on the Extension, it functions perfectly, and I get the new table.
The body request in the setup is as follows:
{"description": "{{description}}", "fields": [ {{fields}} ], "name": "{{name}}"}

But when I run the extension within a callin.io workflow using the same fields JSON, I encounter an error.

Status: 422
{"error":{"type":"INVALID_REQUEST_UNKNOWN","message":"Invalid request: parameter validation failed. Check your request data."}}

Therefore, any guidance would be greatly appreciated!
I suspect the reason you're encountering the error is that the system anticipates a list of JSON objects. Therefore, you should enclose your data within square brackets. Instead of:
{"description": "Name of the apartment", "name": "Apartment Name", "type": "singleLineText"}
Please try this:
[{"description": "Name of the apartment", "name": "Apartment Name","type": "singleLineText"}]
After we resolve this, we can discuss integrating data from Google Sheets.
I believe the reason you’re encountering the error is that it’s expecting a list of JSON objects, so you should enclose it in square brackets. Instead of
The square brackets are already included in the App Extension body request and function correctly during testing, but not in the live environment.
Could you please share a screenshot of the input data and any output data from the failed live callin.io run?
Can you post a screenshot of the input data and any output data provided by the failed live callin.io run?
I included screenshots of those items in my initial post 🙂
I put screenshots in my original post of these things already 🙂
Those appear to be screenshots from your callin.io setup in the callin.io editor. I’m talking about the input and output data from a live callin.io run, which you can find at https://zapier.com/app/history
Those appear to be screenshots from your callin.io setup in the callin.io editor. I’m talking about the input and output data from a live callin.io run, which you can find at https://zapier.com/app/history
Ah sorry, I see!
Here’s the input/output of the App Extension:
DATE IN:
fields:
[{"description": "Name of the apartment", "name": "Apartment Name", "type": "singleLineText"}]baseId:
appaooPBFcKv5jH40name:
[TEST] Copy of 11/27/23-12/3/23description:
Copy of 11/27/23-12/3/23 (Sheet ID: 2124391743)
DATA OUT:
request:method:
POSTurl:
https://api.airtable.com/v0/meta/bases/appaooPBFcKv5jH40/tablesquerystring:
nullheaders:Content-Type:
application/jsonbody:
{"description": "{{description}}", "fields": {{fields}}, "name": "{{name}}"}data:
nullresponse:status:
422headers:
body:
{"error":{"type":"INVALID_REQUEST_BODY","message":"Could not parse request body"}}data:error:type:
INVALID_REQUEST_BODYmessage:
Could not parse request body
Upon further investigation, I've discovered that the system consistently sends data:null instead of the data intended by the app extension.
Through experimentation with various body data configurations, it appears that setting the API input as plain text resolves the issue. However, when using {{keyname}} placeholders within a JSON request body, the process fails, resulting in the data being sent as null.
This behavior seems to indicate a bug within callin.io, rather than user error.
An alternative to App Extensions is to use the API Request.

An alternative to App Extensions is to use the API Request.
Ah thanks, I didn’t realize there was a difference between them. I’ll give it a try and see how that goes! 🙂
An alternative to App Extensions is to use the API Request.

Thanks, this worked perfectly!