Ask AI

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

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): If true, 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, and force=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): If true, 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
ย 
Did this answer your question?
๐Ÿ˜ž
๐Ÿ˜
๐Ÿคฉ

Last updated on June 30, 2025