Akrion One Developer Docs
Everything you need to integrate autonomous AI banking assistants into your digital channels.
Chat Widget Integration
Embed the Akrion One AI assistant into your web or mobile banking app in minutes.
Admin & Escalation Widget
Set up human-in-the-loop review dashboards for high-value agent actions.
API Reference
REST API endpoints for conversations, agents, knowledge base management.
Code Samples
Python, JavaScript, and React integration examples to get started fast.
LOS Gateway Integration
Wire your existing Simpology / Sandstone / Cloudcase / nCino LOS to the Akrion Loan Processing Agent.
Overview
Akrion One is a multi-tenant autonomous AI assistant platform designed for APRA-regulated mid-tier Australian financial institutions. It provides specialist AI agents that handle customer queries, loan processing, and proactive notifications — all with strict tenant isolation and compliance controls.
Akrion One uses a Pull + Push data integration model. Agents pull transactional data in real-time from your core banking API and push tenant knowledge (products, fees, policies) for RAG indexing. No transactional data is stored — queried and discarded after response generation.
Key Concepts
| Concept | Description |
|---|---|
| Tenant | A bank or credit union onboarded to the platform. Each tenant has isolated data, branding, and agent configuration. |
| Agent | A specialist AI module (e.g. Account Query, Loan Processing) with defined tools, guardrails, and a security boundary. |
| Orchestrator | Routes customer messages to the appropriate specialist agent based on intent classification. |
| Knowledge Base | Tenant-specific documents (fee schedules, policies, FAQs) indexed in Azure AI Search for RAG retrieval. |
| Core Banking Adapter | Abstraction layer for connecting to a bank's core banking system (OpenTransact / Temenos-compatible API). |
Quick Start
Get the Akrion One chat widget running on your test environment in three steps:
Get your Tenant ID and API Key
Contact the Akrion One team to provision your tenant. You'll receive a tenant_id and an API key for authentication.
Add the Widget Script
Add the Akrion One widget script to your web application's HTML:
HTML<!-- Akrion One Chat Widget -->
<script
src="https://cdn.akrion.one/widget/v1/akrion-widget.js"
data-tenant-id="YOUR_TENANT_ID"
data-api-key="YOUR_API_KEY"
data-position="bottom-right"
data-theme="auto"
></script>
Configure Branding
Customise the widget appearance through the tenant configuration API or the admin dashboard:
JSON{
"tenant_id": "coastal",
"branding": {
"primary_color": "#0891b2",
"logo_url": "https://coastalcu.akrion.one/logo.svg",
"welcome_message": "G'day! How can I help you today?",
"agent_name": "Coastal Assistant"
}
}
Architecture
Akrion One follows a PaaS-first, event-driven architecture on Microsoft Azure:
| Layer | Service | Purpose |
|---|---|---|
| Compute | Azure Container Apps | Containerised agents with Dapr sidecar |
| AI Gateway | Azure API Management | JWT validation, rate limiting, per-tenant usage analytics |
| AI | Microsoft Foundry v2 | GPT-5.1 reasoning, text-embedding-3-large for RAG |
| Search | Azure AI Search | Per-tenant knowledge index (knowledge-{tenant_id}) |
| Data | Cosmos DB + PostgreSQL | High-scale session store + relational metadata |
| Messaging | Service Bus + Event Grid | Agent-to-agent comms, system events |
| Identity | Microsoft Entra ID | Managed identities, tenant isolation via app registrations |
| Security | Key Vault + Defender | Secrets management, runtime threat protection |
| Observability | Azure Monitor + App Insights | KQL dashboards, per-tenant metrics, correlation IDs |
All data is processed and stored exclusively in Australia East (Sydney) and Australia Southeast (Melbourne) to meet APRA CPS 234 data residency requirements.
Chat Widget Integration (JS — Phase 1)
The Akrion One JS chat widget embeds directly into your existing web or mobile banking interface. It provides a fully branded AI assistant experience with minimal integration effort — a single <script> tag.
Akrion One offers three front-end integration methods, rolled out in phases:
- Phase 1 — JS Widget (this section): IIFE script tag. Quickest to deploy; zero learning curve. Best for static sites and POCs.
- Phase 1.5 — Web Component (
<akrion-chat>): HTML Custom Element with Shadow DOM isolation. Recommended for production banking portals and SPAs. - Phase 2 — React Component: Thin wrapper around the Web Component for React codebases.
All three share the same REST/WebSocket backend — you can migrate incrementally without backend changes.
Script Tag (Simplest)
Drop a single script tag into your HTML. The widget auto-initialises with your tenant configuration:
HTML<!-- Place before </body> -->
<script
src="https://cdn.akrion.one/widget/v1/akrion-widget.js"
data-tenant-id="acme"
data-api-key="ak_live_xxxxxxxxxxxx"
data-position="bottom-right"
data-theme="auto"
data-lang="en-AU"
></script>
JavaScript SDK (Advanced)
For more control, use the JavaScript SDK to programmatically initialise and control the widget:
JavaScriptimport { AkrionWidget } from '@akrion-one/widget';
const widget = new AkrionWidget({
tenantId: 'acme',
apiKey: 'ak_live_xxxxxxxxxxxx',
position: 'bottom-right',
theme: 'dark',
language: 'en-AU',
customerContext: {
customerId: 'CUST-001',
segment: 'premium',
authenticated: true
},
onReady: () => console.log('Akrion widget ready'),
onMessage: (msg) => console.log('Agent response:', msg),
onEscalation: (ticket) => {
// Handle escalation — e.g., open your CRM
console.log('Escalation raised:', ticket.id);
}
});
// Programmatic control
widget.open();
widget.sendMessage('What is my account balance?');
widget.close();
React Component
React / TypeScriptimport { AkrionChat } from '@akrion-one/react';
export default function BankingApp() {
return (
<div className="app">
{/* Your banking app content */}
<AkrionChat
tenantId="coastal"
apiKey={process.env.REACT_APP_AKRION_KEY}
position="bottom-right"
theme="auto"
welcomeMessage="G'day! How can I help you today?"
onEscalation={(ticket) => {
// Route to your escalation handler
handleEscalation(ticket);
}}
/>
</div>
);
}
Configuration Options
| Option | Type | Default | Description |
|---|---|---|---|
tenantId | string | — | Your Akrion One tenant identifier (required) |
apiKey | string | — | API key for authentication (required) |
position | string | bottom-right | bottom-right or bottom-left |
theme | string | auto | light, dark, or auto (follows OS preference) |
language | string | en-AU | Locale code for agent responses |
welcomeMessage | string | — | Custom greeting shown when widget opens |
customerContext | object | — | Pre-authenticated customer context (ID, segment) |
Web Component (<akrion-chat> — Phase 1.5)
The <akrion-chat> Web Component is the recommended integration for production banking portals, single-page apps, and any site with its own design system. It ships as a native HTML Custom Element with Shadow DOM encapsulation — the bank's CSS cannot break the widget, and the widget's CSS cannot affect the bank's page.
- True CSS isolation via Shadow DOM — no z-index wars or selector collisions
- Lifecycle hooks (
connectedCallback/disconnectedCallback) — proper cleanup in SPAs - Reactive attributes — change
tenant-idat runtime and the component re-initialises - Multiple instances per page — e.g., separate chats for accounts and loans
- CSS Custom Properties +
::part()— theming that integrates with your design tokens - Slots for content projection — inject custom footer, welcome message, or branding
- Framework-agnostic — first-class HTML element that works in React, Vue, Angular, Svelte, or vanilla
Quick Start
Load the ES module and drop the custom element into your page:
HTML<!-- Load the component definition -->
<script
type="module"
src="https://cdn.akrion.one/widget/v1.5/akrion-chat.js"
></script>
<!-- Place anywhere in your page -->
<akrion-chat
tenant-id="coastal"
api-url="https://akrion-apim.azure-api.net"
position="bottom-right"
theme="auto"
locale="en-AU"
></akrion-chat>
Observed Attributes
All configuration is declarative via HTML attributes. Changes are applied reactively at runtime.
| Attribute | Type | Default | Description |
|---|---|---|---|
tenant-id | string | — | Your Akrion One tenant identifier (required) |
api-url | string | — | APIM endpoint for your tenant (required) |
position | string | bottom-right | bottom-right or bottom-left |
theme | string | auto | light, dark, or auto |
customer-id | string | — | Authenticated customer context — triggers personalised greeting |
greeting | string | — | Custom welcome message shown when panel opens |
primary-color | string | #0891b2 | Primary brand colour (hex) |
logo | string | — | URL to tenant logo shown in header |
locale | string | en-AU | Language/region code for agent responses |
Event API (Custom Events)
The component emits CustomEvents that cross the Shadow DOM boundary (bubbles: true, composed: true). Listen to them on the element or any ancestor:
JavaScriptconst chat = document.querySelector('akrion-chat');
// Fired once the component has loaded tenant branding and is ready
chat.addEventListener('akrion:ready', () => {
console.log('Akrion widget ready');
});
// Fired when the agent sends a message
chat.addEventListener('akrion:message', (e) => {
console.log('Agent:', e.detail.text, 'from', e.detail.agent);
analytics.track('ai_response', { agent: e.detail.agent });
});
// Fired when the agent escalates to a human
chat.addEventListener('akrion:escalation', (e) => {
openSupportTicket({
reason: e.detail.reason,
priority: e.detail.priority
});
});
// Fired on unrecoverable errors (network, backend, etc.)
chat.addEventListener('akrion:error', (e) => {
errorReporting.log(e.detail);
});
| Event | Detail Payload | When Fired |
|---|---|---|
akrion:ready | {} | Component connected and tenant config loaded |
akrion:message | { text, agent, conversationId } | Agent sends a response |
akrion:escalation | { reason, priority, ticketId } | Conversation escalated to a human |
akrion:error | { code, message } | Network or backend error |
Theming with CSS Custom Properties
Theme the widget purely from CSS — no JavaScript config required. Great fit for design-token systems.
CSS/* Bank's stylesheet — overrides widget appearance */
akrion-chat {
--akrion-primary: #0891b2;
--akrion-secondary: #6366f1;
--akrion-accent: #f59e0b;
--akrion-font: 'Inter', sans-serif;
--akrion-bubble-size: 56px;
--akrion-panel-width: 380px;
--akrion-panel-height: 520px;
--akrion-border-radius: 16px;
}
Advanced Styling with ::part()
For deeper customisation, the component exposes named parts that can be styled from outside the Shadow DOM:
CSSakrion-chat::part(bubble) {
box-shadow: 0 8px 32px rgba(8, 145, 178, 0.4);
}
akrion-chat::part(panel) {
border: 2px solid var(--brand-primary);
}
akrion-chat::part(header) {
background: var(--brand-primary);
}
akrion-chat::part(send-button) {
background: var(--brand-accent);
}
Content Projection via Slots
Banks can inject custom HTML into designated regions of the widget using named <slot> elements:
HTML<akrion-chat tenant-id="coastal" api-url="https://akrion-apim.azure-api.net">
<!-- Replace default "Powered by Akrion One" footer -->
<div slot="custom-footer">
<img src="/coastal-logo.png" alt="Coastal CU" style="height: 20px;" />
<span>Powered by Coastal CU AI</span>
</div>
<!-- Custom welcome message -->
<div slot="welcome">
<h3>G'day! 👋</h3>
<p>I'm your Coastal CU assistant. Ask me about accounts, loans, or rates.</p>
</div>
</akrion-chat>
Programmatic API
The Web Component exposes public methods and reactive properties on the element itself:
JavaScriptconst chat = document.querySelector('akrion-chat');
// Methods
chat.open(); // Open the chat panel
chat.close(); // Close the chat panel
chat.toggle(); // Toggle open/close
chat.sendMessage('What is my balance?'); // Send message programmatically
chat.clearConversation(); // Clear and start a new session
chat.setCustomer('coastal-cust-001'); // Set authenticated customer context
// Reactive properties (reflected to attributes)
chat.tenantId; // 'coastal'
chat.apiUrl; // 'https://akrion-apim.azure-api.net'
chat.isOpen; // true / false
chat.isExpanded; // true / false
chat.messageCount; // 5
Using the Web Component in React
The Web Component works natively in React — just use the custom element tag. For idiomatic React usage, the Phase 2 @akrion-one/react package ships a thin wrapper that forwards refs and typed props:
React / TypeScript// Option 1 — direct custom element (works today)
export default function BankingApp() {
return (
<akrion-chat
tenant-id="coastal"
api-url={process.env.REACT_APP_AKRION_URL}
position="bottom-right"
theme="auto"
/>
);
}
// Option 2 — React wrapper (Phase 2)
import { AkrionChat } from '@akrion-one/react';
export default function BankingApp() {
const chatRef = useRef<HTMLElement>(null);
useEffect(() => {
chatRef.current?.addEventListener('akrion:escalation', handleEscalation);
}, []);
return (
<AkrionChat
ref={chatRef}
tenantId="coastal"
apiUrl={process.env.REACT_APP_AKRION_URL}
theme="auto"
/>
);
}
Migration from JS Widget
Banks already using the Phase 1 JS Widget can migrate incrementally — there's no breaking change. Both methods use the same backend APIs and tenant configuration.
HTML — Before (Phase 1 JS Widget)<script
src="https://cdn.akrion.one/widget/v1/akrion-widget.js"
data-tenant-id="coastal"
data-api-url="https://akrion-apim.azure-api.net"
></script>
HTML — After (Phase 1.5 Web Component)<script
type="module"
src="https://cdn.akrion.one/widget/v1.5/akrion-chat.js"
></script>
<akrion-chat
tenant-id="coastal"
api-url="https://akrion-apim.azure-api.net"
></akrion-chat>
The Shadow DOM boundary provides stronger information asset isolation between the bank's page and the Akrion widget — host-page JavaScript cannot directly query the Shadow DOM, reducing the risk of third-party scripts (tag managers, analytics) accessing customer conversation data. This supports CPS 234 §24 (information asset controls proportionate to criticality).
When to Choose Web Component vs JS Widget
| Scenario | Recommended |
|---|---|
| Quick POC / pilot / static content site | JS Widget (Phase 1) |
| Production web banking portal | Web Component (Phase 1.5) |
| Bank has a design system with CSS tokens | Web Component — CSS Custom Properties fit natively |
| SPA (React / Vue / Angular / Svelte) | Web Component — proper DOM lifecycle |
| Multi-tenant admin dashboard | Web Component — multiple instances, reactive attributes |
| Contact centre / fully custom UI | REST API — see API Reference |
See also: full Web Component technical design doc with reference implementation (~200 LOC), Shadow DOM structure, and comparison matrix.
Admin & Escalation Widget
The Akrion One Admin Widget provides bank staff with a dashboard for reviewing AI-assisted conversations, managing escalations, and monitoring agent performance. This is the future path to a fully embeddable admin widget that can be integrated into your existing back-office tools.
The standalone admin dashboard is available now. The embeddable admin widget (for integration into existing CRM/back-office systems) is on the Phase 2 roadmap.
Admin Dashboard Features
- Conversation Review: View all AI-customer conversations with full audit trail and correlation IDs
- Escalation Queue: Human review queue for high-value transactions, edge cases, and customer complaints
- Agent Analytics: Resolution rates, response times, CSAT scores, and usage metrics per agent type
- Knowledge Base Management: Upload, update, and preview tenant knowledge documents
- Guardrail Configuration: Adjust agent confidence thresholds, escalation rules, and content safety settings
Embedding the Admin Widget (Phase 2)
When available, the admin widget will be embeddable via a similar script-tag approach:
HTML<!-- Akrion One Admin Widget (Phase 2) -->
<div id="akrion-admin"></div>
<script
src="https://cdn.akrion.one/admin/v1/akrion-admin.js"
data-tenant-id="YOUR_TENANT_ID"
data-admin-token="YOUR_ADMIN_TOKEN"
data-target="#akrion-admin"
data-view="escalations"
></script>
Admin API Endpoints
List all conversations for the tenant. Supports pagination, date filtering, and status filtering.
List pending escalations requiring human review. Includes conversation context and agent reasoning.
Resolve an escalation with a human decision. Records the outcome for audit and agent learning.
API Reference
The Akrion One REST API is the foundation for all integrations. All requests require the X-Tenant-Id header and a valid API key.
Authentication
HTTPGET /api/v1/conversations
Host: api.akrion.one
Authorization: Bearer ak_live_xxxxxxxxxxxx
X-Tenant-Id: acme
Content-Type: application/json
Conversations
Start a new conversation. Returns a conversation_id for subsequent messages.
Send a customer message and receive the agent's response. The orchestrator routes to the appropriate specialist agent.
Retrieve full conversation history including agent reasoning and tool calls (for audit).
Knowledge Base
Upload a document to the tenant's knowledge base. Supports Markdown, PDF, and plain text. Triggers re-indexing.
List all documents in the tenant's knowledge base with metadata and indexing status.
Agent Status
Health check for all agents. Returns per-agent status, version, and last activity timestamp.
Tenant Setup
Onboarding a new bank or credit union to Akrion One involves four key steps:
Provision Tenant
Create the tenant record in Akrion One. This provisions the data partition (Cosmos DB container), AI Search index (knowledge-{tenant_id}), and ADLS storage container.
Pythonfrom akrion.admin import TenantManager
manager = TenantManager(admin_key="ak_admin_xxx")
tenant = manager.create_tenant(
tenant_id="newbank",
display_name="New Bank Australia",
region="australiaeast",
core_banking_url="https://newbank-opentransact.akrion.one",
branding={
"primary_color": "#1a5276",
"logo_url": "https://newbank.com.au/logo.svg"
}
)
Connect Core Banking
Configure the core banking adapter to point to the bank's transaction system. Akrion One ships with an OpenTransact adapter (Temenos Transact-compatible API).
JSON{
"tenant_id": "newbank",
"core_banking": {
"adapter": "opentransact",
"base_url": "https://newbank-opentransact.akrion.one/api/v1",
"auth": {
"type": "managed_identity",
"resource": "api://opentransact-newbank"
}
}
}
Upload Knowledge Base
Upload tenant-specific documents for RAG indexing. These include product descriptions, fee schedules, lending policies, T&Cs, and FAQs.
Bash# Upload all knowledge documents for a tenant
akrion-cli knowledge upload \
--tenant-id newbank \
--source ./content/newbank/ \
--format markdown
Configure & Launch
Set agent policies, escalation rules, and branding. Run UAT with the bank's team, then activate for live traffic.
Knowledge Base
Each tenant's knowledge base is a collection of Markdown documents indexed in Azure AI Search. Agents use RAG (Retrieval-Augmented Generation) to provide accurate, contextual answers grounded in the tenant's actual product and policy data.
Document Types
| Document | Description | Example |
|---|---|---|
product-terms.md | Product descriptions, features, eligibility | Everyday Account, Term Deposits, Home Loans |
fee-schedule.md | All fees and charges | Monthly fees, ATM charges, international transfer fees |
lending-policy.md | Lending criteria, LVR limits, assessment rules | Max LVR 80%, serviceability buffer 3% |
terms-and-conditions.md | Legal T&Cs for all products | Account closure, cooling-off periods |
compliance-rules.md | Regulatory and compliance guidelines | APRA reporting, AML/KYC requirements |
faqs.md | Frequently asked questions | How to reset password, how to dispute a charge |
Keep documents focused and well-structured with clear headings. The AI Search chunking strategy works best with documents under 50KB each, using Markdown headers (H2, H3) for section boundaries.
Escalation Workflows
Akrion One automatically escalates to human review when:
- A loan application exceeds $200,000 (configurable per tenant)
- Agent confidence score drops below the configured threshold (default: 70%)
- Customer explicitly requests to speak with a human
- Sensitive topics are detected (complaints, hardship, regulatory queries)
- Content safety guardrails are triggered
Escalation Flow
SequenceCustomer → Agent → Confidence check → Below threshold?
├── Yes → Create escalation ticket → Notify admin → Queue for human review
└── No → Deliver response to customer
Escalation Ticket includes:
• Full conversation history
• Agent reasoning trace
• Confidence scores per turn
• Suggested resolution (agent's best-effort response)
• Customer context (ID, segment, risk profile)
Webhook Integration
Receive real-time escalation notifications via webhook to route into your existing CRM or ticketing system:
JSON{
"event": "escalation.created",
"tenant_id": "coastal",
"escalation_id": "esc_20260415_001",
"conversation_id": "conv_abc123",
"reason": "loan_amount_exceeds_threshold",
"priority": "high",
"customer_id": "CUST-BH-001",
"agent_type": "loan-processing",
"suggested_action": "Review home loan application for $450,000",
"created_at": "2026-04-15T14:30:00Z"
}
Security & Compliance
Security and compliance are foundational to Akrion One, not afterthoughts. Every design decision considers APRA CPS 234 requirements.
| Control | Implementation |
|---|---|
| Tenant Isolation | Logical isolation via X-Tenant-Id header. Cosmos DB partitioning, per-tenant AI Search indexes, ADLS containers. |
| Data Sovereignty | All processing in Australia East/Southeast. No data leaves Australian Azure regions. |
| Encryption | TLS 1.3 in transit. AES-256 at rest. Customer-managed keys supported via Key Vault. |
| Audit Trails | Correlation IDs on every request. Full conversation logs with agent reasoning. Immutable audit store. |
| Content Safety | Azure AI Content Safety for prompt-injection detection, harmful content filtering, and PII redaction. |
| Identity | Microsoft Entra ID with Managed Identities for service-to-service auth. Conditional access policies per tenant. |
| Monitoring | Azure Defender for Cloud, Sentinel integration, real-time security alerts. |
Agent Types
Akrion One ships with specialist agents across three phases:
MVP Agents (Available Now)
| Agent | Purpose | Key Tools |
|---|---|---|
| Orchestrator | Intent classification and routing | classify_intent, route_to_agent, policy_check |
| Account Query | Balance, transactions, account details | get_balance, get_transactions, get_account_details |
| Loan Processing | Loan enquiry, pre-qualification, application | assess_eligibility, submit_application, get_status |
| Notification | Proactive alerts (fraud, payments, offers) | send_alert, schedule_reminder |
| Ingestion | Knowledge base document processing | ingest_document, reindex_tenant |
Phase 2 (Roadmap)
| Agent | Purpose |
|---|---|
| Investment Advice | Term deposit recommendations, savings optimisation |
| Enhanced Fraud Alerts | Real-time fraud pattern detection and customer notification |
Configuration
Tenant configuration is managed via environment variables and the admin API:
Environment Variables# Required
AKRION_TENANT_ID=coastal
AKRION_API_KEY=ak_live_xxxxxxxxxxxx
CORE_BANKING_URL=https://coastal-opentransact.akrion.one/api/v1
# AI Configuration
FOUNDRY_PROJECT_ID=akrion-one-prod
FOUNDRY_AGENT_MODE=foundry_agent_service
AI_MODEL=gpt-5.1
EMBEDDING_MODEL=text-embedding-3-large
SEARCH_INDEX_PREFIX=knowledge
# Escalation Thresholds
ESCALATION_LOAN_THRESHOLD=200000
ESCALATION_CONFIDENCE_THRESHOLD=0.7
# Feature Flags
ENABLE_PROACTIVE_NOTIFICATIONS=true
ENABLE_INVESTMENT_ADVICE=false
Code Samples
Python — Send a Message
Pythonimport httpx
AKRION_API = "https://api.akrion.one/api/v1"
TENANT_ID = "acme"
API_KEY = "ak_live_xxxxxxxxxxxx"
# Start a conversation
resp = httpx.post(
f"{AKRION_API}/conversations",
headers={
"Authorization": f"Bearer {API_KEY}",
"X-Tenant-Id": TENANT_ID,
},
json={"customer_id": "CUST-SC-001"}
)
conversation_id = resp.json()["conversation_id"]
# Send a message
resp = httpx.post(
f"{AKRION_API}/conversations/{conversation_id}/messages",
headers={
"Authorization": f"Bearer {API_KEY}",
"X-Tenant-Id": TENANT_ID,
},
json={"message": "What's my everyday account balance?"}
)
print(resp.json()["response"])
# → "Your Everyday Account (****4521) balance is $12,450.30 as of today."
JavaScript — Widget Events
JavaScript// Listen for widget events
window.addEventListener('akrion:ready', () => {
console.log('Akrion One widget loaded');
});
window.addEventListener('akrion:message', (event) => {
const { role, content, agentType } = event.detail;
console.log(`[${agentType}] ${role}: ${content}`);
});
window.addEventListener('akrion:escalation', (event) => {
const { escalationId, reason, priority } = event.detail;
// Route to your CRM/ticketing system
createSupportTicket({
externalId: escalationId,
reason: reason,
priority: priority
});
});
cURL — API Quick Test
Bash# Health check
curl -s https://api.akrion.one/api/v1/agents/health \
-H "Authorization: Bearer ak_live_xxxxxxxxxxxx" \
-H "X-Tenant-Id: acme" | jq .
# Start conversation and send message
CONV_ID=$(curl -s -X POST https://api.akrion.one/api/v1/conversations \
-H "Authorization: Bearer ak_live_xxxxxxxxxxxx" \
-H "X-Tenant-Id: acme" \
-H "Content-Type: application/json" \
-d '{"customer_id": "CUST-SC-001"}' | jq -r .conversation_id)
curl -s -X POST "https://api.akrion.one/api/v1/conversations/$CONV_ID/messages" \
-H "Authorization: Bearer ak_live_xxxxxxxxxxxx" \
-H "X-Tenant-Id: acme" \
-H "Content-Type: application/json" \
-d '{"message": "Show me my last 5 transactions"}' | jq .
LOS Gateway — Bank Integration
The Akrion LOS Gateway is the REST contract that a tenant bank exposes so that the Akrion One Loan Processing Agent can perform end-to-end loan origination on the bank's behalf — discovering products, running serviceability under the bank's own credit policy, creating applications, attaching documents, and capturing officer decisions.
- Developer Guide — the practical "how do I implement this?" walkthrough for bank engineering teams.
- Specification — the authoritative wire contract (8 endpoints, role mappings, error shapes).
- OpenAPI 3.1 — machine-readable schema for code generation and contract testing.
What you'll build
A thin adapter (FastAPI / .NET / Spring) that terminates the Akrion contract, validates the Microsoft Entra-issued JWT, and translates each call into your existing LOS:
| If your LOS is… | Wrap… |
|---|---|
| Simpology | Loanapp REST (/loans, /applications) — mirror their LVR ladder verbatim |
| Sandstone | Sandstone Origination Suite REST — surface their applicationId as application_id |
| Cloudcase | Cloudcase Apply API — wire pre-qualification into POST /serviceability/check |
| nCino | Salesforce REST + nCino LoanApp objects — Connected App for inbound, Flow for serviceability |
| Greenfield | Use opentransact/ directly as the reference implementation |
Federated identity at a glance
Each pilot bank gets its own Microsoft Entra app registration; a
token minted for one bank cannot be replayed against another (HTTP
403 audience mismatch). This is the cryptographic
tenant boundary required by APRA CPS 234 §35–36.
Bash# 1. Create your bank's app registration (one-off)
BANK="acme"
az ad app create \
--display-name "OpenTransact (${BANK})" \
--sign-in-audience AzureADMyOrg \
--identifier-uris "api://opentransact-${BANK}"
# 2. Configure your gateway (env vars)
export AKRION_TENANT_ID="<Akrion's Entra tenant id>"
export OPENTRANSACT_EXPECTED_AUDIENCE="api://opentransact-${BANK}"
# Production must NEVER set OPENTRANSACT_AUTH_BYPASS
The 8 endpoints
| Method | Path | Role |
|---|---|---|
| GET | /api/v1/loans/products | LOS.Read |
| GET | /api/v1/loans/products/{id}/rates | LOS.Read |
| POST | /api/v1/loans/serviceability/check | LOS.Read |
| POST | /api/v1/loans/applications | LOS.Submit |
| GET | /api/v1/loans/applications | LOS.Read |
| GET | /api/v1/loans/applications/{id} | LOS.Read |
| POST | /api/v1/loans/applications/{id}/documents | LOS.Submit |
| POST | /api/v1/loans/applications/{id}/decision | LOS.Submit |
Webhook callbacks (Phase 4)
Banks push application status changes back to Akrion (rather than
Akrion polling). Mutual JWT auth (the bank's app calls Akrion's
api://akrion-platform), HMAC-SHA256 body signature,
idempotency key, 5-minute clock-skew tolerance. The full contract is
in Developer Guide §5.
Every bank gateway must pass the Akrion conformance pack
(opentransact/backend/tests/conformance/) before we
route production traffic to it — including JWT replay tests,
cross-tenant audience rejection, role enforcement, and the
application state machine. See
Dev Guide §7.
Need help onboarding (app registrations, role assignments, audience values)? Email contact@akrion.one.
© 2026 Akrion AI Pty Ltd · akrion.one · Privacy & RAI · Contact · Built on Microsoft Azure