Studio API Reference¶
This page documents the HTTP API endpoints for Aksara Studio integration.
Endpoints Overview¶
| Endpoint | Method | Description |
|---|---|---|
/studio/handshake |
GET | Complete project handshake |
/studio/context/summary |
GET | Lightweight schema summary |
/studio/health |
GET | Health check with DB status |
/studio/migrations/summary |
GET | Per-app migration statistics (v0.5.1) |
/studio/schema/handshake |
GET | JSON Schema for handshake model (v0.5.1) |
Security (v0.5.1)¶
All Studio endpoints validate the incoming Origin header against studio_allowed_origins setting.
- Allowed origin: Request proceeds normally
- No origin header: Request allowed (same-origin, CLI, server-to-server)
- Disallowed origin: 403 Forbidden response
# In aksara.conf
settings.studio_allowed_origins = [
"https://studio.aksara.dev",
"http://localhost:3000",
]
# Use ["*"] to allow all origins (development only!)
GET /studio/handshake¶
Complete handshake endpoint for Studio IDE. Returns everything Studio needs to understand your project.
Response¶
{
"protocol_version": "1.0",
"timestamp": "2024-01-15T10:30:00Z",
"project": {
"name": "My App",
"version": "1.0.0",
"aksara_version": "0.5.46",
"python_version": "3.11.5",
"debug_mode": true,
"environment": "development"
},
"database": {
"connected": true,
"dialect": "postgresql",
"pool_size": 10,
"pool_available": 8,
"latency_ms": null,
"last_error": null
},
"capabilities": [
"read_schema",
"read_data",
"write_data",
"read_migrations",
"apply_migrations",
"ai_tools",
"ai_query",
"ai_codegen",
"ai_patch",
"ai_planner",
"admin_access",
"debug_panels"
],
"checksums": {
"schema_checksum": "abc123def456789",
"migrations_checksum": "def456abc123789",
"settings_checksum": "789abc123def456",
"routes_checksum": "123def456abc789"
},
"endpoints": {
"context_full": "/ai/context/full",
"context_summary": "/studio/context/summary",
"health": "/studio/health",
"tools": "/ai/tools",
"tools_mcp": "/ai/tools/mcp",
"query_execute": "/ai/query/execute",
"codegen_preview": "/ai/codegen/preview",
"patch_preview": "/ai/patch/preview",
"patch_apply": "/ai/patch/apply",
"plan_preview": "/ai/plan/preview",
"plan_apply": "/ai/plan/apply",
"schema_health": "/ai/schema/health"
},
"metadata": {}
}
Response Fields¶
project¶
| Field | Type | Description |
|---|---|---|
name |
string | Project/app name |
version |
string | Project version |
aksara_version |
string | Aksara framework version |
python_version |
string | Python runtime version |
debug_mode |
boolean | Whether app is in debug mode |
environment |
string | Environment (development, staging, production) |
database¶
| Field | Type | Description |
|---|---|---|
connected |
boolean | Whether database is connected |
dialect |
string | Database dialect (postgresql) |
pool_size |
integer | Current pool size |
pool_available |
integer | Available connections |
latency_ms |
float | Last query latency (if measured) |
last_error |
string | Last error message (if any) |
capabilities¶
Available capabilities that Studio can use:
| Capability | Description |
|---|---|
read_schema |
Can read model schema |
read_data |
Can read database records |
write_data |
Can write database records |
read_migrations |
Can read migration files |
apply_migrations |
Can apply migrations |
ai_tools |
AI tools endpoint available |
ai_query |
AI query execution available |
ai_codegen |
AI code generation available |
ai_patch |
AI patch operations available |
ai_planner |
AI planner available |
admin_access |
Admin interface available |
debug_panels |
Debug panels available |
checksums¶
Checksums are used for cache invalidation. Studio compares these with cached values to determine if it needs to refresh data.
| Field | Type | Description |
|---|---|---|
schema_checksum |
string | SHA-256 of model schema |
migrations_checksum |
string | SHA-256 of migration files |
settings_checksum |
string | SHA-256 of settings |
routes_checksum |
string | SHA-256 of routes |
GET /studio/context/summary¶
Lightweight context summary without full schema. Use this for quick status checks.
Response¶
{
"app_count": 3,
"model_count": 5,
"viewset_count": 3,
"route_count": 25,
"ai_tool_count": 15,
"migration_count": 10,
"pending_migrations": 0,
"database_status": {
"connected": true,
"dialect": "postgresql",
"pool_size": 10,
"pool_available": 8,
"latency_ms": null,
"last_error": null
},
"migration_status": {
"total": 10,
"applied": 10,
"pending": 0,
"has_conflicts": false,
"last_applied": "0010_add_tags"
},
"models": [
{
"name": "User",
"table_name": "users",
"field_count": 6,
"has_relations": true
},
{
"name": "Post",
"table_name": "posts",
"field_count": 4,
"has_relations": true
}
],
"checksums": {
"schema_checksum": "abc123def456789",
"migrations_checksum": "def456abc123789",
"settings_checksum": "789abc123def456",
"routes_checksum": "123def456abc789"
}
}
Response Fields¶
| Field | Type | Description |
|---|---|---|
app_count |
integer | Number of installed apps (v0.5.1) |
model_count |
integer | Total registered models |
viewset_count |
integer | Total registered viewsets |
route_count |
integer | Total API routes |
ai_tool_count |
integer | Total AI tools |
migration_count |
integer | Total migrations |
pending_migrations |
integer | Unapplied migrations |
database_status |
object | Live database status (v0.5.1) |
migration_status |
object | Migration health overview (v0.5.1) |
models |
array | List of model summaries |
checksums |
object | Checksums for caching |
GET /studio/health¶
Simple health check endpoint.
Response¶
{
"status": "healthy",
"aksara_version": "0.5.46",
"database": {
"connected": true,
"dialect": "postgresql",
"pool_size": 10,
"pool_available": 8,
"latency_ms": null,
"last_error": null
},
"timestamp": "2024-01-15T10:30:00Z"
}
Status Values¶
| Status | Description |
|---|---|
healthy |
Database connected, all systems go |
degraded |
Database not connected or other issues |
GET /studio/migrations/summary (v0.5.1)¶
Detailed migration statistics with per-app breakdown and conflict detection.
Response¶
{
"total_migrations": 15,
"applied_migrations": 12,
"pending_migrations": 3,
"apps": [
{
"app_label": "auth",
"total": 5,
"applied": 5,
"pending": 0,
"has_conflicts": false,
"head_migrations": ["0005_add_last_login"]
},
{
"app_label": "blog",
"total": 10,
"applied": 7,
"pending": 3,
"has_conflicts": false,
"head_migrations": ["0010_add_tags"]
}
],
"conflicts": [],
"migrations_checksum": "abc123def456789",
"last_applied": "0005_add_last_login"
}
Response Fields¶
| Field | Type | Description |
|---|---|---|
total_migrations |
integer | Total migrations across all apps |
applied_migrations |
integer | Number of applied migrations |
pending_migrations |
integer | Number of pending migrations |
apps |
array | Per-app migration summaries |
conflicts |
array | Detected migration conflicts |
migrations_checksum |
string | Checksum for caching |
last_applied |
string | Name of last applied migration |
Conflict Detection¶
When migrations have branched (e.g., two developers created separate migrations from the same parent), the conflicts array will contain details:
{
"conflicts": [
{
"app_label": "blog",
"heads": ["0008_feature_a", "0008_feature_b"],
"message": "App 'blog' has 2 conflicting head migrations that need to be merged."
}
]
}
GET /studio/schema/handshake (v0.5.1)¶
Returns the JSON Schema for the StudioHandshake model. Useful for:
- TypeScript type generation
- API documentation
- Client-side validation
Response¶
{
"$defs": {
"StudioDatabaseStatus": {
"properties": {
"connected": { "type": "boolean" },
"dialect": { "type": "string" }
}
}
},
"properties": {
"protocol_version": {
"default": "1.0",
"description": "Studio protocol version",
"type": "string"
},
"project": { "$ref": "#/$defs/StudioProjectInfo" },
"database": { "$ref": "#/$defs/StudioDatabaseStatus" }
},
"required": ["project", "database", "capabilities", "checksums"],
"title": "StudioHandshake",
"type": "object"
}
Usage Example (TypeScript)¶
// Generate types from JSON Schema
import { compile } from 'json-schema-to-typescript';
const response = await fetch('/studio/schema/handshake');
const schema = await response.json();
const types = await compile(schema, 'StudioHandshake');
Using with curl¶
Test Handshake¶
Check Health¶
Get Summary¶
Get Migration Summary (v0.5.1)¶
Get JSON Schema (v0.5.1)¶
Full Context¶
For the complete application context including full schema, use the AI context endpoint:
This returns the full AiFullContext which includes:
- Complete model definitions with all fields
- ViewSet definitions with all actions
- Route information
- Migration history
- Admin configuration
- AI tool registry
See AI Context Documentation for details.