Skip to content

Transaction

Transaction data

The Transaction data model is the central dataset used by Signal to represent payment transactions. Each request and response is represented as a separate Transaction object.

Signal receives transactions from multiple sources (files, API, TCP sockets, GUI), converts them into the internal Transaction model, processes them in the Signal Core, and routes them to the appropriate destination.

After processing, the Transaction can be converted to a target format and returned via various interfaces, such as a GUI, an API response, CLI output, or a TCP connection.

See Data models for how to load transaction data in each Signal operating mode.

Transaction format

Signal supports three transaction data formats.

Data format File extension Supported in Comment
JSON .json GUI, CLI, API Recommended transaction data format
DUMP .dump or .txt GUI, CLI
INI .ini GUI, CLI

If the Signal GUI cannot identify a transaction file by its extension, it tries each supported format. See the data exchange chapter for details.

Transaction data model

JSON

The table below describes the Transaction data fields. Transaction is the internal data model, so other formats, such as DUMP and INI, are converted to it for further processing.

Field Type Required Default value Contains Validation Valid example
message_type str[int] Yes - Transaction Message Type Identifier Length is exactly 4
Digits only
Field exists in the specification
0200
max_amount str[int] No 100 Maximum generated transaction amount Digits only 100
generate_fields list[str[int]] No [ ] Numbers of fields to generate Digits only ["4", "11", "37"]
data_fields dict[str, str | dict] Yes - JSON-like representation of transaction fields According to the field specification
{
 "3": "000000", 
 "11": "145787",
 "47": {
   "227": {
    "01": "Limassol", 
    "03": "CYP", 
    "04": "3101"
   }
 }
}
JSON transaction example
{
    "message_type": "0200",
    "max_amount": "100",
    "generate_fields": [
        "4",
        "7",
        "11",
        "12",
        "37"
    ],
    "data_fields": {
        "2": "4000000000000000",
        "3": "000000",
        "4": "000000004679",
        "7": "0727142832",
        "11": "981533",
        "12": "230727142832",
        "14": "3504",
        "18": "8999",
        "22": "810",
        "37": "159384172368",
        "41": "70000826",
        "42": "000000010000866",
        "43": "PSP*merch.com               >Limassol>CY",
        "47": {
            "227": {
                "01": "Limassol",
                "03": "CYP",
                "04": "3101"
            },
            "072": "20240303_184906_8769658371",
            "033": "5",
            "027": "30303030433032445531325350334c48474b564c",
            "028": "00000308254236854496634394423610b892eb6a",
            "030": "2",
            "226": "unlimit.com"
        },
        "48": {
            "51": "SOME ONE",
            "96": "415481%8164",
            "54": "HOW ARE YOU",
            "42": "01",
            "92": "000"
        },
        "49": "978"
    }
}

INI

Transaction fields can also be represented in INI format. Learn more about INI here.

INI files contain sections, options, and option values.

1
2
3
4
5
6
7
8
9
[SECTION]
OPTION = [VALUE]
ANOTHER_OPTION = [ANOTHER_VALUE]

[ANOTHER_SECTION]
OPTION = [VALUE]
ANOTHER_OPTION = [ANOTHER_VALUE]
;...
;...

Enclose all option values in square brackets, like [this].

1
2
3
[MESSAGE]
F002 = [4000000000000000]  ; Correct
F003 = 000000              ; Incorrect

All field numbers in the [MESSAGE] section must start with F, for example F002.

1
2
3
[MESSAGE]
F002 = [4000000000000000]  ; Correct
3    = [000000]            ; Incorrect

An INI transaction contains up to three sections.

Section Required Contains
[MTI] Yes Transaction Message Type Identifier
[CONFIG] No Transaction configuration parameters, such as MAX_AMOUNT and GENERATE_FIELDS
[MESSAGE] Yes Message body containing field values

Fill in the sections according to the data model below.

Section Option Type Required Default value Contains Validation Valid example
[MTI] MTI str[int] Yes - Transaction Message Type Identifier Length is 4, digits only, exists in the specification [0200]
[CONFIG] MAX_AMOUNT str[int] No 100 Maximum generated transaction amount Digits only [100]
[CONFIG] GENERATE_FIELDS list[int] No [ ] Numbers of fields to generate before sending the transaction Digits only [4, 11, 37]
[MESSAGE] FNNN where NNN is field number str yes - Transaction data fields According to the field specification F002 = [4000000000000000]
F003 = [000000]
;...
;...

