Quickstart
This guide walks through registering a model, creating a version, sending prediction logs, checking drift status, and running a fairness evaluation using the REST API.
Prerequisites
- A Kora AI Governance account (sign up)
- Your API key (starts with
test_for sandbox) - Your Tenant ID (UUID from your dashboard)
Step 1: Register a model
Create an entry in the model registry.
- cURL
- Node.js
- Python
- Go
curl -X POST https://api.korastratum.com/ai-governance/api/v1/models \
-H "Authorization: Bearer $AG_API_KEY" \
-H "X-Tenant-ID: $AG_TENANT_ID" \
-H "Content-Type: application/json" \
-d '{
"name": "credit-risk-scorer",
"display_name": "Credit Risk Scoring Model",
"description": "Predicts probability of default for retail loan applications",
"use_case": "CREDIT_SCORING",
"risk_tier": "HIGH",
"owner_team": "risk-analytics",
"data_sensitivity": "PII",
"framework": "XGBoost",
"tags": ["retail", "lending", "production"]
}'
const response = await fetch("https://api.korastratum.com/ai-governance/api/v1/models", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.AG_API_KEY}`,
"X-Tenant-ID": process.env.AG_TENANT_ID,
"Content-Type": "application/json",
},
body: JSON.stringify({
name: "credit-risk-scorer",
display_name: "Credit Risk Scoring Model",
description: "Predicts probability of default for retail loan applications",
use_case: "CREDIT_SCORING",
risk_tier: "HIGH",
owner_team: "risk-analytics",
data_sensitivity: "PII",
framework: "XGBoost",
tags: ["retail", "lending", "production"],
}),
});
const model = await response.json();
console.log(model.id); // "a1b2c3d4-..."
import requests
import os
response = requests.post(
"https://api.korastratum.com/ai-governance/api/v1/models",
headers={
"Authorization": f"Bearer {os.environ['AG_API_KEY']}",
"X-Tenant-ID": os.environ["AG_TENANT_ID"],
},
json={
"name": "credit-risk-scorer",
"display_name": "Credit Risk Scoring Model",
"description": "Predicts probability of default for retail loan applications",
"use_case": "CREDIT_SCORING",
"risk_tier": "HIGH",
"owner_team": "risk-analytics",
"data_sensitivity": "PII",
"framework": "XGBoost",
"tags": ["retail", "lending", "production"],
},
)
model = response.json()
print(model["id"]) # "a1b2c3d4-..."
req := aigovernance.CreateModelRequest{
Name: "credit-risk-scorer",
DisplayName: "Credit Risk Scoring Model",
Description: "Predicts probability of default for retail loan applications",
UseCase: "CREDIT_SCORING",
RiskTier: "HIGH",
OwnerTeam: "risk-analytics",
DataSensitivity: "PII",
Framework: "XGBoost",
Tags: []string{"retail", "lending", "production"},
}
model, err := client.CreateModel(ctx, req)
fmt.Println(model.ID) // "a1b2c3d4-..."
Save the returned id — you'll use it for all subsequent operations.
Step 2: Create a model version
Push a new version with training metadata and performance benchmarks.
- cURL
- Node.js
- Python
- Go
curl -X POST https://api.korastratum.com/ai-governance/api/v1/models/$MODEL_ID/versions \
-H "Authorization: Bearer $AG_API_KEY" \
-H "X-Tenant-ID: $AG_TENANT_ID" \
-H "Content-Type: application/json" \
-d '{
"version": "1.2.0",
"stage": "STAGING",
"training_dataset": "retail_loans_2024_2025",
"training_samples": 1250000,
"metrics": {
"auc_roc": 0.892,
"gini": 0.784,
"ks_statistic": 0.612,
"accuracy": 0.867
},
"artifact_uri": "gs://models/credit-risk-scorer/v1.2.0/model.xgb"
}'
const version = await fetch(
`https://api.korastratum.com/ai-governance/api/v1/models/${modelId}/versions`,
{
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.AG_API_KEY}`,
"X-Tenant-ID": process.env.AG_TENANT_ID,
"Content-Type": "application/json",
},
body: JSON.stringify({
version: "1.2.0",
stage: "STAGING",
training_dataset: "retail_loans_2024_2025",
training_samples: 1250000,
metrics: {
auc_roc: 0.892,
gini: 0.784,
ks_statistic: 0.612,
accuracy: 0.867,
},
artifact_uri: "gs://models/credit-risk-scorer/v1.2.0/model.xgb",
}),
}
);
const data = await version.json();
console.log(data.version_id); // "v1a2b3c4-..."
version = requests.post(
f"https://api.korastratum.com/ai-governance/api/v1/models/{model_id}/versions",
headers={
"Authorization": f"Bearer {os.environ['AG_API_KEY']}",
"X-Tenant-ID": os.environ["AG_TENANT_ID"],
},
json={
"version": "1.2.0",
"stage": "STAGING",
"training_dataset": "retail_loans_2024_2025",
"training_samples": 1250000,
"metrics": {
"auc_roc": 0.892,
"gini": 0.784,
"ks_statistic": 0.612,
"accuracy": 0.867,
},
"artifact_uri": "gs://models/credit-risk-scorer/v1.2.0/model.xgb",
},
)
data = version.json()
print(data["version_id"]) # "v1a2b3c4-..."
version, err := client.CreateModelVersion(ctx, modelID, aigovernance.CreateVersionRequest{
Version: "1.2.0",
Stage: "STAGING",
TrainingDataset: "retail_loans_2024_2025",
TrainingSamples: 1250000,
Metrics: map[string]float64{
"auc_roc": 0.892,
"gini": 0.784,
"ks_statistic": 0.612,
"accuracy": 0.867,
},
ArtifactURI: "gs://models/credit-risk-scorer/v1.2.0/model.xgb",
})
fmt.Println(version.VersionID) // "v1a2b3c4-..."
Step 3: Send prediction logs for monitoring
Push inference logs so the platform can track metrics and detect drift.
- cURL
- Node.js
- Python
- Go
curl -X POST https://api.korastratum.com/ai-governance/api/v1/models/$MODEL_ID/predictions \
-H "Authorization: Bearer $AG_API_KEY" \
-H "X-Tenant-ID: $AG_TENANT_ID" \
-H "Content-Type: application/json" \
-d '{
"version_id": "v1a2b3c4-...",
"predictions": [
{
"prediction_id": "p001",
"timestamp": "2026-04-07T14:30:00Z",
"features": {"income": 85000, "age": 34, "employment_years": 6, "debt_ratio": 0.32},
"prediction": 0.12,
"label": "LOW_RISK",
"latency_ms": 23
}
]
}'
await fetch(
`https://api.korastratum.com/ai-governance/api/v1/models/${modelId}/predictions`,
{
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.AG_API_KEY}`,
"X-Tenant-ID": process.env.AG_TENANT_ID,
"Content-Type": "application/json",
},
body: JSON.stringify({
version_id: versionId,
predictions: [
{
prediction_id: "p001",
timestamp: "2026-04-07T14:30:00Z",
features: { income: 85000, age: 34, employment_years: 6, debt_ratio: 0.32 },
prediction: 0.12,
label: "LOW_RISK",
latency_ms: 23,
},
],
}),
}
);
requests.post(
f"https://api.korastratum.com/ai-governance/api/v1/models/{model_id}/predictions",
headers={
"Authorization": f"Bearer {os.environ['AG_API_KEY']}",
"X-Tenant-ID": os.environ["AG_TENANT_ID"],
},
json={
"version_id": version_id,
"predictions": [
{
"prediction_id": "p001",
"timestamp": "2026-04-07T14:30:00Z",
"features": {"income": 85000, "age": 34, "employment_years": 6, "debt_ratio": 0.32},
"prediction": 0.12,
"label": "LOW_RISK",
"latency_ms": 23,
},
],
},
)
err := client.LogPredictions(ctx, modelID, aigovernance.PredictionBatch{
VersionID: versionID,
Predictions: []aigovernance.Prediction{
{
PredictionID: "p001",
Timestamp: time.Now(),
Features: map[string]any{"income": 85000, "age": 34, "employment_years": 6, "debt_ratio": 0.32},
Prediction: 0.12,
Label: "LOW_RISK",
LatencyMs: 23,
},
},
})
Step 4: Check drift status
- cURL
- Node.js
- Python
- Go
curl https://api.korastratum.com/ai-governance/api/v1/models/$MODEL_ID/drift?version_id=$VERSION_ID \
-H "Authorization: Bearer $AG_API_KEY" \
-H "X-Tenant-ID: $AG_TENANT_ID"
const drift = await fetch(
`https://api.korastratum.com/ai-governance/api/v1/models/${modelId}/drift?version_id=${versionId}`,
{
headers: {
"Authorization": `Bearer ${process.env.AG_API_KEY}`,
"X-Tenant-ID": process.env.AG_TENANT_ID,
},
}
);
const data = await drift.json();
console.log(data.overall_status); // "HEALTHY"
console.log(data.data_drift.psi); // 0.04
console.log(data.prediction_drift.psi); // 0.02
drift = requests.get(
f"https://api.korastratum.com/ai-governance/api/v1/models/{model_id}/drift",
headers={
"Authorization": f"Bearer {os.environ['AG_API_KEY']}",
"X-Tenant-ID": os.environ["AG_TENANT_ID"],
},
params={"version_id": version_id},
)
data = drift.json()
print(data["overall_status"]) # "HEALTHY"
print(data["data_drift"]["psi"]) # 0.04
print(data["prediction_drift"]["psi"])# 0.02
drift, err := client.GetDriftStatus(ctx, modelID, aigovernance.DriftFilter{
VersionID: versionID,
})
fmt.Println(drift.OverallStatus) // "HEALTHY"
fmt.Println(drift.DataDrift.PSI) // 0.04
fmt.Println(drift.PredictionDrift.PSI) // 0.02
Step 5: Run a fairness evaluation
- cURL
- Node.js
- Python
- Go
curl -X POST https://api.korastratum.com/ai-governance/api/v1/models/$MODEL_ID/fairness/evaluate \
-H "Authorization: Bearer $AG_API_KEY" \
-H "X-Tenant-ID: $AG_TENANT_ID" \
-H "Content-Type: application/json" \
-d '{
"version_id": "v1a2b3c4-...",
"protected_attributes": ["gender", "age_group", "region"],
"metrics": ["disparate_impact", "equalized_odds", "demographic_parity"],
"favorable_outcome": "APPROVED",
"dataset_id": "eval_set_2026_q1"
}'
const fairness = await fetch(
`https://api.korastratum.com/ai-governance/api/v1/models/${modelId}/fairness/evaluate`,
{
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.AG_API_KEY}`,
"X-Tenant-ID": process.env.AG_TENANT_ID,
"Content-Type": "application/json",
},
body: JSON.stringify({
version_id: versionId,
protected_attributes: ["gender", "age_group", "region"],
metrics: ["disparate_impact", "equalized_odds", "demographic_parity"],
favorable_outcome: "APPROVED",
dataset_id: "eval_set_2026_q1",
}),
}
);
const data = await fairness.json();
console.log(data.overall_status); // "PASS"
console.log(data.results.gender.disparate_impact); // 0.87
console.log(data.results.age_group.disparate_impact); // 0.92
fairness = requests.post(
f"https://api.korastratum.com/ai-governance/api/v1/models/{model_id}/fairness/evaluate",
headers={
"Authorization": f"Bearer {os.environ['AG_API_KEY']}",
"X-Tenant-ID": os.environ["AG_TENANT_ID"],
},
json={
"version_id": version_id,
"protected_attributes": ["gender", "age_group", "region"],
"metrics": ["disparate_impact", "equalized_odds", "demographic_parity"],
"favorable_outcome": "APPROVED",
"dataset_id": "eval_set_2026_q1",
},
)
data = fairness.json()
print(data["overall_status"]) # "PASS"
print(data["results"]["gender"]["disparate_impact"]) # 0.87
print(data["results"]["age_group"]["disparate_impact"]) # 0.92
result, err := client.EvaluateFairness(ctx, modelID, aigovernance.FairnessRequest{
VersionID: versionID,
ProtectedAttributes: []string{"gender", "age_group", "region"},
Metrics: []string{"disparate_impact", "equalized_odds", "demographic_parity"},
FavorableOutcome: "APPROVED",
DatasetID: "eval_set_2026_q1",
})
fmt.Println(result.OverallStatus) // "PASS"
fmt.Println(result.Results["gender"].DisparateImpact) // 0.87
What's next
- Authentication — API key formats, environments, and rate limits
- API Reference — Explore every endpoint across all AI governance services