ISO 8583 Parser
Free ยท Guide ยท ~7 min read ยท Updated 2026-08-09

0800 / 0810 Network Management Messages: Sign-On, Echo Test and Key Exchange

Every other message on a card link either moves money or asks permission to. The 0800 request and its 0810 response move nothing โ€” yet they are the first messages you exchange on day one of any integration: are we connected, are we still alive, is it time to rotate keys? Until an 0810 comes back, no transaction is going anywhere.
On this page: One MTI, no money ยท DE 70 is the real operation code ยท A worked example ยท Heartbeats, timeouts, reconnection ยท STAN and message matching ยท Debugging checklist

One MTI, no money

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.

DE 70 is the real operation code

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?".

OperationCommonly seen asWhat it does
Sign-on / logon001"I am ready to process." Opens the logical session once TCP is up; may be per-institution or per-service.
Sign-off / logout002Planned withdrawal: "stop routing to me." The polite way to leave, as opposed to dropping the socket.
Key exchange101 (1xx range)Rotate working keys (PIN, MAC). The key material rides in a security field โ€” DE 48, DE 96, DE 120 vary by network.
Cutover201 (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 / heartbeat301 (3xx range)"Are you still there?" Changes no state โ€” it exists to prove the link and the far-end application are alive.
The codes are not portable. The values above are the 1987 conventions and what you will meet most often โ€” but DE 70 code tables differ between networks: some use 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.

A worked example you can paste into the parser

Here is a complete, well-formed sign-on request, written as ASCII text:

0800 8220000000000000 0400000000000000 0809083000 000001 001
SegmentValueMeaning
MTI0800Network management request
Primary bitmap8220000000000000Bits 1, 7, 11 set
Secondary bitmap0400000000000000Bit 70 set
DE 70809083000Transmission date-time: Aug 9, 08:30:00
DE 11000001STAN โ€” first trace number of the day
DE 70001NMIC: 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.

Heartbeats: interval, timeout, and where a failure lands you

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:

Connection lifecycle: connect, sign on with 0800, periodic echo tests while ready, and after an echo timeout the link tears down and must reconnect and sign on againTCP / TLS connect (withback-off on retry)0800 sign-on โ†’ 0810 DE39 = 00cutover 0800 โ€” businessdate rolls, link stays upno 0810 for one echowithin timeout Tretry echo answeredK echoes lost โ†’ close thesocket0800 sign-off (planned) orsocket drops

Down โ€” no connection

Linked โ€” TCP up, not signed on

Ready โ€” signed on, transactions flow

Suspect โ€” echo unanswered

Transactions sent here are rejected:
connected is not signed on

Recovery is the full path:
reconnect, then sign on again โ€”
an echo alone does not restore Ready

The connection lifecycle. An echo timeout drops you all the way to Down, and recovery must pass through sign-on again โ€” reconnecting the socket alone does not make the link Ready.

Note the self-loop for cutover: a business-date roll happens inside Ready. Nothing disconnects, nothing re-signs-on โ€” only the settlement boundary moves.

STAN: yes, echo tests take numbers too

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.

When it goes wrong: a debugging checklist

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.

In short: 0800/0810 moves no money and gates all of it. The MTI only says "network management" โ€” DE 70 is the verb: sign-on, sign-off, echo, key exchange, cutover, with code values set by each network's spec. An echo timeout drops you to Down, and the way back is reconnect plus re-sign-on. And when heartbeats are green while transactions die, the link was never the problem.

Read next