> ## Documentation Index
> Fetch the complete documentation index at: https://iso8583sim.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Encode and decode

> Encode messages to bytes and decode them back, in any WireFormat.

`iso8583sim.wire.codec`

## Functions

### `encode_message()`

```python theme={null}
def encode_message(
    message: ISO8583Message,
    fmt: WireFormat | None = None,
    builder: ISO8583Builder | None = None,
) -> bytes
```

Encode a message as bytes in the given wire format.

The message is validated and normalized exactly as ISO8583Builder.build() does, so
encoding with WireFormat.ascii\_hex() gives the same characters as build().

**Parameters**

<ResponseField name="message" type="ISO8583Message" required>
  Message to encode
</ResponseField>

<ResponseField name="fmt" type="WireFormat | None" default="None">
  Wire format (defaults to ascii\_binary)
</ResponseField>

<ResponseField name="builder" type="ISO8583Builder | None" default="None">
  Builder to use for validation (defaults to one for the message's version)
</ResponseField>

<ResponseField name="Returns" type="bytes">
  The encoded message
</ResponseField>

### `decode_message()`

```python theme={null}
def decode_message(
    data: bytes,
    fmt: WireFormat | None = None,
    version: ISO8583Version = ISO8583Version.V1987,
    network: CardNetwork | None = None,
) -> ISO8583Message
```

Decode bytes in the given wire format into a message.

Field values come back in this library's usual string form (binary fields as uppercase
hex, numbers as digit strings), so the result works with the validator, explainer,
converter and everything else.

**Parameters**

<ResponseField name="data" type="bytes" required>
  Encoded message
</ResponseField>

<ResponseField name="fmt" type="WireFormat | None" default="None">
  Wire format (defaults to ascii\_binary)
</ResponseField>

<ResponseField name="version" type="ISO8583Version" default="ISO8583Version.V1987">
  ISO 8583 version
</ResponseField>

<ResponseField name="network" type="CardNetwork | None" default="None">
  Card network. Detected from the PAN when omitted.
</ResponseField>

<ResponseField name="Returns" type="ISO8583Message">
  The decoded message
</ResponseField>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.