KyvShield

Plateforme d'administration

{{ loginError }}

KyvShield © 2024 — Verification d'identite

Dashboard

Vue d'ensemble des sessions actives (derniere 2h)

{{ stat.value }}

{{ stat.label }}

Sessions recentes

Session App Status Steps Platform Date
{{ session.session_id?.substring(0, 12) }}... {{ session.app_id }} {{ session.status }} {{ session.final_result.overall_status }} {{ session.steps_order?.join(', ') || '-' }} {{ session.client?.platform || '-' }} {{ formatDate(session.created_at) }}
Aucune session dans les 2 dernieres heures

Statistiques d'utilisation

{{ statsData.summary.total_sessions || 0 }}
Sessions
{{ (statsData.summary.success_rate || 0).toFixed(1) }}%
Taux succes
{{ statsData.summary.total_failed || 0 }}
Echecs
{{ statsData.summary.avg_duration_ms ? (statsData.summary.avg_duration_ms / 1000).toFixed(1) + 's' : '-' }}
Duree moy.

Sessions par jour

{{ day.date?.substring(5) }}
Succes Echec

Consommation du mois (toutes applications)

Sessions

Rechercher et explorer les sessions de verification

{{ sessionTotal }} session(s) trouvee(s)

Session App Status Steps Duree Platform Date TTL
{{ s.session_id?.substring(0, 12) }}... {{ s.app_id }} {{ s.status }} {{ s.steps_order?.join(', ') || '-' }} {{ s.total_duration_ms ? (s.total_duration_ms / 1000).toFixed(1) + 's' : '-' }} {{ s.client?.platform || '-' }} {{ formatDate(s.created_at) }} {{ sessionTTL(s.created_at) }}
Page {{ sessionPage }} / {{ sessionPages }} ({{ sessionTotal }} resultats)

Applications

Gerer les applications et cles API

{{ app.name }}

{{ app.app_id }}
{{ app.status }}
Cles API
{{ app.api_keys?.length || 0 }}
Webhook
{{ app.settings?.webhook_url || 'Non configure' }}
Plan
{{ app.billing?.plan || 'free' }}

Aucune application

{{ detailApp.name }}

{{ detailApp.status }} {{ detailApp.billing?.plan || 'free' }} {{ detailApp.billing.billing_mode === 'per_session' ? 'Par session' : 'Par operation' }} Fixe: {{ formatCurrency(detailApp.billing.monthly_fixed_fee) }} XOF/mois

{{ detailApp.app_id }}

Informations generales

Types de documents & options

Documents autorises

Cles API

Nom Cle (masquee) Status Creee Actions
{{ k.name }} {{ maskApiKey(k.api_key) }} {{ k.status }} {{ formatDate(k.created_at) }}
Aucune cle API

Cle regeneree avec succes — Copiez-la maintenant, elle ne sera plus affichee

{{ rotatedNewKey }}

Utilisation par cle API

Cle Requetes totales Derniere utilisation Ce mois
{{ k.name }} {{ k.usage_stats?.total_requests || 0 }} {{ k.usage_stats?.last_used_at ? formatDate(k.usage_stats.last_used_at) : 'Jamais' }} -

Quotas par type de session

Securite — {{ selectedKey.name }}

Restrictions d'acces pour cette cle

Cles temporaires

{{ tempKeysTotal }} cle(s)
Cle Nom Expire Utilisations Status
{{ tk.temp_key?.substring(0, 12) }}... {{ tk.name || '-' }} {{ formatDate(tk.expires_at) }} {{ tk.used_count || 0 }} revoque expire active
Page {{ tempKeysPage }} / {{ tempKeysPages }}
Aucune cle temporaire

Echecs Webhook (24h)

{{ webhookFailuresTotal }} echec(s)
Event Session URL Tentatives Erreur Date
{{ wf.event }} {{ wf.session_id?.substring(0, 10) }}... {{ wf.webhook_url }} {{ wf.attempts }} {{ wf.last_error }} {{ formatDate(wf.created_at) }}
Page {{ webhookFailuresPage }} / {{ webhookFailuresPages }}
Aucun echec webhook dans les 24 dernieres heures

