Softr Database API
Public API to communicate with Softr Databases
The Softr Database API can be used to integrate your data in Softr with external systems. The API follows REST semantics and uses JSON to encode objects.
Authorisation
For making calls you need 2 elements:
- API Basic URL:
https://tables-api.softr.io/api/v1
- Public API Token - Obtain here
To make a call you combine them into a HTTP request. Example:
$ curl -XGET 'https://tables-api.softr.io/api/v1/databases' \
-H 'Softr-Api-Key: <TOKEN>'
- All API requests must be authenticated and made through HTTPS.
- We currently support using personal access tokens (a.k.a API Key) and OAuth access tokens will be supported later.
- API Key inherits the access rights of the account of the user who grants accessโฆ Later more granular scopes will be supported as well as multiple Keys (Tokens) with different scopes.
Rate Limiting
All calls are subject to rate limiting.
Current rate-limit is 20 calls per second per single Public API Token.
On exceeding the limit you will receive 429 HTTP Response Status Code.
Databases
Get Databases
GET /api/v1/databases
Retrieve a list of all databases accessible to the authenticated user.
$ curl -XGET 'https://tables-api.softr.io/api/v1/databases' \
-H 'Softr-Api-Key: <TOKEN>'
Response format:
{
"data": [
{
"id": "string",
"name": "string",
"description": "string",
"workspaceId": "string",
"createdAt": "2025-06-01T10:42:10.000Z",
"updatedAt": "2025-06-01T10:42:10.000Z"
}
]
}
Get Single Database
GET /api/v1/databases/<DATABASE_ID>
Retrieve details of a specific database by its ID.
curl -XGET 'https://tables-api.softr.io/api/v1/databases/<DATABASE_ID>' \
-H 'Softr-Api-Key: <TOKEN>'
Response format:
{
"data": {
"id": "string",
"name": "string",
"description": "string",
"workspaceId": "string",
"createdAt": "2025-06-01T10:42:10.000Z",
"updatedAt": "2025-06-01T10:42:10.000Z"
}
}
Create a Database
POST /api/v1/databases
Create a new database in the specified workspace.
Request Body
{
"workspaceId": "string",
"name": "string",
"description": "string" // optional
}
Example Request
curl -XPOST 'https://tables-api.softr.io/api/v1/databases' \
-H 'Softr-Api-Key: <TOKEN>' \
-d '{
"workspaceId": "<WORKSPACE_ID>",
"name": "Marketing DB",
"description": "Stores campaign data"
}'
Response
{
"data": {
"id": "string",
"name": "string",
"description": "string",
"workspaceId": "string",
"createdAt": "2025-06-01T10:42:10.000Z",
"updatedAt": "2025-06-01T10:42:10.000Z"
}
}
Update Database
PUT /api/v1/databases/{databaseId}
Update the details of an existing database.
Request Body
{
"name": "string", // optional
"description": "string" // optional
}
Example Request
curl -XPUT 'https://tables-api.softr.io/api/v1/databases/<DATABASE_ID>' \
-H 'Softr-Api-Key: <TOKEN>' \
-d '{
"name": "Updated Name",
"description": "Updated description"
}'
Response
{
"data": {
"id": "string",
"name": "string",
"description": "string",
"workspaceId": "string",
"createdAt": "2025-06-01T10:42:10.000Z",
"updatedAt": "2025-06-01T10:42:10.000Z"
}
}
Delete Database
DELETE /api/v1/databases/{databaseId}
Delete a specific database by its ID, if it is empty.
Optional Query Parameters
force
(boolean): Iftrue
, forces deletion even if there database is not empty. Default:false
.
Example Request
curl -XDELETE 'https://tables-api.softr.io/api/v1/databases/<DATABASE_ID>' \
-H 'Softr-Api-Key: <TOKEN>'
Response
204 No Content
โ Database deleted successfully
400 Bad Request
- If Database has tables, andforce=true
not passed
Tables
Get Tables
GET /api/v1/databases/{databaseId}/tables
Retrieve a list of all tables in the specified database.
curl -XGET 'https://tables-api.softr.io/api/v1/databases/<DATABASE_ID>/tables' \
-H 'Softr-Api-Key: <TOKEN>'
Response format:
{
"data": [
{
"id": "string",
"name": "string",
"description": "string",
"primaryFieldId": "string",
"defaultViewId": "string",
"fields": [
{
"id": "string",
"name": "string",
"type": "string",
"options": {},
"allowMultipleEntries": true,
"readonly": true,
"required": true,
"locked": true,
"defaultValue": "string",
"createdAt": "2025-06-24T12:22:07.444Z",
"updatedAt": "2025-06-24T12:22:07.444Z"
}
],
"createdAt": "2025-06-01T10:42:10.000Z",
"updatedAt": "2025-06-01T10:42:10.000Z"
}
]
}
Get Single Table
GET /api/v1/databases/{databaseId}/tables/{tableId}
Retrieve details of a specific table by its ID.
curl -XGET 'https://tables-api.softr.io/api/v1/databases/<DATABASE_ID>/tables/<TABLE_ID>' \
-H 'Softr-Api-Key: <TOKEN>'
Response format:
{
"data": {
"id": "string",
"name": "string",
"description": "string",
"primaryFieldId": "string",
"defaultViewId": "string",
"fields": [
{
"id": "string",
"name": "string",
"type": "string",
"options": {},
"allowMultipleEntries": true,
"readonly": true,
"required": true,
"locked": true,
"defaultValue": "string",
"createdAt": "2025-06-24T12:22:07.444Z",
"updatedAt": "2025-06-24T12:22:07.444Z"
}
],
"createdAt": "2025-06-01T10:42:10.000Z",
"updatedAt": "2025-06-01T10:42:10.000Z"
}
}
Get Table Views
GET /api/v1/databases/{databaseId}/tables/{tableId}/views
Retrieve table views.
curl -XGET 'https://tables-api.softr.io/api/v1/databases/<DATABASE_ID>/tables/<TABLE_ID>/views' \
-H 'Softr-Api-Key: <TOKEN>'
Response format:
{
"data": [
{
"id": "string",
"tableId": "string",
"name": "string",
"description": "string",
"createdAt": "2025-05-09T12:14:44Z",
"updatedAt": "2025-05-09T12:14:44Z"
}
]
}
Create Table
POST /api/v1/databases/{databaseId}/tables
Create a new table in the specified database.
Optional Request Body
{
"name": "string",
"description": "string", // optional
"primaryFieldName": "string" // optional
"fields": [
{
"name": "string",
"type": "SINGLE_LINE_TEXT",
"options": {
"minLength": 0,
"maxLength": 50
}
]
}
Example Request - Create Table with specified details
curl -XPOST 'https://tables-api.softr.io/api/v1/databases/<DATABASE_ID>/tables' \
-H 'Softr-Api-Key: <TOKEN>' \
-d '{
"name": "My Table",
"description": "Table Description",
"primaryFieldName": "Email",
"fields": [ ... ]
}'
Example Request - Create Table with default details
curl -XPOST 'https://tables-api.softr.io/api/v1/databases/<DATABASE_ID>/tables' \
-H 'Softr-Api-Key: <TOKEN>'
Response
{
"data": {
"id": "string",
"name": "string",
"description": "string",
"primaryFieldId": "string",
"defaultViewId": "string",
"fields": [ ... ],
"createdAt": "2025-06-01T10:42:10.000Z",
"updatedAt": "2025-06-01T10:42:10.000Z"
}
}
Update Table
PUT /api/v1/databases/{databaseId}/tables/{tableId}
Update a specific table by its ID.
You can only update name and/or description here.
For changing table fields see fields related API endpoints.
Request Body
{
"name": "string", // optional
"description": "string" // optional
}
Example Request
curl -XPUT 'https://tables-api.softr.io/api/v1/databases/<DATABASE_ID>/tables/<TABLE_ID>' \
-H 'Softr-Api-Key: <TOKEN>' \
-d '{
"name": "Updated Table",
"description": "Updated description"
}'
Response
{
"data": {
"id": "string",
"name": "string",
"description": "string",
"primaryFieldId": "string",
"defaultViewId": "string",
"fields": [ ... ],
"createdAt": "2025-06-01T10:42:10.000Z",
"updatedAt": "2025-06-01T10:42:10.000Z"
}
}
Delete Table
DELETE /api/v1/databases/{databaseId}/tables/{tableId}
Delete a specific table by its ID.
Optional Query Parameters
force
(boolean): Iftrue
, forces deletion even if the table is not empty. Default:false
.
Example Request
curl -XDELETE 'https://tables-api.softr.io/api/v1/databases/<DATABASE_ID>/tables/<TABLE_ID>' \
-H 'Softr-Api-Key: <TOKEN>'
Response
204 No Content
โ Table deleted successfully
Table Fields
Get Table Field
GET /api/v1/databases/{databaseId}/tables/{tableId}/fields/{fieldId}
Retrieve details of a specific field.
Example Request
curl -XGET '<https://tables-api.softr.io/api/v1/databases/><DATABASE_ID>/tables/<TABLE_ID>/fields/<FIELD_ID>' \\
-H 'Softr-Api-Key: <TOKEN>'
Add Table Field
POST /api/v1/databases/{databaseId}/tables/{tableId}/fields
Add a new field to a table.
Request Body
{
"name": "string",
"type": "string",
"options": { ... }
}
Example Request
curl -XPOST 'https://tables-api.softr.io/api/v1/databases/<DATABASE_ID>/tables/<TABLE_ID>/fields' \\
-H 'Softr-Api-Key: <TOKEN>' \\
-d '{
"name": "Field Name",
"type": "SINGLE_LINE_TEXT",
"options": {}
}'
Response
{
"data": {
"id": "string",
"name": "string",
"type": "string",
"options": {},
"allowMultipleEntries": false,
"readonly": false,
"required": false,
"locked": false,
"defaultValue": null,
"createdAt": "2025-06-01T10:42:10.000Z",
"updatedAt": "2025-06-01T10:42:10.000Z"
}
}
Update Table Field
Coming Soon!
Delete Table Field
Coming Soon!
Field Types
TYPE | PAYLOAD |
SINGLE_LINE_TEXT | |
CHECKBOX | |
CURRENCY | |
DATETIME | |
DURATION | |
EMAIL | |
SELECT | |
NUMBER | |
ATTACHMENT | |
RATING | |
LINKED_RECORD | |
LONG_TEXT | |
URL | |
PERCENT | |
BUTTON | |
PROGRESS | |
LOCATION | |
PHONE | |
DATE_RANGE | |
ADDRESS | |
TIME | |
LOOKUP | |
ROLLUP | |
FORMULA | |
COUNT | |
CREATED_AT | |
UPDATED_AT | |
CREATED_BY | |
UPDATED_BY | |
AUTONUMBER | |
RECORD_ID | |
USER |
Records
Get Records
GET /api/v1/databases/{databaseId}/tables/{tableId}/records
Retrieve a list of all records in the specified table.
Optional Query Parameters
viewId
(string): ID of the view to filter records
offset
(integer): Pagination offset
limit
(integer): Pagination limit
curl -XGET 'https://tables-api.softr.io/api/v1/databases/<DATABASE_ID>/tables/<TABLE_ID>/records?limit=10&offset=0' \
-H 'Softr-Api-Key: <TOKEN>'
Response format:
{
"data": [
{
"id": "string",
"tableId": "string",
"fields": {
"fieldId": "value"
},
"createdAt": "2025-06-01T10:42:10.000Z",
"updatedAt": "2025-06-01T10:42:10.000Z"
}
],
"metadata": {
"offset": 0,
"limit": 10,
"total": 1
}
}
Search Records
POST /api/v1/databases/{databaseId}/tables/{tableId}/records/search
Search for records in the specified table based on criteria.
Request Body
{
"filters": { ... },
"sort": { ... },
"paging": {
"offset": 0,
"limit": 10
}
}
Example Request
curl -XPOST 'https://tables-api.softr.io/api/v1/databases/<DATABASE_ID>/tables/<TABLE_ID>/records/search' \
-H 'Softr-Api-Key: <TOKEN>' \
-d '{
"filters": {},
"sort": {},
"paging": {
"offset": 0,
"limit": 10
}
}'
Response format: Same as GET /records
Example Filter
"filter": {
"condition": {
"operator": "AND",
"conditions": [
{
"leftSide": "Vrthy",
"operator": "IS",
"rightSide": "test@softr.io"
},
{
"operator": "OR",
"conditions": [
{
"leftSide": "Fo3SS",
"operator": "IS_ONE_OF",
"rightSide": [
"Active"
]
},
{
"leftSide": "bJ6jE"
"operator": "IS_NOT_EMPTY",
}
]
}
]
}
}
List of Operators
Coming soon!
OPERATOR | DESCRIPTION | EXAMPLE |
AND | ||
OR | ||
IS_EMPTY | ||
IS_NOT_EMPTY | ||
IS_BETWEEN | ||
IS_NOT_BETWEEN | ||
IS | ||
IS_NOT | ||
GREATER_THAN | ||
GREATER_THAN_OR_EQUALS | ||
LESS_THAN | ||
LESS_THAN_OR_EQUALS | ||
CONTAINS | ||
DOES_NOT_CONTAIN | ||
STARTS_WITH | ||
DOES_NOT_START_WITH | ||
ENDS_WITH | ||
DOES_NOT_END_WITH | ||
IS_ONE_OF | ||
IS_NOT_ONE_OF | ||
HAS_ALL_OF | ||
HAS_NONE_OF |
Get Single Record
GET /api/v1/databases/{databaseId}/tables/{tableId}/records/{recordId}
Retrieve details of a specific record by its ID.
curl -XGET 'https://tables-api.softr.io/api/v1/databases/<DATABASE_ID>/tables/<TABLE_ID>/records/<RECORD_ID>' \
-H 'Softr-Api-Key: <TOKEN>'
Response format:
{
"data": {
"id": "string",
"tableId": "string",
"fields": {
"fieldId": "value"
},
"createdAt": "2025-06-01T10:42:10.000Z",
"updatedAt": "2025-06-01T10:42:10.000Z"
}
}
Create Record
POST /api/v1/databases/{databaseId}/tables/{tableId}/records
Create a new record in the specified table.
Request Body
{
"fields": {
"fieldId": "value"
}
}
Example Request
curl -XPOST '<https://tables-api.softr.io/api/v1/databases/><DATABASE_ID>/tables/<TABLE_ID>/records' \
-H 'Softr-Api-Key: <TOKEN>' \
-d '{
"fields": {
"Name": "Example",
"Status": "Active"
}
}'
Response format: Same as Get Single Record
Update Record
PUT /api/v1/databases/{databaseId}/tables/{tableId}/records/{recordId}
Update a specific record by its ID.
Request Body
{
"fields": {
"fieldId": "new value"
}
}
Example Request
curl -XPUT 'https://tables-api.softr.io/api/v1/databases/<DATABASE_ID>/tables/<TABLE_ID>/records/<RECORD_ID>' \
-H 'Softr-Api-Key: <TOKEN>' \
-d '{
"fields": {
"Status": "Archived"
}
}'
Response format: Same as Get Single Record
Delete Record
DELETE /api/v1/databases/{databaseId}/tables/{tableId}/records/{recordId}
Delete a specific record by its ID.
curl -XDELETE '<https://tables-api.softr.io/api/v1/databases/><DATABASE_ID>/tables/<TABLE_ID>/records/<RECORD_ID>' \\
-H 'Softr-Api-Key: <TOKEN>'
Response
204 No Content
โ Record deleted successfully
Last updated on June 30, 2025