BYOA Borrowing Capacity of Foo

De eigen agent van kredietverstrekker Foo, aangesloten op het Stater AI Platform via Bring-Your-Own-Agent. Hij beoordeelt of een hypotheekaanvraag in aanmerking komt voor de Nationale Hypotheek Garantie — volgens Foo's eigen regels, niet die van Stater.

Bring-Your-Own-Agent tenant: foo A2A · JSON-RPC versie 1.0.0 Inbound auth: afgedwongen

Wat deze agent doet

Eén berekening, volledig deterministisch — geen LLM. Foo bepaalt de maximale leencapaciteit volgens het Foo Acceptatiekader Leencapaciteit 2026:

Stater hanteert daarentegen één vlakke factor van 4,5 over het volledige gezamenlijke inkomen. De twee regels wijken beide kanten op af: bij één aanvrager leent Foo doorgaans meer, bij een gezamenlijke aanvraag minder. Dat is precies wat een eigen acceptatiekader betekent — geen fout, maar beleid.

Het antwoord bevat altijd assessor: "foo-borrowing-capacity", zodat in het audit-spoor onmiskenbaar is dat Foo's agent het oordeel gaf en niet die van Stater.

Waar hij in de keten zit

Het platform vervangt alleen de middelste stap. Staters invoer- en uitvoerstappen blijven er altijd omheen staan:

Hypotheek-app→ a2a-gateway→ Agentic Cortex→ Stater: invoerstap→ deze agent→ Stater: uitvoervalidatie→ antwoord

Wat Foo niet te zien krijgt

Het platform deelt uitsluitend een dossierNumber — een verwijzing, geen dossier. Er gaan dus helemaal geen persoonsgegevens over de grens: geen namen, geen loonstroken, geen bedragen. Foo zoekt dat nummer op in zijn eigen documentsysteem, precies zoals een echte kredietverstrekker dat zou doen.

Deze agent belt daarvoor niets van Stater aan: geen MCP-gateway, geen DMS, geen platform-API. Hij draait buiten het netwerk van het platform en is volledig zelfstandig. Dat is geen beperking van de demo maar het eerlijke model: wat een externe partij niet krijgt, kan zij ook niet gebruiken — en wat zij zelf weet, weet het platform niet.

Endpoints

EndpointDoel
GET /deze pagina
GET /.well-known/agent-card.json de A2A Agent Card — de URL die de AI-beheerder van Foo in het platform importeert
GET /healthliveness
POST /a2a de invoke — A2A v1.0 JSON-RPC (SendMessage); bearer-token vereist zodra het secret geleverd is
GET /docsOpenAPI-UI

Zelf uitproberen

Dit is de contractvorm die een echte tenant implementeert: standaard A2A v1.0 JSON-RPC, geen Stater-specifieke envelope. Het platform stuurt de aanvraag als een SendMessage-call met het dossiernummer in een DataPart; deze agent antwoordt met hetzelfde patroon, het oordeel in result.message.parts[0].data. De governance-context (o.a. X-Tenant-Id, X-Use-Case-Slug, X-Env) komt mee als HTTP-headers, niet in de JSON-RPC-body — die draagt uitsluitend wat de A2A-spec zelf definieert. Een afwijzing van de aanvraag zelf (bijvoorbeeld een leeg dossiernummer) is geen HTTP-fout maar een JSON-RPC error-member bij HTTP 200 — zo blijft een aanroep die de envelope wél goed vormde, maar een slechte payload droeg, te onderscheiden van een kapotte aanroep.

curl -X POST https://borrowing-capacity-agent.foo.aiplatform.triplebeta.nl/a2a \
  -H 'Authorization: Bearer <token>' \
  -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":"1","method":"SendMessage",
       "params":{"message":{"messageId":"m-1","role":"ROLE_USER",
                            "parts":[{"data":{"dossierNumber":"G7H8J9"}}]}}}'
{
  "jsonrpc": "2.0",
  "id": "1",
  "result": {
    "message": {
      "messageId": "<uuid>",
      "role": "ROLE_AGENT",
      "parts": [
        {
          "data": {
            "agentId": "borrowing-capacity",
            "maxBorrowingCapacity": 331776.0,
            "applicants": [
              {
                "name": "Pieter Jansen",
                "grossIncome": 3400.0
              },
              {
                "name": "Fatima el Amrani",
                "grossIncome": 2950.0
              }
            ],
            "explanation": "Foo Acceptatiekader Leencapaciteit 2026: Hoofdinkomen EUR 40.800 telt volledig mee; medeaanvrager EUR 35.400 telt voor 80% mee. Toetsinkomen: EUR 69.120. Foo hanteert factor 4.80 (toetsinkomen vanaf EUR 45.000), wat uitkomt op een maximale leencapaciteit van EUR 331.776.",
            "assessor": "foo-borrowing-capacity"
          }
        }
      ]
    }
  }
}