Getting Started
Overview & Quick Start
Audital provides cryptographically irrefutable audit trails for AI systems operating under FCA SS1/23, EU AI Act, and ISO 42001 requirements. This guide walks you through connecting your first AI model in under five minutes.
What is Audital?
Audital is an AI governance infrastructure platform. Every inference, training run, configuration change, and deployment decision is captured as an immutable event in a cryptographic hash chain. Each block references the hash of the previous block, making retroactive tampering detectable by any downstream verifier.
Hash Chain
SHA-256 linked blocks. Any modification breaks the chain — verified in real time.
Evidence Packages
One-click regulatory evidence bundles aligned to FCA SS1/23 and EU AI Act Annex IV.
Shadow AI Detection
Continuously monitors for AI usage outside approved governance boundaries.
Quick Start
Connect your first AI model in under 5 minutes.
Get your API key
Log in to the Audital dashboard, navigate to Settings → API, and create a new key. Keys are prefixed ak_live_ for production and ak_test_ for sandbox.
Register your model
Each AI model you want to audit must first be registered. This returns amodelIdused in all subsequent audit calls.
curl -X POST https://api.audital.ai/v1/models \
-H "Authorization: Bearer ak_live_xxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"name": "Credit Risk Scorer v2",
"provider": "AWS SageMaker",
"framework": "XGBoost",
"environment": "production",
"regulatoryScope": ["FCA_SS1_23", "EU_AI_ACT"]
}'Send your first audit event
Choose your preferred language. Each call is appended as an immutable block in the hash chain.
cURL
curl -X POST https://api.audital.ai/v1/audit \
-H "Authorization: Bearer ak_live_xxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"modelId": "mdl_abc123",
"eventType": "INFERENCE",
"payload": {
"inputHash": "sha256:e3b0c44298fc1c149afb...",
"outputHash": "sha256:a87ff679a2f3e71d9181...",
"latencyMs": 142,
"confidence": 0.97
},
"metadata": {
"requestId": "req_xyz789",
"userId": "usr_customer_001",
"environment": "production"
}
}'Python
import requests
AUDITAL_API_KEY = "ak_live_xxxxxxxxxxxxxxxxxxxx"
BASE_URL = "https://api.audital.ai/v1"
def log_inference(model_id: str, input_hash: str, output_hash: str, latency_ms: int):
response = requests.post(
f"{BASE_URL}/audit",
headers={
"Authorization": f"Bearer {AUDITAL_API_KEY}",
"Content-Type": "application/json",
},
json={
"modelId": model_id,
"eventType": "INFERENCE",
"payload": {
"inputHash": input_hash,
"outputHash": output_hash,
"latencyMs": latency_ms,
},
},
)
response.raise_for_status()
return response.json()
# Log a model inference
event = log_inference(
model_id="mdl_abc123",
input_hash="sha256:e3b0c44298fc1c149afb4c8996fb92427ae41e4649b934ca495991b7852b855",
output_hash="sha256:a87ff679a2f3e71d9181a67b7542122c",
latency_ms=142,
)
print(f"Event ID: {event['id']}, Chain position: {event['chainPosition']}")JavaScript
// Node.js / browser (ESM)
const AUDITAL_API_KEY = process.env.AUDITAL_API_KEY;
const BASE_URL = 'https://api.audital.ai/v1';
async function logInference(modelId, payload) {
const response = await fetch(`${BASE_URL}/audit`, {
method: 'POST',
headers: {
Authorization: `Bearer ${AUDITAL_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
modelId,
eventType: 'INFERENCE',
payload,
}),
});
if (!response.ok) {
const err = await response.json();
throw new Error(`Audital API error ${response.status}: ${err.message}`);
}
return response.json();
}
// Usage
const event = await logInference('mdl_abc123', {
inputHash: 'sha256:e3b0c44298fc1c149afb4c8996fb92427ae41e4649b934ca495991b7852b855',
outputHash: 'sha256:a87ff679a2f3e71d9181a67b7542122c',
latencyMs: 142,
confidence: 0.97,
});
console.log(`Chain position: ${event.chainPosition}`);TypeScript
// TypeScript — strongly typed client
const AUDITAL_BASE_URL = process.env.NEXT_PUBLIC_API_URL ?? 'https://api.audital.ai/v1';
interface AuditPayload {
inputHash: string;
outputHash: string;
latencyMs: number;
confidence?: number;
}
interface AuditEvent {
id: string;
chainPosition: number;
blockHash: string;
previousHash: string;
timestamp: string;
verified: boolean;
}
async function logInference(
modelId: string,
payload: AuditPayload,
apiKey: string
): Promise<AuditEvent> {
const res = await fetch(`${AUDITAL_BASE_URL}/audit`, {
method: 'POST',
headers: {
Authorization: `Bearer ${apiKey}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ modelId, eventType: 'INFERENCE', payload }),
});
if (!res.ok) {
const body = await res.json().catch(() => ({}));
throw new Error(`[${res.status}] ${body.message ?? 'Unknown error'}`);
}
return res.json() as Promise<AuditEvent>;
}
// Verify the chain hasn't been tampered with
async function verifyChain(apiKey: string) {
const res = await fetch(`${AUDITAL_BASE_URL}/audit/chain-status`, {
headers: { Authorization: `Bearer ${apiKey}` },
});
const status = await res.json();
console.log(`Chain integrity: ${status.valid ? 'VALID' : 'COMPROMISED'}`);
console.log(`Total events: ${status.totalEvents}`);
}Read the response
A successful write returns the new event with its chain position and hashes. Store the id if you need to retrieve or verify this specific event later.
{
"id": "evt_01HZABCDEF1234567890ABCD",
"chainPosition": 4821,
"blockHash": "sha256:7c4a8d09ca3762af61e59520943dc26494f8941b",
"previousHash": "sha256:e3b0c44298fc1c149afb4c8996fb92427ae41e4649",
"timestamp": "2026-03-02T10:14:33.821Z",
"eventType": "INFERENCE",
"modelId": "mdl_abc123",
"verified": true,
"payload": {
"inputHash": "sha256:e3b0c44298fc1c149afb...",
"outputHash": "sha256:a87ff679a2f3e71d9181...",
"latencyMs": 142,
"confidence": 0.97
}
}Verify chain integrity
At any time, call GET /audit/chain-status to confirm the entire hash chain is intact. Audital also runs this check automatically every 60 seconds and alerts you via webhook if integrity is ever broken.