Utilisateurs de cette application

{{ appUsers.length }} utilisateur(s)
Nom Email Role Status Actions
{{ u.name }} {{ u.email }} {{ u.role }} {{ u.status }}

Aucun utilisateur attache a cette application

Statut & Actions

{{ detailApp.status === 'active' ? 'Application active' : detailApp.status === 'suspended' ? 'Application suspendue' : 'Application revoquee' }}

{{ detailApp.status === 'active' ? 'Les cles API de cette application sont fonctionnelles.' : detailApp.status === 'suspended' ? 'Les cles API sont temporairement desactivees.' : 'Les cles API sont desactivees. Reactivez pour restaurer l\'acces.' }}

Configuration Tarifs

{{ editingApp?.app_name || editingApp?.name }} — {{ editingApp?.app_id }}

Quotas mensuels inclus

Operations gratuites par mois. Au-dela, le prix de depassement s'applique.

Prix de depassement (XOF)

Prix par operation au-dela du quota mensuel inclus.

XOF

Simulateur de cout

Entrez le volume prevu par jour ou par mois pour estimer le cout mensuel.

Saisie par :
Operation Volume {{ simMode === 'day' ? '/jour' : '/mois' }} Total/mois Inclus Depassement Cout
{{ field.label }} {{ simMonthly(field.key) }} {{ simIncluded(field.key) }} {{ simOverage(field.key) }} {{ formatCurrency(simCost(field.key)) }}
Cout mensuel estime {{ formatCurrency(totalSimulatedCost) }} XOF

Tarifs enregistres avec succes

Plan {{ pricingForm.plan }} — les nouveaux tarifs sont actifs immediatement.

Documents

Types de documents configures dans le systeme

{{ doc.doc_type }} {{ doc.enabled ? 'actif' : 'inactif' }}

{{ doc.name }}

{{ doc.country_name }} — {{ doc.document_category_label }}
Recto Verso {{ doc.recto?.fields?.length || 0 }} champs recto {{ doc.verso?.fields?.length || 0 }} champs verso

Aucun document configure

{{ selectedDocument.name || selectedDocument.doc_type }}

{{ selectedDocument.doc_type }}

Configuration complete

{{ JSON.stringify(selectedDocument, null, 2) }}

Plans

Gerer les plans tarifaires globaux

Chargement des plans...

{{ plan.plan_id }}

{{ plan.name }}

SLA {{ plan.sla }}

{{ plan.description }}

Quotas mensuels inclus
{{ formatNumber(plan.monthly_included?.total_sessions) }}
Total
{{ formatNumber(plan.monthly_included?.recto) }}
Recto
{{ formatNumber(plan.monthly_included?.verso) }}
Verso
{{ formatNumber(plan.monthly_included?.selfie) }}
Selfie
{{ formatNumber(plan.monthly_included?.face_verifications) }}
Face
Tarifs unitaires ({{ plan.currency || 'XOF' }})
{{ plan.pricing?.per_recto }}
Recto
{{ plan.pricing?.per_verso }}
Verso
{{ plan.pricing?.per_face_verification }}
Face
{{ plan.pricing?.per_selfie }}
Liveness
{{ f }}
Support: {{ plan.support || '-' }} {{ plan.auto_suspend_on_limit ? 'Auto-suspend' : 'Pas de suspension' }}

Aucun plan configure

{{ creatingNewPlan ? 'Nouveau Plan' : 'Modifier: ' + editingPlan.name }}

Identifiant unique (lowercase, underscores)

Quotas mensuels inclus

0 = pas de limite specifique pour ce type de session

Tarifs unitaires

Tarifs hors-forfait

Features

Utilisateurs

Gerer les comptes utilisateurs

