ops-warden/wiki/playbooks/binky-qonto-api.md
tegwick 5d30220cc5 catalog: draft binky-qonto-api lane + playbook (CCR-2026-0008)
Tenant Qonto bank API front door for binky-control read-only MCP; stays
draft until policy apply, founder provision, and capabilities-safe verify.
2026-07-21 21:26:25 +02:00

4.2 KiB

Binky Qonto bank API

Date: 2026-07-21
Catalog: binky-qonto-api (status draft until provision; risk: high)
Owner: railiance-platform (CCR-2026-0008) · consumer need: binky-control
Workplan: BINKY-WP-0005 · Decision: DEC-2026-004 (approved)

API credentials for the company Qonto account so the self-hosted qonto/qonto-mcp-server can run read-only balance and transaction pulls for control-plane finance feeds (finance/CostRunRate.md, Finance Steward rhythm).

Payments and transfers are Red lane forever — never allow-list write/payment tools in the harness. Qonto API keys are not scope-limited server-side; read-only is enforced at the harness tool allow-list.


Provider (Qonto — non-secret)

Setting Value
Dashboard Qonto web app → /settings/integrations
Auth shape API key + organization ID
MCP server qonto/qonto-mcp-server (self-hosted; not the hosted OAuth connector)
Env names only QONTO_API_KEY, QONTO_ORGANIZATION_ID

Design (variant decision, read-only boundary, consumers):
binky-control/integrations/qonto-mcp.md

OpenBao pointers

Field Value
Mount tenants
Path tenants/binky/qonto/api
Fields QONTO_API_KEY, QONTO_ORGANIZATION_ID
Policy workload-kv-read-binky-qonto-api
OIDC role binky-qonto-api-workload-kv-read (groups=net-kingdom-admins)
Risk high

Worker checklist

  1. Login as caller (after CCR-2026-0008 policy + role applied):

    bao login -method=oidc -path=netkingdom role=binky-qonto-api-workload-kv-read
    
  2. Fetch via sanctioned transport (never paste into chat):

    warden access binky-qonto-api --all --no-policy --exec -- \
      qonto-mcp-server
    # or dual-field inject when wiring a harness session:
    # warden access binky-qonto-api --all --no-policy --exec -- \
    #   env | grep -E '^QONTO_' | sed 's/=.*/=<set>/'
    

    Until catalog is active and resolvable, use bao as caller with files:

    umask 077
    bao kv get -field=QONTO_API_KEY tenants/binky/qonto/api > /tmp/qonto.key
    bao kv get -field=QONTO_ORGANIZATION_ID tenants/binky/qonto/api > /tmp/qonto.org
    chmod 600 /tmp/qonto.key /tmp/qonto.org
    export QONTO_API_KEY="$(cat /tmp/qonto.key)"
    export QONTO_ORGANIZATION_ID="$(cat /tmp/qonto.org)"
    shred -u /tmp/qonto.key /tmp/qonto.org
    
  3. Run read-only MCP tools only (organization, accounts, transactions, statements metadata). Do not invoke card, invoicing, request, or transfer tools.

  4. Store metadata-only evidence under binky-control/finance/ (update CostRunRate.md TBC rows; no bulk statement dumps in git).

Agents (WARDEN_AGENT_ID set): raw value stream refused (exit 7). Use --out / --exec / --wrap / --fingerprint.


Verify (capabilities-safe)

LANE=$(bao token create -policy=workload-kv-read-binky-qonto-api -ttl=2m -field=token)
bao token capabilities "$LANE" tenants/data/binky/qonto/api   # read
bao token revoke "$LANE"

DEFAULT=$(bao token create -policy=default -ttl=2m -field=token)  # deny of create is also pass
bao token capabilities "$DEFAULT" tenants/data/binky/qonto/api  # deny
bao token revoke "$DEFAULT"

Never use bao kv get for deny tests.


Founder provision (Red lane)

# In Qonto dashboard: /settings/integrations → create API key, note organization ID
# values only in mode-0600 files, never argv/chat
umask 077
# key into /tmp/qonto.key, org id into /tmp/qonto.org — private terminal only
bao kv put tenants/binky/qonto/api \
  QONTO_API_KEY=@/tmp/qonto.key \
  QONTO_ORGANIZATION_ID=@/tmp/qonto.org
shred -u /tmp/qonto.key /tmp/qonto.org

Also note plan tier + monthly fee for binky-control/finance/CostRunRate.md row 4 (and desk-rent amount for row 1 from recent debits when first pull runs).

Then re-verify capabilities, promote catalog to active, set CCR access_frontdoor.resolvable: true / readiness: ready.

Rotation

warden rotate-guide binky-qonto-api

See also

  • binky-control/integrations/qonto-mcp.md
  • wiki/playbooks/tenant-secret-onboarding.md
  • CCR-2026-0008 in railiance-platform
  • DEC-2026-004 / OH-2026-003 in binky-control