The head.001 business application header: what it carries and why it matters when settlement is on chain
head.001 business application header explained: sender, receiver, business message identifier, the creation date, and why on-chain audit depends on them.
- The head.001 business application header is the envelope, not the letter. It identifies who sent the message, who should receive it, what kind of message it is, and when it was created, and it exists separately from the pacs or camt document it wraps.
- Its key elements are Fr and To for the sending and receiving institutions, MsgDefIdr for the message definition and version, BizMsgIdr for the unique identifier of this business message, and CreDt for the creation timestamp, which under CBPR+ must be in UTC.
- The header does not carry the UETR. The audit chain therefore runs from BizMsgIdr to the document's MsgId, then to the UETR, then to the transaction hash, and the mapping must store all four.
- When the settlement leg is on chain the header is what proves which institution instructed which action at what time, which is the routing and audit question the blockchain cannot answer on its own.
- The common mistakes are confusing Fr and To with the debtor and creditor agents, reusing a BizMsgIdr, writing CreDt in local time without an offset, and declaring a MsgDefIdr version that does not match the document namespace.
The head.001 business application header is the ISO 20022 envelope that travels with every payment message and states who sent it, who is to receive it, what message definition it contains, a unique identifier for this instance of the message, and when it was created. It is a separate XML document from the pacs.008, pacs.009, pacs.002 or pacs.004 it accompanies, and it is the part of the exchange that routing systems, audit teams and examiners read first. When the settlement leg runs on a public blockchain, the header becomes the record of which institution asked for which action at which time, because the chain records only that an address moved tokens. This article walks through what the header carries, why each element matters for audit and routing when settlement is on chain, and the mistakes that appear most often in implementations.
What is the business application header, and why is it separate from the payment?
ISO 20022 separates the business document from the header that describes it. The document, for example a pacs.008 customer credit transfer, carries the parties, the amount, the accounts and the remittance information. The header, defined by the message definition head.001 and called the business application header or BAH, carries the information needed to move the document from one institution to another and to identify it uniquely afterwards. The version in use on the Swift network under the CBPR+ guidelines is head.001.001.02. The two documents are placed together in the network envelope, and a receiving system reads the header first to decide where to route the document and how to parse it.
The separation is deliberate and it is useful. The same pacs.008 document can be passed from the debtor agent to an intermediary and from the intermediary to the creditor agent, and at each hop a new header is created naming the new sender and receiver while the document's business content stays the same. The header describes the hop; the document describes the payment.
Which elements does head.001 carry, and what does each one mean?
The header is short, and every element earns its place. The following are the elements that matter in a payments context; the schema also allows a signature block and a few flags that appear less often.
- Fr, the sender, and To, the receiver, each identifying a financial institution, normally by its BIC in the FIId/FinInstnId/BICFI structure, or an organisation by an organisation identifier where the party is not a bank.
- BizMsgIdr, the business message identifier, a string of up to 35 characters that the sender assigns and that must be unique for that sender, so that this instance of the message can be referred to, rejected or found again.
- MsgDefIdr, the message definition identifier, which names the document inside the envelope with its full version, for example pacs.008.001.08, so that the receiver knows which schema to validate against before it opens the document.
- BizSvc, the business service, which names the usage guideline the message follows, for example a CBPR+ service identifier, so that both sides apply the same restrictions on top of the base schema.
- CreDt, the creation date and time of the header, which under the CBPR+ guidelines must be expressed in UTC with a Z suffix rather than in local time.
- CpyDplct and PssblDplct, which flag a copy, a duplicate or a possible duplicate, and Rltd, which lets a header refer to the header of an earlier message, which is how a status report or a return points back to the instruction it concerns.
One element is missing from that list because it is not in the header at all: the UETR. The unique end-to-end transaction reference lives inside the document, in PmtId/UETR or OrgnlUETR, because it belongs to the payment rather than to the hop. The header's BizMsgIdr identifies the message; the document's GrpHdr/MsgId identifies the message from inside; the UETR identifies the payment. Under the CBPR+ guidelines the BizMsgIdr and the document MsgId are expected to carry the same value, which simplifies the join, but a mapping layer should still store both rather than assume it.
Why does the header matter for routing when settlement is on chain?
A blockchain transaction has a sending address, a receiving address, an amount and a hash. It does not say which institution controls the sending address, which institution the receiving address belongs to, or which payment instruction caused the transfer. When two institutions settle on chain, the header on the pacs.008 or pacs.009 that preceded the transfer is what proves that institution A instructed the settlement to institution B, and the header on the pacs.002 that followed it is what proves that B confirmed it. The Fr and To elements are the institutional identities; the wallet addresses are only their instruments.
That has a practical consequence for routing. The settlement engine should select the destination wallet from the To element and the beneficiary institution in the document, by lookup against a whitelist that maps each institution's BIC to its registered addresses per chain, rather than from any address supplied free-form in the message. The header tells the engine which counterparty it is dealing with; the whitelist tells it where that counterparty receives funds. An instruction whose To element names an institution with no whitelisted address on the requested chain should be rejected with a pacs.002 before anything is broadcast, and the header of that rejection should name the original header in Rltd.
The chain knows that an address paid an address. Only the header knows that a bank instructed a bank. An audit that starts from the wrong one of those two ends up reconstructing the other by hand.
Why does the header matter for audit?
An examiner reviewing an on-chain settlement wants to see a sequence: an instruction from a named institution at a named time, a transfer on the chain that matches it, and a confirmation from the counterparty at a later named time. The header supplies the named institution and the named time at both ends. CreDt in UTC gives an ordering that survives time zones, which matters when the instructing institution is in Toronto, the settlement agent is in Singapore and the chain's block timestamps are in Unix time. BizMsgIdr gives the handle for finding the message in an archive, and Rltd on the status report gives the link from confirmation back to instruction without a search.
The audit chain, written out, has four links: the BizMsgIdr of the instruction header, the MsgId of the instruction document, the UETR of the payment inside it, and the transaction hash of the settlement. A mapping that stores all four, plus the BizMsgIdr of the pacs.002 that reported completion, lets a reviewer move in either direction without manual matching. The tamper evident audit trail should record the header as received, byte for byte, because the header is the sender's assertion of identity and time, and a normalised copy is not the same evidence. Where messages are signed, the signature block in the header is what makes that assertion verifiable, and the signed bytes must be the ones archived.
What are the most common mistakes?
The errors are not exotic, and most of them come from treating the header as boilerplate. The first is confusing Fr and To with the debtor agent and creditor agent in the document. On a direct exchange they may coincide, but on any routed payment the header names the two parties to this hop while the document names the agents of the customer's payment, and populating one from the other produces headers that say the wrong bank sent the message. The second is reusing a BizMsgIdr, typically because a resend after a technical failure keeps the old value. The receiving system will treat the resend as a duplicate, correctly, and the payment stalls. A resend needs a new BizMsgIdr and the PssblDplct flag set.
The third is CreDt written in local time, or without an offset, which makes the timestamp ambiguous and breaks ordering across institutions. The fourth is a MsgDefIdr that does not match the namespace of the document actually enclosed, for example a header declaring pacs.008.001.08 around a document in a different version, which fails validation at the receiver and is surprisingly common after an upgrade. The fifth is omitting Rltd on a pacs.002 or pacs.004, which is not always a schema error but leaves the receiver to search for the original by content. And the sixth, specific to on-chain settlement, is taking the destination address from the message body rather than from the To element and a whitelist, which is a control failure rather than a formatting one.
How should a mapping layer treat the header during migration?
Institutions arriving from MT have a header already, in the form of blocks 1, 2 and 3 of the FIN message, and the natural instinct is to map those fields across. Some of it maps directly: the sender and receiver BICs in blocks 1 and 2 correspond to Fr and To, and the message type in block 2 corresponds loosely to MsgDefIdr. Some of it does not: there is no MT equivalent of BizMsgIdr, and the MT reference in field 20 belongs to the document's MsgId or InstrId rather than to the header. The UETR in field 121 of block 3 goes to the document, not the header. A migration mapping should therefore generate a fresh BizMsgIdr for each ISO message it creates, populate CreDt in UTC from the system clock rather than from any MT timestamp, and record the MT reference alongside it for reconciliation.
The other migration point is that the header is created per hop. An institution that receives an MT103, converts it to pacs.008 and forwards it on chain is the Fr of the new header, and the settlement counterparty is the To. The original sender of the MT103 does not appear in the header at all; it appears in the document as the previous instructing agent. Getting that right is what lets the audit trail show the true sequence of institutions.
Where StableNet fits
StableNet, built by SpendTheBits, is a cross border B2B payment and settlement platform for banks, credit unions, licensed money service businesses, exchange houses and remittance fintechs. It is ISO 20022 native: pacs.008 customer credit transfers, pacs.009 interbank legs, pacs.002 status reports and pacs.004 returns are exchanged inside head.001 envelopes and tracked end to end by UETR, which is the structure described in this article, and it also accepts and emits MT103 so that an institution mid-migration can send in one format and be confirmed in the other. Settlement runs in regulated stablecoins such as USDC and USDT on public blockchains, completing in minutes with on chain auditability while customers keep custody, and a tamper evident audit trail preserves the header and the document as received alongside the transaction hash, so the four-link chain from BizMsgIdr to hash can be walked in either direction. SpendTheBits is a Bank of Canada registered payment service provider and a named finalist in the Swift Hackathon 2026 Technical Challenge.
See it on your corridors
Book a working session and we’ll map StableNet’s compliance and settlement to one of your live payment flows.