Nom Email Role App Status Actions
{{ u.name }} {{ u.email }} {{ u.role }} {{ appName(u.app_id) }} ({{ u.app_id }}) - {{ u.status }}

Settings LLM

Configuration des providers IA et routage des requetes

Stats en temps reel (depuis redemarrage)

Route:Provider Requetes Succes Echecs API Tokens in Tokens out Latence moy.
{{ key }} {{ stat.total_requests }} {{ stat.successes }} {{ stat.api_failures }} {{ formatNumber(stat.total_input_tokens) }} {{ formatNumber(stat.total_output_tokens) }} {{ stat.total_requests > 0 ? Math.round(stat.total_latency_ms / stat.total_requests) + 'ms' : '-' }}

Historique par jour / provider

Date Route Provider Modele Requetes Succes Echecs Tokens in Tokens out Latence moy.
{{ stat.date }} {{ stat.route }} {{ stat.provider }} {{ stat.model?.split('/').pop() }} {{ stat.total_requests }} {{ stat.successes }} {{ stat.api_failures }} {{ formatNumber(stat.total_input_tokens) }} {{ formatNumber(stat.total_output_tokens) }} {{ stat.avg_latency_ms ? Math.round(stat.avg_latency_ms) + 'ms' : '-' }}

Routage des requetes

{{ i + 1 }}

Providers & Cles API

Fallback automatique

Analyse & Prompts

Chargement des settings...

Configuration

Edition JSON des documents Elasticsearch — 50 derniers changements conserves

Chargement de la configuration...

{{ rawConfigTab }}
{{ rawConfigError }} JSON valide

Historique des versions

v{{ v.version }}
{{ new Date(v.updated_at).toLocaleString('fr-FR') }}
par {{ v.updated_by || 'inconnu' }}
{{ computeJsonDiff(configHistory[i+1]?.document || {}, v.document || {}).length }} changement(s)
~ {{ d.path }}: {{ typeof d.from === 'object' ? JSON.stringify(d.from) : d.from }} → {{ typeof d.to === 'object' ? JSON.stringify(d.to) : d.to }} + {{ d.path }}: {{ typeof d.value === 'object' ? JSON.stringify(d.value) : d.value }} - {{ d.path }}: {{ typeof d.value === 'object' ? JSON.stringify(d.value) : d.value }}
Pas de diff disponible
Aucun historique — les versions seront enregistrees apres le premier changement.

Restaurer la version {{ restoreVersion.version }} ?

Du {{ new Date(restoreVersion.updated_at).toLocaleString('fr-FR') }} par {{ restoreVersion.updated_by || 'inconnu' }}.
Entrez votre mot de passe pour confirmer.

{{ restoreError }}

Selectionnez un document a modifier

Registre d'Identites

Personnes identifiees par KYC (recto+verso PASS)

Migrations

Historique des migrations Elasticsearch

ID Description Statut Duree Execute le
{{ m.migration_id }} {{ m.description }} {{ m.status === 'completed' ? 'OK' : 'FAILED' }} DESTRUCTIVE {{ m.duration_ms ? m.duration_ms + 'ms' : '—' }} {{ m.executed_at ? new Date(m.executed_at).toLocaleString('fr-FR') : '—' }}
Aucune migration executee. Lancez python3 migrate.py pour initialiser.

python3 migrate.py --status pour voir les migrations en attente. python3 migrate.py pour executer les migrations.

Facturation

Consommation et couts par application

