# Login - get JWT token
TOKEN=$(curl -s -X POST http://localhost:8998/admin/login \
-H "Content-Type: application/json" \
-d '{"username": "admin", "password": "secret"}' | jq -r '.access_token')
# Create a project
curl -X POST http://localhost:8998/admin/projects \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "myproject"}'
# Create a database
curl -X POST http://localhost:8998/admin/projects/myproject/databases \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "mydb"}'
# Set DB password (optional — without it, API is open)
curl -X PUT http://localhost:8998/admin/projects/myproject/databases/mydb/password \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"password":"dbpass","access_level":"write"}'
# Query data — no password = open
curl -X POST http://localhost:8998/db/myproject/mydb/query \
-H "Content-Type: application/json" \
-d '{"sql": "SELECT * FROM users LIMIT 10"}'
# Query with DB password set
curl -X POST http://localhost:8998/db/myproject/mydb/query \
-H "Content-Type: application/json" \
-H "X-Project-Key: myproject:dbpass" \
-d '{"sql": "SELECT * FROM users LIMIT 10"}'
import requests
BASE = "http://localhost:8998"
# Login
token = requests.post(
f"{BASE}/admin/login",
json={"username": "admin", "password": "secret"}
).json()["access_token"]
headers = {"Authorization": f"Bearer {token}"}
# Create project
requests.post(f"{BASE}/admin/projects",
json={"name": "myproject"}, headers=headers)
# Create database
requests.post(f"{BASE}/admin/projects/myproject/databases",
json={"name": "mydb"}, headers=headers)
# Set DB password (optional)
requests.put(f"{BASE}/admin/projects/myproject/databases/mydb/password",
json={"password": "dbpass", "access_level": "write"}, headers=headers)
# Query data — no password = open
result = requests.post(f"{BASE}/db/myproject/mydb/query",
json={"sql": "SELECT * FROM users LIMIT 10"})
print(result.json())
# Query with DB password set
result = requests.post(f"{BASE}/db/myproject/mydb/query",
json={"sql": "SELECT * FROM users LIMIT 10"},
headers={"X-Project-Key": "myproject:dbpass"})
print(result.json())
<?php
// Login
$login = http_post_json(
"http://localhost:8998/admin/login",
["username" => "admin", "password" => "secret"]
);
$token = json_decode($login, true)['access_token'];
$headers = ["Authorization: Bearer $token"];
// Create project
http_post_json(
"http://localhost:8998/admin/projects",
["name" => "myproject"], $headers
);
// Create database
http_post_json(
"http://localhost:8998/admin/projects/myproject/databases",
["name" => "mydb"], $headers
);
// Set DB password (optional)
http_put_json(
"http://localhost:8998/admin/projects/myproject/databases/mydb/password",
["password" => "dbpass", "access_level" => "write"], $headers
);
// Query data — no password = open
$response = http_post_json(
"http://localhost:8998/db/myproject/mydb/query",
["sql" => "SELECT * FROM users LIMIT 10"]
);
print_r(json_decode($response, true));
// Query with DB password set
$response = http_post_json(
"http://localhost:8998/db/myproject/mydb/query",
["sql" => "SELECT * FROM users LIMIT 10"],
["X-Project-Key: myproject:dbpass"]
);
print_r(json_decode($response, true));
var client = HttpClient.newHttpClient();
var base = "http://localhost:8998";
// Login
var loginReq = HttpRequest.newBuilder()
.uri(URI.create(base + "/admin/login"))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(
"{\"username\": \"admin\", \"password\": \"secret\"}"))
.build();
var token = JsonParser.parseString(
client.send(loginReq, HttpResponse.BodyHandlers.ofString()).body())
.getAsJsonObject().get("access_token").getAsString();
// Create project
client.send(HttpRequest.newBuilder()
.uri(URI.create(base + "/admin/projects"))
.header("Content-Type", "application/json")
.header("Authorization", "Bearer " + token)
.POST(HttpRequest.BodyPublishers.ofString(
"{\"name\": \"myproject\"}"))
.build(), HttpResponse.BodyHandlers.ofString());
// Create database
client.send(HttpRequest.newBuilder()
.uri(URI.create(base + "/admin/projects/myproject/databases"))
.header("Content-Type", "application/json")
.header("Authorization", "Bearer " + token)
.POST(HttpRequest.BodyPublishers.ofString(
"{\"name\": \"mydb\"}"))
.build(), HttpResponse.BodyHandlers.ofString());
// Set DB password (optional)
client.send(HttpRequest.newBuilder()
.uri(URI.create(base + "/admin/projects/myproject/databases/mydb/password"))
.header("Content-Type", "application/json")
.header("Authorization", "Bearer " + token)
.PUT(HttpRequest.BodyPublishers.ofString(
"{\"password\": \"dbpass\", \"access_level\": \"write\"}"))
.build(), HttpResponse.BodyHandlers.ofString());
// Query data — no password = open
var queryReq = HttpRequest.newBuilder()
.uri(URI.create(base + "/db/myproject/mydb/query"))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(
"{\"sql\": \"SELECT * FROM users LIMIT 10\"}"))
.build();
var result = client.send(queryReq, HttpResponse.BodyHandlers.ofString());
System.out.println(result.body());
// Query with DB password set
var queryReq2 = HttpRequest.newBuilder()
.uri(URI.create(base + "/db/myproject/mydb/query"))
.header("Content-Type", "application/json")
.header("X-Project-Key", "myproject:dbpass")
.POST(HttpRequest.BodyPublishers.ofString(
"{\"sql\": \"SELECT * FROM users LIMIT 10\"}"))
.build();
var result2 = client.send(queryReq2, HttpResponse.BodyHandlers.ofString());
System.out.println(result2.body());