{
  "_meta": {
    "description": "Per-provider coverage of plaid_surface.json buckets, derived from public docs scraping (May 2026). Each cell: status (covered | partial | absent | unknown), confidence (high | medium | low), short evidence, source. Drives the 'integration cost' metric.",
    "status_legend": {
      "covered": "Documented 1:1 equivalent endpoint or product",
      "partial": "Some coverage but with caveats (subset of fields, behind enterprise tier, etc.)",
      "absent": "Provider does not offer this capability",
      "unknown": "Could not verify from public docs (treated as 0.5 cost in scoring; lowers confidence)"
    },
    "confidence_legend": {
      "high": "Verified via OpenAPI / Postman collection / official docs",
      "medium": "Inferred from product/marketing pages",
      "low": "Best-effort estimate, awaiting verification"
    },
    "last_updated": "2026-05-07"
  },
  "Mastercard OB": {
    "auth_link": {
      "status": "covered",
      "confidence": "high",
      "evidence": "OAuth2 /v1/oauth/connect + token + refresh",
      "source": "Postman: Connect"
    },
    "item_management": {
      "status": "partial",
      "confidence": "medium",
      "evidence": "OAuth refresh implies session lifecycle; no explicit item_remove documented",
      "source": "Postman: Connect"
    },
    "accounts": {
      "status": "covered",
      "confidence": "high",
      "evidence": "GET /v1/accounts, /v1/accounts/{id}",
      "source": "Postman: Data"
    },
    "balance": {
      "status": "covered",
      "confidence": "high",
      "evidence": "Returned in account details endpoint",
      "source": "Postman: Data"
    },
    "transactions_sync": {
      "status": "partial",
      "confidence": "medium",
      "evidence": "/v1/accounts/{id}/transactions + /v1/update; no documented cursor",
      "source": "Postman: Data"
    },
    "transactions_legacy": {
      "status": "covered",
      "confidence": "high",
      "evidence": "GET /v1/accounts/{id}/transactions",
      "source": "Postman: Data"
    },
    "categorization_enrichment": {
      "status": "partial",
      "confidence": "medium",
      "evidence": "Enterprise Insights collection exists separately",
      "source": "Postman: insights"
    },
    "identity": {
      "status": "unknown",
      "confidence": "low",
      "evidence": "Not in core collection",
      "source": "\u2014"
    },
    "auth_routing_numbers": {
      "status": "partial",
      "confidence": "medium",
      "evidence": "IBAN typically returned for EU; no ACH",
      "source": "Postman: Data"
    },
    "processor_tokens": {
      "status": "absent",
      "confidence": "medium",
      "evidence": "No tokenization documented",
      "source": "\u2014"
    },
    "signal_risk": {
      "status": "partial",
      "confidence": "low",
      "evidence": "Insights collection separate; no payment-return signal",
      "source": "Postman: insights"
    },
    "transfer_us": {
      "status": "absent",
      "confidence": "high",
      "evidence": "Europe-only product",
      "source": "Product scope"
    },
    "wallet_uk": {
      "status": "covered",
      "confidence": "high",
      "evidence": "/v2/payments/accept + payouts + payment-authorizations",
      "source": "Postman: Payments"
    },
    "institutions": {
      "status": "covered",
      "confidence": "high",
      "evidence": "/v2/providers, /v2/providers/{id}/payment-methods",
      "source": "Postman: Providers"
    },
    "webhooks": {
      "status": "covered",
      "confidence": "high",
      "evidence": "openbanking-eu.postman_webhooks.json",
      "source": "Postman webhooks"
    },
    "error_mapping": {
      "status": "unknown",
      "confidence": "low",
      "evidence": "No public error taxonomy doc found",
      "source": "\u2014"
    },
    "sandbox_mocks": {
      "status": "covered",
      "confidence": "high",
      "evidence": "postman_environment-sandbox.json",
      "source": "Postman environments"
    },
    "third_party_costs": {
      "status": "absent",
      "confidence": "medium",
      "evidence": "No public pricing",
      "source": "\u2014"
    },
    "affordability_check": {
      "status": "unknown",
      "confidence": "low",
      "evidence": "Insights collection separate; affordability product not core.",
      "source": "\u2014"
    },
    "vrp_recurring_payments": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Aiia Enterprise payments + payouts include VRP-style flows.",
      "source": "Postman: Payments"
    },
    "income_certificate": {
      "status": "unknown",
      "confidence": "low",
      "evidence": "Not researched.",
      "source": "\u2014"
    },
    "deep_merchant_enrichment": {
      "status": "partial",
      "confidence": "medium",
      "evidence": "Insights collection has enrichment products; depth varies.",
      "source": "Postman: insights"
    },
    "pay_by_link": {
      "status": "covered",
      "confidence": "high",
      "evidence": "Payment Links endpoint /v2/payments/accept/links.",
      "source": "Postman: Payment Links"
    },
    "psd2_eu_breadth": {
      "status": "partial",
      "confidence": "medium",
      "evidence": "Aiia covers EU but stronger in Nordics/Baltics than southern EU.",
      "source": "developer.mastercard.com"
    }
  },
  "Tink (Visa)": {
    "auth_link": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Tink Link widget + console; demo.tink.com",
      "source": "tink.com/products"
    },
    "item_management": {
      "status": "unknown",
      "confidence": "low",
      "evidence": "Connection lifecycle not surfaced on product page",
      "source": "\u2014"
    },
    "accounts": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Account Check + Business Account Check products",
      "source": "tink.com/products/account-check"
    },
    "balance": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Balance Check: 'instant balance checks'",
      "source": "tink.com/products/balance-check"
    },
    "transactions_sync": {
      "status": "partial",
      "confidence": "low",
      "evidence": "Real-time data product, sync model not documented publicly",
      "source": "tink.com/products/transactions"
    },
    "transactions_legacy": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Transactions product covers history retrieval",
      "source": "tink.com/products/transactions"
    },
    "categorization_enrichment": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Data Enrichment + Money Manager products",
      "source": "tink.com/products/data-enrichment"
    },
    "identity": {
      "status": "partial",
      "confidence": "medium",
      "evidence": "Account ownership check covers part of identity surface",
      "source": "tink.com/products/account-check"
    },
    "auth_routing_numbers": {
      "status": "partial",
      "confidence": "medium",
      "evidence": "IBAN returned for EU; no US routing numbers",
      "source": "Product scope"
    },
    "processor_tokens": {
      "status": "absent",
      "confidence": "medium",
      "evidence": "No processor tokenization",
      "source": "\u2014"
    },
    "signal_risk": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Risk Signals product: 'risk tools for A2A payments'",
      "source": "tink.com/products/risk-signals"
    },
    "transfer_us": {
      "status": "absent",
      "confidence": "high",
      "evidence": "EU-only product",
      "source": "Product scope"
    },
    "wallet_uk": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Pay by Bank + Payouts + VRP",
      "source": "tink.com/products/pay-by-bank"
    },
    "institutions": {
      "status": "partial",
      "confidence": "low",
      "evidence": "Aggregation market capabilities documented; no public catalogue page",
      "source": "docs.tink.com"
    },
    "webhooks": {
      "status": "unknown",
      "confidence": "low",
      "evidence": "Not surfaced on product page",
      "source": "\u2014"
    },
    "error_mapping": {
      "status": "unknown",
      "confidence": "low",
      "evidence": "Behind docs.tink.com (SPA)",
      "source": "\u2014"
    },
    "sandbox_mocks": {
      "status": "partial",
      "confidence": "medium",
      "evidence": "Tink Link Demo + console signup",
      "source": "demo.tink.com"
    },
    "third_party_costs": {
      "status": "partial",
      "confidence": "low",
      "evidence": "Pricing page exists, no public per-call info",
      "source": "tink.com/pricing"
    },
    "affordability_check": {
      "status": "partial",
      "confidence": "medium",
      "evidence": "Risk Insights for creditworthiness assessment.",
      "source": "tink.com/products/risk-insights"
    },
    "vrp_recurring_payments": {
      "status": "covered",
      "confidence": "high",
      "evidence": "Variable Recurring Payments product offered.",
      "source": "tink.com/products/variable-recurring-payments"
    },
    "income_certificate": {
      "status": "partial",
      "confidence": "medium",
      "evidence": "Income Check product; signed-document status unclear.",
      "source": "tink.com/products/income-check"
    },
    "deep_merchant_enrichment": {
      "status": "covered",
      "confidence": "high",
      "evidence": "Data Enrichment + Money Manager offer rich merchant identification.",
      "source": "tink.com/products/data-enrichment"
    },
    "pay_by_link": {
      "status": "partial",
      "confidence": "low",
      "evidence": "Hosted Tink Link payment flow exists; pay-by-link primitive less explicit.",
      "source": "tink.com/products/pay-by-bank"
    },
    "psd2_eu_breadth": {
      "status": "covered",
      "confidence": "high",
      "evidence": "Pan-EU PSD2 coverage; Eurobits gives strong southern-EU presence.",
      "source": "tink.com/markets"
    }
  },
  "Yapily": {
    "auth_link": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Open Banking infrastructure with consent flow; demo.yapily.com",
      "source": "yapily.com"
    },
    "item_management": {
      "status": "unknown",
      "confidence": "low",
      "evidence": "Consent management implied but not detailed",
      "source": "\u2014"
    },
    "accounts": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "AIS product: account information service",
      "source": "yapily.com"
    },
    "balance": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "AIS retrieves accounts, balances, transactions",
      "source": "docs.yapily.com"
    },
    "transactions_sync": {
      "status": "partial",
      "confidence": "low",
      "evidence": "Real-time data via AIS; cursor-delta endpoint not advertised",
      "source": "yapily.com"
    },
    "transactions_legacy": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "AIS includes transaction history retrieval",
      "source": "yapily.com"
    },
    "categorization_enrichment": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Data Plus: 'Transaction Categorisation & Data Enrichment'",
      "source": "yapily.com product portfolio"
    },
    "identity": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Validate product: 'Speed up onboarding'",
      "source": "yapily.com product portfolio"
    },
    "auth_routing_numbers": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Account number, sort code in AIS",
      "source": "yapily.com"
    },
    "processor_tokens": {
      "status": "absent",
      "confidence": "medium",
      "evidence": "No processor tokenization",
      "source": "\u2014"
    },
    "signal_risk": {
      "status": "unknown",
      "confidence": "low",
      "evidence": "Risk products not advertised in core portfolio",
      "source": "\u2014"
    },
    "transfer_us": {
      "status": "absent",
      "confidence": "high",
      "evidence": "Europe-only PISP",
      "source": "Product scope"
    },
    "wallet_uk": {
      "status": "covered",
      "confidence": "high",
      "evidence": "Payments + VRP + Commercial VRP + Pay by Link + sweeping + scheduled",
      "source": "yapily.com"
    },
    "institutions": {
      "status": "partial",
      "confidence": "low",
      "evidence": "Product Coverage page referenced",
      "source": "docs.yapily.com"
    },
    "webhooks": {
      "status": "unknown",
      "confidence": "low",
      "evidence": "Not advertised on product/portfolio pages",
      "source": "\u2014"
    },
    "error_mapping": {
      "status": "unknown",
      "confidence": "low",
      "evidence": "Behind docs.yapily.com (SPA)",
      "source": "\u2014"
    },
    "sandbox_mocks": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Sandbox + demo.yapily.com",
      "source": "yapily.com"
    },
    "third_party_costs": {
      "status": "partial",
      "confidence": "low",
      "evidence": "Pricing referenced in nav but not detailed",
      "source": "yapily.com/pricing"
    },
    "affordability_check": {
      "status": "covered",
      "confidence": "high",
      "evidence": "Validate product designed for affordability/onboarding speed-up.",
      "source": "yapily.com product portfolio"
    },
    "vrp_recurring_payments": {
      "status": "covered",
      "confidence": "high",
      "evidence": "VRP + Commercial VRP + sweeping all advertised.",
      "source": "yapily.com/product/a2a-payment-initiation-service-provider"
    },
    "income_certificate": {
      "status": "partial",
      "confidence": "low",
      "evidence": "Income via Validate; signed-certificate status unclear.",
      "source": "yapily.com"
    },
    "deep_merchant_enrichment": {
      "status": "covered",
      "confidence": "high",
      "evidence": "Data Plus = transaction categorisation + data enrichment.",
      "source": "yapily.com product portfolio"
    },
    "pay_by_link": {
      "status": "covered",
      "confidence": "high",
      "evidence": "Pay by Link product explicitly named.",
      "source": "yapily.com"
    },
    "psd2_eu_breadth": {
      "status": "covered",
      "confidence": "high",
      "evidence": "19+ countries, 1000s of institutions.",
      "source": "yapily.com"
    }
  },
  "Salt Edge": {
    "auth_link": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Pre-integrated widget for end-users to connect accounts",
      "source": "saltedge.com/products"
    },
    "item_management": {
      "status": "unknown",
      "confidence": "low",
      "evidence": "Connection lifecycle not documented on product page",
      "source": "\u2014"
    },
    "accounts": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Account holder info: name, address, contact details",
      "source": "saltedge.com"
    },
    "balance": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Account name & number, balance from customer's bank",
      "source": "saltedge.com"
    },
    "transactions_sync": {
      "status": "partial",
      "confidence": "low",
      "evidence": "Auto-inserted account data; no cursor model documented",
      "source": "saltedge.com"
    },
    "transactions_legacy": {
      "status": "partial",
      "confidence": "low",
      "evidence": "Transaction history mentioned; depth unspecified",
      "source": "saltedge.com"
    },
    "categorization_enrichment": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Transaction Categorisation + Merchant Identification",
      "source": "saltedge.com Data Enrichment"
    },
    "identity": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "KYC identity verification using bank account holder data",
      "source": "saltedge.com KYC & AML"
    },
    "auth_routing_numbers": {
      "status": "partial",
      "confidence": "low",
      "evidence": "Account number; IBAN format implied",
      "source": "saltedge.com"
    },
    "processor_tokens": {
      "status": "absent",
      "confidence": "medium",
      "evidence": "No processor tokenization",
      "source": "\u2014"
    },
    "signal_risk": {
      "status": "partial",
      "confidence": "low",
      "evidence": "AML Transaction Monitoring; risk scoring not detailed",
      "source": "saltedge.com Compliance"
    },
    "transfer_us": {
      "status": "absent",
      "confidence": "high",
      "evidence": "EU-focused",
      "source": "Product scope"
    },
    "wallet_uk": {
      "status": "partial",
      "confidence": "low",
      "evidence": "Pay by bank product; recurring/VRP not advertised",
      "source": "saltedge.com Payments"
    },
    "institutions": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "5,000+ banks via 1 API",
      "source": "saltedge.com"
    },
    "webhooks": {
      "status": "unknown",
      "confidence": "low",
      "evidence": "Not on product page",
      "source": "\u2014"
    },
    "error_mapping": {
      "status": "unknown",
      "confidence": "low",
      "evidence": "Behind docs.saltedge.com",
      "source": "\u2014"
    },
    "sandbox_mocks": {
      "status": "unknown",
      "confidence": "low",
      "evidence": "Not mentioned on product page",
      "source": "\u2014"
    },
    "third_party_costs": {
      "status": "absent",
      "confidence": "medium",
      "evidence": "No public pricing",
      "source": "\u2014"
    },
    "affordability_check": {
      "status": "partial",
      "confidence": "low",
      "evidence": "AML transaction monitoring + KYC; affordability scoring not detailed.",
      "source": "saltedge.com Compliance"
    },
    "vrp_recurring_payments": {
      "status": "absent",
      "confidence": "medium",
      "evidence": "Pay-by-bank product; recurring/VRP not advertised.",
      "source": "saltedge.com Payments"
    },
    "income_certificate": {
      "status": "absent",
      "confidence": "low",
      "evidence": "Not advertised.",
      "source": "\u2014"
    },
    "deep_merchant_enrichment": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Transaction Categorisation + Merchant Identification.",
      "source": "saltedge.com Data Enrichment"
    },
    "pay_by_link": {
      "status": "unknown",
      "confidence": "low",
      "evidence": "Not detailed.",
      "source": "\u2014"
    },
    "psd2_eu_breadth": {
      "status": "covered",
      "confidence": "high",
      "evidence": "Connects to 5,000+ banks worldwide via 1 API.",
      "source": "saltedge.com"
    }
  },
  "Kontomatik": {
    "auth_link": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Widget product",
      "source": "kontomatik.com"
    },
    "item_management": {
      "status": "unknown",
      "confidence": "low",
      "evidence": "Connection lifecycle not surfaced",
      "source": "\u2014"
    },
    "accounts": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "List of payment accounts with details",
      "source": "kontomatik.com FAQ"
    },
    "balance": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Balance, available funds, currency",
      "source": "kontomatik.com FAQ"
    },
    "transactions_sync": {
      "status": "partial",
      "confidence": "low",
      "evidence": "Transaction list documented; sync model not",
      "source": "kontomatik.com FAQ"
    },
    "transactions_legacy": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Transaction list with type, amount, date, title",
      "source": "kontomatik.com FAQ"
    },
    "categorization_enrichment": {
      "status": "covered",
      "confidence": "high",
      "evidence": "Transaction labeling product (ML-based)",
      "source": "kontomatik.com products"
    },
    "identity": {
      "status": "covered",
      "confidence": "high",
      "evidence": "Identity Verification product",
      "source": "kontomatik.com products"
    },
    "auth_routing_numbers": {
      "status": "partial",
      "confidence": "low",
      "evidence": "Account number; IBAN format implied for EU",
      "source": "kontomatik.com"
    },
    "processor_tokens": {
      "status": "absent",
      "confidence": "high",
      "evidence": "No processor tokenization",
      "source": "\u2014"
    },
    "signal_risk": {
      "status": "covered",
      "confidence": "high",
      "evidence": "Risk Analysis (scoring) product",
      "source": "kontomatik.com products"
    },
    "transfer_us": {
      "status": "absent",
      "confidence": "high",
      "evidence": "EU-focused",
      "source": "Product scope"
    },
    "wallet_uk": {
      "status": "absent",
      "confidence": "high",
      "evidence": "'Does Kontomatik have a PISP license? No.'",
      "source": "kontomatik.com FAQ"
    },
    "institutions": {
      "status": "partial",
      "confidence": "medium",
      "evidence": "Hundreds of leading banks in Europe",
      "source": "kontomatik.com FAQ"
    },
    "webhooks": {
      "status": "unknown",
      "confidence": "low",
      "evidence": "Not mentioned on public site",
      "source": "\u2014"
    },
    "error_mapping": {
      "status": "unknown",
      "confidence": "low",
      "evidence": "Behind docs.kontomatik.com",
      "source": "\u2014"
    },
    "sandbox_mocks": {
      "status": "unknown",
      "confidence": "low",
      "evidence": "DEV Portal referenced; sandbox details require account",
      "source": "\u2014"
    },
    "third_party_costs": {
      "status": "absent",
      "confidence": "medium",
      "evidence": "No public pricing",
      "source": "\u2014"
    },
    "affordability_check": {
      "status": "covered",
      "confidence": "high",
      "evidence": "Risk Analysis (scoring) is a flagship product.",
      "source": "kontomatik.com products"
    },
    "vrp_recurring_payments": {
      "status": "absent",
      "confidence": "high",
      "evidence": "'Does Kontomatik have a PISP license? No.' \u2014 no payment initiation.",
      "source": "kontomatik.com FAQ"
    },
    "income_certificate": {
      "status": "covered",
      "confidence": "high",
      "evidence": "Signed income confirmation certificate widely recognised in PL lending.",
      "source": "kontomatik.com products"
    },
    "deep_merchant_enrichment": {
      "status": "covered",
      "confidence": "high",
      "evidence": "Transaction labelling + vendor recognition + data summary.",
      "source": "kontomatik.com products"
    },
    "pay_by_link": {
      "status": "absent",
      "confidence": "high",
      "evidence": "No PISP, no payment links.",
      "source": "kontomatik.com FAQ"
    },
    "psd2_eu_breadth": {
      "status": "partial",
      "confidence": "medium",
      "evidence": "Strong PL leadership + ES; broader EU more limited than EU-native CBPs.",
      "source": "kontomatik.com"
    }
  },
  "Token.io": {
    "auth_link": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Bank Connect SDK + OAuth flow (PSD2 PISP)",
      "source": "token.io"
    },
    "item_management": {
      "status": "unknown",
      "confidence": "low",
      "evidence": "Not researched in detail",
      "source": "\u2014"
    },
    "accounts": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Account Information Service (AIS)",
      "source": "token.io"
    },
    "balance": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "AIS includes balances",
      "source": "token.io"
    },
    "transactions_sync": {
      "status": "partial",
      "confidence": "low",
      "evidence": "AIS provides transactions; sync model unknown",
      "source": "\u2014"
    },
    "transactions_legacy": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "AIS transaction history",
      "source": "token.io"
    },
    "categorization_enrichment": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Via Dateio partnership: income & salary detection, categorisation",
      "source": "Ignite reports"
    },
    "identity": {
      "status": "partial",
      "confidence": "low",
      "evidence": "Account holder data via AIS; no dedicated identity product",
      "source": "\u2014"
    },
    "auth_routing_numbers": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "IBAN/SEPA returned for EU",
      "source": "\u2014"
    },
    "processor_tokens": {
      "status": "absent",
      "confidence": "medium",
      "evidence": "Not a processor-token model",
      "source": "\u2014"
    },
    "signal_risk": {
      "status": "unknown",
      "confidence": "low",
      "evidence": "Not researched",
      "source": "\u2014"
    },
    "transfer_us": {
      "status": "absent",
      "confidence": "high",
      "evidence": "EU-only PISP",
      "source": "Product scope"
    },
    "wallet_uk": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Token is a market-leading PISP (Pay by Bank, recurring)",
      "source": "token.io"
    },
    "institutions": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Pan-EU bank coverage; 'European market leader'",
      "source": "Ignite reports"
    },
    "webhooks": {
      "status": "unknown",
      "confidence": "low",
      "evidence": "Not researched",
      "source": "\u2014"
    },
    "error_mapping": {
      "status": "unknown",
      "confidence": "low",
      "evidence": "Not researched",
      "source": "\u2014"
    },
    "sandbox_mocks": {
      "status": "unknown",
      "confidence": "low",
      "evidence": "Likely yes (modern OB API)",
      "source": "\u2014"
    },
    "third_party_costs": {
      "status": "absent",
      "confidence": "low",
      "evidence": "No public pricing",
      "source": "\u2014"
    },
    "affordability_check": {
      "status": "unknown",
      "confidence": "low",
      "evidence": "Not researched in detail.",
      "source": "\u2014"
    },
    "vrp_recurring_payments": {
      "status": "covered",
      "confidence": "high",
      "evidence": "Token is a market-leading PISP \u2014 VRP central to product.",
      "source": "token.io"
    },
    "income_certificate": {
      "status": "partial",
      "confidence": "low",
      "evidence": "Via Dateio enrichment; signed-document status unclear.",
      "source": "\u2014"
    },
    "deep_merchant_enrichment": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Dateio partnership = rich enrichment for 126M EU users.",
      "source": "Ignite reports"
    },
    "pay_by_link": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Pay-by-link is part of standard PISP offering.",
      "source": "token.io"
    },
    "psd2_eu_breadth": {
      "status": "covered",
      "confidence": "high",
      "evidence": "European market leader by Ignite report wording.",
      "source": "Ignite reports"
    }
  },
  "TrueLayer": {
    "auth_link": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Auth + EmbeddedSDK + Hosted Payment Page",
      "source": "truelayer.com"
    },
    "item_management": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Connection management API for AIS connections",
      "source": "docs.truelayer.com"
    },
    "accounts": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Data API: /accounts",
      "source": "docs.truelayer.com"
    },
    "balance": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Data API: /accounts/{id}/balance",
      "source": "docs.truelayer.com"
    },
    "transactions_sync": {
      "status": "partial",
      "confidence": "low",
      "evidence": "Data API has transactions; cursor sync not the dominant model",
      "source": "\u2014"
    },
    "transactions_legacy": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Data API: /accounts/{id}/transactions",
      "source": "docs.truelayer.com"
    },
    "categorization_enrichment": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Data Plus / Signal API for enrichment + categorisation",
      "source": "truelayer.com"
    },
    "identity": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Verification product: account ownership + identity check",
      "source": "truelayer.com/verification"
    },
    "auth_routing_numbers": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "IBAN / sort code + account number from AIS",
      "source": "\u2014"
    },
    "processor_tokens": {
      "status": "absent",
      "confidence": "medium",
      "evidence": "No Plaid-style processor-token",
      "source": "\u2014"
    },
    "signal_risk": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Signal API \u2014 payment risk signals",
      "source": "truelayer.com/signal"
    },
    "transfer_us": {
      "status": "absent",
      "confidence": "high",
      "evidence": "UK/EU only",
      "source": "Product scope"
    },
    "wallet_uk": {
      "status": "covered",
      "confidence": "high",
      "evidence": "Payments API; UK Pay by Bank market leader",
      "source": "truelayer.com"
    },
    "institutions": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Providers list",
      "source": "docs.truelayer.com"
    },
    "webhooks": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Webhooks for payment status, AIS connection events",
      "source": "docs.truelayer.com"
    },
    "error_mapping": {
      "status": "partial",
      "confidence": "low",
      "evidence": "Error documentation exists in docs (SPA)",
      "source": "\u2014"
    },
    "sandbox_mocks": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Sandbox environment with mock banks",
      "source": "truelayer.com"
    },
    "third_party_costs": {
      "status": "absent",
      "confidence": "medium",
      "evidence": "No public per-call pricing",
      "source": "\u2014"
    },
    "affordability_check": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Verification + Signal for risk + affordability adjacent.",
      "source": "truelayer.com/verification"
    },
    "vrp_recurring_payments": {
      "status": "covered",
      "confidence": "high",
      "evidence": "VRP / sweeping a key part of UK PISP product.",
      "source": "truelayer.com"
    },
    "income_certificate": {
      "status": "partial",
      "confidence": "low",
      "evidence": "Income data via Verification; signed-certificate status unclear.",
      "source": "\u2014"
    },
    "deep_merchant_enrichment": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Signal API + Data Plus for enrichment + categorisation.",
      "source": "truelayer.com"
    },
    "pay_by_link": {
      "status": "covered",
      "confidence": "high",
      "evidence": "Hosted Payment Page + payment-link flow.",
      "source": "truelayer.com"
    },
    "psd2_eu_breadth": {
      "status": "covered",
      "confidence": "high",
      "evidence": "Broad EU coverage from UK base.",
      "source": "truelayer.com"
    }
  },
  "Unnax": {
    "auth_link": {
      "status": "partial",
      "confidence": "low",
      "evidence": "Bank connect flow exists; details limited",
      "source": "unnax.com"
    },
    "item_management": {
      "status": "unknown",
      "confidence": "low",
      "evidence": "Not researched",
      "source": "\u2014"
    },
    "accounts": {
      "status": "partial",
      "confidence": "low",
      "evidence": "Account info available but payments-focused stack",
      "source": "\u2014"
    },
    "balance": {
      "status": "partial",
      "confidence": "low",
      "evidence": "Available within account info",
      "source": "\u2014"
    },
    "transactions_sync": {
      "status": "partial",
      "confidence": "low",
      "evidence": "AIS supported but not Unnax's primary product",
      "source": "\u2014"
    },
    "transactions_legacy": {
      "status": "partial",
      "confidence": "low",
      "evidence": "AIS supported",
      "source": "\u2014"
    },
    "categorization_enrichment": {
      "status": "unknown",
      "confidence": "low",
      "evidence": "Not their focus",
      "source": "\u2014"
    },
    "identity": {
      "status": "partial",
      "confidence": "low",
      "evidence": "Some KYC/onboarding tooling",
      "source": "\u2014"
    },
    "auth_routing_numbers": {
      "status": "covered",
      "confidence": "low",
      "evidence": "IBAN for SEPA payments",
      "source": "\u2014"
    },
    "processor_tokens": {
      "status": "absent",
      "confidence": "medium",
      "evidence": "Not a tokenization model",
      "source": "\u2014"
    },
    "signal_risk": {
      "status": "unknown",
      "confidence": "low",
      "evidence": "Not researched",
      "source": "\u2014"
    },
    "transfer_us": {
      "status": "absent",
      "confidence": "high",
      "evidence": "Spain-focused; no US",
      "source": "Product scope"
    },
    "wallet_uk": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Payments are Unnax's main product",
      "source": "unnax.com"
    },
    "institutions": {
      "status": "partial",
      "confidence": "low",
      "evidence": "Spanish banks well covered; broader EU partial",
      "source": "\u2014"
    },
    "webhooks": {
      "status": "unknown",
      "confidence": "low",
      "evidence": "Not researched",
      "source": "\u2014"
    },
    "error_mapping": {
      "status": "unknown",
      "confidence": "low",
      "evidence": "Not researched",
      "source": "\u2014"
    },
    "sandbox_mocks": {
      "status": "unknown",
      "confidence": "low",
      "evidence": "Likely available (developer portal)",
      "source": "\u2014"
    },
    "third_party_costs": {
      "status": "absent",
      "confidence": "low",
      "evidence": "No public pricing",
      "source": "\u2014"
    },
    "affordability_check": {
      "status": "unknown",
      "confidence": "low",
      "evidence": "Not core to Unnax product line.",
      "source": "\u2014"
    },
    "vrp_recurring_payments": {
      "status": "partial",
      "confidence": "low",
      "evidence": "Payments-focused stack; VRP unclear.",
      "source": "\u2014"
    },
    "income_certificate": {
      "status": "unknown",
      "confidence": "low",
      "evidence": "Not researched.",
      "source": "\u2014"
    },
    "deep_merchant_enrichment": {
      "status": "partial",
      "confidence": "low",
      "evidence": "Not their focus.",
      "source": "\u2014"
    },
    "pay_by_link": {
      "status": "unknown",
      "confidence": "low",
      "evidence": "Possible via payments stack; not advertised.",
      "source": "\u2014"
    },
    "psd2_eu_breadth": {
      "status": "partial",
      "confidence": "medium",
      "evidence": "Spanish focus + some international presence; not pan-EU.",
      "source": "unnax.com"
    }
  },
  "Frollo": {
    "auth_link": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "CDR-accredited connect flow",
      "source": "frollo.us"
    },
    "item_management": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "CDR consent management is core to AU OB",
      "source": "\u2014"
    },
    "accounts": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "CDR data: accounts list",
      "source": "frollo.us"
    },
    "balance": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "CDR data: balance",
      "source": "frollo.us"
    },
    "transactions_sync": {
      "status": "partial",
      "confidence": "low",
      "evidence": "CDR transactions; sync model varies",
      "source": "\u2014"
    },
    "transactions_legacy": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "CDR transaction history",
      "source": "frollo.us"
    },
    "categorization_enrichment": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "PFM-oriented stack: built-in categorisation + spending insights",
      "source": "frollo.us"
    },
    "identity": {
      "status": "partial",
      "confidence": "low",
      "evidence": "CDR identity-related fields available; no dedicated product",
      "source": "\u2014"
    },
    "auth_routing_numbers": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "BSB + account number for AU",
      "source": "\u2014"
    },
    "processor_tokens": {
      "status": "absent",
      "confidence": "medium",
      "evidence": "Not a tokenization model",
      "source": "\u2014"
    },
    "signal_risk": {
      "status": "absent",
      "confidence": "low",
      "evidence": "Not advertised",
      "source": "\u2014"
    },
    "transfer_us": {
      "status": "absent",
      "confidence": "high",
      "evidence": "AU-only",
      "source": "Product scope"
    },
    "wallet_uk": {
      "status": "absent",
      "confidence": "high",
      "evidence": "AU-only",
      "source": "Product scope"
    },
    "institutions": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "AU CDR ecosystem coverage",
      "source": "frollo.us"
    },
    "webhooks": {
      "status": "partial",
      "confidence": "low",
      "evidence": "CDR data refresh model; webhook details unknown",
      "source": "\u2014"
    },
    "error_mapping": {
      "status": "unknown",
      "confidence": "low",
      "evidence": "Behind developer portal",
      "source": "\u2014"
    },
    "sandbox_mocks": {
      "status": "covered",
      "confidence": "low",
      "evidence": "Developer sandbox referenced",
      "source": "developer.frollo.us"
    },
    "third_party_costs": {
      "status": "absent",
      "confidence": "medium",
      "evidence": "No public pricing",
      "source": "\u2014"
    },
    "affordability_check": {
      "status": "partial",
      "confidence": "low",
      "evidence": "PFM stack supports affordability flows; no standalone product.",
      "source": "frollo.us"
    },
    "vrp_recurring_payments": {
      "status": "absent",
      "confidence": "high",
      "evidence": "AU-only; PayTo not at VRP-level maturity.",
      "source": "Product scope"
    },
    "income_certificate": {
      "status": "unknown",
      "confidence": "low",
      "evidence": "Not researched.",
      "source": "\u2014"
    },
    "deep_merchant_enrichment": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "PFM-oriented stack with categorisation + insights.",
      "source": "frollo.us"
    },
    "pay_by_link": {
      "status": "absent",
      "confidence": "high",
      "evidence": "AU CDR doesn't include payment initiation at this level yet.",
      "source": "Product scope"
    },
    "psd2_eu_breadth": {
      "status": "absent",
      "confidence": "high",
      "evidence": "AU-only \u2014 no EU PSD2 coverage.",
      "source": "Product scope"
    }
  },
  "Basiq": {
    "auth_link": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Connect SDK + Basiq Connect",
      "source": "basiq.io"
    },
    "item_management": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Connections API: get / refresh / delete",
      "source": "api.basiq.io/docs"
    },
    "accounts": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "/users/{id}/accounts",
      "source": "api.basiq.io/docs"
    },
    "balance": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Account balance in /accounts response",
      "source": "api.basiq.io/docs"
    },
    "transactions_sync": {
      "status": "partial",
      "confidence": "low",
      "evidence": "Transactions endpoint with filters; sync cursor model TBD",
      "source": "\u2014"
    },
    "transactions_legacy": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "/users/{id}/transactions",
      "source": "api.basiq.io/docs"
    },
    "categorization_enrichment": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Built-in categorization + Insights product (affordability, income)",
      "source": "basiq.io"
    },
    "identity": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Auth product returns identity from CDR",
      "source": "basiq.io"
    },
    "auth_routing_numbers": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "BSB + account number for AU",
      "source": "\u2014"
    },
    "processor_tokens": {
      "status": "absent",
      "confidence": "medium",
      "evidence": "Not a tokenization model",
      "source": "\u2014"
    },
    "signal_risk": {
      "status": "partial",
      "confidence": "low",
      "evidence": "Insights product covers some risk-adjacent (affordability) signals",
      "source": "basiq.io"
    },
    "transfer_us": {
      "status": "absent",
      "confidence": "high",
      "evidence": "AU-only",
      "source": "Product scope"
    },
    "wallet_uk": {
      "status": "absent",
      "confidence": "high",
      "evidence": "AU-only; PayTo via Cuscal in early access",
      "source": "Product scope"
    },
    "institutions": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Institutions endpoint with logos / metadata",
      "source": "api.basiq.io/docs"
    },
    "webhooks": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Webhook events for connections + transactions",
      "source": "api.basiq.io/docs"
    },
    "error_mapping": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Documented error codes in docs",
      "source": "api.basiq.io/docs"
    },
    "sandbox_mocks": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Demo data + sandbox",
      "source": "api.basiq.io/docs"
    },
    "third_party_costs": {
      "status": "absent",
      "confidence": "medium",
      "evidence": "No public per-call pricing",
      "source": "\u2014"
    },
    "affordability_check": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Insights product covers affordability, income.",
      "source": "basiq.io"
    },
    "vrp_recurring_payments": {
      "status": "partial",
      "confidence": "medium",
      "evidence": "PayTo support via Cuscal in early access.",
      "source": "basiq.io"
    },
    "income_certificate": {
      "status": "partial",
      "confidence": "low",
      "evidence": "Insights surface income; signed-doc status unclear.",
      "source": "basiq.io"
    },
    "deep_merchant_enrichment": {
      "status": "covered",
      "confidence": "medium",
      "evidence": "Built-in categorisation + Insights enrichment.",
      "source": "basiq.io"
    },
    "pay_by_link": {
      "status": "absent",
      "confidence": "high",
      "evidence": "AU-only; no pay-by-link primitive.",
      "source": "Product scope"
    },
    "psd2_eu_breadth": {
      "status": "absent",
      "confidence": "high",
      "evidence": "AU-only.",
      "source": "Product scope"
    }
  },
  "Plaid": {
    "auth_link": {
      "status": "covered",
      "confidence": "high",
      "evidence": "Plaid Link Token + Plaid Link SDK",
      "source": "Cleo monorepo + plaid.com"
    },
    "item_management": {
      "status": "covered",
      "confidence": "high",
      "evidence": "/item/get, /item/remove, /item/webhook/update",
      "source": "plaid.com"
    },
    "accounts": {
      "status": "covered",
      "confidence": "high",
      "evidence": "/accounts/get",
      "source": "plaid.com"
    },
    "balance": {
      "status": "covered",
      "confidence": "high",
      "evidence": "/accounts/balance/get",
      "source": "plaid.com"
    },
    "transactions_sync": {
      "status": "covered",
      "confidence": "high",
      "evidence": "/transactions/sync (cursor-based)",
      "source": "plaid.com"
    },
    "transactions_legacy": {
      "status": "covered",
      "confidence": "high",
      "evidence": "/transactions/get + /transactions/refresh",
      "source": "plaid.com"
    },
    "categorization_enrichment": {
      "status": "covered",
      "confidence": "high",
      "evidence": "personal_finance_category taxonomy",
      "source": "plaid.com"
    },
    "identity": {
      "status": "covered",
      "confidence": "high",
      "evidence": "/identity/get",
      "source": "plaid.com"
    },
    "auth_routing_numbers": {
      "status": "covered",
      "confidence": "high",
      "evidence": "/auth/get returns ACH account & routing numbers",
      "source": "plaid.com"
    },
    "processor_tokens": {
      "status": "covered",
      "confidence": "high",
      "evidence": "/processor/token/create (Dwolla, Unit, etc.)",
      "source": "plaid.com"
    },
    "signal_risk": {
      "status": "covered",
      "confidence": "high",
      "evidence": "/signal/evaluate, /signal/decision, /signal/return",
      "source": "plaid.com/signal"
    },
    "transfer_us": {
      "status": "covered",
      "confidence": "high",
      "evidence": "/transfer/* endpoints",
      "source": "plaid.com/transfer"
    },
    "wallet_uk": {
      "status": "covered",
      "confidence": "high",
      "evidence": "/wallet/transaction/execute, /wallet/get",
      "source": "plaid.com"
    },
    "institutions": {
      "status": "covered",
      "confidence": "high",
      "evidence": "/institutions/* endpoints",
      "source": "plaid.com"
    },
    "webhooks": {
      "status": "covered",
      "confidence": "high",
      "evidence": "JWT/ES256-signed webhooks per item",
      "source": "plaid.com"
    },
    "error_mapping": {
      "status": "covered",
      "confidence": "high",
      "evidence": "Documented error_code taxonomy",
      "source": "plaid.com/docs/errors"
    },
    "sandbox_mocks": {
      "status": "covered",
      "confidence": "high",
      "evidence": "Plaid sandbox + Cleo's internal service_mocks",
      "source": "plaid.com/sandbox"
    },
    "third_party_costs": {
      "status": "covered",
      "confidence": "high",
      "evidence": "Per-call billing tracked in app/workers/third_party_costs",
      "source": "Cleo monorepo"
    },
    "affordability_check": {
      "status": "absent",
      "confidence": "high",
      "evidence": "Plaid has Signal (ACH-return risk) but no affordability product.",
      "source": "plaid.com/products"
    },
    "vrp_recurring_payments": {
      "status": "partial",
      "confidence": "medium",
      "evidence": "UK Wallet covers some payment-init use cases; not full VRP standard.",
      "source": "plaid.com"
    },
    "income_certificate": {
      "status": "absent",
      "confidence": "high",
      "evidence": "Plaid Income returns transactions/streams; no signed certificate document.",
      "source": "plaid.com/products/income"
    },
    "deep_merchant_enrichment": {
      "status": "partial",
      "confidence": "high",
      "evidence": "personal_finance_category provides taxonomy; merchant logos / recurring detection less developed than Tink/Yapily.",
      "source": "plaid.com"
    },
    "pay_by_link": {
      "status": "absent",
      "confidence": "high",
      "evidence": "Plaid Transfer is server-side initiated without a hosted-link primitive.",
      "source": "plaid.com/products/transfer"
    },
    "psd2_eu_breadth": {
      "status": "partial",
      "confidence": "medium",
      "evidence": "EU coverage exists (FR, DE, IE, IT, NL, ES, BE, DK, SE, NO, EE, LV, LT, PL, PT) but narrower than EU-native players.",
      "source": "plaid.com/global"
    }
  }
}