concepts
mandats et moteur de règles
Chaque dépense est évaluée par un moteur de règles déterministe avant de toucher la banque. Les règles s'exécutent dans un ordre fixe ; la première qui échoue décide.
trois issues
| decision | l'agent reçoit | ce qui se passe |
|---|---|---|
| allow | status: "paid" / "initiated" | Exécuté immédiatement. L'émetteur peut encore refuser (declined_by_bank). |
| review | status: "pending_approval" + requestId | Rien n'est débité. Un humain approuve ou refuse. |
| block | status: "denied" + reason | Rien n'est débité, inscrit au journal d'audit. Pas d'escalade. |
paiements carte : ordre de décision
Le montant doit être > 0.
blockLe nom du marchand contient une entrée de blockedMerchants (insensible à la casse).
allowedMccs n'est pas vide et le mcc est absent ou hors liste.
Montant > perTxMax.
Dépenses exécutées du jour + montant > dailyMax.
Dépenses exécutées du mois + montant > monthlyMax.
Montant > approvalAbove.
Sinon.
allowLes fenêtres de dépense sont le jour et le mois calendaires en UTC. Seuls les paiements carte et virements exécutés comptent ; les tentatives refusées et demandes en attente non. Les comparaisons sont strictes : avec approvalAbove: 250, un paiement de 250,00 EUR est exécuté et 250,01 EUR est revu.
virements : ordre de décision
transfersEnabled vaut false.
Le montant doit être > 0.
blockDépenses exécutées du mois + montant > monthlyMax.
Montant > transferApprovalAbove (0 par défaut : tout virement).
Sinon.
allowLe format de l'IBAN est vérifié avant le mandat (IBAN invalide : 400). Les virements exécutés comptent dans les dépenses du jour et du mois comme les paiements carte.
exemples commentés
Avec le mandat du demo-agent de la sandbox : perTxMax 500, dailyMax 2000, approvalAbove 250, sans restriction MCC.
| appel | contexte | issue | règle |
|---|---|---|---|
pay 49 Vercel | rien dépensé | allow | tout est respecté |
pay 250 Notion | allow | pas strictement au-dessus de 250 | |
pay 320 AWS | review | approvalAbove | |
pay 900 Apple | block | perTxMax | |
pay 200 Figma | 1 900 exécutés aujourd'hui | block | dailyMax |
pay 40 Lucky Casino | blockedMerchants: ["casino"] | block | blockedMerchants |
pay 30 Uber mcc 4121 | allowedMccs: ["5734","7372"] | block | allowedMccs |
send_transfer 100 | mandat par défaut | block | transfersEnabled |
fractionner ne contourne rien
Le serveur MCP demande aux agents de respecter chaque décision et de ne jamais fractionner un montant pour passer sous un seuil. Si un agent essaie quand même, les limites journalière et mensuelle plafonnent le total, et chaque tentative figure au journal d'audit.
modifier un mandat
update_agent_policy (ou POST /api/agents/:id/policy) fusionne votre correctif avec le mandat actuel et valide le résultat. Modifier monthlyMax met aussi à jour le plafond de la carte. Les changements s'appliquent au paiement suivant ; ils ne touchent pas les demandes déjà en attente.
{
"agentId": "agt_3f2b8d10",
"allowedMccs": [
"5734",
"7372"
],
"blockedMerchants": [
"casino",
"crypto"
],
"approvalAbove": 100
}recettes
| agent | mandat |
|---|---|
| Acheteur SaaS | perTxMax 200 · dailyMax 600 · monthlyMax 3000 · approvalAbove 100 · allowedMccs [5734, 7372] |
| Réservation de voyages | perTxMax 1500 · dailyMax 3000 · approvalAbove 400 · allowedMccs [4511, 7011, 4112, 4722] |
| Achat publicitaire | perTxMax 1000 · dailyMax 1000 · monthlyMax 20000 · approvalAbove 1000 · allowedMccs [7311] |
| Paiement fournisseurs | transfersEnabled true · transferApprovalAbove 0 · monthlyMax 50000 |
Les MCC ci-dessus sont des exemples courants ; vérifiez la catégorie réellement déclarée par vos marchands.