Returns a paginated list of bank keys — the credentials Cardda holds on behalf of a company to operate against a bank's online portal.
A bank key is what lets Cardda actually move money: it grants Cardda the rights to list bank accounts, enroll recipients, create transactions, and pull statements/transactions from the bank. Without a valid active bank key for a given bank, the rest of the Banking API has no upstream connection.
When you'll use this endpoint
- Show the user "which banks are linked" in your dashboard.
- Detect that a key needs re-authentication (
status: invalid) — most often because the user changed their bank password. - Pick the right
holder_id/user_idcombination before issuing aPOST /v1/banking/bank_keys/{id}/confirm(re-validation flow).
Response structure
Each item is a filtered view of the bank key — sensitive fields (password, secrets, auth_seed, card) are stripped automatically. You get:
| Field | Description |
|---|---|
id | UUID. |
user_id | Firebase user id of the person who provided the credentials. |
holder_id | UUID of the company that owns this credential. |
source_key_id | If this key was cloned from a parent key (used for multi-account banks where one set of credentials grants access to multiple accounts), the parent's id. |
type | STI subclass — bank-specific behavior (e.g. Banking::Security::BankKey, Banking::Santander::BankKey). |
aux_type | Auxiliary classification, used by some banks to differentiate business / personal / corporate flows. |
status | Lifecycle status (see enum). |
rut | Tax id of the credential's account. Format XXXXXXXX-Y. |
email | Notification email registered at the bank. |
authorization_method | What the user has to provide to authorize transactions (coordinate_card, digipass, sms, mobile_app, signature). |
priority | Sort order when multiple keys share the same holder_id + bank. Higher wins. |
bank_errors | Recent errors (auth failures, captcha challenges, scheduled maintenance). |
accounts | Bank accounts visible through this key. |
kyc_completed | Whether KYC was completed for the user that owns the key. |
Common queries
# Keys for a specific person and company (the dashboard's pattern)
GET /v1/banking/bank_keys?\
holder_id=<company_uuid>&\
user_id=<firebase_uid>&\
_order=desc&_field=created_at&_start=0&_end=60
# Only invalid keys that need re-auth
GET /v1/banking/bank_keys?\
status=invalid&\
holder_id=<company_uuid>
# Filter by RUT
GET /v1/banking/bank_keys?\
rut=76123456-7&holder_id=<company_uuid>
# Filter by bank type (Banco de Chile only)
GET /v1/banking/bank_keys?\
type=Banking::BancoDeChile::BankKey&\
holder_id=<company_uuid>
Security note
Bank-key sensitive fields (password, auth_seed, card, secrets) are never exposed by this endpoint. Cardda exposes them only through a separate, internal-by-default reveal flow that requires a dedicated permission plus a fresh second-factor confirmation; if your integration needs that flow, contact your Cardda account manager.
All operators in Filters are supported on the columns listed below.
| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||
401Unauthorized — missing or invalid bearer token, or company-id header not set.
403Forbidden — user is not a member of the company referenced by company-id.
