Connect to Microsoft SQL Server databases as live data sources for document generation and email campaigns.
---
https://app.datapublisher.io/api/sql-server
---
All endpoints require JWT authentication via Authorization: Bearer header.
---
The SQL Server API allows you to:
Supported Versions:
Authentication Methods:
---
Create a new SQL Server connection.
Endpoint: POST /connect
Headers:
Authorization: Bearer
Content-Type: application/json
Request Body (SQL Authentication):
{
"name": "Production Database",
"server": "sql.company.com",
"database": "SalesDB",
"username": "app_user",
"password": "secure_password",
"port": 1433,
"encrypt": true,
"trustServerCertificate": false
}
Request Body (Windows Authentication):
{
"name": "Internal Database",
"server": "SQLSERVER01",
"database": "InventoryDB",
"integratedSecurity": true,
"port": 1433,
"encrypt": true,
"trustServerCertificate": true
}
Request Body (Connection String):
{
"name": "Azure SQL Database",
"connectionString": "Server=tcp:myserver.database.windows.net,1433;Database=mydb;User ID=admin@myserver;Password=pass;Encrypt=yes;TrustServerCertificate=no;"
}
Response (200 OK):
{
"success": true,
"message": "Connected to SQL Server successfully",
"dataSourceId": "uuid",
"testResult": {
"success": true,
"message": "Connection test successful",
"serverVersion": "Microsoft SQL Server 2019 (RTM) - 15.0.2000.5",
"databaseName": "SalesDB"
}
}
Error Responses:
400 Bad Request - Missing required fields:
{
"error": "Either connectionString OR (server + database) required"
}
400 Bad Request - Connection test failed:
{
"error": "Connection test failed",
"message": "Login failed for user 'app_user'"
}
---
Test SQL Server connection without saving.
Endpoint: POST /test
Headers:
Authorization: Bearer
Content-Type: application/json
Request Body: (Same as /connect)
Response (200 OK):
{
"success": true,
"message": "Connection test successful",
"serverVersion": "Microsoft SQL Server 2019",
"databaseName": "SalesDB",
"connectionTime": "45ms"
}
---
Get list of databases on connected SQL Server.
Endpoint: GET /databases
Headers:
Authorization: Bearer
Response (200 OK):
{
"success": true,
"databases": [
{
"name": "master",
"size": "6.00 MB",
"owner": "sa"
},
{
"name": "SalesDB",
"size": "250.50 MB",
"owner": "app_user"
},
{
"name": "InventoryDB",
"size": "125.25 MB",
"owner": "app_user"
}
],
"count": 3
}
Notes:
---
Get list of tables and views in a database.
Endpoint: GET /databases/:databaseName/tables
Headers:
Authorization: Bearer
Path Parameters:
databaseName: Database name
Response (200 OK):
{
"success": true,
"database": "SalesDB",
"tables": [
{
"schema": "dbo",
"name": "Customers",
"type": "TABLE",
"rowCount": 1500
},
{
"schema": "dbo",
"name": "Orders",
"type": "TABLE",
"rowCount": 3200
},
{
"schema": "dbo",
"name": "Products",
"type": "TABLE",
"rowCount": 450
},
{
"schema": "dbo",
"name": "vw_CustomerOrders",
"type": "VIEW",
"rowCount": null
}
],
"count": 4
}
---
Retrieve column information for a specific table.
Endpoint: GET /databases/:databaseName/tables/:tableName/schema
Headers:
Authorization: Bearer
Path Parameters:
databaseName: Database name
tableName: Table name (include schema: "dbo.Customers")
Response (200 OK):
{
"success": true,
"database": "SalesDB",
"table": "dbo.Customers",
"columns": [
{
"name": "CustomerID",
"type": "int",
"maxLength": null,
"nullable": false,
"isPrimaryKey": true
},
{
"name": "CompanyName",
"type": "nvarchar",
"maxLength": 100,
"nullable": false,
"isPrimaryKey": false
},
{
"name": "Email",
"type": "nvarchar",
"maxLength": 255,
"nullable": true,
"isPrimaryKey": false
},
{
"name": "TotalSales",
"type": "decimal",
"maxLength": null,
"nullable": true,
"isPrimaryKey": false,
"precision": 18,
"scale": 2
}
]
}
---
Execute a SELECT query and retrieve results.
Endpoint: POST /query
Headers:
Authorization: Bearer
Content-Type: application/json
Request Body:
{
"databaseName": "SalesDB",
"query": "SELECT TOP 100 CustomerID, CompanyName, Email, TotalSales FROM dbo.Customers WHERE TotalSales > 10000 ORDER BY TotalSales DESC",
"timeout": 30
}
Response (200 OK):
{
"success": true,
"columns": ["CustomerID", "CompanyName", "Email", "TotalSales"],
"data": [
{
"CustomerID": 1001,
"CompanyName": "Acme Corp",
"Email": "contact@acme.com",
"TotalSales": 145000.50
},
{
"CustomerID": 1005,
"CompanyName": "TechStart Inc",
"Email": "info@techstart.com",
"TotalSales": 98000.00
}
],
"rowCount": 100,
"executionTime": "125ms"
}
Security:
Error Responses:
400 Bad Request - Invalid query:
{
"error": "Only SELECT queries are allowed"
}
500 Internal Server Error - Query execution failed:
{
"error": "Query execution failed",
"message": "Invalid column name 'TotalSale'"
}
---
Execute query and import results as CSV file.
Endpoint: POST /query/import
Headers:
Authorization: Bearer
Content-Type: application/json
Request Body:
{
"databaseName": "SalesDB",
"query": "SELECT * FROM dbo.Customers WHERE Region = 'West'",
"fileName": "west-customers.csv",
"description": "Customers in Western region",
"tags": ["customers", "west", "sql-server"]
}
Response (200 OK):
{
"success": true,
"fileId": "csv-file-uuid",
"fileName": "west-customers.csv",
"rowCount": 350,
"columnCount": 12,
"message": "Query results imported successfully"
}
---
Get all SQL Server connections for the user.
Endpoint: GET /connections
Headers:
Authorization: Bearer
Response (200 OK):
{
"success": true,
"connections": [
{
"id": "uuid",
"name": "Production Database",
"server": "sql.company.com",
"database": "SalesDB",
"isActive": true,
"createdAt": "2026-01-15T10:00:00Z",
"lastUsedAt": "2026-02-12T09:30:00Z"
}
],
"count": 1
}
---
Update connection settings (not password).
Endpoint: PUT /connections/:connectionId
Headers:
Authorization: Bearer
Content-Type: application/json
Request Body:
{
"name": "Updated Connection Name",
"database": "NewDatabase"
}
Notes:
---
Remove SQL Server connection and credentials.
Endpoint: DELETE /connections/:connectionId
Headers:
Authorization: Bearer
Response (200 OK):
{
"success": true,
"message": "Connection deleted successfully"
}
---
---
---
| Status Code | Description |
|-------------|-------------|
| 400 | Invalid connection parameters or query |
| 401 | Unauthorized - invalid JWT |
| 403 | SQL Server authentication failed |
| 404 | Connection, database, or table not found |
| 408 | Query timeout exceeded |
| 500 | SQL Server error or internal error |
---
---