{"id":62,"library":"plaid-python","title":"Plaid","description":"Official Python client for the Plaid API (bank account linking, transactions, identity, income verification). Auto-generated from OpenAPI spec. Updated monthly, major versions contain breaking changes. Only supports the 2020-09-14 API version (no version selection in client — API version is fixed per SDK release).","status":"active","version":"38.3.0","language":"python","source_language":"en","source_url":"https://github.com/plaid/plaid-python","tags":["payments","banking","fintech","plaid","open-banking","python","transactions"],"install":[{"cmd":"pip install plaid-python","lang":"bash","label":"Python"}],"dependencies":[{"reason":"HTTP client used internally.","package":"urllib3","optional":false}],"imports":[{"wrong":"import plaid","symbol":"Configuration","correct":"from plaid import Configuration"},{"wrong":"import plaid","symbol":"ApiClient","correct":"from plaid import ApiClient"},{"wrong":"from plaid.api import plaid_api","symbol":"PlaidApi","correct":"from plaid.api_client import PlaidApi"}],"quickstart":{"code":"import plaid\nfrom plaid.api import plaid_api\nfrom plaid.model.transactions_sync_request import TransactionsSyncRequest\nimport json\n\nconfiguration = plaid.Configuration(\n    host=plaid.Environment.Sandbox,  # or Production\n    api_key={\n        'clientId': 'your_client_id',\n        'secret': 'your_secret'\n    }\n)\napi_client = plaid.ApiClient(configuration)\nclient = plaid_api.PlaidApi(api_client)\n\n# Sync transactions\nrequest = TransactionsSyncRequest(access_token='access-sandbox-...')\nresponse = client.transactions_sync(request)\ntransactions = response.added\n\n# Error handling\ntry:\n    response = client.transactions_sync(request)\nexcept plaid.ApiException as e:\n    error = json.loads(e.body)\n    print(error['error_code'])  # e.g. 'ITEM_LOGIN_REQUIRED'","lang":"python","description":"Plaid uses strongly-typed request/response models. Each endpoint has its own request model (e.g. TransactionsSyncRequest). Import the specific model for each call."},"warnings":[{"fix":"Use Configuration + ApiClient + PlaidApi pattern. See README for current quickstart.","message":"v8.0.0 (August 2021) completely removed the old Client class and all previous import patterns. Any tutorial using 'from plaid import Client' or 'Client(client_id=..., secret=..., environment=...)' fails with ImportError.","severity":"breaking","affected_versions":"< 8.0.0"},{"fix":"Pin to a specific version in production: pip install plaid-python==38.3.0. Monitor changelog before upgrading major versions.","message":"plaid-python ships a major version (x.0.0) roughly monthly. Major versions may include breaking changes — new required fields, renamed parameters, or removed endpoints. Unpinned installs will auto-upgrade.","severity":"breaking","affected_versions":"all"},{"fix":"Import the model for each endpoint: from plaid.model.transactions_sync_request import TransactionsSyncRequest, then pass an instance.","message":"Each endpoint requires importing its specific request model. Passing a plain dict instead of the typed request object raises a TypeError. Old-style dict-based calls from pre-v8 tutorials do not work.","severity":"breaking","affected_versions":">= 8.0.0"},{"fix":"Get environment-specific secrets from Plaid Dashboard > Team Settings > Keys. Store separately as PLAID_SECRET_SANDBOX and PLAID_SECRET_PRODUCTION.","message":"Sandbox and Production have separate API secrets. The client_id is shared but the secret differs per environment. Using the wrong secret for an environment returns 401.","severity":"gotcha","affected_versions":"all"},{"fix":"Access typed attributes: response.added for new transactions, response.next_cursor for pagination cursor, etc.","message":"Plaid API responses are typed objects, not dicts. Code trying to access response['transactions'] fails with TypeError. Attributes are accessed as response.added, response.modified, etc.","severity":"gotcha","affected_versions":">= 8.0.0"},{"fix":"Monitor Plaid changelog for beta product changes. For GA products, upgrade SDK major versions intentionally, not automatically.","message":"Beta product APIs (e.g. Assets, CRA) are subject to breaking changes without versioning, with 30 days notice. GA products are versioned but the SDK fixes to a single API version — there is no per-request API version override.","severity":"gotcha","affected_versions":"all"}],"env_vars":{"optional":[{"name":"PLAID_ENV","note":"Convention for storing 'sandbox' or 'production'. Map to plaid.Environment.Sandbox or plaid.Environment.Production."}],"required":[{"name":"PLAID_CLIENT_ID","note":"Client ID from Plaid Dashboard. Used in api_key dict."},{"name":"PLAID_SECRET","note":"Secret key for the target environment (Sandbox and Production have separate secrets)."}]},"search_vec":"'-09':33 '-14':34 '2020':32 'account':10 'api':8,35,42 'auto':17 'auto-gener':16 'bank':9,50,55 'break':27 'chang':28 'client':4,41 'contain':26 'fintech':51 'fix':45 'generat':18 'ident':13 'incom':14 'link':11 'major':24 'month':23 'offici':2 'open':54 'open-bank':53 'openapi':20 'payment':49 'per':46 'plaid':1,7,52 'python':3,56 'releas':48 'sdk':47 'select':39 'spec':21 'support':30 'transact':12,57 'updat':22 'verif':15 'version':25,36,38,43","created_at":"2026-03-16T04:39:09.011572+00:00","updated_at":"2026-04-16T19:08:23.930809+00:00","problems":null,"ecosystem":"pypi","meta_description":null,"install_score":100,"quickstart_score":0,"quickstart_tag":"stale","pypi_latest":"43.0.0","cli_name":"","cli_version":null,"type":"library","homepage":"https://plaid.com","github":"https://github.com/plaid/plaid-python","docs":null,"changelog":null,"pypi":"https://pypi.org/project/plaid-python/","npm":null,"openapi_spec":null,"status_page":null,"smithery":null,"categories":["payments","http-networking","auth-security"],"base_url":null,"auth_type":null,"provenance":{"verified_status":"passing","verified_at":"2026-06-29","last_verified":"2026-08-26","next_check":"2026-07-29","install_tag":"verified"}}