SWIFT MT Message Type Validation in Python — Categories & Lookup
Validate any SWIFT MT message type, retrieve its category and description, and list all types by category — using the IsValid API or SDK from Python.
In this guide
1. What are SWIFT MT messages?
SWIFT (Society for Worldwide Interbank Financial Telecommunication) operates the global messaging network that financial institutions use to send and receive structured instructions about transactions. MT stands for Message Type — the legacy format that has been the backbone of international payments, securities, trade finance, and treasury operations for decades.
Each MT message is identified by a three-digit number (e.g. MT103, MT202, MT940). The first digit indicates the category — the broad functional area the message belongs to — while the remaining digits identify the specific message type within that category.
2. MT message categories
Every MT message type is assigned to one of ten categories (0–9). The first digit of the three-digit type number determines the category:
| Category | Group | Example |
|---|---|---|
| 0 | System Messages | MT096 |
| 1 | Customer Payments & Cheques | MT103 |
| 2 | Financial Institution Transfers | MT202 |
| 3 | Treasury Markets — Foreign Exchange, Money Markets & Derivatives | MT300 |
| 4 | Collection & Cash Letters | MT400 |
| 5 | Securities Markets | MT540 |
| 6 | Treasury Markets — Precious Metals & Syndications | MT600 |
| 7 | Documentary Credits & Guarantees | MT700 |
| 8 | Travellers Cheques | MT800 |
| 9 | Cash Management & Customer Status | MT940 |
The most commonly encountered types in everyday banking are MT103 (single customer credit transfer), MT202 (general financial institution transfer), MT940 (customer statement), MT760 (guarantee / standby letter of credit), and MT700 (issue of a documentary credit).
3. Common MT message types
Below is a detailed look at the most frequently used message types across categories:
| Type | Cat. | Description | Use case |
|---|---|---|---|
| MT101 | 1 | Request for Transfer | Corporate-initiated multi-bank payment instructions |
| MT103 | 1 | Single Customer Credit Transfer | Standard cross-border wire transfers |
| MT199 | 1 | Free Format Message | Ad-hoc communication between banks (payments) |
| MT202 | 2 | General Financial Institution Transfer | Interbank transfers, cover payments |
| MT300 | 3 | Foreign Exchange Confirmation | FX trade confirmations between counterparties |
| MT540 | 5 | Receive Free | Securities settlement (delivery without payment) |
| MT700 | 7 | Issue of a Documentary Credit | Letters of credit for international trade |
| MT760 | 7 | Guarantee / Standby Letter of Credit | Bank guarantees and standby LCs |
| MT940 | 9 | Customer Statement Message | End-of-day account statements, reconciliation |
| MT950 | 9 | Statement Message | Nostro/vostro account reconciliation |
4. Why MT validation matters
Regulatory compliance
Payment and securities regulations often reference specific MT types. Compliance systems must verify that incoming messages match declared types, and that the correct message type is used for each transaction class. A customer payment routed via MT202 instead of MT103 can trigger regulatory flags.
Message routing
Middleware and message brokers use the MT type to route messages to the correct processing pipeline. An unknown or invalid type means the message cannot be dispatched and will end up in an exception queue.
Audit trails
Financial institutions maintain detailed logs of all SWIFT traffic. Valid, categorised message types make it possible to filter, aggregate, and report on traffic by category — a requirement for both internal audit and regulatory reporting.
MT to MX migration planning
As institutions migrate from MT to MX (ISO 20022), they need to map each MT type to its MX equivalent. Validating and categorising MT types is the first step in building a migration inventory — understanding which message types are in active use and what their ISO 20022 counterparts are.
5. The right solution: validate + list
The IsValid SWIFT MT API provides two endpoints: one to validate and look up a specific MT type, and another to list all known types — optionally filtered by category.
GET /v0/swift-mt — Validate a message type
Pass a message type (e.g. MT103, 202, mt940) and get back whether it's valid, along with its category, group name, and description.
GET /v0/swift-mt/list — List all message types
Returns all known MT types. Optionally pass a category parameter (0–9) to filter by category.
Get your free API key at isvalid.dev — 100 calls per day, no credit card required.
Full parameter reference and response schema: SWIFT MT Validation API docs →
6. Python code examples
Using the isvalid Python SDK or the requests library.
Validate a message type
# swift_mt_validator.py import os from isvalid import create_client iv = create_client(api_key=os.environ["ISVALID_API_KEY"]) # ── Validate a single MT message type ──────────────────────────────────────── result = iv.swift_mt("MT103") if not result["valid"]: print("Unknown MT message type") else: print(f"Type: {result['type']}") # MT103 print(f"Category: {result['category']}") # 1 print(f"Group: {result['group']}") # Customer Payments & Cheques print(f"Description: {result['description']}") # → Single Customer Credit Transfer
List message types by category
# swift_mt_list.py import os from isvalid import create_client iv = create_client(api_key=os.environ["ISVALID_API_KEY"]) # ── List all message types ─────────────────────────────────────────────────── all_types = iv.swift_mt.list() print(f"Total MT types: {len(all_types)}") # ── Filter by category ────────────────────────────────────────────────────── payment_types = iv.swift_mt.list(category=1) for mt in payment_types: print(f" {mt['type']:<8} {mt['description']}") # → MT101 Request for Transfer # → MT103 Single Customer Credit Transfer # → ...
7. cURL examples
Validate a specific MT message type:
curl -H "Authorization: Bearer YOUR_API_KEY" \ "https://api.isvalid.dev/v0/swift-mt?value=MT103"
Validate using just the numeric part (without the MT prefix):
curl -H "Authorization: Bearer YOUR_API_KEY" \ "https://api.isvalid.dev/v0/swift-mt?value=202"
List all message types in category 1 (Customer Payments & Cheques):
curl -H "Authorization: Bearer YOUR_API_KEY" \ "https://api.isvalid.dev/v0/swift-mt/list?category=1"
List all known MT message types (no filter):
curl -H "Authorization: Bearer YOUR_API_KEY" \ "https://api.isvalid.dev/v0/swift-mt/list"
8. Understanding the response
Validate endpoint response
Response for MT103:
{ "valid": true, "type": "MT103", "category": 1, "group": "Customer Payments & Cheques", "description": "Single Customer Credit Transfer" }
Response for an invalid type:
{ "valid": false, "type": "MT999", "category": null, "group": null, "description": null }
| Field | Type | Description |
|---|---|---|
| valid | boolean | Whether the MT type is a known, valid SWIFT message type |
| type | string | Normalised MT type with prefix (e.g. MT103) |
| category | number | null | Category number (0–9), or null if invalid |
| group | string | null | Category group name (e.g. "Customer Payments & Cheques") |
| description | string | null | Human-readable description of the message type |
List endpoint response
Response for GET /v0/swift-mt/list?category=1 (truncated):
[ { "type": "MT101", "category": 1, "group": "Customer Payments & Cheques", "description": "Request for Transfer" }, { "type": "MT103", "category": 1, "group": "Customer Payments & Cheques", "description": "Single Customer Credit Transfer" }, { "type": "MT110", "category": 1, "group": "Customer Payments & Cheques", "description": "Advice of Cheque(s)" } ]
| Field | Type | Description |
|---|---|---|
| type | string | MT type identifier (e.g. MT103) |
| category | number | Category number (0–9) |
| group | string | Category group name |
| description | string | Human-readable description of the message type |
9. Edge cases to handle
Case insensitivity
The API accepts MT types in any case. mt103, MT103, and Mt103 all resolve to the same type. The response always returns the normalised uppercase form.
# All of these return the same result iv.swift_mt("MT103") iv.swift_mt("mt103") iv.swift_mt("Mt103") # → {"valid": True, "type": "MT103", ...}
With or without MT prefix
You can pass just the numeric part. The API normalises both forms:
# Both are equivalent iv.swift_mt("MT202") iv.swift_mt("202") # → {"valid": True, "type": "MT202", ...}
Obsolete message types
Some MT types have been retired or replaced over the years. The API may still recognise them as valid historic types but will indicate their status. Always check the response for types that may have been superseded — particularly relevant when processing archived messages or legacy system data.
MT to MX migration mapping
When planning a migration from MT to MX (ISO 20022), use the list endpoint to build an inventory of all MT types in use, then map them to their ISO 20022 equivalents:
# Build a migration inventory from your MT traffic all_types = iv.swift_mt.list() # Common MT → MX mappings mt_to_mx_map = { "MT103": "pacs.008", "MT202": "pacs.009", "MT940": "camt.053", "MT101": "pain.001", "MT900": "camt.054", "MT910": "camt.054", } for mt in all_types: mx = mt_to_mx_map.get(mt["type"], "no direct mapping") print(f" {mt['type']} → {mx}")
Summary
See also
Validate SWIFT MT types instantly
Free tier includes 100 API calls per day. No credit card required. Category, group, and description included in every response.