Appsmith allows you to build custom admin panels, dashboards, and CRUD apps. Baserow acts as the relational database backend. By connecting them via API, you can build tools that follow your exact business logic without exposing the raw database to end-users.
We configure a central Datasource that acts as the bridge. All queries (Read, Write, Delete) use this single secure connection.
Create, Read, Update, and Delete permissions.Do not hardcode your API token into every individual query. Use Appsmith’s Authenticated Datasource feature. This keeps your token on the server and makes it reusable across the entire application.
Baserow API.https://api.baserow.io (or your self-hosted URL).AuthorizationToken [YOUR_DATABASE_TOKEN] (Ensure there is a space between “Token” and the key).To populate a Table or List widget, fetching data from Baserow.
Baserow API datasource.GET/api/database/rows/table/[TABLE_ID]/user_field_names | Value: true (Crucial for using “Name” instead of “field_123”).{{ get_rows.data.results }}.Baserow uses POST to create and PATCH to update.
Path: /api/database/rows/table/[TABLE_ID]/
Parameter: user_field_names = true
Body (JSON):
{
"Name": "{{ InputName.text }}",
"Status": "{{ SelectStatus.selectedOptionValue }}",
"Active": {{ CheckboxActive.isChecked }}
}
You must target the specific Row ID.
Path: /api/database/rows/table/[TABLE_ID]/{{ Table1.triggeredRow.id }}/
Body (JSON): Only include the fields you want to change.JSON
{
"Status": "Archived"
}
Baserow handles files differently than many simple APIs. You cannot send a file directly to a row. You must (1) Upload the file to the server, then (2) Link it to the row.
Create a query named upload_file.
POST/api/user-files/upload-file/Content-Type: multipart/form-datafile | Type: File | Value: {{ FilePicker1.files[0] }}Response: Baserow returns a name hash (e.g., returns: "abcd-1234-image.png").
Create a query named link_file_to_row.
Method: PATCH
Path: /api/database/rows/table/[TABLE_ID]/{{ Table1.selectedRow.id }}/
Body (JSON):
{
"Documents": [
{
"name": "{{ upload_file.data.name }}"
}
]
}
In your FilePicker Widget, set the onFilesSelected event to run a JavaScript Object:
export default {
async handleUpload() {
// 1. Upload the file to Baserow storage
await upload_file.run();
// 2. Link the new file hash to the actual row
await link_file_to_row.run();
// 3. Refresh the table to show the new file
await get_rows.run();
}
}
&page={{Table1.pageNo}} to the Baserow GET query to handle large datasets efficiently.Still need help? If you’re looking for something else, please feel free to make recommendations or ask us questions; we’re ready to assist you.