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.

Last updated: 2 March 2026

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.

1

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.

2

Register your model

Each AI model you want to audit must first be registered. This returns amodelIdused in all subsequent audit calls.

bash
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"]
  }'
3

Send your first audit event

Choose your preferred language. Each call is appended as an immutable block in the hash chain.

cURL

bash
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

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

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
// 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}`);
}
4

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.

json
{
  "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
  }
}
5

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.

View Chain Status API docs

What's next?