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 here how to read the transaction data in any Signal run mode

Transaction format

The 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

In case when the Signal GUI incoming transaction file cannot be recognized by the incoming file extension the Signal will try to parse the transaction as every known format. See details in data exchange chapter

Transaction data model

JSON

The Transaction data fields representation. The Transaction dataset is the target format of data, so all the others formats, e.g., DUMP or INI, will be converted to Transaction for future data processing

Field Type Required Default value Contains Validation Valid example
message_type str[int] Yes - Transaction Message Type Identifier Length is exact 4
Digits only
Field exists in Specification
0200
max_amount str[int] No 100 Maximum generated transaction amount Digits only 100
generate_fields list[str[int]] No [ ] Field numbers to generate Digits only ["4", "11", "37"]
data_fields dict[str, str | dict] Yes - JSON-like transaction data fields representation 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

INI transaction fields representation. See more about INI format here

INI format contains the following parts: sections, options, and options 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]
;...
;...

All the options values should be put in square brackets like [this]

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

All the fields numbers in the section [MESSAGE] must start from F. E.g. F002

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

INI transaction data contains up to three sections

Section Required Contains
[MTI] Yes Transaction Message Type Identifier
[CONFIG] No Transaction configuration params such as MAX_AMOUNT and GENERATE_FIELDS
[MESSAGE] Yes Message body, contains data fields values

The sections should be filled according to the data model

Section Option Type Required Default value Contains Validation Valid example
[MTI] MTI str[int] Yes - Transaction Message Type Identifier lenght is 4, digits only, exists in Specification [0200]
[CONFIG] MAX_AMOUNT str[int] No 100 Maximum generated transaction amoun Digits only [100]
[CONFIG] GENERATE_FIELDS list[int] No [ ] Field numbers to generate before send 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

Due to ConfigParser library restrictions the sign % in options values must be written as double percent, %% only

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

Dump is a hex-encoded transaction message, ready to be sent to a remote host over TCP/IP. It can be set as a single string or a multi-string value. The right side in ASCII representation is optional, and the Signal never reads it

The transaction data in dump representation can be used in GUI or CLI mode. You can also generate the dump using the GUI or API tools

The dump is raw transaction data, so there is no configuration or any other additional fields. MTI, Bitmap, and all the field values should be pre-calculated

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