---
title: "Lookup a BIC/SWIFT code"
method: GET
path: "/v1/bic/{code}"
tags: ["BIC"]
---

# Lookup a BIC/SWIFT code

`GET /v1/bic/{code}`

Returns institution details for a BIC/SWIFT code (8 or 11 characters). Costs 0.003 USDC via x402.

## Path parameters

- `code` string, required

## Response `200`

BIC lookup result

- BICLookupResult
  - `bic` string, required
  - `bic8` string, required
  - `bic11` string, required
  - `found` boolean, required
  - `valid_format` boolean, required
  - `institution` string, nullable, required
  - `country` object, required
    - `code` string, required
    - `name` string, required
  - `city` string, nullable, required
  - `address` object — Registered head-office address (present when available — GLEIF or directory sourced)
    - `type` string
    - `street` string, nullable
    - `post_code` string, nullable
    - `region` string, nullable
    - `city` string, nullable
    - `country` string
    - `romanized` string, nullable
    - `romanization` string
    - `source` string
    - `language` string
    - `as_of` string, date
  - `address_available` boolean
  - `postal_address` object — The institution seat expressed as an ISO 20022 PostalAddress, for the November 2026 structured-address rules (SPS 2026 in force 14 Nov 2026, Fedwire production 16 Nov 2026, T2 R2026.NOV). Purely additive — the `address` block beside it is unchanged and keeps the full untruncated street. Present only when TwnNm and Ctry can both be filled; absent fields are absent, never guessed.
    - `strt_nm` string — StrtNm. Present ONLY when the source really separates street from number — in practice the SIX BankMaster register for Swiss and Liechtenstein institutions. Its absence means the source published one concatenated line (which is then served as adr_line), NOT that the institution has no street.
    - `bldg_nb` string — BldgNb. Same condition as strt_nm — never split out of a joined line.
    - `pst_cd` string — PstCd.
    - `twn_nm` string, required — TwnNm. Mandatory in SPS and Fedwire; always present when this block is.
    - `ctry` string, required — Ctry, ISO 3166-1 alpha-2.
    - `adr_line` string[] — AdrLine, at most 2 lines of at most 70 characters, never repeating a value already served in a structured element above. A concatenated street line goes here rather than into strt_nm. Omitted rather than truncated when the line cannot fit in two lines — the full line stays in the `address` block.
    - `format` 'structured' | 'hybrid', required — structured: every element served has its own ISO 20022 element, no AdrLine. hybrid: structured elements plus at most two AdrLine. Derived from the block, so it cannot disagree with the fields it labels.
    - `source` string, required — The dataset this address came from, named as its publisher names it. It can differ from `address.source`: a Swiss institution is served from the SIX register while `address` stays GLEIF.
    - `as_of` string, nullable, required — When the SOURCE last stated this address (a SIX validity date, a GLEIF filing date). Null when the dataset publishes none — never a clock read, and never the date our database was refreshed.
  - `branch_code` string, required
  - `branch_info` string, nullable, required
  - `lei` string, nullable, required
  - `lei_status` string, nullable, required
  - `is_test_bic` boolean, required
  - `source` string, nullable, required
  - `official_identity` object — The official identity a central bank publishes for the institution behind the code we resolved: legal name, LEI, registered address, and the publisher's own category. Sources: the European Central Bank's daily list of monetary financial institutions (reached by LEI, and by the five-digit French code banque, which is what a French RIAD code contains), and the Banco de España's list of Spanish MFIs (reached by the four-digit supervisory code it publishes bare). PURELY INFORMATIONAL. It never changes `valid` and never changes `bank_code_check` — neither publisher allocates bank codes, both relay what national authorities report, and the Banco de España's terms forbid presenting its data as having legal or evidentiary effect. Present only on a match: an institution absent from a list produces no block at all, never a negative one, because absence from these lists is not evidence about the institution. Both publishers permit this reuse on conditions that travel with the data, which is why `source`, `free_of_charge` and `as_of` are always present.
    - `name` string, required — The institution's name as the publisher writes it. May differ from `institution` / `bic.bank_name`, which come from the BIC directory — both are served so the two can be compared rather than one silently overwriting the other.
    - `lei` string, nullable, required — Null where the publisher lists none, which is common for money market funds and branches.
    - `address` string, nullable, required — One-line registered address as published. Null when the publisher gives none.
    - `category` string, required — The publisher's classification.
    - `matched_by` 'lei' | 'national_code', required — lei: joined on the LEI the resolved BIC row carries — exact, and unscoped by country because a legal identity does not change with which of an entity's BICs was asked about. national_code: joined on the bank code the publisher itself publishes (FR five digits, ES four digits).
    - `source` string, required — The publisher, cited as both licences require.
    - `free_of_charge` string, required — Both publishers require that buyers of a product incorporating their data be told, on EVERY access, that the information is available free of charge from the publisher's own website. This API is sold, so that notice ships inside every block rather than living on a documentation page.
    - `attribution` string — The citation formula the Banco de España requires, reproduced verbatim. Spanish blocks only — the ECB asks to be cited as the source, which `source` does.
    - `as_of` string, date, required — Date of the list this row came from, read from the published file and never from a clock. Both lists are republished every business day.
    - `authoritative` false, required — Always false. Both publishers relay; neither allocates bank codes, and the attribution of a code remains the national authority's. Read `bank_code_check.authoritative` for the verdict that can be branched on.
  - `note` string
  - `cost_usdc` number, required
  - `processing_ms` number

## Other responses

- `400` — Invalid BIC format
- `402` — Payment required (x402)

## Changes

> 14 revisions in range; 8 could not be searched.

- **2026-07-26** `81718095283e` — 1 info
  - the endpoint scheme security `apiKey` was added to the API

[Change history](https://skmtc.dev/ibanforge/apis/ibanforge-api/changes/v1/bic/:code/get.md)

---

[API](https://skmtc.dev/ibanforge/apis/ibanforge-api.md) · [All operations](https://skmtc.dev/ibanforge/apis/ibanforge-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/ibanforge/ibanforge-api/revisions/9499dba434ea/schema)
