Docs/Using Plugins/Integration API

Integration API

The Integration API gives external systems direct access to a table's rows without going through the CMS interface. Use it to sync data from another application, automate row updates via scripts, or connect a pipeline that populates the table on a schedule.

Each table (collection) has its own pair of API keys — a primary key and a secondary key — for independent management.

Navigate to Actions → Plugins → Dynamic Table → Tables, open the table, and go to the Integration tab to find the API keys and endpoint documentation.


Authentication

All Integration API requests must include the API key in the request header:

X-Secret-Key: <primary-or-secondary-key>

The primary and secondary keys are interchangeable. Use one for your main integration and keep the other as a backup for key rotation.

API keys are scoped to a single table. A key for one table cannot be used to access another.


Base URL

All Integration API endpoints follow this structure:

{plugin-host}/api/dynamic-table/integration/{agentId}/{configurationId}/{collectionId}

The agentId, configurationId, and collectionId values are shown in the Integration tab for your table.


Endpoints

Get All Rows

Retrieve a paginated list of rows from the table.

GET /api/dynamic-table/integration/{agentId}/{configurationId}/{collectionId}

Query parameters:

ParameterTypeDescription
skipintegerNumber of rows to skip (for pagination). Default: 0.
takeintegerNumber of rows to return per page. Default: 20.
sortColumnstringColumn name to sort by.
sortDirectionstringasc or desc.
searchTermstringText to filter rows by.
searchColumnstringColumn to apply the search term against.

Response: Array of row objects, each containing the row id, rowNumber, and a data dictionary with column name–value pairs.


Get a Single Row

Retrieve one row by its row ID.

GET /api/dynamic-table/integration/{agentId}/{configurationId}/{collectionId}/{rowId}

Response: A single row object with id, rowNumber, and data.


Bulk Insert Rows

Insert multiple new rows in a single request.

POST /api/dynamic-table/integration/{agentId}/{configurationId}/{collectionId}/bulk

Request body:

{
  "rows": [
    { "column_name_1": "value", "column_name_2": 123 },
    { "column_name_1": "another value", "column_name_2": 456 }
  ]
}

Each row in the array is a dictionary of column names to values. Column names must match the internal column names (snake_case) defined in the table schema.

Validation rules:

  • Required columns must have values.
  • Primary key values must be unique within the request and not already exist in the table.
  • Values must match their column's type.

Response: The list of created rows with their assigned id and rowNumber.


Bulk Update Rows

Update multiple rows in a single request by row ID.

PUT /api/dynamic-table/integration/{agentId}/{configurationId}/{collectionId}/bulk

Request body:

{
  "rows": [
    { "id": "row-uuid-1", "data": { "status": "active", "score": 99 } },
    { "id": "row-uuid-2", "data": { "status": "inactive" } }
  ]
}

Only the columns provided in data are updated. Columns not included in the payload retain their current values.

Response: The list of updated rows.


Bulk Delete Rows

Delete multiple rows in a single request by row ID.

DELETE /api/dynamic-table/integration/{agentId}/{configurationId}/{collectionId}/bulk

Request body:

{
  "rowIds": ["row-uuid-1", "row-uuid-2", "row-uuid-3"]
}

Response: HTTP 204 No Content on success.


Rotating API Keys

If an API key is compromised or you need to revoke access for a specific integration, rotate the key:

  1. Open the table's Integration tab.
  2. Click Refresh Primary Key or Refresh Secondary Key.
  3. Confirm the rotation.

The old key is immediately invalidated. Update your integration to use the new key before rotating.

Rotating the secondary key while the primary key is in active use (or vice versa) lets you rotate without any downtime.


Example: Bulk Insert with curl

curl -X POST "https://your-plugin-host/api/dynamic-table/integration/agent-123/config-456/collection-789/bulk" \
  -H "X-Secret-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "rows": [
      { "product_name": "Laptop Pro 14", "category": "Electronics", "price": 4500, "in_stock": true },
      { "product_name": "Wireless Mouse", "category": "Accessories", "price": 89, "in_stock": true }
    ]
  }'

Notes

  • Rows inserted or updated via the Integration API are embedded and indexed automatically. There is no need to trigger regeneration for individual row operations.
  • The Integration API enforces the same schema validation as the CMS interface. Type mismatches and missing required fields will return a 400 Bad Request with details.
  • The Integration API does not require a plugin token (JWT). It uses the collection-scoped API key only.