REST API¶
SLayer provides a FastAPI-based REST API on port 5143 by default.
Start the Server¶
slayer serve --storage ./slayer_data
slayer serve --host 0.0.0.0 --port 8080 --storage ./slayer_data
slayer serve --ingest-on-startup --storage ./slayer_data # idempotent ingest across every configured datasource before the port opens
Endpoints¶
Health Check¶
Query¶
curl -X POST http://localhost:5143/query \
-H "Content-Type: application/json" \
-d '{
"source_model": "orders",
"measures": ["*:count"],
"dimensions": ["status"],
"limit": 10
}'
Response:
{
"data": [
{"orders.status": "completed", "orders._count": 42},
{"orders.status": "pending", "orders._count": 15}
],
"row_count": 2,
"columns": ["orders.status", "orders._count"]
}
Models¶
GET /models # List all models
GET /models/{name} # Get model definition
POST /models # Create a model
PUT /models/{name} # Update a model
DELETE /models/{name} # Delete a model
# List models
curl http://localhost:5143/models
# Get model definition (hidden dimensions/measures excluded)
curl http://localhost:5143/models/orders
# Create a model
curl -X POST http://localhost:5143/models \
-H "Content-Type: application/json" \
-d '{"name": "orders", "sql_table": "public.orders", "data_source": "mydb", ...}'
Datasources¶
GET /datasources # List all datasources
GET /datasources/{name} # Get datasource (credentials masked)
POST /datasources # Create a datasource
DELETE /datasources/{name} # Delete a datasource
# List datasources
curl http://localhost:5143/datasources
# Get datasource (password/connection_string shown as ***)
curl http://localhost:5143/datasources/my_postgres
Ingestion¶
curl -X POST http://localhost:5143/ingest \
-H "Content-Type: application/json" \
-d '{"datasource": "my_postgres", "schema_name": "public"}'
Response: