Read 0800 digit by digit โ the MTI decoder does it for you: version 0 (ISO 8583:1987), class 8 (network management), function 0 (request). 0810 is the same message with function 1: the response. Who originates is defined by your interface โ typically the connecting party sends 0800 and the host answers, but both directions can be live on one link.
The body is tiny. A typical 0800 carries a timestamp (DE 7), a trace number (DE 11), the network management information code (DE 70), and โ spec permitting โ institution identifiers (DE 32/33) or key material. The 0810 echoes DE 7 and DE 11 and adds DE 39, the response code. No PAN, no amount, no merchant: class 8 is the only message class on the link where nothing financial is at stake.
Here is the part that trips up newcomers: the MTI tells you almost nothing. Every network management request is 0800 โ sign-on, sign-off, heartbeat, key change and cutover all share it. The operation lives in DE 70, the three-digit Network Management Information Code (NMIC). Treat 0800 as the envelope and DE 70 as the verb: when someone says "we received an 0800", the first question is always "with what DE 70?".
| Operation | Commonly seen as | What it does |
|---|---|---|
| Sign-on / logon | 001 | "I am ready to process." Opens the logical session once TCP is up; may be per-institution or per-service. |
| Sign-off / logout | 002 | Planned withdrawal: "stop routing to me." The polite way to leave, as opposed to dropping the socket. |
| Key exchange | 101 (1xx range) | Rotate working keys (PIN, MAC). The key material rides in a security field โ DE 48, DE 96, DE 120 vary by network. |
| Cutover | 201 (2xx range) | Business-date roll: everything after this belongs to the next settlement day. The link stays up; only the accounting boundary moves. |
| Echo test / heartbeat | 301 (3xx range) | "Are you still there?" Changes no state โ it exists to prove the link and the far-end application are alive. |
061/062 for sign-on/sign-off, some split key management across several 1xx codes, some signal the operation in another field entirely. The categories travel; the numbers do not. The DE 70 table in your counterpart's interface spec is the only one that counts.Here is a complete, well-formed sign-on request, written as ASCII text:
0800 8220000000000000 0400000000000000 0809083000 000001 001
| Segment | Value | Meaning |
|---|---|---|
| MTI | 0800 | Network management request |
| Primary bitmap | 8220000000000000 | Bits 1, 7, 11 set |
| Secondary bitmap | 0400000000000000 | Bit 70 set |
| DE 7 | 0809083000 | Transmission date-time: Aug 9, 08:30:00 |
| DE 11 | 000001 | STAN โ first trace number of the day |
| DE 70 | 001 | NMIC: sign-on (per this link's spec) |
Two things are worth noticing. First, the bitmap is almost empty โ three data elements โ which makes 0800 the cleanest message for learning to read bitmaps by hand (rebuild it in the bitmap calculator). Second, DE 70 sits at position 70, above 64 โ so every network management message drags in a secondary bitmap for one lonely field. That is why bit 1 of the primary bitmap is set and the bitmap runs 32 hex characters instead of 16. Paste the whole line into the main parser and exactly these four fields come out.
The matching response adds one field, DE 39 โ which flips bit 39 on in the primary bitmap (8220000002000000):
0810 8220000002000000 0400000000000000 0809083000 000001 00 001
DE 39 = 00 means the sign-on was accepted. Anything else is a rejection, and the code tells you why โ the DE39 lookup covers the common values.
Why heartbeat at all? Because an idle TCP connection lies. Firewalls and NAT boxes silently drop idle mappings, and a half-open socket looks healthy to the side that didn't notice โ until a real authorization sails into the void. The echo test makes the link fail early and observably instead of at the worst possible moment.
The working rules on most links:
Note the self-loop for cutover: a business-date roll happens inside Ready. Nothing disconnects, nothing re-signs-on โ only the settlement boundary moves.
Network management messages occupy the same DE 11 space as everything else, and a response is matched to its request by DE 11 (plus DE 7) on the same connection. That makes STAN discipline a day-one problem: the heartbeat sender is often a different component from the transaction sender, and if the two share a sequence without coordination โ or each restarts from 000001 โ you get duplicates inside the matching window. The symptom is maddening: "the 0810 came back but matches no outstanding request", or worse, an echo response matched to a transaction. The fixes are boring and absolute: one allocator per connection, a counter that survives restarts, no reuse while a request bearing that STAN is outstanding. The full story of which numbers identify what is in STAN vs RRN.
You send 0800 and nothing comes back. Work up the stack. Is the TCP connection actually established, or half-open? Is the length header right โ 2-byte binary vs 4-digit ASCII, inclusive or exclusive of itself? A wrong length prefix leaves the host waiting forever for bytes it thinks are still coming. Then encoding: ASCII where the host expects EBCDIC or BCD shifts every boundary. Most hosts silently drop messages they can't frame โ capture the raw bytes and count them against your own length prefix before blaming the far end.
An 0810 arrives, but DE 39 isn't success. Good news: framing, encoding and connectivity are proven; what's left is content. 30 (format error) points at a field the host didn't like; institution-ID mismatches in DE 32/33 are the classic sign-on rejection; "not signed on" in answer to an echo means you skipped a step. Look the code up in the DE39 lookup, remembering network management responses often use a spec-specific subset of the table.
Heartbeats are green but transactions time out. The most instructive failure. An echo proves the socket and the far-end front-end โ nothing more. Authorizations travel further: through routing, into an authorization host, sometimes out to an issuer. Green echoes plus dead transactions means the problem lives beyond the component answering your echoes โ a down host behind the gateway, a routing table missing your BIN range, a sign-on whose scope doesn't cover the transaction service โ or your 0200s are malformed in a way your 0800s aren't, since they exercise far more fields. Either way, stop staring at the link layer; the link is fine.