# Dfns

> Dfns: what the collector reads, how to connect it, its permissions, its certification by Atlantic Agentic Labs and its security posture.

Built, not certified Built and tested against recorded and synthetic responses (version 1.0.0, 10 November 2026). Not yet run against the vendor's sandbox or a client environment.

Reads a Dfns organisation’s wallets, asset balances and transfers, so treasury and reconciliation agents can check custody against the books. It is read-only, and it is built to refuse a service account that can move funds. It reads in place, in your deployment; only ids, hashes and counts reach LightHouse.

## At a glance

| Collector                   | Dfns, version `1.0.0`                                                                                                                       |
| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| Reads                       | Dfns: Dfns wallet-as-a-service API (wallets, assets, transfers) ([the vendor's documentation](https://docs.dfns.co/api-reference/overview)) |
| Family                      | Finance                                                                                                                                     |
| Kind                        | Custody                                                                                                                                     |
| Ways to connect             | Access token                                                                                                                                |
| Scopes                      | - Read: `Wallets:Read`, `Wallets:Transfers:Read`                                                                                            |
| Read only                   | Yes                                                                                                                                         |
| Vendor's API can move money | Yes                                                                                                                                         |
| Personal data               | Financial                                                                                                                                   |
| Hosts it may contact        | `api.dfns.io`, `api.uae.dfns.io`, `{host}`                                                                                                  |
| Vendor API versions         | Dfns REST API (unversioned paths: /wallets, /auth/service-accounts)                                                                         |
| Lowest engine version       | `0.46.0`                                                                                                                                    |

## What it reads

- **Wallets and their balances:** for each wallet and asset, the balance (Dfns gives integer strings in the asset’s smallest unit with its `decimals`; they are scaled exactly), with the wallet’s name, id, network and address.
- **Transfers per wallet**, newest first: status, kind, amount (for native assets), token contract, recipient, hash, fee and requested date. Reading stops at the last newest transfer seen less a week, so a transfer whose status moved on is read again.
- The first read goes back `history_days` (default 90, at most 3,650).

## How to connect

1. In Dfns, make a service account with a **read-only** role (`Wallets:Read`, `Wallets:Transfers:Read`) and a token for it.
2. In LightHouse, open **Setup and admin, Connectors**, choose **Dfns**, and give the region (`eu`, the default, or `uae`).
3. Paste the token and the service account’s id (`service_account_id`, so its permissions can be read). Your browser seals it to your deployment; LightHouse never sees it.
4. Pin the token to your deployment’s egress addresses in Dfns.

The credential is JSON in the variable the source names (`AAL_DFNS` by default): `token`, `service_account_id`, `region`, and `view_only_confirmed` when needed.

## Permissions

This collector is **read-only**: it sends `GET` requests only, and its read-only test proves it on every change. Reads need only the bearer token; every Dfns call that changes state needs a user-action signature with the service account’s private key, which this collector never holds and never asks for.

- **Refused by the code:** when the token may read service accounts (`GET /auth/service-accounts`), every operation assigned to the account and to its tokens is checked, and the account is refused, naming the operations, if it holds any of these: `Wallets:Transfers:Create`, `Wallets:Transactions:Create`, `Vaults:Transfers:Create`, `Vaults:Locks:Transfer`, `Vaults:Quarantines:Release`, `Payouts:Create`, `Payouts:Update`, `Payins:Create`, `Exchanges:Withdrawals:Create`, `Exchanges:Deposits:Create`, `Swaps:Create`, `Stakes:Create`, `Stakes:Update`, `Allocations:Create`, `Allocations:Update`, `Wallets:Offers:Settle`, `Keys:Signatures:Create`, `KeyStores:Instructions:Keys:Sign`, `Keys:Export`, `Policies:Evaluations:Vote`, `Permissions:Assign`, `Wallets:Signatures:Create`. The error is `Dfns: refused: the credential can \<operations>; make a view-only one`.
- **Not detectable by the code:** if the token may not read service accounts (the narrowest read-only role gets a 403), or the listing does not include the account named, Dfns does not state the permissions. The collector then reads only once you have confirmed the account was given read-only permissions (`view_only_confirmed`). A service account made without a role inherits its creator’s permissions, which is the case the confirmation is for. An operation not on the list above would not be caught.
- **Hosts:** `api.dfns.io` or `api.uae.dfns.io` by region, both over https; redirects are never followed.

## Limits

- Pages of 100, following `nextPageToken`.
- Requests are paced (0.1 s apart) and retried on 429 and 5xx with back-off.
- Transfer amounts are shown as money only for native-asset transfers from a wallet whose native asset was read; others show the smallest-unit amount.
- `region` must be `eu` or `uae`.

## Data handling

- Records hold financial data: balances, amounts, wallet addresses and recipients’ addresses. Documents carry the `label` you give the source (default `confidential`).
- Content is read in place, in your deployment. LightHouse receives ids, hashes and counts, never the records, and never opens the credential.
- Errors carry a status and fixed text, never a provider’s body.
- The data is audit-ready for your own agents; nothing here certifies anyone against any regulation.

## Troubleshooting

| What you see                                                                                                       | What it means                                             | What to do                                     |
| ------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------- | ---------------------------------------------- |
| `Dfns: refused: the credential can Wallets:Transfers:Create ...; make a view-only one`                             | The account or a token holds a fund-moving operation      | Make a read-only service account and reconnect |
| `Dfns does not state this key's permissions; confirm the key is view-only (view_only_confirmed) before it is read` | The permissions cannot be read and you have not confirmed | Confirm the account is read-only               |
| `region is one of eu, uae`                                                                                         | The region is not one of those                            | Correct the region                             |
| `Dfns answered HTTP 401`                                                                                           | The token is wrong or expired                             | Make a new token                               |
| `Dfns answered HTTP 429`                                                                                           | Rate limit                                                | Nothing; the collector backs off and continues |

## Certification

Each entry is a run by Atlantic Agentic Labs, newest first. Only a run against the vendor’s sandbox or a client environment certifies a collector; a certification lasts six months, or less if the vendor publishes an API version the collector does not list. See [How collectors are certified](/collectors/certification/).

| Date             | Collector | Engine   | Vendor API                        | Method                              | Expires        |
| ---------------- | --------- | -------- | --------------------------------- | ----------------------------------- | -------------- |
| 10 November 2026 | `1.0.0`   | `0.46.0` | Dfns REST API (unversioned paths) | Fixtures only: built, not certified | Not applicable |

## Security posture

From the collector’s last scan on the default branch. What each line means, and what blocks a release: [Security posture](/collectors/security/).

| Last scanned               | 10 November 2026                                                                                                                                                                                                      |
| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Critical findings          | 0                                                                                                                                                                                                                     |
| High findings              | 0                                                                                                                                                                                                                     |
| Medium findings            | 0                                                                                                                                                                                                                     |
| Low findings               | 0                                                                                                                                                                                                                     |
| Info findings              | 0                                                                                                                                                                                                                     |
| Release blocked            | No                                                                                                                                                                                                                    |
| Network allow-list check   | Pass                                                                                                                                                                                                                  |
| Read-only behavioural test | Pass                                                                                                                                                                                                                  |
| SBOM (CycloneDX)           | Produced                                                                                                                                                                                                              |
| Dependency licences        | Pass                                                                                                                                                                                                                  |
| Scanners                   | bandit 1.9.4, semgrep 1.181.1, pip-audit 2.10.1, osv-scanner 2.7.0, cyclonedx-py 7.5.0, pip-licenses 5.5.5, gitleaks repository job aal-secrets, hosts_check tools/hosts_check.py, read-only test pytest -m read_only |

Source: https://docs.atlanticagenticlabs.com/collectors/catalogue/dfns/
