---
title: Logos
description: Serving bank logos, and how to cache them properly.
---

Every bank object carries a `logo` field when a logo is on file:

```json
"logo": {
  "formats": ["png"],
  "hash": "5f2c9d1e7a40b3c8",
  "url": "https://api.kontosjekker.asamsig.com/v1/banks/DABANO22/logo.png?v=5f2c9d1e7a40b3c8"
}
```

Use `logo.url` as-is. It is content-addressed: the `v` parameter is a hash of
the asset, so the response is served `immutable` and can be cached forever. If
the logo is replaced, the hash changes and so does the URL.

## Fetching directly

```
GET /v1/banks/{bic}/logo          # negotiated from the Accept header
GET /v1/banks/{bic}/logo.svg      # explicit format
GET /v1/banks/{bic}/logo.png
GET /v1/banks/{bic}/logo.webp
```

Without an extension, the Accept header decides: `image/svg+xml` wins, then
`image/webp`, then PNG.

## Not every bank has one

The register holds 98 banks; fewer have logos on file. When there is none the
API returns `404` with a `not-found` problem document rather than a placeholder
image — a placeholder cached for a year is hard to undo. `bank.logo` is `null`
in that case, so you can decide before you request.

The [React component](/react) falls back to the bank's initials.

## Licensing

Logos are trademarks of their banks. They are served so that a payment form can
show a customer which bank an account belongs to. That is nominative use — it
does not extend to using a bank's mark to suggest endorsement or affiliation.
If you need a logo for anything beyond identification, ask the bank.
