Each integration uses Integrations:{Name}:Mode:
| Mode | Behavior |
|---|---|
Stub |
Local adapters (development) |
Production |
Real HTTP + secrets (Key Vault or Configuration) |
Integrations:Crc:Mode=ProductionIntegrations:Crc:BaseUrl— BPnet base URL- mTLS client certificate:
- Key Vault:
Integrations:Bpnet:ClientCertificateSecretName(PFX base64) - Dev:
Integrations:Bpnet:ClientCertificatePath+ password in config/secret
- Key Vault:
- No caching (regulatory requirement)
- Activate:
Integrations:IberianExpansion:EnableSpainExpansion=true - Requests with
ApplicantMarket=Spain(or Spanish NIF/CIF) consult CIRBE instead of CRC Integrations:Cirbe:Mode=Production+BaseUrl(mTLS, same pattern as BPnet)- Monthly CIRBE export (F5) maintained at
/api/regulatory/cirbe-export
BaseUrl+ credentials per provider- Yapily — Basic auth (
ApplicationId=applicationUuidfrom console JSON; secret inIntegrations:Yapily:ApiKeyvia user-secrets or Key Vault). Health check:GET /institutions. Sandbox: same URLhttps://api.yapily.com+ registermodelo-sandboxbank in Yapily console. - Other providers:
ApiKeySecretName(Bearer) - Expected response: JSON
Dictionary<string, double>of metrics - Moody's EDF (
Integrations:MoodysEdf):probability_of_default,lgd_estimate,edf_implied_rating_score(SME/Corporate) - ESG (
Integrations:Esg):esg_risk_score,esg_controversy_index,climate_risk_score(SME/Corporate)
Integrations:horldCheck:Mode=Production- POST
FetchPathTemplatewith screening request body
- Manual entry only (portal without API)
Integrations:Citius:Mode=Manual- Applicable to SME/Corporate segments (Portugal)
- Available fields:
insolvency_proceedings_count,active_enforcement_count,total_debt_amount_eur,has_criminal_records - Impact on scoring: insolvency proceedings and enforcement reduce
sanctions_screen_scoreinSanctionsAmlagent - Citius portal consultation (https://citius.mj.pt) must be done manually by analysts before filling CreditAI form
"Integrations": {
"KeyVault": { "VaultUri": "https://my-kv.vault.azure.net/" }
}API loads secrets at startup (DefaultAzureCredential). Secret names referenced in ApiKeySecretName / BPnet certificates.
Authentication__Mode=Entra
Authentication__Authority=https://login.microsoftonline.com/{tenant}/v2.0
Authentication__Audience=api://creditai
Authentication__ClientId={web-client-id}
Authentication__ClientSecret={from-keyvault}
Authentication__ApiScope=api://creditai/access_as_userRegister API app (scope access_as_user) and heb app (OIDC). Assign roles Analyst, Supervisor, etc.
- Migration
EnableTenantRowLevelSecurity(policy oncredit_requests) Integrations:Tenant:EnablePostgreSqlRls=true- Send
X-Tenant-Idor claimtenant_id/tidin each API request
Production (appsettings.Production.json):
"Llm": { "Enabled": true, "BaseUrl": "http://localhost:8000", "Model": "qwen3.5:9b" }BaseUrl is the host without /v1 — the client calls POST {BaseUrl}/v1/chat/completions (vLLM, llama.cpp server, …).
Env: LLM_ENABLED, LLM_BASE_URL, LLM_MODEL.
Self-host: Kortexio/ContextMemory or docker-compose.contextmemory.yml in this repo.
"ContextMemory": {
"BaseUrl": "http://localhost:5100",
"AppId": "creditai",
"ApiKey": "cm_creditai_local_key"
}When BaseUrl + ApiKey are set, narrative/document LLM calls go through the gateway; otherwise any OpenAI-compatible Llm:* host is used.
Keep Integrations:*:Mode=Stub and Authentication:Mode=Development (default).