Bank Feeds
Open Banking via Plaid
We use Plaid (FCA-regulated) to connect to UK banks securely. Supported banks include:
High Street
NatWest, RBS, Barclays, HSBC, Lloyds, Halifax, Santander
Digital Banks
Starling, Monzo, Revolut, Chase UK
Payment Providers
PayPal, Wise, Stripe
E-commerce
Amazon Seller Central, Amazon Buyer
Connecting via Plaid
- Navigate to Banking
- Click Connect Bank Account
- Select your bank from the Plaid Link interface
- Log in with your bank credentials (securely handled by Plaid)
- Your accounts appear in TaxMTD
PayPal Integration
Connect your PayPal business account to import sales, purchases, and refunds.
Connection Options
| Method | Setup | Best For |
|---|---|---|
| API credentials | Enter Client ID + Secret | Developers |
| OAuth sign-in | Click "Connect PayPal" | Most users |
What Gets Imported
- Sales and payments received
- Business purchases
- Refunds and chargebacks
- Subscription payments
- Transfers (auto-excluded to prevent double-counting)
Multi-Account Support
Connect multiple accounts simultaneously. Each connection appears as a separate card on the Banking page with:
- Account label and provider logo
- Connection status
- Disconnect button for instant removal
Security
| Aspect | Implementation |
|---|---|
| Bank auth | FCA-regulated Open Banking (Plaid) |
| Credentials | Never stored - handled by provider |
| API keys | Encrypted in database |
| Tokens | Encrypted at rest, auto-refreshed |
| Disconnect | Instant, removes all stored tokens |
API Examples
// List connected accounts
const accounts = await $fetch('https://taxmtd.uk/api/banking/accounts')
// Connect a new PayPal account
await $fetch('https://taxmtd.uk/api/banking/paypal/connect', {
method: 'POST',
body: { clientId: '...', secret: '...', env: 'live', label: 'PayPal Business' }
})
// Import PayPal transactions
const result = await $fetch('https://taxmtd.uk/api/banking/paypal/import', {
method: 'POST',
body: { accountId: 'acc-uuid', periodId: 1 }
})
# List connected accounts
res = requests.get(
"https://taxmtd.uk/api/banking/accounts",
cookies=session_cookies,
)
accounts = res.json()["data"]
# Connect PayPal
requests.post(
"https://taxmtd.uk/api/banking/paypal/connect",
json={"clientId": "...", "secret": "...", "env": "live", "label": "PayPal Business"},
cookies=session_cookies,
)
# Import PayPal transactions
res = requests.post(
"https://taxmtd.uk/api/banking/paypal/import",
json={"accountId": "acc-uuid", "periodId": 1},
cookies=session_cookies,
)
// List accounts
$accounts = Http::get('https://taxmtd.uk/api/banking/accounts')->json();
// Connect PayPal
Http::post('https://taxmtd.uk/api/banking/paypal/connect', [
'clientId' => '...',
'secret' => '...',
'env' => 'live',
'label' => 'PayPal Business'
]);
// List connected accounts
let accounts = client
.get("https://taxmtd.uk/api/banking/accounts")
.send().await?
.json::<serde_json::Value>().await?;
// Connect PayPal
client.post("https://taxmtd.uk/api/banking/paypal/connect")
.json(&serde_json::json!({
"clientId": "...",
"secret": "...",
"env": "live",
"label": "PayPal Business"
}))
.send().await?;
// Import PayPal transactions
let result = client.post("https://taxmtd.uk/api/banking/paypal/import")
.json(&serde_json::json!({"accountId": "acc-uuid", "periodId": 1}))
.send().await?
.json::<serde_json::Value>().await?;
# List connected accounts
curl https://taxmtd.uk/api/banking/accounts
# Disconnect an account
curl -X DELETE https://taxmtd.uk/api/banking/accounts \
-H "Content-Type: application/json" \
-d '{"id": 1}'
Migrating from Other Platforms
Import contacts, products, invoices, bills, expenses, and more from FreeAgent, Xero, QuickBooks, Sage, IRIS (KashFlow), Stripe, Shopify, and more.
AI Categorisation
How TaxMTD uses Google Gemini AI to categorise transactions into HMRC-compliant expense, income and transfer categories across SA103, CT600, VAT and UC.