> ## 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.

# Upgrading

> The string-based API (ISO8583Parser.parse, ISO8583Builder.build, ISO8583Validator) has not changed since 1.0.

Code written for 1.x keeps working. This page lists the changes in behaviour and dependencies that can still affect an upgrade.

## From 1.1.x

### Dependencies (1.2.0)

* **`fastapi` and `uvicorn` are no longer installed by default.** If your code imports them through iso8583sim's dependencies, install the `web` extra: `pip install iso8583sim[web]`.
* **The `anthropic` extra requires `anthropic>=1.0.0`.**
* **The `google` extra installs `google-genai`** instead of the deprecated `google-generativeai`. If you imported `google.generativeai` yourself, install it separately.

### LLM defaults (1.2.0)

Default models changed to current ones: Anthropic `claude-opus-5`, OpenAI `gpt-6-astra`, Google `gemini-3.8-flash` (Ollama is unchanged). The new defaults cost more per token than the old ones. To keep costs down, pass a model explicitly:

```python theme={null}
MessageExplainer(provider=get_provider("anthropic", model="claude-sonnet-5"))
```

or `--model` on the CLI. Default output limits rose from 4096 to 16000 tokens so reasoning models aren't cut off.

Refusals now raise `LLMError` instead of returning an empty string. If you relied on an empty result, catch `LLMError`.

### Behaviour fixes you might notice

| Version | Change | What to check |
| - | - | - |
| 1.2.0 | `create_reversal` fills field 90 with the original STAN, time and institution IDs (the STAN used to be blank). | Tests that asserted the old field 90 value. |
| 1.2.0 | The parser detects Discover and Mastercard 2-series cards. | Code that expected `network=None` for those PANs. |
| 1.3.0 | MTIs starting with `2` (ISO 8583:2003) are valid. | Tests that expected `2xxx` MTIs to be rejected. |
| 1.3.0 | `iso8583sim validate` exits 1 without printing "Error validating message" when a message is invalid. | Scripts that matched that text. |
| 1.3.1 | `iso8583sim generate --amount` is in minor units (`1000` is 10.00). It used to scale amounts by 10,000 (or 100 for decimals). | Messages generated by earlier versions have wrong amounts. |

## From 1.4.x to 1.5

**Network validation changed.** Check VISA and Mastercard test data against the new rules:

* **Stricter:** field 22 must use a known PAN entry mode (first two digits) and PIN entry capability (third digit). Mastercard rejects the Visa-only mode `95`. Mastercard field 48 must be a transaction category code followed by well-formed subelements, so values such as `MC123` are now rejected. See [Field 22](../networks#field-22-pos-entry-mode).
* **Looser:** VISA field 44 no longer has to be hexadecimal, and Mastercard field 48 no longer has to start with `MC`. Both rules were wrong.

## New in 1.4

Additive only. See the changelog for details.

* [Wire formats](../core/wire): encode and decode bytes with binary bitmaps, BCD and EBCDIC (`build_bytes`, `parse_bytes`).
* [Networking](../net): TCP client, mock issuer host, and the `serve`, `send` and `load` commands.
* MCP `send_to_host` tool, limited to allowed hosts.


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