% Substitution

The ConfigParser library requires percent signs in option values to be escaped: write %% instead of %.

Refer to the ConfigParser docs for details.

1
2
3
[MESSSAGE]
F002 = [415481%%0001]  ; Correct, will display "415481%0001"
F002 = [415481%0001]   ; Incorrect, will lead to parsing error
INI transaction example
[CONFIG]
MAX_AMOUNT = [100]
GENERATE_FIELDS = [4, 7, 12, 37]
[MTI]
MTI = [0200]
[MESSAGE]
F002 = [40000000000000000]
F003 = [100000]
F004 = [000000004157]
F007 = [1029122153]
F011 = [475469]
F012 = [221029122153]
F014 = [3504]
F018 = [8999]
F022 = [810]
F037 = [974998127151]
F041 = [70000826]
F042 = [000000010000866]
F043 = [PSP*merch.com               >Limassol>CY]
F047 = [03808101110000023962603150000000100003960408Limassol0504310706031960709merch.com0803PSP033001502704030303030433032445531325350334c48474b564c02804000000308254236854496634394423610b892eb6a0300012]
F048 = [5108SOME ONE9611415481%%81645411HOW ARE YOU7608100000014202019203000]
F049 = [978]

DUMP

A dump is a hex-encoded transaction message, ready to be sent to a remote host over TCP/IP. It can occupy a single line or multiple lines. The ASCII representation on the right is optional; Signal does not read it.

Transaction dumps can be used in GUI or CLI mode. You can also generate a dump using the GUI or API tools.

A dump contains raw transaction data, with no configuration or other additional fields. The MTI, bitmap, and all field values must be calculated in advance.

DUMP transaction example
30.32.30.30.72.34.44.00.08.E3.80.00.31.36.35.34    0200........1654
38.36.37.33.36.37.31.32.34.35.38.35.36.34.30.30    8673671245856400
30.30.30.30.30.30.30.30.30.30.30.30.36.35.39.31    0000000000006591
30.36.30.35.32.32.30.36.32.31.39.34.34.31.36.34    0605220621944164
32.32.30.36.30.35.32.32.30.36.32.31.32.35.30.34    2206052206212504
38.39.39.39.38.31.30.35.35.36.30.35.36.31.34.37    8999810556056147
32.35.34.37.30.30.30.30.30.31.34.46.41.43.49.4C    25470000014FACIL
30.31.20.20.20.20.20.20.20.20.50.53.50.2A.6D.65    01        PSP*me
72.63.68.2E.63.6F.6D.20.20.20.20.20.20.20.20.20    rch.com
20.20.20.20.20.20.3E.4C.69.6D.61.73.73.6F.6C.3E          >Limassol>
43.59.31.39.33.30.33.38.30.38.31.30.31.31.31.30    CY19303808101110
30.30.30.30.32.33.39.36.32.36.30.33.31.35.30.30    0000239626031500
30.30.30.30.30.31.30.30.30.30.33.39.36.30.34.30    0000010000396040
38.4C.69.6D.61.73.73.6F.6C.30.35.30.34.33.31.30    8Limassol0504310
37.30.36.30.33.31.39.36.30.37.30.39.6D.65.72.63    706031960709merc
68.2E.63.6F.6D.30.38.30.33.50.53.50.30.33.33.30    h.com0803PSP0330
30.31.35.30.32.37.30.34.30.33.30.33.30.33.30.33    0150270403030303
30.34.33.33.30.33.32.34.34.35.35.33.31.33.32.35    0433032445531325
33.35.30.33.33.34.63.34.38.34.37.34.62.35.36.34    350334c48474b564
63.30.32.38.30.34.30.30.30.30.30.30.33.30.38.32    c028040000003082
35.34.32.33.36.38.35.34.34.39.36.36.33.34.33.39    5423685449663439
34.34.32.33.36.31.30.62.38.39.32.65.62.36.61.30    4423610b892eb6a0
33.30.30.30.31.32.30.36.37.35.31.30.38.53.4F.4D    3000120675108SOM
45.20.4F.4E.45.39.36.31.31.34.31.35.34.38.31.25    E ONE9611415481%
38.31.36.34.35.34.31.31.48.4F.57.20.41.52.45.20    81645411HOW ARE
59.4F.55.37.36.30.38.31.30.30.30.30.30.30.31.34    YOU7608100000014
32.30.32.30.31.39.32.30.33.30.30.30.39.37.38       202019203000978