Bank Feeds

Connect bank accounts, PayPal, Amazon, and payment providers for automatic transaction 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

  1. Navigate to Banking
  2. Click Connect Bank Account
  3. Select your bank from the Plaid Link interface
  4. Log in with your bank credentials (securely handled by Plaid)
  5. Your accounts appear in TaxMTD
TaxMTD never sees your bank login credentials. All authentication is handled by Plaid through FCA-regulated Open Banking protocols.

PayPal Integration

Connect your PayPal business account to import sales, purchases, and refunds.

Connection Options

MethodSetupBest For
API credentialsEnter Client ID + SecretDevelopers
OAuth sign-inClick "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

AspectImplementation
Bank authFCA-regulated Open Banking (Plaid)
CredentialsNever stored - handled by provider
API keysEncrypted in database
TokensEncrypted at rest, auto-refreshed
DisconnectInstant, removes all stored tokens

API Examples

JavaScript
// List connected accounts
const accounts = await $fetch('https://dev.taxmtd.uk/api/banking/accounts')

// Connect a new PayPal account
await $fetch('https://dev.taxmtd.uk/api/banking/paypal/connect', {
  method: 'POST',
  body: { clientId: '...', secret: '...', env: 'live', label: 'PayPal Business' }
})

// Import PayPal transactions
const result = await $fetch('https://dev.taxmtd.uk/api/banking/paypal/import', {
  method: 'POST',
  body: { accountId: 'acc-uuid', periodId: 1 }
})
Python
# List connected accounts
res = requests.get(
    "https://dev.taxmtd.uk/api/banking/accounts",
    cookies=session_cookies,
)
accounts = res.json()["data"]

# Connect PayPal
requests.post(
    "https://dev.taxmtd.uk/api/banking/paypal/connect",
    json={"clientId": "...", "secret": "...", "env": "live", "label": "PayPal Business"},
    cookies=session_cookies,
)

# Import PayPal transactions
res = requests.post(
    "https://dev.taxmtd.uk/api/banking/paypal/import",
    json={"accountId": "acc-uuid", "periodId": 1},
    cookies=session_cookies,
)
PHP
// List accounts
$accounts = Http::get('https://dev.taxmtd.uk/api/banking/accounts')->json();

// Connect PayPal
Http::post('https://dev.taxmtd.uk/api/banking/paypal/connect', [
    'clientId' => '...',
    'secret' => '...',
    'env' => 'live',
    'label' => 'PayPal Business'
]);
Rust
// List connected accounts
let accounts = client
    .get("https://dev.taxmtd.uk/api/banking/accounts")
    .send().await?
    .json::<serde_json::Value>().await?;

// Connect PayPal
client.post("https://dev.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://dev.taxmtd.uk/api/banking/paypal/import")
    .json(&serde_json::json!({"accountId": "acc-uuid", "periodId": 1}))
    .send().await?
    .json::<serde_json::Value>().await?;
cURL
# List connected accounts
curl https://dev.taxmtd.uk/api/banking/accounts

# Disconnect an account
curl -X DELETE https://dev.taxmtd.uk/api/banking/accounts \
  -H "Content-Type: application/json" \
  -d '{"id": 1}'