{{ formatCurrency(billingData.global_total) }} XOF
{{ selectedMonthData.usage.recto + selectedMonthData.usage.verso }}
Documents
{{ selectedMonthData.usage.liveness_sessions }}
Sessions
{{ formatCurrency(selectedAppBilling.monthly_fixed_fee) }}
Abonnement fixe
{{ formatCurrency(selectedMonthData.costs.total) }}
Operations {{ selectedMonthData.currency }}
{{ formatCurrency((selectedAppBilling?.monthly_fixed_fee || 0) + selectedMonthData.costs.total) }}
Total {{ selectedMonthData.currency }}
{{ selectedMonthData.payment_status === 'paid' ? 'Paye' : 'Impaye' }} Paye le {{ formatDate(selectedMonthData.paid_at) }}
Paiement confirme
Operation Utilise Inclus Depassement Prix unit. Cout
{{ row.label }} {{ row.used }} {{ row.included }} {{ row.overage }} {{ row.unitPrice }} XOF {{ formatCurrency(row.cost) }}
Abonnement fixe {{ formatCurrency(selectedAppBilling.monthly_fixed_fee) }}
Sous-total operations {{ formatCurrency(selectedMonthData.costs.total) }}
Total {{ formatCurrency((selectedAppBilling?.monthly_fixed_fee || 0) + selectedMonthData.costs.total) }} XOF

Detail journalier - {{ selectedBillingMonth }}

Historique mensuel

Aucune donnee de facturation

Nouvel Utilisateur

Nouvelle Application

Configuration personnalisee

0 = pas de limite specifique

{{ newApp.allowed_document_types.length }} doc(s) selectionne(s)

Tous autorises

Nouvelle Cle API

Cle creee avec succes — Copiez-la maintenant, elle ne sera plus affichee

{{ generatedKey }}

{{ identityDetail.identifier_value }}

{{ identityDetail.document_type }} Cree par {{ identityDetail.created_by_app }} le {{ formatDate(identityDetail.created_at) }}

Selfie

Recto

Verso

Photo extraite

Recto

{{ f.label }}
{{ f.value }}
{{ f.raw_value }}

Verso

{{ f.label }}
{{ f.value }}
{{ f.raw_value }}

Historique des soumissions ({{ identitySubTotal }})

App Session Face Match Date
{{ sub.app_id }} {{ sub.session_id }} {{ sub.face_match_score.toFixed(1) }}% - {{ formatDate(sub.submitted_at) }}
Premiere soumission (creation)
Page {{ identitySubPage }} / {{ identitySubPages }}

Detail de la session

Session ID

{{ sessionDetail.session_id }}

Etat

{{ sessionDetail.status }}

Resultat

{{ sessionDetail.final_result?.overall_status || '-' }}

App

{{ sessionDetail.app_id || '-' }}

KYC ID

{{ sessionDetail.kyc_identifier }}

Duree

{{ sessionDetail.total_duration_ms ? (sessionDetail.total_duration_ms / 1000).toFixed(1) + 's' : '-' }}

Platform

{{ sessionDetail.client?.platform || '-' }}

Date

{{ formatDate(sessionDetail.created_at) }}

Document

{{ sessionDetail.document_type }}-

Steps

{{ sessionDetail.steps_order?.join(', ') || '-' }}

TTL

{{ sessionTTL(sessionDetail.created_at) }}

Etapes

{{ idx + 1 }} {{ step.step_type }} {{ step.duration_ms ? (step.duration_ms/1000).toFixed(1) + 's' : '' }} {{ step.result.status }} {{ step.status === 'pending' ? 'Non execute' : step.status }}

Images

#{{ frame.frame_id }}
Score: {{ (step.result.score * 100).toFixed(0) }}% Live: {{ step.result.is_live ? 'Oui' : 'Non' }} Fraude: {{ step.result.fraud_indicators.join(', ') }}
Modele: {{ step.llm_call.model }} LLM: {{ (step.llm_call.duration_ms/1000).toFixed(1) }}s Tokens in: {{ step.llm_call.input_tokens }} Tokens out: {{ step.llm_call.output_tokens }}

Donnees extraites ({{ step.extraction.length }})

{{ field.label || field.key }}: {{ field.value || '-' }}

Resultat final

{{ JSON.stringify(sessionDetail.final_result, null, 2) }}

Modifier l'utilisateur

Generer une cle temporaire

Cle temporaire generee — Copiez-la maintenant

{{ generatedTempKey }}
{{ toast.message }}