1. Changelog

Version Date Description

9.1

2024-02-15

Release of the new method Calculate commission payout. The method informs about the amount that will be removed from the deposit and gives possibility to use exact result in the send money method.

9.0

2023-12-29

Added new status to send-money methods: ERROR_WEEKLY_TRANSACTION_LIMIT. Adjustment of card limits for Visa and Mastercard organizations.

8.9

2023-12-14

New transaction model in Payouts area is released. Now we can process transaction from Deposit to Account number. Look here for more information and navigate to CASH-ACCOUNT tab in Request section + New CASH-ACCOUNT transaction model

8.8

2023-11-20

Adding information about Merchant Advice Codes. Changes in check transaction status response - new field merchantAdviceCode. Occurs only for Mastercard and for declined transactions if Mastercard returns this information

8.7

2023-11-02

Complete end of support for 3ds version 1.0

8.6

2023-10-26

Added new payment method BLIK-CARD BLIK to Card

8.5

2023-03-21

Added new optional fields for method /client/3ds/authentication regarding Cardholder Billing Information

8.4

2023-02-16

Regexp for house number properties in each occurrences was changed

8.3

2023-01-11

Following to the newest Mastercard Data Integrity Monitoring Program Edits for Funding Transactions all of the money transfers must contain additional informations about receiver: First name and Last name. Consequently delayed receiver type for delayed payment: Receiver Delayed was changed - required fields: firstName and lastName were added.

8.2

2022-12-02

Added new field to receiver - country of residence. Changes in request transactions - sender country is required for merchant crypto. Added new status to check status send-money response: ERROR_TRANSACTION_BLOCKED_WITH_CARD_ISSUED_IN_GIVEN_CARD_COUNTRY

8.1

2022-12-09

Extension of methods determine currency and currency for card by country card

8.0

2022-12-01

Delete field 'currency' from sender models: Sender Cash and Receiver Cash. Restrict 'type' field to specific transaction types: CARD_CARD: above, CASH_CARD: RECEIVER, CARD_CASH: SENDER

7.9

2022-11-24

Added new status to check status send-money response: MERCHANT_CRYPTO_OUTSIDE_EEA_UK_NOT_SUPPORTED

7.8

2022-11-07

Documentation enhancement, minor fixes and better details for 401 UNAUTHORIZED status

7.7

2022-10-26

Removal from use 3DS 1 for all countries (except those configured in the system)

7.6

2022-10-24

Adding information about the withdrawal of 3DSv1.

7.5

2022-10-13

New optional birthDay parameter added to Sender and Receiver data. This parameter may help in AML verification

7.4

2022-10-12

Changes in Payment of Delayed Transaction - now it is enabled to include cardId without plain card number in request, look at 4. Delayed payment chapter

7.3

2022-10-06

New statuses added for Delayed Payment: ERROR_SINGLE_TRANSACTION_LIMIT, ERROR_DAILY_TRANSACTION_LIMIT, ERROR_DAILY_COUNT_TRANSACTION_LIMIT, ERROR_MONTHLY_TRANSACTION_LIMIT, ERROR_MONTHLY_COUNT_TRANSACTION_LIMIT, ERROR_DAILY_CUMULATIVE_LIMIT, ERROR_MONTHLY_CUMULATIVE_LIMIT, ERROR_MERCHANT_MASTERCARD_DAILY_CUMULATIVE_LIMIT, ERROR_MERCHANT_MASTERCARD_MONTHLY_CUMULATIVE_LIMIT, ERROR_MERCHANT_VISA_DAILY_CUMULATIVE_LIMIT, ERROR_MERCHANT_VISA_MONTHLY_CUMULATIVE_LIMIT, ERROR_MERCHANT_DAILY_CUMULATIVE_LIMIT, ERROR_MERCHANT_MONTHLY_CUMULATIVE_LIMIT, LIMIT_ERROR. Statuses may be occurred in Delayed Send Money and in Delayed Payment methods.

7.2

2022-10-03

Updated error responses in delayed send money / payment operations (card lock info added).

New endpoints added: + Check the detailed status of a multi-currency transaction + Check the detailed status of a 3DS transaction

7.1

2022-08-26

New status added for Delayed Payment feature: ERROR_DELAYED_PAYMENT_UNEXPECTED_EXCEPTION_OCCURRED

7.0

2022-08-05

New request field on 3DS 2.X: challengeWindowSize

6.9

2022-07-15

Added new fields Cardholder First Name and Last Name to Add card method. + 14.1. Add card

6.8

2022-06-13

Delete status ERROR_TRANSACTION_USER_NAME_CONTAINS_FRAUDULENT_PART, added a new INCORRECT_NAME_DATA status that will have the same role.

6.7

2022-05-09

Added new statuses to send-money methods: ERROR_TRANSACTION_USER_NAME_CONTAINS_FRAUDULENT_PART - Transaction rejected, sender or receiver name contains fraudulent phrase, ERROR_NAME_VERIFICATION - Transaction rejected, suspicious sender or receiver name

6.6

2022-04-14

Added new status to check status send-money response: ERROR_VALIDATION_EXPIRY_DATE

6.5

2022-04-08

Added new fields to check status method. Fields: merchantSettlementCurrency, fenigeCommissionInMerchantSettlementCurrency, transactionAmountInMerchantSettlementCurrency

6.4

2022-03-11

New transaction status added (MASTERCARD_MAC_TPE_EXCELLENCE_RULE) for all transactions type to reject transaction. Transaction rejected, when second transaction with merchant advice code 03 or 21 was retried within 30 days. + 3. Send money + 4. Delayed payment

6.3

2022-02-28

Added new field for Add Card method. It is possible to correlate Sender Card with phone number now. One phone number can hold one card per User. Additionally new status was added: ERROR_CARD_WITH_PHONE_NUMBER_EXISTS, when card with phone number exists for such User. + 14.1. Add Card

6.2

2022-03-10

Add new PLAIN-DATACORE methods. + 3. Send money + 8. Determine currency + 9. Calculate commission

6.1

2022-02-07

Add new response error statuses: ERROR_SINGLE_TRANSACTION_LIMIT, ERROR_DAILY_COUNT_TRANSACTION_LIMIT, ERROR_MONTHLY_TRANSACTION_LIMIT, ERROR_MONTHLY_COUNT_TRANSACTION_LIMIT.

6.0

2022-01-15

Add new response error status: ERROR_TRANSACTION_PROCESSING_TIME_TOO_LONG + 3. Send money

5.9

2021-12-06

New transaction status added (ERROR_TRANSACTION_GEOGRAPHIC_SCOPE_BLOCKED) for all transactions type to indicate blocked transaction in specific geographic scope + 3. Send money + 4. Delayed payment

5.8

2021-12-29

Add new API methods for reset user password + 13. User management

5.7

2021-12-10

Changed constraint from optional to required on country field in user management > add user.
Added new statuses INVALID_COUNTRY in Add user response and INVALID_COUNTRY_ID in Update user response.

5.6

2021-12-09

Documentation updated. Error ERROR_CARD_ALREADY_EXISTS_FOR_ANOTHER_USER added for add card error statuses.

5.5

2021-12-06

Updated validation for purchaseAmount in Authentication request in 3DS 2.X verification methods

5.4

2021-11-16

Added new mandatory field when country is set to US (United States) or CA (Canada) to CASH_PLAIN and CASH_PHONE send-money methods.

5.3

2021-11-08

Updated information about API-TOKEN refresh time in methods that require it

5.2

2021-10-27

Add new response error statuses: ERROR_PAYMENT_CARD_COUNTRY_RESTRICTED, ERROR_FUNDING_CARD_COUNTRY_RESTRICTED, ERROR_MERCHANT_DELAYED_PAYMENT_CARD_COUNTRY_RESTRICTED, ERROR_DELAYED_PAYMENT_CARD_COUNTRY_RESTRICTED + 3. Send money + 4. Delayed payment

5.1

2021-10-25

Removed redundant validation response statuses from methods + Card to Card + Payouts on Card + Card to Card 3D Secure + The change does not affect the API.

5.0

2021-10-20

New status added for send-money validation error response: ERROR_MERCHANT_NOT_SUPPORT_CARD_PROVIDER 3. Send money

4.9

2021-10-14

Added new types: DOMESTIC_PL, INTRA_EU, INTER to geographicScope field in 9. Calculate commission

4.8

2021-10-05

Addition of an explanation of the default status ERROR_SOMETHING_WRONG for the check status send money methods + 3.1.3 Check status + 3.2.3 Check status

4.7

2021-09-06

New merchant cumulative limits added: daily and monthly cumulative limit for all card providers. + New Statuses added: ERROR_MERCHANT_DAILY_CUMULATIVE_LIMIT, ERROR_MERCHANT_MONTHLY_CUMULATIVE_LIMIT + 3.1.3 Check status + 3.2.3 Check status

4.6

2021-09-07

New response status ERROR_API_TOKEN_NOT_FOUND added when API-TOKEN header is not attached to DATACORE based request

4.5

2021-05-05

An implementation of CODE_65/CODE_1A transaction rejection logic for MASTERCARD and VISA. More details can be found here: 3. Send money 4. Delayed payment

4.4

2021-04-26

Introducing a service that validates the personal information of transaction users and Add User method data. In case of positive verification, the transaction/Add User is rejected with the status: ERROR_USER_VERIFICATION

4.3

2021-04-22

Exclusion of deprecated currencies. Validation will reject these currencies: BYR, LTL, MRO, RUR, STD

4.2

2021-03-01

Introduction of a new webhook functionality. Now it is possible to handle information about transaction status without polling API. + 5. Webhooks

4.1

2021-02-17

New status: CARD_MODIFY_LIMIT_REACHED for Add/Delete Card and Add/Delete Friend Card methods. Default limits are set to 3 cards modifications e.g. Add/Delete card per user during 24h also 3 modifications for friend cards. These values could be modified for the merchant, please contact us if you need changes.

4.0

2021-02-02

Added method Currency rate by provider which also allows you to download historical rates.

3.9

2021-02-02

Added new fields '3DS', 'amountInUsDollar', 'provider', 'bankName' on thw response body for Check status and Transaction history methods.

3.8

2021-01-18

New fields 'merchantUrl' and 'addressIp' in Send Money request added. Both fields are optional now, but it is recommended to include it in your request body. From 2021-05-03 the fields will be required.

3.7

2021-01-13

New merchant cumulative limits added: daily and monthly with distinction between Mastercard and VISA. + New Statuses added: ERROR_MERCHANT_MASTERCARD_DAILY_CUMULATIVE_LIMIT, ERROR_MERCHANT_MASTERCARD_MONTHLY_CUMULATIVE_LIMIT, ERROR_MERCHANT_VISA_DAILY_CUMULATIVE_LIMIT, ERROR_MERCHANT_VISA_MONTHLY_CUMULATIVE_LIMIT + Old status to remove: ERROR_MERCHANT_MONTHLY_CUMULATIVE_LIMIT + 3.1.3 Check status + 3.2.3 Check status 3ds

3.6

2021-01-05

Updates for 3DS 2.X

3.5

2020-12-16

Modify personal data validation for send money methods, especially sender and receiver - firstName, lastName, email. Set minimum length 2 for firstName and lastName. FirstName and lastName cannot be the same and cannot consist of the same characters. One email address cannot be the same within sender and receiver for 2 different personal data.

3.4

2020-12-03

Add new Delayed Payment methods. + 4. Delayed payment

3.3

2020-12-02

New status: CARD_LIMIT_REACHED for Add Card and Add Friend Card methods. Default limits are 5 cards per user and 5 friend cards per user. These values are configured for the merchant, please contact us if you need changes

3.2

2020-11-17

3DS 2.x method introduced in Send money + Card to Card 3D Secure

3.1

2020-10-14

Add new VISA response code value 80

3.0

2020-10-05

Documentation updated. Error CURRENCY_RATES_NOT_FOUND added for send money error statuses.

2.9

2020-07-09

Description of check card’s provided added.

2.8

2020-07-03

Documentation updated. Error ERROR_WHILE_GETTING_COUNTRY_CODE added for Calculate commission method.

2.7

2020-06-03

Documentation updated. Change value and description about field "md" in Initialize and Finalize methods: + 5.2. Initialize + 5.3. Finalize

2.6

2020-05-21

User blocking for entire system operations feature added, new response for login method added. + 8.1. Login

2.5

2020-03-17

Add information about card bin to responses of methods: Get Card List, Get Friend Card List + 10.3. Get card list + 11.4. Get friend card list

2.4

2020-03-05

New response code from Monitoring service added: ERROR_FUNDING_BANK_IS_BLOCKED, ERROR_PAYMENT_BANK_IS_BLOCKED + 3.1.3 Check status + 3.2.3 Check status 3ds

2.3

2020-01-31

Information about certification process added

2.2

2019-10-11

Regular expression added to models + 13. Models

2.1

2019-09-26

New response code from Monitoring service added + 3.1.3 Check status + 3.2.3 Check status 3ds

2.0

2019-09-16

New response code added + 3.1.3 Check status + 3.2.3 Check status 3ds

1.9

2019-09-06

New response code added + 3.1.3 Check status + 3.2.3 Check status 3ds

1.8

2019-07-17

Regexp for Postal code properties in each occurrences was changed

1.7

2019-07-10

ISO-8583 statuses updated

1.6

2019-04-26

Datacenter migration. + Removed fields from here: 9.1 Add user + -acceptMarketing + -acceptTos + -dailyLimit

1.5

2019-03-21

Added new method to check deposit state for CASH_CARD Merchants + 7. Check deposit state

1.4

2019-01-10

Tutorial and FAQ pages added: + 14. FAQ + Tutorial

1.3

2019-01-02

Added new transaction error status: ERROR_MPI_STATUS_TO_LOW: 3.2.3 Response→ 500 INTERNAL SERVER ERROR

1.2

2018-11-27

Documentation updated. Change description about response field "prefix" in: 9.5. Get countries

1.1

2018-11-22

Documentation updated. Added information about errors related to incompatible country codes of User and User’s card for USA or CAN transaction in: 3.1.2. Response→ 200 OK - Error validation, 3.2.2. Response → 200 OK - Error validation.

1.0

2018-06-25

First release of documentation.

2. Introduction

Document describes technical scope of the "Fenige Transfer HUB REST API" i.e. services, which is financial institution that processes credit or debit card payments.

Quick tutorial that may helps you in works with API you can find here: Tutorial

Implementation of Fenige Transfer HUB REST API

Documentation has been prepared for external partners that are willing to cooperate with Fenige and offer MoneySend card-to-card P2P transactions inside their mobile or web applications. The roles of Fenige and Partner in such project are the following:

Partner:

  • can act as Payment Institution in front of Mastercard/Visa and Financial Regulators in the country

  • operates mobile or web application via which customers can initiate MoneySend/Visa Direct transactions

  • collects customer data during transaction and transfers it to Fenige via Rest API for transaction authorization and clearing

  • decides on consumer fees per transaction that are charged by Fenige during transaction

  • receives agreed fees for MoneySend/Visa Direct transactions from Fenige

Fenige:

  • can act as Payment Institution in front of Mastercard/Visa and Financial Regulators in the country

  • operates transaction processing system that enables authorization and clearing of MoneySend/Visa Direct transactions initiated at partner application

  • process transaction and necessary customer data

  • provides Rest API to partner so that partner is able to initiate transaction

  • is responsible for settlement of transactions with issuers of cards provided by customers

  • transfers agreed fees to Partner one per month

High Level Architecture:

High Level Architecture
Figure 1. High Level Architecture

Transaction process:

  1. Consumer registers at partner mobile or web application

  2. Partner collects consumer and card data that are necessary to process transaction

  3. Fenige MoneySend Hub receives transaction data from Partner system

  4. Fenige transfers transaction data to MasterCard network and process responses

  5. Fenige settles transaction with MasterCard

  6. Fenige transfer agreed transaction fees to Partner

Partner can initiate a few optional methods via Fenige hub that enable processing of MoneySend transaction:

  1. Check limits

  2. Calculate commission

  3. Send money

SM PLAIN PLAIN

There are also optional methods that can be used by partners which store card data at Fenige or uPaid systems:

  1. Log user

  2. Verify 3DS

2.1. Endpoints

Environment Endpoint (base url)

Staging

https://java-staging.fenige.pl:8181/

2.2. HTTP verbs

RESTful notes tries to adhere as closely as possible to standard HTTP and REST conventions in its use of HTTP verbs.

Verb Usage

GET

Used to retrieve a resource

POST

Used to create a new resource

PUT

Used to update specific resource

DELETE

Used to delete a resource

2.3. User authentication

Authentication in HUB API is done by basic authentication and two token mechanism.

  1. API-TOKEN - we can use this authentication method when client is integrated only with HUB application.

  2. X-Request-Token, X-Device-ID - this authentication method is using by mobile devices which are in communication with different server.

User authentication

2.4. Language

If you want to select your language, add Accept-Language header to request JSON and set its value to, for example, pl, en, cs or sk. In case of a successful transaction for the send money method you will receive a email confirmation in the language which you set.

Accept-Language

en

2.5. General methods

All api methods require the delivery of appropriate headers.

List of methods headers used in Fenige REST API:

Key Value Validation Description

Content-Type

application/json

Required

Used to indicate the media type of the resource

Content-Type

application/vnd.sendmoney.v2+json

Optional

Used for send-money with multi-currency purpose

Content-Type

application/vnd.sendmoney3ds.v2+json

Optional

Used for send-money-3ds with multi-currency purpose

Content-Type

application/vnd.determine-currencies.v2+json

Optional

Used for determine currencies with multi-currency purpose

Content-Type

application/vnd.calculate-commission.v2+json

Optional

Used for calculate commission with multi-currency purpose

Authorization

Basic dGVzdDp0ZXN0

Required

Used to resolve merchant context of user. Basic Auth from merchant data (merchant name and password). Consist of keyword Basic and string obtained from Base64 coding method for merchant name and password parameter

API-TOKEN

BMT4wKduNftnN3AUkkKnm4BJEqiMKZlcdLiKRtJH9ac=

Optional

Some of the methods require additional authentication. The API-TOKEN is obtained by calling the logUser method. API-TOKEN is valid for 30 minutes

2.6. HTTP status codes

RESTful notes tries to adhere as closely as possible to standard HTTP and REST conventions in its use of HTTP status codes.

Status code Usage

200 OK

The request completed successfully

202 Accepted

The request has been accepted for processing, but the processing has not been completed. The request might or might not eventually be acted upon, as it might be disallowed when processing actually takes place

400 Bad Request

The request was malformed. The response body will include an error providing further information

404 Not Found

The requested resource did not exist

500 Internal Server Error

Message occur when an unexpected condition was encountered

2.7. Mastercard/VISA response code (ISO 8583):

Status code Usage

CODE_00

Approved or completed successfully

CODE_01

Refer to card issuer

CODE_02

Refer to card issuer’s special conditions

CODE_03

Invalid merchant

CODE_04

Pick up card (no fraud)

CODE_05

Do not honor

CODE_06

General error

CODE_07

Pick up card, special condition (fraud account)

CODE_08

Honor with ID

CODE_09

Request in progress

CODE_10

Approved for partial amount

CODE_11

Approved (V.I.P)

CODE_12

Invalid transaction

CODE_13

Invalid amount

CODE_14

Invalid account number (no such number)

CODE_15

No such issuer

CODE_16

Approved, update track 3

CODE_17

Customer cancellation

CODE_18

Customer dispute

CODE_19

Re-enter transaction

CODE_20

Invalid response

CODE_21

No action taken

CODE_22

Suspected malfunction

CODE_23

Unacceptable transaction fee

CODE_24

File update not supported by receiver

CODE_25

Unable to locate record in file

CODE_26

Duplicate file update record, old record replaced

CODE_27

File update field edit error

CODE_28

File update file locked out

CODE_29

File update not successful, contact acquirer

CODE_30

Format error

CODE_31

Bank not supported by switch

CODE_32

Completed partially

CODE_33

Expired card

CODE_34

Suspected fraud

CODE_35

Card acceptor contact acquirer

CODE_36

Restricted card

CODE_37

Card acceptor call acquirer security

CODE_38

Allowable PIN tries exceeded

CODE_39

No credit account

CODE_40

Requested function not supported

CODE_41

Lost card, pick up (fraud account)

CODE_42

No universal account

CODE_43

Stolen card, pick up (fraud account)

CODE_44

No investment account

CODE_51

Not sufficient funds

CODE_52

No checking account

CODE_53

No savings account

CODE_54

Expired card or expiration date is missing

CODE_55

Incorrect PIN or PIN missing

CODE_56

No card record

CODE_57

Transaction not permitted to cardholder

CODE_58

Transaction not permitted to acquirer/terminal

CODE_59

Suspected fraud

CODE_60

Card acceptor contact acquirer

CODE_61

Exceeds withdrawal amount limit

CODE_62

Restricted card (card invalid in this region or country)

CODE_63

Security violation (source is not correct issuer)

CODE_64

Original amount incorrect/Transaction does not fulfill AML requirement

CODE_65

Exceeds withdrawal frequency limit

CODE_66

Card acceptor call acquirer’s security department

CODE_67

Hard capture (requires that card be picked up at ATM)

CODE_68

Response received too late

CODE_70

Contact Card Issuer/PIN data required

CODE_71

PIN Not Changed

CODE_74

Different value than that used for PIN encryption errors

CODE_75

Allowable number of PIN tries exceeded

CODE_76

Invalid/nonexistent “To Account” specified/Unsolicited reversal

CODE_77

Invalid/nonexistent “From Account” specified

CODE_78

Invalid/nonexistent account specified (general)/“Blocked, first used”—Transaction from new cardholder, and card not properly unblocked

CODE_79

Life cycle/Already reversed (by Switch)

CODE_80

System not available/No financial impact

CODE_81

Domestic Debit Transaction Not Allowed (Regional use only)/Cryptographic error found in PIN

CODE_82

Policy (Mastercard use only)/Negative CAM, dCVV, iCVV, or CVV results

CODE_83

Fraud/Security (Mastercard use only)

CODE_84

Invalid Authorization Life Cycle

CODE_85

Not declined/No reason to decline a request for address verification, CVV2 verification, or a credit voucher or merchandise return

CODE_86

PIN Validation not possible

CODE_87

Purchase Amount Only, No Cash Back Allowed

CODE_88

Cryptographic failure

CODE_89

Unacceptable PIN—Transaction Declined—Retry/Ineligible to receive financial position information (GIV)

CODE_90

Cutoff is in process (switch ending a day’s business and starting the next. Transaction can be sent again in a few minutes)

CODE_91

Issuer or switch is inoperative/Issuer or switch inoperative and STIP not applicable or not available for this transaction; Time-out when no stand-in; POS Check Service: Destination unavailable; Credit Voucher and Merchandise Return Authorizations: V.I.P. sent the transaction to the issuer, but the issuer was unavailable.

CODE_92

Financial institution or intermediate network facility cannot be found for routing

CODE_93

Transaction cannot be completed. Violation of law

CODE_94

Duplicate transmission

CODE_95

Reconcile error

CODE_96

System malfunction or certain field error conditions

CODE_A1

Additional customer authentication required

CODE_B1

Surcharge amount not permitted on Visa cards (U.S. acquirers only)

CODE_B2

Surcharge amount not supported by debit network issuer.

CODE_N0

Force STIP

CODE_N3

Cash service not available

CODE_N4

Cashback request exceeds issuer limit or appoved limit

CODE_N5

Ineligible for resubmission

CODE_N7

Decline for CVV2 failure

CODE_N8

Transaction amount exceeds preauthorized approval amount

CODE_P2

Invalid biller information

CODE_P5

Denied PIN unblock—PIN change or unblock request declined by issuer

CODE_P6

Denied PIN change—requested PIN unsafe

CODE_Q1

Card Authentication failed

CODE_R0

Stop payment order

CODE_R1

Revocation of authorization order

CODE_R2

Transaction does not qualify for Visa PIN

CODE_R3

Revocation of all authorizations order

CODE_XA

Forward to issuer

CODE_XD

Forward to issuer

CODE_Z3

Unable to go online

CODE_TBA

Customer ID verification failed

CODE_1A

Additional customer authentication required (Europe Region only)

CODE_6P

Verification Failed (Cardholder Identification does not match issuer records)

2.8. Merchant advice codes

Merchant Advice Codes (MACs) are introduced by Mastercard to clearly communicate to merchants the reason for declining transactions, and the course of action that merchants can take. Occurs only for declined transactions if Mastercard returns this information.

Merchant Advice Code Merchant Advice Code Text

01

New account information available

02

Cannot approve at this time, try again later

03

Do not try again

04

Token not supported

21

Stop recurring payment

24

Retry after 1 hour

25

Retry after 24 hours

26

Retry after 2 days

27

Retry after 4 days

28

Retry after 6 days

29

Retry after 8 days

30

Retry after 10 days

40

Consumer non-reloadable prepaid card

41

Consumer single-use virtual card number

2.9. Response codes

RESTful notes tries to adhere as closely as possible to standard HTTP and REST conventions in its use of HTTP status codes.
Code Messages Http code Http status

S0000

SUCCESS

200

OK

S0001

SUCCESS

204

No Content

S0002

Success transaction

200

OK

S0003

Transaction declined, check response code for reason

200

OK

S0004

PENDING

202

Accepted

S0005

Success reverse transaction

200

OK

S0006

Reverse transaction declined, check response code for reason

200

OK

S0008

Transaction declined.

200

OK

S0010

SUCCESS

200

OK

S0011

Refund declined

200

OK

E0111

Invalid format JSON

422

Unprocessable Entity

E0112

User not exists.

404

Not Found

E0113

User is blocked.

422

Unprocessable Entity

E0114

User is not verified.

422

Unprocessable Entity

E0122

Merchant not exists.

404

Not Found

E0132

Terminal not exists.

404

Not Found

E0136

Merchant not exists.

404

Not Found

E0137

Default terminal not exist

422

Unprocessable Entity

E0150

Transaction rejected

422

Unprocessable Entity

E0151

Transaction rejected, currency not supported

422

Unprocessable Entity

E0152

Transaction rejected, issuer card not supported

422

Unprocessable Entity

E0153

Transaction declined, problem with MIP connection

500

Internal Server Error

E0154

Failed to fetch transaction details

500

Internal Server Error

E0155

Transaction not exist

404

Not Found

E0156

Transaction rejected, terminal not supported 3ds

422

Unprocessable Entity

E0157

Transaction rejected, card not supported 3ds

422

Unprocessable Entity

E0158

Transaction rejected, maximum transaction amount limit exceeded

422

Unprocessable Entity

E0159

Transaction rejected, restricted transaction amount has occurred

422

Unprocessable Entity

E01580

Transaction rejected. Card is expired.

422

Unprocessable Entity

E01581

Transaction rejected. Not found Card Authentication (3DS 2.X)

422

Unprocessable Entity

E01582

Transaction rejected. Card Authentication not match to transaction type (3DS 2.X)

422

Unprocessable Entity

E01583

Transaction rejected. Outside 3ds is required for terminal

422

Unprocessable Entity

E01584

Transaction rejected, 3DS 2.X flow invoked for other card number than specified in the request

422

Unprocessable Entity

E01585

Transaction rejected, Outside 3ds values are not valid for Card Authentication.

422

Unprocessable Entity

E01590

Transaction rejected, cof card not found in db

422

Unprocessable Entity

E01591

Transaction rejected, initial cof transaction not approved

422

Unprocessable Entity

E01592

Transaction rejected, recurring card not found in db

422

Unprocessable Entity

E01593

Transaction rejected, initial recurring transaction not cleared

422

Unprocessable Entity

E01594

Transaction rejected, transactionXId parameter had registered for another transaction

422

Unprocessable Entity

E01596

Transaction rejected, terminal blocks transactions with card issued in given card country

422

Unprocessable Entity

E01598

Transaction rejected, ECI value is not available for card provider

422

Unprocessable Entity

E01599

Transaction declined, processing timeout

500

Internal Server Error

E01600

Transaction rejected, 3DS 2.X flow invoked for other card number than specified in the request

422

Unprocessable Entity

E01601

Transaction rejected, terminal is blocked for provider

422

Unprocessable Entity

E01602

Transaction rejected, geographic scope is not permitted for this transaction

422

Unprocessable Entity

E01603

Transaction rejected, Transactions without 3ds above 30 EUR (the blockade applies only to EU countries)

423

Locked

E01604

Transaction rejected, transactions 3DS 1.X not supported for given country

422

Unprocessable Entity

E01605

Transaction rejected, minimum transaction amount limit exceeded

422

Unprocessable Entity

E01606

Transaction rejected, country of residence is not permitted

422

Unprocessable Entity

E01607

Transaction rejected, internal server error during authorization request generation

422

Unprocessable Entity

E01608

Error validation

422

Unprocessable Entity

E01609

Calculated commission for given UUID is expired or does not exists

422

Unprocessable Entity

E01610

Calculated commission has other values than transaction

422

Unprocessable Entity

E01611

Amount is to small

422

Unprocessable Entity

E01612

Mastercard mac tpe excellence rule

422

Unprocessable Entity

E01613

Error sender country is required for merchant crypto

422

Unprocessable Entity

E01614

Receiver country of residence is required for merchant crypto

422

Unprocessable Entity

E01615

Merchant crypto outside eea uk not supported

422

Unprocessable Entity

E01616

Error phone already exists

422

Unprocessable Entity

E01617

Card with phone number already exists

422

Unprocessable Entity

E01618

Error not authorized

422

Unprocessable Entity

E01619

API token not found

422

Unprocessable Entity

E01620

Error 3DS failed

422

Unprocessable Entity

E01621

Required data not complete

422

Unprocessable Entity

E01622

3DS 2.X flow invoked for other merchant

422

Unprocessable Entity

E01623

Sender card is blocked

422

Unprocessable Entity

E01624

Receiver card is blocked

422

Unprocessable Entity

E01625

Sender user is blocked

422

Unprocessable Entity

E01626

Receiver user is blocked

422

Unprocessable Entity

E01627

Sender bin is blocked

422

Unprocessable Entity

E01628

Receiver bin is blocked

422

Unprocessable Entity

E01631

Funding bank is blocked

422

Unprocessable Entity

E01632

Payment bank is blocked

422

Unprocessable Entity

E01633

Possible soft decline alert

422

Unprocessable Entity

E01634

Error user verification

422

Unprocessable Entity

E01635

Error mail verification

422

Unprocessable Entity

E01636

Error merchant or card country same as receiver bank not permitted

422

Unprocessable Entity

E0160

Reversal of the payment is processing

422

Unprocessable Entity

E0161

Can’t reversal payment

422

Unprocessable Entity

E0162

Payment is already reversed

422

Unprocessable Entity

E0163

Payment is already refunded

422

Unprocessable Entity

E0164

Reversal rejected. Attempts to refund was made.

422

Unprocessable Entity

E0165

Reversal for transaction exists.

409

Conflict

E0166

Reversal rejected. The time for making the reversal has expired.

422

Unprocessable Entity

E0167

Reversal rejected. Reversal amount exceed transaction amount.

422

Unprocessable Entity

E0170

Clearing of the payment is processing

422

Unprocessable Entity

E0171

Can’t clear payment

422

Unprocessable Entity

E0172

Can’t clear payment, the time is over

422

Unprocessable Entity

E0173

Payment is automatically cleared

422

Unprocessable Entity

E0174

Payment is already cleared

422

Unprocessable Entity

E0175

Can’t clear payment, clearing amount is to low

422

Unprocessable Entity

E0176

Can’t clear payment, clearing amount is to high

422

Unprocessable Entity

E0180

Refund rejected, no MC/VISA response

500

Internal Server Error

E0181

Refund rejected by MC/VISA

500

Internal Server Error

E0182

Refund transaction amount to low

400

Bad Request

E0183

Refund transaction amount to high

400

Bad Request

E0184

Transaction is refunded

422

Unprocessable Entity

E0185

Transaction not cleared, can’t refund

422

Unprocessable Entity

E0186

Refund is already processing

422

Unprocessable Entity

E0187

Transaction is chargeback reported

422

Unprocessable Entity

E0188

Refund rejected. Merchant is not active

500

Internal Server Error

E0189

Refund rejected. Transaction was not approved

422

Unprocessable Entity

E00180

Refund rejected. The time for making the return has expired

422

Unprocessable Entity

E0190

Failed to get currency rates

500

Internal Server Error

E0200

Transaction rejected, card is blocked

422

Unprocessable Entity

E0201

Transaction rejected, bin is blocked

422

Unprocessable Entity

E0202

Transaction rejected, terminal is blocked

422

Unprocessable Entity

E0203

Transaction rejected, token is blocked

422

Unprocessable Entity

E0204

Transaction rejected, user is on aml list

422

Unprocessable Entity

E0205

Transaction rejected, bank is blocked

422

Unprocessable Entity

E0206

Transaction rejected, too many reject transactions and card is blocked

422

Unprocessable Entity

E0207

Transaction rejected, too many attempts declined and card is blocked

422

Unprocessable Entity

E0208

Transaction rejected, second transaction with merchant advice code 03 or 21 within 30 days

422

Unprocessable Entity

E0209

Transaction rejected, sender name contains fraudulent phrase.

422

Unprocessable Entity

E0210

Transaction rejected, suspicious sender name.

422

Unprocessable Entity

E0211

Transaction rejected, card country restricted.

422

Unprocessable Entity

E0212

Sender card country restricted

422

Unprocessable Entity

E0213

Receiver card country restricted

422

Unprocessable Entity

E0300

Error mpi V2 - failed internal

500

Internal Server Error

E0301

Three DS Method Data mismatch

422

Unprocessable Entity

E0302

Error on parsing Three DS Method Data

422

Unprocessable Entity

E0303

Card number not Enrolled in 3DS v2

422

Unprocessable Entity

E0304

Invalid card authentication id

422

Unprocessable Entity

E0305

Issuer card is not supported

422

Unprocessable Entity

E0306

Invalid card number

422

Unprocessable Entity

E0307

Card Authentication not found

404

Not Found

E0309

Protocol version is not supported

422

Unprocessable Entity

E0310

Invalid Three DS Method Data

422

Unprocessable Entity

E0400

Failed to get currency for card

500

Internal Server Error

E0401

Issuer card is not supported

422

Unprocessable Entity

E05000

Installment Payment initial not found

500

Internal Server Error

E05001

Installment Payment already confirmed

500

Internal Server Error

E05002

Installment Payment already cancelled

500

Internal Server Error

E05003

Installment Payment already pay in full

500

Internal Server Error

E05004

Installment Payment not confirmed in required time

500

Internal Server Error

E05005

Installment Payment Initial was failed

500

Internal Server Error

E05006

Installment Payment could not find valid installment plan for requested uuid

500

Internal Server Error

E05007

Installment Payment Option not allowed for transaction

500

Internal Server Error

E05008

Installment Payment missing plan uuid

500

Internal Server Error

E05009

Installment Payment missing request number of installments

500

Internal Server Error

E05010

Installment Payment requested number of installments is outside of allowed range

500

Internal Server Error

E05011

Installment Payment operation not allowed, installment type allows ISSUER_FINANCED installments

500

Internal Server Error

E05012

Installment Payment reverse not allowed

500

Internal Server Error

E05013

Installment Payment refund not allowed

500

Internal Server Error

E05014

Installment Payment outside 3ds request is required for terminal

500

Internal Server Error

E05015

Installment Payment unsupported card provider VISA

500

Internal Server Error

E06003

Datacenter card not found

404

Not Found

E06004

Delete of ecommerce card failed, card not found

422

Unprocessable Entity

E06005

Update of ecommerce card failed, card not found

422

Unprocessable Entity

E06007

Exception occurred while trying to add ecommerce card

422

Unprocessable Entity

E7001

Request id is exploited

400

Bad Request

E7002

Service not available

503

Service Unavailable

E8000

Bad Request

400

Bad Request

E8001

Forbidden

403

Forbidden

E8012

Not found

404

Not Found

E8002

Unauthorized

401

Unauthorized

E8003

Scale of amount is different than the scale of currency

422

Unprocessable Entity

E8004

Some operation for this requestUuid is processing

422

Unprocessable Entity

E8009

Merchant RSA keys not found

404

Not Found

E8010

Merchant RSA key expired

422

Unprocessable Entity

E8011

Internal error during card decrypting

500

Internal Server Error

E9000

Domain error

500

Internal Server Error

E9001

Error acquirer connection

503

Service Unavailable

E9002

Error mpi connection

503

Service Unavailable

E9003

Error monitoring connection

503

Service Unavailable

E9010

Error data center connection

503

Service Unavailable

E9800

Error blik connection.

503

Service Unavailable

E9011

Error limit connection

503

Service Unavailable

E9012

Error mms connection

503

Service Unavailable

E10000

Transaction rejected, terminal daily card transaction limit exceeded

422

Unprocessable Entity

E10001

Transaction rejected, terminal daily transaction limit exceeded

422

Unprocessable Entity

E10002

Transaction rejected, terminal monthly transaction limit exceeded

422

Unprocessable Entity

E10003

Transaction rejected, limit exceeded

422

Unprocessable Entity

E10004

Transaction rejected, contractor daily transaction limit exceeded for Mastercard provider

422

Unprocessable Entity

E10005

Transaction rejected, contractor monthly transaction limit exceeded for Mastercard provider

422

Unprocessable Entity

E10006

Transaction rejected, contractor daily transaction limit exceeded for Visa provider

422

Unprocessable Entity

E10007

Transaction rejected, contractor monthly transaction limit exceeded for Visa provider

422

Unprocessable Entity

E10008

Transaction rejected, contractor daily transaction limit exceeded

422

Unprocessable Entity

E10009

Transaction rejected, contractor monthly transaction limit exceeded

422

Unprocessable Entity

E10010

Error single transaction limit

422

Unprocessable Entity

E10011

Error daily transaction limit

422

Unprocessable Entity

E10012

Error weekly transaction limit

422

Unprocessable Entity

E10013

Error daily count transaction limit

422

Unprocessable Entity

E10014

Error monthly transaction limit

422

Unprocessable Entity

E10015

Error monthly count transaction limit

422

Unprocessable Entity

E10016

Error daily cumulative limit

422

Unprocessable Entity

E10017

Error monthly cumulative limit

422

Unprocessable Entity

E10018

Error merchant mastercard daily cumulative limit

422

Unprocessable Entity

E10019

Error merchant mastercard monthly cumulative limit

422

Unprocessable Entity

E10020

Error merchant visa daily cumulative limit

422

Unprocessable Entity

E10021

Error merchant visa monthly cumulative limit

422

Unprocessable Entity

E10022

Error merchant daily cumulative limit

422

Unprocessable Entity

E10023

Error merchant monthly cumulative limit

422

Unprocessable Entity

E11000

Time for processing exceeded.

500

Internal Server Error

E12000

Error occurred during decrypting the message

422

Unprocessable Entity

E13000

Transaction rejected, decision manager score exceeded

422

Unprocessable Entity

E14000

Waiting for receiver timeout

422

Unprocessable Entity

E14001

Error delayed payment not found

422

Unprocessable Entity

E14002

Error delayed payment attempts exceeded

422

Unprocessable Entity

E14003

Error delayed payment receiver not present

422

Unprocessable Entity

E14004

Error delayed payment receiver not specified

422

Unprocessable Entity

E14005

Error delayed payment unexpected exception occurred

422

Unprocessable Entity

E14006

Error delayed payment trx not registered for delayed processing

422

Unprocessable Entity

E14007

Error delayed payment datacenter receiver not found

422

Unprocessable Entity

E14008

Error delayed payment datacenter card not found

422

Unprocessable Entity

E14009

Error delayed payment datacenter adding receiver failed

422

Unprocessable Entity

E14010

Error delayed payment datacenter adding card failed

422

Unprocessable Entity

3. Send money

See a diagrams bellow and notice that CARD-CARD and CASH-CARD flow are not the same.

Mastercard and Visa requires for intra-European Economic Area (EEA), plus United Kingdom, for which EMV 3DS must be used subsequent to a valid authorization soft decline DE39=65 (Mastercard)/1A(Visa).To perform a transaction for which the card has previously received CODE_65-Mastercard, CODE_1A-VISA, the transaction must be processed with full EMV 3DS (3DS 2.x) and the authentication status must be 'Y'.

Correct flow:

  • 3DS 2.x → Challenge → Authentication status Y → Transaction (Recommended)

  • 3DS 2.x(Authentication status A) → Transaction → CODE_65/CODE_1A → 3DS 2.x → Challenge → Authentication status Y → Transaction (Recommended)

  • non3DS → Transaction → CODE_65/CODE_1A → 3DS 2.x → Challenge → Authentication status Y → Transaction (Available only to selected merchants)

soft decline Code 65 EMV 3DS
CARD - CARD

Is apply for: PLAIN-PLAIN, DATACORE-PLAIN, DATACORE-DATACORE, DATACORE-PHONE

SM PLAIN PLAIN
CASH - CARD

Is apply for: CASH-PLAIN, CASH-PHONE

SM CASH CARD
BLIK - CARD

Is apply for: BLIK-PLAIN

SM BLIK CARD

3.1. Card to Card

POST /api/v2/client/send-money Content-Type: application/vnd.sendmoney.v2+json, Authorization: Basic Auth, API-TOKEN*
Innovative technology that allows to send money between cards instantly anywhere in the world. No SWIFT or bank account number needed!
This method is used to MoneySend transaction (funding and payment). To enable users to make transfers in any currency, Fenige introduces the send-money method for
multicurrency.
1 - User by selecting type = SENDER defines amount of funding in given currency. This amount is collected from sender card in selected currency.
2 - User by selecting type = RECEIVER defines amount of payment in given currency. This amount is transferred to receiver card in selected currency.
In case there's need revaluation from one currency to another, system uses lowerRate for situation 1 and higherRate for situation 2.
For more details about specific rates please refer to Currency Rate method.
*API-TOKEN is required for methods: DATACORE-PLAIN, PLAIN-DATACORE, DATACORE-DATACORE, DATACORE-PHONE
The API-TOKEN is refreshed each time it is used in the header. The API-TOKEN is refreshed for 30 minutes.
Please notice that you can choose language of email confirmation of this transaction. It is able by attach proper header to request.
SM MULTI CURRENCY
The success of the multicurrency send-money transaction depends primarily on the correctness of the merchant's currency configuration which is done by the admin. To make transactions in a currency other than the currency of the card, contact the admin.
In order to provide users with the ability to safely retry transaction (for example to request for an undelivered response), the v2 of API supports idempotent send money multi-currency operation.

From January 2021, there is an internal functionality to restrict access for the Merchant to specific method. The Fenige employee can disable access to a given endpoint, then the HTTP status 403 FORBIDDEN will be returned. The Merchant will be informed about each access restriction action.

When performing authorization, remember that there are currencies with different number of decimal places. For example: VND has no pennies and KWD has three decimal places. Please take this into account in the Amout field. For more information on other currencies, see ISO 4217.

3.1.1. Request

Request fields

Table 1. Multicurrency
Path Type Validation Rule Description

amount

Number

Required

@NotNull, positive

The total transfer amount (in pennies)

cvc2

String

Required

@Length(min = 3, max = 3)

Sender card cvc2/cvv2

merchantUrl

String

Required except CASH-PLAIN transactions.

@NotNull except CASH-PLAIN

Merchant identifier such as the business website URL or reverse domain name as presented to the consumer during checkout

addressIp

String

Required except CASH-PLAIN transactions @Must conform to the IPv4 or IPv6 standard.

@NotNull except CASH-PLAIN

The IP address of the order of transaction.

type

String

Required

@NotNull

Transaction in 'SENDER' or 'RECEIVER' currency, for specific transaction type. CARD_CARD: above, CASH_CARD: RECEIVER, CARD_CASH: SENDER.

requestId

String

Required

@NotNull

128 bit number generated by the user, used to identify single transaction. Ensures that the transaction with the given parameter is processed only once.

transactionId

String

Optional

@Length(max = 64)

The transactionId field is used for the Merchant to send its own internal transaction identifier. This field is returned in the response from the Check status method and sent by the Webhooks method.

sender

Object

Required

@NotNull

Sender PLAIN Sender CASH Sender DATACORE Sender BLIK

receiver

Object

Required

@NotNull

Receiver PLAIN Receiver CASH Receiver DATACORE Receiver PHONE

Example HTTP Request
PLAIN-PLAIN
POST /api/v2/client/send-money HTTP/1.1
Content-Type: application/vnd.sendmoney.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 877
Host: java-staging.fenige.pl:8181

{
  "amount" : 1000,
  "cvc2" : "123",
  "merchantUrl" : "https://fenige.pl/payments",
  "addressIp" : "192.168.0.1",
  "type" : "SENDER",
  "requestId" : "a0a9e5a1-3e88-4329-bf18-f811ecfedb74",
  "transactionId" : "TRX220132AM",
  "sender" : {
    "type" : "PLAIN",
    "firstName" : "Mark",
    "lastName" : "Smith",
    "street" : "Olszewskiego",
    "houseNumber" : "17A",
    "city" : "Lublin",
    "postalCode" : "20-400",
    "flatNumber" : "2",
    "email" : "senderEmail@fenige.pl",
    "birthDate" : "2024-03-28",
    "cardNumber" : "5117964247989169",
    "expirationDate" : "03/26",
    "personalId" : "AGC688910",
    "currency" : "PLN"
  },
  "receiver" : {
    "type" : "PLAIN",
    "firstName" : "Rob",
    "lastName" : "Wring",
    "birthDate" : "2024-03-28",
    "cardNumber" : "5117964247989169",
    "currency" : "PLN",
    "countryOfResidence" : "PL"
  }
}
PLAIN-DATACORE
POST /api/v2/client/send-money HTTP/1.1
Content-Type: application/vnd.sendmoney.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
API-TOKEN: d94NYa+xqRrazUPzSgYeJ6qR/MzIOb3IzePb7t9sWds=
Content-Length: 903
Host: java-staging.fenige.pl:8181

{
  "amount" : 1000,
  "cvc2" : "123",
  "merchantUrl" : "https://fenige.pl/payments",
  "addressIp" : "192.168.0.1",
  "type" : "SENDER",
  "requestId" : "5d01c425-9cd6-4753-a7a0-1081967c2d98",
  "transactionId" : "TRX220132AM",
  "sender" : {
    "type" : "PLAIN",
    "firstName" : "Mark",
    "lastName" : "Smith",
    "street" : "Olszewskiego",
    "houseNumber" : "17A",
    "city" : "Lublin",
    "postalCode" : "20-400",
    "flatNumber" : "2",
    "email" : "senderEmail@fenige.pl",
    "birthDate" : "2024-03-28",
    "cardNumber" : "5117964247989169",
    "expirationDate" : "03/26",
    "personalId" : "AGC688910",
    "currency" : "PLN"
  },
  "receiver" : {
    "type" : "DATACORE",
    "firstName" : "Rob",
    "lastName" : "Wring",
    "email" : "receiverEmail@fenige.pl",
    "birthDate" : "2024-03-28",
    "cardId" : 1234,
    "currency" : "PLN",
    "countryOfResidence" : "PL"
  }
}
DATACORE-PLAIN
POST /api/v2/client/send-money HTTP/1.1
Content-Type: application/vnd.sendmoney.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
API-TOKEN: d94NYa+xqRrazUPzSgYeJ6qR/MzIOb3IzePb7t9sWds=
Content-Length: 798
Host: java-staging.fenige.pl:8181

{
  "amount" : 1000,
  "cvc2" : "123",
  "merchantUrl" : "https://fenige.pl/payments",
  "addressIp" : "192.168.0.1",
  "type" : "SENDER",
  "requestId" : "686bf598-5658-488e-9e69-13ceb1d86e2b",
  "transactionId" : "TRX220132AM",
  "sender" : {
    "type" : "DATACORE",
    "firstName" : "Mark",
    "lastName" : "Smith",
    "street" : "Olszewskiego",
    "houseNumber" : "17A",
    "city" : "Lublin",
    "postalCode" : "20-400",
    "flatNumber" : "2",
    "email" : "senderEmail@fenige.pl",
    "birthDate" : "2024-03-28",
    "cardId" : 1234,
    "currency" : "PLN"
  },
  "receiver" : {
    "type" : "PLAIN",
    "firstName" : "Rob",
    "lastName" : "Wring",
    "birthDate" : "2024-03-28",
    "cardNumber" : "5117964247989169",
    "currency" : "PLN",
    "countryOfResidence" : "PL"
  }
}
DATACORE-DATACORE
POST /api/v2/client/send-money HTTP/1.1
Content-Type: application/vnd.sendmoney.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
API-TOKEN: d94NYa+xqRrazUPzSgYeJ6qR/MzIOb3IzePb7t9sWds=
Content-Length: 824
Host: java-staging.fenige.pl:8181

{
  "amount" : 1000,
  "cvc2" : "123",
  "merchantUrl" : "https://fenige.pl/payments",
  "addressIp" : "192.168.0.1",
  "type" : "SENDER",
  "requestId" : "0a5c3dc5-0d95-432c-b73d-0564ae599e9f",
  "transactionId" : "TRX220132AM",
  "sender" : {
    "type" : "DATACORE",
    "firstName" : "Mark",
    "lastName" : "Smith",
    "street" : "Olszewskiego",
    "houseNumber" : "17A",
    "city" : "Lublin",
    "postalCode" : "20-400",
    "flatNumber" : "2",
    "email" : "senderEmail@fenige.pl",
    "birthDate" : "2024-03-28",
    "cardId" : 1234,
    "currency" : "PLN"
  },
  "receiver" : {
    "type" : "DATACORE",
    "firstName" : "Rob",
    "lastName" : "Wring",
    "email" : "receiverEmail@fenige.pl",
    "birthDate" : "2024-03-28",
    "cardId" : 1234,
    "currency" : "PLN",
    "countryOfResidence" : "PL"
  }
}
DATACORE-PHONE
POST /api/v2/client/send-money HTTP/1.1
Content-Type: application/vnd.sendmoney.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
API-TOKEN: d94NYa+xqRrazUPzSgYeJ6qR/MzIOb3IzePb7t9sWds=
Content-Length: 794
Host: java-staging.fenige.pl:8181

{
  "amount" : 1000,
  "cvc2" : "123",
  "merchantUrl" : "https://fenige.pl/payments",
  "addressIp" : "192.168.0.1",
  "type" : "SENDER",
  "requestId" : "d7eb82ae-fb68-42ba-b7f2-586bf1c5e8fb",
  "transactionId" : "TRX220132AM",
  "sender" : {
    "type" : "DATACORE",
    "firstName" : "Mark",
    "lastName" : "Smith",
    "street" : "Olszewskiego",
    "houseNumber" : "17A",
    "city" : "Lublin",
    "postalCode" : "20-400",
    "flatNumber" : "2",
    "email" : "senderEmail@fenige.pl",
    "birthDate" : "2024-03-28",
    "cardId" : 1234,
    "currency" : "PLN"
  },
  "receiver" : {
    "type" : "PHONE",
    "firstName" : "Rob",
    "lastName" : "Wring",
    "birthDate" : "2024-03-28",
    "phoneNumber" : "48123777619",
    "currency" : "PLN",
    "countryOfResidence" : "PL"
  }
}
SM DATACORE PHONE

3.1.2. Response

Response status
Status Description

200 OK - Error validation

Returned list of field name which has validation errors.

202 Accepted

- Returned when the transaction with the provided requestId has been registered in the system, but has not yet been completed. The user can retry in a few seconds to get the transaction result. Response body: Empty
or
- Returned order-id when transaction will be processed.

400 Bad Request

Returned e.g. when a different transaction with the provided requestId has already been registered in the system.

401 Unauthorized

Returned when API-TOKEN was broken.

Example HTTP Response
202 Accepted
HTTP/1.1 202 Accepted
Content-Type: application/json
Content-Length: 56

{
  "orderId" : "e6be602a-40c6-4383-b110-a1d71d629d07"
}

Response fields

Path Type Description

orderId

String

Unique transaction identifier

400 Bad request
HTTP/1.1 400 Bad Request
Content-Type: application/json
Content-Length: 104

{
  "error" : {
    "message" : "Another transaction with the same id has already been processed."
  }
}
200 OK - Error validation
HTTP/1.1 200 OK
Content-Type: application/json;charset=ISO-8859-1

{
	"status": "ERROR_VALIDATION",
	"error": {
		"message": "Some information is missing or incorrect.",
		"errors": [{
				"field": "requestId",
				"message": [
					"may not be null"
				]
			},
			{
				"field": "cvc2",
				"message": [
					"may not be null",
					"length must be 3"
				]
			},
			{
				"field": "type",
				"message": [
					"may not be null"
				]
			},
			{
				"field": "amount",
				"message": [
					"may not be null"
				]
			},
			{
				"field": "sender",
				"message": [
					"may not be null"
				]
			},
			{
				"field": "sender.cardNumber",
				"message": [
					"may not be null",
					"may not be empty",
					"card number length must be 16"
				]
			},
			{
				"field": "sender.expirationDate",
				"message": [
					"invalid card expiration date",
					"may not be null",
					"may not be empty"
				]
			},
			{
				"field": "sender.city",
				"message": [
					"may not be empty",
					"may not be null",
					"length must be between 1 and 25"
				]
			},
			{
				"field": "sender.street",
				"message": [
					"may not be null",
					"may not be empty",
					"length must be between 1 and 50"
				]
			},
            {
				"field": "sender.postalCode",
				"message": [
					"may not be empty",
					"may not be null",
					"length must be between 1 and 10"
				]
			},
            {
                "field": "sender.flatNumber",
                "message": [
                    "must be null",
                    "length must be between 0 and 5"
                ]
            },
			{
				"field": "sender.lastName",
				"message": [
					"may not be empty",
					"may not be null",
					"length must be between 2 and 35"
				]
			},
			{
				"field": "sender.houseNumber",
				"message": [
					"may not be empty",
					"may not be null",
					"length must be between 1 and 10",
                    "must match the expression: [1-9][0-9]{0,4}(?:[A-z]?[0-9]{0,4})?((?:[-/ ][1-9]?[A-z]?[0-9]{0,4})*[A-z]?)?$"
				]
			},
			{
				"field": "sender.firstName",
				"message": [
					"may not be empty",
					"may not be null",
					"length must be between 2 and 35"
				]
			},
            {
				"field": "sender.email",
				"message": [
					"may not be empty",
					"may not be null",
					"not a well-formed email address",
					"lenght must be beetween 1 and 128"
				]
			},
			{
				"field": "receiver",
				"message": [
					"may not be null"
				]
			},
			{
				"field": "receiver.firstName",
				"message": [
					"may not be empty",
					"may not be null",
					"length must be between 2 and 35"
				]
			},
			{
				"field": "receiver.lastName",
				"message": [
					"may not be empty",
					"may not be null",
					"length must be between 2 and 35"
				]
			},
			{
				"field": "receiver.currency",
				"message": [
					"may not be null"
				]
			},
			{
				"field": "receiver.cardNumber",
				"message": [
					"may not be null",
					"may not be empty",
					"card number length must be 16"
				]
			},
			{
                "field": "sender",
                "message": [
                     "province is mandatory only if country code is US or CA"
                ]
            },
            {
                "field": "sender.province",
                "message": [
                      "is not correct province code for country code US",
                      "may not be null"
                ]
            },
            {
                "field": "sender.province",
                 "message": [
                       "may not be null",
                       "is not correct province code for country code CA"
                 ]
            },
            {
                 "field": "sender.province",
                 "message": [
                        "must match ^[A-Z]{2}$",
                        "is not correct province code for country code US"
                 ]
            },
            {
                 "field": "sender.currency",
                 "message": [
                       "Currency is not supported"
                ]
            },
            {
                 "field": "receiver.currency",
                 "message": [
                       "Currency is not supported"
                ]
            }
		]
	}
}
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "ERROR_API_TOKEN_NOT_FOUND",
    "error": {
        "message": "API-TOKEN header not found in request with DATACORE/PHONE model in sender or receiver."
    }
}
401 UNAUTHORIZED
HTTP/1.1 401 Unauthorized
Content-Type: application/json

{
      "timestamp": "2021-12-22T12:39:53.168+0000",
      "status": 401,
      "error": "Unauthorized",
      "message": "Username or password is not correct",
      "path": "/api/v2/client/send-money"
}
HTTP/1.1 401 Unauthorized
Content-Type: application/json

{
      "timestamp": "2021-12-22T12:39:53.168+0000",
      "status": 401,
      "error": "Unauthorized",
      "message": "ERROR_USER_NOTFOUND",
      "path": "/api/v2/client/send-money"
}
Table 2. Response fields
Path Description

timestamp

Time when request was executed

status

Http response code

error

Http status name

message

Message for response code

path

Path to a specific resource

403 FORBIDDEN
HTTP Response - Error
HTTP/1.1 403 Forbidden
Content-Type: application/json

{
    "timestamp": 1610464313387,
    "status": 403,
    "error": "Forbidden",
    "message": "No message available",
    "path": "/client/send-money-3ds"
}

3.1.3. Check status

GET /client/send-money/{orderId}, Authentication: Basic Auth
The method allows obtaining a status of multi-currency transaction specified by order-id. Parameter order-id was returned in the previous step (Send money multicurrency).

From January 2021, there is an internal functionality to restrict access for the Merchant to specific method. The Fenige employee can disable access to a given endpoint, then the HTTP status 403 FORBIDDEN will be returned. The Merchant will be informed about each access restriction action.

Request
Table 3. /client/send-money/{orderId}
Parameter Description

orderId

Unique transaction identifier.

GET /client/send-money/00549d98-08cb-45d2-8673-4dcafa81f498 HTTP/1.1
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Host: java-staging.fenige.pl:8181
Response
Response status
Status Description

200 OK

Returned if the transaction completes successfully.

203 NON-AUTHORITATIVE INFORMATION

Returned when transaction was registered for processing. Check status in a while.

500 INTERNAL SERVER ERROR

Returned when user provides wrong order-id or transaction was failed or was Declined.

Example HTTP Response
200 OK
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1123

{
  "transactionId" : "TRX220132AM",
  "amount" : 1000,
  "amountInUsDollar" : 268,
  "bigDecimalAmount" : 10.0,
  "commission" : 200,
  "bigDecimalCommission" : 2.0,
  "orderId" : "00549d98-08cb-45d2-8673-4dcafa81f498",
  "createdDate" : "03-04-2018, 14:01",
  "fundingRrn" : "014011103023",
  "paymentRrn" : "014011103024",
  "arn" : "05411640143500000019325",
  "3DS" : true,
  "revaluationResult" : {
    "revaluationFundingAmount" : 1000,
    "bigDecimalRevaluationFundingAmount" : 10.0,
    "fundingCurrency" : "PLN",
    "revaluationPaymentAmount" : 1000,
    "bigDecimalRevaluationPaymentAmount" : 10.0,
    "paymentCurrency" : "PLN",
    "determineCurrencyRate" : {
      "from" : "PLN",
      "to" : "PLN",
      "currencyRate" : "1"
    }
  },
  "receiver" : {
    "firstName" : "John",
    "lastName" : "Novak",
    "provider" : "MASTERCARD",
    "hiddenCardNumber" : "557455******1623",
    "bankName" : "Alior Bank SA"
  },
  "sender" : {
    "firstName" : "Caroline",
    "lastName" : "Novak",
    "provider" : "MASTERCARD",
    "hiddenCardNumber" : "511796******9169",
    "bankName" : "Alior Bank SA"
  }
}

Response fields

Path Type Description

amount

Number

Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100]

amountInUsDollar

Number

Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100]

bigDecimalAmount

Number

Field informing about the amount of cash transferred with decimal precision.

commission

Number

This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100]

bigDecimalCommission

Number

This is the amount of commission that was added to the transaction at 0.01 currency.

orderId

String

Unique transaction identifier.

transactionId

String

The transactionId field is used for the Merchant to send its own internal transaction identifier. This field is returned in the response from the Check status method and sent by the Webhooks method. @Length(max = 64). Optional

createdDate

String

Date of transaction.

fundingRrn

String

Funding Retrieval Reference Number.

paymentRrn

String

Payment Retrieval Reference Number.

arn

String

Acquirer Reference Number

3DS

Boolean

Value: true/false determines if transaction was processed with 3ds

revaluationResult

Object (RevaluationResult)

Detailed information about revaluation between sender currency and receiver currency.

receiver

Object

Personal data of the person to whom the transfer is addressed.

sender

Object

Personal data of the person who performs the transfer of cash.

RevaluationResult

Path Type Description

revaluationFundingAmount

Long

Amount (in pennies) of funding transaction in fundingCurrency

bigDecimalRevaluationFundingAmount

BigDecimal

Amount of funding transaction in fundingCurrency

fundingCurrency

String

Currency code the same as sender’s card currency

revaluationPaymentAmount

Long

Amount (in pennies) of payment transaction in paymentCurrency

bigDecimalRevaluationPaymentAmount

BigDecimal

Amount of payment transaction in paymentCurrency

paymentCurrency

String

Currency code the same as receiver’s card currency

determineCurrencyRate

Object (DetermineCurrencyRate)

Details about conversion

DetermineCurrencyRate

Path Type Description

from

Long

Currency which was conversion from

to

Long

Resulted currency

currencyRate

BigDecimal

Currency rate

203 NON-AUTHORITATIVE INFORMATION
HTTP/1.1 203 Non-Authoritative Information

After you get 203 you need to check status in a while because we processing this transaction and if you don’t get a response (200 - succeeded or 500 - declined) within 60 seconds then please contact us.

500 INTERNAL SERVER ERROR
HTTP/1.1 500 Internal Server Error
Content-Type: text/plain;charset=ISO-8859-1

PAYMENT_TRANSACTION_DECLINED:CODE_05

After receiving these statuses, the transaction was rejected

Error statuses

Name Description

FUNDING_TRANSACTION_DECLINED:CODE_XX, PAYMENT_TRANSACTION_DECLINED:CODE_XX

CODE_XX - is MasterCard response code (ISO 8583)

ISSUER_NOT_SUPPORTED

This card is not supported

ERROR_CARD_IS_BLOCKED

Card is blocked for 1 hour in Fenige

ERROR_USER_IS_BLOCKED

User is blocked in Fenige

ERROR_BIN_IS_BLOCKED

Bin is blocked for 1 hour in Fenige

ERROR_FUNDING_BANK_IS_BLOCKED

Funding bank is blocked in Fenige

ERROR_PAYMENT_BANK_IS_BLOCKED

Payment bank is blocked in Fenige

FUNDING_TRANSACTION_DECLINED:ACQ_ERROR [only for CARD-CARD]

Funding transaction was declined and payment not send

PAYMENT_TRANSACTION_DECLINED:ACQ_ERROR

Payment transaction was declined and funding was reversed

ERROR_ACQ_CONNECTION

A connection error occurred to Acquirer service

AML_ERROR

User was found on the stop list

NETWORK_ERROR

Acceptance network is unavailable

CURRENCY_RATES_NOT_FOUND

No currently effective rates found in the database

CURRENCY_NOT_SUPPORTED

Currency is not supported

MERCHANT_CURRENCY_NOT_SUPPORTED

Currency is not supported by Merchant

ERROR_SINGLE_TRANSACTION_LIMIT

Transaction limit for single transaction exceeded

ERROR_DAILY_TRANSACTION_LIMIT

Daily transaction limit for amount per card exceeded

ERROR_DAILY_COUNT_TRANSACTION_LIMIT

Daily transaction limit for count per card exceeded

ERROR_WEEKLY_TRANSACTION_LIMIT

Weekly transaction limit for amount per card exceeded

ERROR_MONTHLY_TRANSACTION_LIMIT

Monthly transaction limit for amount per card exceeded

ERROR_MONTHLY_COUNT_TRANSACTION_LIMIT

Monthly transaction limit for count per card exceeded

ERROR_DAILY_CUMULATIVE_LIMIT

Daily cumulative limit per card was exceeded

ERROR_MONTHLY_CUMULATIVE_LIMIT

Monthly cumulative limit per card was exceeded

ERROR_MERCHANT_MASTERCARD_DAILY_CUMULATIVE_LIMIT

Daily cumulative limit per merchant transactions using mastercard cards was exceeded

ERROR_MERCHANT_MASTERCARD_MONTHLY_CUMULATIVE_LIMIT

Monthly cumulative limit per merchant transactions using mastercard cards was exceeded

ERROR_MERCHANT_VISA_DAILY_CUMULATIVE_LIMIT

Daily cumulative limit per merchant transactions using visa cards was exceeded

ERROR_MERCHANT_VISA_MONTHLY_CUMULATIVE_LIMIT

Monthly cumulative limit per merchant transactions using visa cards was exceeded

ERROR_MERCHANT_DAILY_CUMULATIVE_LIMIT

Daily cumulative limit per merchant transactions using mastercard and visa cards was exceeded

ERROR_MERCHANT_MONTHLY_CUMULATIVE_LIMIT

Monthly cumulative limit per merchant transactions using mastercard and visa cards was exceeded

ERROR_SENDER_CARD_IS_BLOCKED [only for CARD-CARD]

Sender’s card is blocked

ERROR_RECEIVER_CARD_IS_BLOCKED

Receiver’s card is blocked

ERROR_SENDER_USER_IS_BLOCKED [only for CARD-CARD]

User acting as sender is blocked

ERROR_RECEIVER_USER_IS_BLOCKED

User acting as receiver is blocked

ERROR_SENDER_BIN_IS_BLOCKED [only for CARD-CARD]

BIN of sender’s card is blocked

ERROR_RECEIVER_BIN_IS_BLOCKED

BIN of receiver’s card is blocked

ERROR_AMOUNT_IS_BLOCKED

Amount is higher than acceptable limit

ERROR_MONITORING_CONNECTION

Couldn’t established connection to Monitoring service

ERROR_MONITORING

Some unrecognized error occurred

ERROR_USER_VERIFICATION

The transaction user’s personal data verified as incorrect on the verification service. Transaction rejected.

FUNDING_TRANSACTION_DECLINED:MIP_RESPONSE_TIMEOUT [only for CARD-CARD]

Funding transaction declined - mip response timeout

PAYMENT_TRANSACTION_DECLINED:MIP_RESPONSE_TIMEOUT

Payment transaction declined - mip response timeout

FUNDING_TRANSACTION_DECLINED:NEED_MANUAL_VERIFICATION [only for CARD-CARD]

Funding process failed and it is need to manual verification of transaction

PAYMENT_TRANSACTION_DECLINED:NEED_MANUAL_VERIFICATION

Payment process failed and it is need to manual verification of transaction

FUNDING_TRANSACTION_DECLINED:MIP_PROXY_RESPONSE_TIMEOUT [only for CARD-CARD]

Funding transaction declined - mip_proxy response timeout

PAYMENT_TRANSACTION_DECLINED:MIP_PROXY_RESPONSE_TIMEOUT

Payment transaction declined - mip_proxy response timeout

REJECTED [only for CASH-CARD]

Amount exceeds current merchant deposit limit

ERROR_TRANSACTION_NOT_FOUND

Error transaction not exists

ERROR_CARD_NOT_FOUND

Card was not found

ERROR_DATACORE_CONNECTION

Problem with DC

ERROR_SOMETHING_WRONG

ERROR_SOMETHING_WRONG returned when the check status method is executed means that the details for the indicated transaction could not be retrieved correctly due to an unexpected error. This does not mean that the transaction was rejected by our system. In case of receiving ERROR_SOMETHING_WRONG status, please do not hesitate to notify our support team in order to determine the correctness of the transaction execution and quickly correct the method error.

ERROR_WHILE_VALIDATING_CARD_COUNTRY_CODE_AND_USER_COUNTRY_CODE_FOR_PLAIN

This error may occur if card’s country is other than user’s country for USA or CAN transaction for PLAIN model

ERROR_WHILE_VALIDATING_CARD_COUNTRY_CODE_AND_USER_COUNTRY_CODE

This error may occur if card’s country is other than user’s country for USA or CAN transaction

ERROR_WHILE_GETTING_COUNTRY_CODE

This error may occur when system could not get card country code. Most often, the error is caused by a missing card in the parameters received from the card provider.

ERROR_WHILE_VALIDATING_PROVINCE_NOT_CORRECT_PROVINCE_CODE

Province code is not valid for USA or CAN transactions. Please update user profile

ERROR_VALIDATION

Some validation error occurred

ERROR_VALIDATION Sender type violates merchant model

This error may occur when merchant tries to make transaction in other model than assigned primarily. For example, if merchant’s model is set as CARD-CARD and then merchant will try to make transaction in CASH-CARD model, will receive error as bellow.

ERROR_VALIDATION_EXPIRY_DATE

Card expired

AMOUNT_IS_TOO_SMALL

The amount sent is too small. Enter a larger amount.

AMOUNT_IS_TOO_HIGH

The amount sent is too high. Enter a lower amount.

ERROR_MERCHANT_FUNDING_CARD_COUNTRY_RESTRICTED

Restricted funding card country was used. + This error may occur when a merchant uses a sender card issued in a country that is on the list of countries High Risk or country not allowed to perform transactions in Fenige API. Please contact support.

ERROR_MERCHANT_PAYMENT_CARD_COUNTRY_RESTRICTED

Restricted payment card country was used. + This error may occur when a merchant uses a sender card issued in a country that is on the list of countries High Risk or country not allowed to perform transactions in Fenige API. Please contact support.

ERROR_MERCHANT_NOT_SUPPORT_CARD_PROVIDER

Merchant not support the given card provider, please contact support to check merchant configuration

MERCHANT_CRYPTO_OUTSIDE_EEA_UK_NOT_SUPPORTED

Merchant crypto is not supported outside EEA+UK

ERROR_PAYMENT_CARD_COUNTRY_RESTRICTED

System does not allow the execution of transaction with the receiver card country.

ERROR_FUNDING_CARD_COUNTRY_RESTRICTED

System does not allow the execution of transaction with the sender card country.

ERROR_TRANSACTION_GEOGRAPHIC_SCOPE_BLOCKED

Geographic scope is not permitted for this transaction

ERROR_TRANSACTION_PROCESSING_TIME_TOO_LONG

Processing time of transaction was too long, transaction is declined.

MASTERCARD_MAC_TPE_EXCELLENCE_RULE

Transaction rejected, second transaction with merchant advice code 03 or 21 within 30 days.

INCORRECT_NAME_DATA

Transaction rejected, sender or receiver name contains fraudulent phrase.

ERROR_NAME_VERIFICATION

Transaction rejected, suspicious sender or receiver name.

ERROR_TRANSACTION_REJECTED_COUNTRY_OF_RESIDENCE_NOT_PERMITTED

Transaction rejected, card country is not supported for merchants crypto.

3.1.4. Check detailed status

GET /client/send-money/details/{orderId}, Authentication: Basic Auth
    The method allows obtaining a detailed status of multi-currency transaction specified by order-id. Parameter order-id was returned in the previous step (Send money
multicurrency).

From January 2021, there is an internal functionality to restrict access for the Merchant to specific method. The Fenige employee can disable access to a given endpoint, then the HTTP status 403 FORBIDDEN will be returned. The Merchant will be informed about each access restriction action.

Request
Table 4. /client/send-money/details/{orderId}
Parameter Description

orderId

Unique transaction identifier.

GET /client/send-money/details/00549d98-08cb-45d2-8673-4dcafa81f498 HTTP/1.1
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Host: java-staging.fenige.pl:8181
Response
Response status
Status Description

200 OK

Returned if the transaction completes successfully.

203 NON-AUTHORITATIVE INFORMATION

Returned when transaction was registered for processing. Check status in a while.

404 NOT FOUND

Returned when a transaction related to the given orderId doesn’t exist.

422 UNPROCESSABLE ENTITY

Returned when user provides wrong order-id or transaction was failed or was Declined.

500 INTERNAL SERVER ERROR

Returned when an internal error occur.

Example HTTP Response
200 OK
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1159

{
  "transactionId" : "TRX220132AM",
  "amount" : 1000,
  "amountInUsDollar" : 268,
  "bigDecimalAmount" : 10.0,
  "commission" : 200,
  "bigDecimalCommission" : 2.0,
  "orderId" : "00549d98-08cb-45d2-8673-4dcafa81f498",
  "createdDate" : "03-04-2018, 14:01",
  "fundingRrn" : "014011103023",
  "paymentRrn" : "014011103024",
  "arn" : "05411640143500000019325",
  "3DS" : true,
  "revaluationResult" : {
    "revaluationFundingAmount" : 1000,
    "bigDecimalRevaluationFundingAmount" : 10.0,
    "fundingCurrency" : "PLN",
    "revaluationPaymentAmount" : 1000,
    "bigDecimalRevaluationPaymentAmount" : 10.0,
    "paymentCurrency" : "PLN",
    "determineCurrencyRate" : {
      "from" : "PLN",
      "to" : "PLN",
      "currencyRate" : "1"
    }
  },
  "receiver" : {
    "firstName" : "John",
    "lastName" : "Novak",
    "provider" : "MASTERCARD",
    "hiddenCardNumber" : "557455******1623",
    "bankName" : "Alior Bank SA"
  },
  "sender" : {
    "firstName" : "Caroline",
    "lastName" : "Novak",
    "provider" : "MASTERCARD",
    "hiddenCardNumber" : "511796******9169",
    "bankName" : "Alior Bank SA"
  },
  "transactionStatus" : "APPROVED"
}

Response fields

Path Type Description

amount

Number

Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100]

amountInUsDollar

Number

Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100]

bigDecimalAmount

Number

Field informing about the amount of cash transferred with decimal precision.

commission

Number

This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100]

bigDecimalCommission

Number

This is the amount of commission that was added to the transaction at 0.01 currency.

orderId

String

Unique transaction identifier.

transactionId

String

The transactionId field is used for the Merchant to send its own internal transaction identifier. This field is returned in the response from the Check status method and sent by the Webhooks method. @Length(max = 64). Optional

createdDate

String

Date of transaction.

fundingRrn

String

Funding Retrieval Reference Number.

paymentRrn

String

Payment Retrieval Reference Number.

arn

String

Acquirer Reference Number

3DS

Boolean

Value: true/false determines if transaction was processed with 3ds

revaluationResult

Object (RevaluationResult)

Detailed information about revaluation between sender currency and receiver currency.

receiver

Object

Personal data of the person to whom the transfer is addressed.

sender

Object

Personal data of the person who performs the transfer of cash.

transactionStatus

String

Status of the transaction (PENDING, APPROVED, DECLINED, REJECTED, REVERSED)

RevaluationResult

Path Type Description

revaluationFundingAmount

Long

Amount (in pennies) of funding transaction in fundingCurrency

bigDecimalRevaluationFundingAmount

BigDecimal

Amount of funding transaction in fundingCurrency

fundingCurrency

String

Currency code the same as sender’s card currency

revaluationPaymentAmount

Long

Amount (in pennies) of payment transaction in paymentCurrency

bigDecimalRevaluationPaymentAmount

BigDecimal

Amount of payment transaction in paymentCurrency

paymentCurrency

String

Currency code the same as receiver’s card currency

determineCurrencyRate

Object (DetermineCurrencyRate)

Details about conversion

DetermineCurrencyRate

Path Type Description

from

Long

Currency which was conversion from

to

Long

Resulted currency

currencyRate

BigDecimal

Currency rate

203 NON-AUTHORITATIVE INFORMATION
HTTP/1.1 203 Non-Authoritative Information

After you get 203 you need to check status in a while because we processing this transaction and if you don’t get a response (200 - succeeded or 500 - declined) within 60 seconds then please contact us.

404 NOT FOUND
HTTP/1.1 404 Not Found
Content-Type: application/json
Content-Length: 51

{
  "errorStatus" : "ERROR_TRANSACTION_NOT_FOUND"
}

Response fields

Path Type Description

errorStatus

String

Additional data of the error occurred during a processing of the request

422 UNPROCESSABLE ENTITY
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json
Content-Length: 1287

{
  "transactionId" : "TRX220132AM",
  "amount" : 1000,
  "amountInUsDollar" : 268,
  "bigDecimalAmount" : 10.0,
  "commission" : 200,
  "bigDecimalCommission" : 2.0,
  "orderId" : "00549d98-08cb-45d2-8673-4dcafa81f498",
  "createdDate" : "03-04-2018, 14:01",
  "fundingRrn" : "014011103023",
  "paymentRrn" : "014011103024",
  "arn" : "05411640143500000019325",
  "3DS" : true,
  "revaluationResult" : {
    "revaluationFundingAmount" : 1000,
    "bigDecimalRevaluationFundingAmount" : 10.0,
    "fundingCurrency" : "PLN",
    "revaluationPaymentAmount" : 1000,
    "bigDecimalRevaluationPaymentAmount" : 10.0,
    "paymentCurrency" : "PLN",
    "determineCurrencyRate" : {
      "from" : "PLN",
      "to" : "PLN",
      "currencyRate" : "1"
    }
  },
  "receiver" : {
    "firstName" : "John",
    "lastName" : "Novak",
    "provider" : "MASTERCARD",
    "hiddenCardNumber" : "557455******1623",
    "bankName" : "Alior Bank SA"
  },
  "sender" : {
    "firstName" : "Caroline",
    "lastName" : "Novak",
    "provider" : "MASTERCARD",
    "hiddenCardNumber" : "511796******9169",
    "bankName" : "Alior Bank SA"
  },
  "transactionStatus" : "DECLINED",
  "cardBlockType" : "TEMP",
  "cardBlockedUntil" : "2024-03-30T01:03:52.133",
  "errorStatus" : "ERROR_SENDER_CARD_IS_BLOCKED"
}

Response fields

Path Type Description

amount

Number

Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100]

amountInUsDollar

Number

Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100]

bigDecimalAmount

Number

Field informing about the amount of cash transferred with decimal precision.

commission

Number

This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100]

bigDecimalCommission

Number

This is the amount of commission that was added to the transaction at 0.01 currency.

orderId

String

Unique transaction identifier.

transactionId

String

The transactionId field is used for the Merchant to send its own internal transaction identifier. This field is returned in the response from the Check status method and sent by the Webhooks method. @Length(max = 64). Optional

createdDate

String

Date of transaction.

fundingRrn

String

Funding Retrieval Reference Number.

paymentRrn

String

Payment Retrieval Reference Number.

arn

String

Acquirer Reference Number

3DS

Boolean

Value: true/false determines if transaction was processed with 3ds

revaluationResult

Object (RevaluationResult)

Detailed information about revaluation between sender currency and receiver currency.

receiver

Object

Personal data of the person to whom the transfer is addressed.

sender

Object

Personal data of the person who performs the transfer of cash.

transactionStatus

String

Status of the transaction (PENDING, APPROVED, DECLINED, REJECTED, REVERSED)

errorStatus

String

Additional data of the error occurred during a processing of the request

cardBlockType

String

Card lock type

cardBlockedUntil

String

Card’s lock end date

merchantAdviceCode

String

Information about the reasons for declined transactions and actions that merchants can take. Occurs only for mastercard and for rejected transactions if Mastercard returns this information

RevaluationResult

Path Type Description

revaluationFundingAmount

Long

Amount (in pennies) of funding transaction in fundingCurrency

bigDecimalRevaluationFundingAmount

BigDecimal

Amount of funding transaction in fundingCurrency

fundingCurrency

String

Currency code the same as sender’s card currency

revaluationPaymentAmount

Long

Amount (in pennies) of payment transaction in paymentCurrency

bigDecimalRevaluationPaymentAmount

BigDecimal

Amount of payment transaction in paymentCurrency

paymentCurrency

String

Currency code the same as receiver’s card currency

determineCurrencyRate

Object (DetermineCurrencyRate)

Details about conversion

DetermineCurrencyRate

Path Type Description

from

Long

Currency which was conversion from

to

Long

Resulted currency

currencyRate

BigDecimal

Currency rate

422 UNPROCESSABLE ENTITY CASH-CARD
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json
Content-Length: 1358

{
  "transactionId" : "TRX220132AM",
  "amount" : 1000,
  "amountInUsDollar" : 268,
  "bigDecimalAmount" : 10.0,
  "commission" : 200,
  "bigDecimalCommission" : 2.0,
  "orderId" : "00549d98-08cb-45d2-8673-4dcafa81f498",
  "createdDate" : "03-04-2018, 14:01",
  "fundingRrn" : "014011103023",
  "paymentRrn" : "014011103024",
  "arn" : "05411640143500000019325",
  "3DS" : false,
  "revaluationResult" : {
    "revaluationFundingAmount" : 1000,
    "bigDecimalRevaluationFundingAmount" : 10.0,
    "fundingCurrency" : "PLN",
    "revaluationPaymentAmount" : 1000,
    "bigDecimalRevaluationPaymentAmount" : 10.0,
    "paymentCurrency" : "PLN",
    "determineCurrencyRate" : {
      "from" : "PLN",
      "to" : "PLN",
      "currencyRate" : "1"
    }
  },
  "receiver" : {
    "firstName" : "John",
    "lastName" : "Novak",
    "provider" : "MASTERCARD",
    "hiddenCardNumber" : "557455******1623",
    "bankName" : "Alior Bank SA"
  },
  "sender" : {
    "firstName" : "Caroline",
    "lastName" : "Novak",
    "provider" : "CASH"
  },
  "transactionStatus" : "DECLINED",
  "merchantSettlementCurrency" : "USD",
  "fenigeCommissionInMerchantSettlementCurrency" : 0.05,
  "transactionAmountInMerchantSettlementCurrency" : 2.68,
  "cardBlockType" : "TEMP",
  "cardBlockedUntil" : "2024-03-30T01:03:52.560",
  "errorStatus" : "ERROR_SENDER_CARD_IS_BLOCKED"
}

Response fields

Path Type Description

amount

Number

Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100]

amountInUsDollar

Number

Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100]

bigDecimalAmount

Number

Field informing about the amount of cash transferred with decimal precision.

commission

Number

This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100]

bigDecimalCommission

Number

This is the amount of commission that was added to the transaction at 0.01 currency.

orderId

String

Unique transaction identifier.

transactionId

String

The transactionId field is used for the Merchant to send its own internal transaction identifier. This field is returned in the response from the Check status method and sent by the Webhooks method. @Length(max = 64). Optional

createdDate

String

Date of transaction.

fundingRrn

String

Funding Retrieval Reference Number.

paymentRrn

String

Payment Retrieval Reference Number.

arn

String

Acquirer Reference Number

3DS

Boolean

Value: true/false determines if transaction was processed with 3ds

revaluationResult

Object (RevaluationResult)

Detailed information about revaluation between sender currency and receiver currency.

receiver

Object

Personal data of the person to whom the transfer is addressed.

sender

Object

Personal data of the person who performs the transfer of cash.

merchantSettlementCurrency

String

Merchant settlement currency

fenigeCommissionInMerchantSettlementCurrency

Number

Commission Fenige in merchant settlement currency

transactionAmountInMerchantSettlementCurrency

Number

Transaction amount in merchant settlement currency

transactionStatus

String

Status of the transaction (PENDING, APPROVED, DECLINED, REJECTED, REVERSED)

errorStatus

String

The code of the error occurred during a processing of the request

cardBlockType

String

Card lock type

cardBlockedUntil

String

Card’s lock end date

merchantAdviceCode

String

Information about the reasons for declined transactions and actions that merchants can take. Occurs only for mastercard and for declined transactions if Mastercard returns this information

RevaluationResult

Path Type Description

revaluationFundingAmount

Long

Amount (in pennies) of funding transaction in fundingCurrency

bigDecimalRevaluationFundingAmount

BigDecimal

Amount of funding transaction in fundingCurrency

fundingCurrency

String

Currency code the same as sender’s card currency

revaluationPaymentAmount

Long

Amount (in pennies) of payment transaction in paymentCurrency

bigDecimalRevaluationPaymentAmount

BigDecimal

Amount of payment transaction in paymentCurrency

paymentCurrency

String

Currency code the same as receiver’s card currency

determineCurrencyRate

Object (DetermineCurrencyRate)

Details about conversion

DetermineCurrencyRate

Path Type Description

from

Long

Currency which was conversion from

to

Long

Resulted currency

currencyRate

BigDecimal

Currency rate

500 INTERNAL SERVER ERROR
HTTP/1.1 500 Internal Server Error
Content-Type: application/json
Content-Length: 69

{
  "errorStatus" : "ERROR_SOMETHING_WRONG - Something went wrong."
}

Response fields

Path Type Description

errorStatus

String

Additional data of the error occurred during a processing of the request

3.1.5. Transaction history

GET /client/{clientId}/transactions?page=0&size=100 Content Type: application/json, Authorization: Basic Auth
Method return page with list of user transactions. Transactions are filtered by clientId provided in GET parameter.
User can send additional optional parameters (page, size) to obtain given page with defined size.

From January 2021, there is an internal functionality to restrict access for the Merchant to specific method. The Fenige employee can disable access to a given endpoint, then the HTTP status 403 FORBIDDEN will be returned. The Merchant will be informed about each access restriction action.

Request
GET /client/0/transactions?fromDate=2018-03-06&toDate=2018-03-08&page=0&size=100 HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Host: java-staging.fenige.pl:8181
Response
Response status
Status Description

200 OK

Returned list of transactions history.

404 NOT FOUND

Returning the list failed.

Example Response
200 OK
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1118

{
  "content" : [ {
    "correlationId" : "6137b323-5c26-4ae8-ada9-5fadb8a1ff21",
    "createdDate" : "2018-03-15T10:24:52.149Z",
    "amount" : 15000,
    "amountInUsDollar" : 4024,
    "textAmount" : "150.00 PLN",
    "currency" : "PLN",
    "cardId" : 3574,
    "receiverFirstName" : "Patrick",
    "receiverLastName" : "Evans",
    "receiverHiddenCardNumber" : "511123******1234",
    "receiverProvider" : "MASTERCARD",
    "receiverBankName" : "Bank Polska Kasa Opieki Spółka Akcyjna",
    "receiverEmail" : "receiver@fenige.pl",
    "receiverPhone" : "600300200",
    "senderFirstName" : "Rob",
    "senderLastName" : "Wring",
    "senderHiddenCardNumber" : "522212******4321",
    "senderProvider" : "MASTERCARD",
    "senderBankName" : "Alior Bank SA",
    "status" : "approved",
    "transactionDirection" : "OUTGOING",
    "3DS" : false
  } ],
  "pageable" : "INSTANCE",
  "last" : true,
  "totalElements" : 1,
  "totalPages" : 1,
  "size" : 1,
  "number" : 0,
  "sort" : {
    "empty" : true,
    "sorted" : false,
    "unsorted" : true
  },
  "first" : true,
  "numberOfElements" : 1,
  "empty" : false
}

Response fields

Path Type Description

content.[].correlationId

String

Unique UUID describing single transaction in system

content.[].createdDate

String

Date of transaction processing

content.[].amount

Number

Transaction amount in pennies

content.[].amountInUsDollar

Number

Transaction amount in USD currency in pennies.

content.[].textAmount

String

Transaction amount with currency

content.[].currency

String

Transaction currency

content.[].cardId

Number

Datacore card id used in transaction (sender card)

content.[].3DS

Boolean

Value: true/false determines if transaction was processed with 3ds

content.[].receiverFirstName

String

Transaction receiver first name

content.[].receiverLastName

String

Transaction receiver last name

content.[].receiverHiddenCardNumber

String

Transaction receiver hidden card number

content.[].receiverProvider

String

VISA or MASTERCARD or MAESTRO

content.[].receiverBankName

String

Transaction receiver card bank name.

content.[].senderFirstName

String

Transaction sender first name.

content.[].senderLastName

String

Transaction sender last name.

content.[].senderHiddenCardNumber

String

Transaction sender hidden card numbe.

content.[].senderProvider

String

VISA or MASTERCARD or MAESTRO

content.[].senderBankName

String

Transaction sender card bank name.

content.[].receiverPhone

String

Transaction receiver phone number

content.[].receiverEmail

String

Transaction receiver email

content.[].status

String

Status of the transaction (approved, reversed)

content.[].transactionDirection

String

Direction of the transaction (INCOMING, OUTGOING)

content.[].merchantAdviceCode

String

Information about the reasons for declined transactions and actions that merchants can take. Occurs only for mastercard and for rejected transactions if Mastercard returns this information

last

Boolean

Describes whether the page is last (true ot false)

totalPages

Number

Total number of all pages

totalElements

Number

Total number of all transactions

numberOfElements

Number

Number of transactions on page

first

Boolean

Describes whether the page is first (true ot false)

sort

Object

Details of sort

size

Number

Max number of transactions on page

number

Number

Page number

pageable

String

Page number

404 NOT FOUND
HTTP/1.1 404 Not Found

3.1.6. Transaction details

GET /client/transactions/{orderId} Content Type: application/json, Authorization: Basic Auth
Method return transaction details for single transaction given in method parameter orderId

From January 2021, there is an internal functionality to restrict access for the Merchant to specific method. The Fenige employee can disable access to a given endpoint, then the HTTP status 403 FORBIDDEN will be returned. The Merchant will be informed about each access restriction action.

Request
GET /client/transactions/fae3ee90-6f88-4aa6-aff5-7d9f6a5645d3 HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Host: java-staging.fenige.pl:8181
Response
Response status
Status Description

200 OK

Returned details of transaction.

Example Response
200 OK
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 297

{
  "fundingAmount" : "2.00 PLN",
  "chargedAmount" : "2.04 PLN",
  "commission" : "0.04 PLN",
  "paymentAmount" : "0.54 USD",
  "exchange" : "1.00 PLN = 0.27 USD",
  "transactionTime" : "2018-07-26T17:01:56.364Z",
  "cardIssuer" : "MASTERCARD",
  "amountInUsDollar" : 1,
  "status" : "approved"
}

Response fields

Path Type Description

fundingAmount

String

Funding amount in transaction currency

chargedAmount

String

Charged amount in transaction currency

commission

String

Transaction commission with currency

paymentAmount

String

Payment amount in receiver currency

exchange

String

Revaluation amount from sender to receiver currency

transactionTime

String

Date of the transaction

cardIssuer

String

Card issuer MASTERCARD/VISA

amountInUsDollar

Number

Transaction amount in USD currency in pennies

status

String

Status of transaction approved/reject/decline

3.2. Card to Card 3D Secure

POST /api/v2/client/send-money-3ds Content-Type: application/vnd.sendmoney3ds.v2+json, Authorization: Basic Auth, API-TOKEN*
Innovative technology that allows to send money between cards instantly anywhere in the world. No SWIFT or bank account number needed!
This method is used to MoneySend transaction (funding and payment). To enable users to make transfers in any currency, Fenige introduces the send-money method for
multicurrency.  The method allows executing transactions with additional protection i.e. verification by the 3DS (3D-Secure) in 2.X standard.
1 - User by selecting type = SENDER defines amount of funding in given currency. This amount is collected from sender card in selected currency.
2 - User by selecting type = RECEIVER defines amount of payment in given currency. This amount is transferred to receiver card in selected currency.
In case there's need revaluation from one currency to another, system uses lowerRate for situation 1 and higherRate for situation 2.
For more details about specific rates please refer to Currency Rate method.
*API-TOKEN is required for methods: DATACORE-PLAIN, PLAIN-DATACORE, DATACORE-DATACORE, DATACORE-CASH, DATACORE-PHONE
The API-TOKEN is refreshed each time it is used in the header. The API-TOKEN is refreshed for 30 minutes.
3DS 2.X transaction requires additional parameters, but the flow of transaction is the same as transaction without 3DS.
Please notice that you can choose language of email confirmation of this transaction. It is able by attach proper header to request.

From January 2021, there is an internal functionality to restrict access for the Merchant to specific method. The Fenige employee can disable access to a given endpoint, then the HTTP status 403 FORBIDDEN will be returned. The Merchant will be informed about each access restriction action.

When performing authorization, remember that there are currencies with different number of decimal places. For example: VND has no pennies and KWD has three decimal places. Please take this into account in the Amout field. For more information on other currencies, see ISO 4217.

Send money with outside 3DS flow
sendmoney trx outside3ds flow
Send money with outside 3DS and DataCenter flow
sendmoney trx outside3ds datacenter flow

3.2.1. Request

Request fields

Table 5. Multicurrency-3DS
Path Type Validation Rule Description

amount

Number

Required

@NotNull, positive

The total transfer amount (in pennies).

cvc2

String

Required

@Length(min = 3, max = 4)

Sender Card cvc2/cvv2.

merchantUrl

String

Required except CASH-PLAIN transactions.

@NotNull except CASH-PLAIN

Merchant identifier such as the business website URL or reverse domain name as presented to the consumer during checkout

addressIp

String

Required except CASH-PLAIN transactions @Must conform to the IPv4 or IPv6 standard.

@NotNull except CASH-PLAIN

The IP address of the order of transaction.

type

String

Required

@NotNull

Transaction in 'SENDER' or 'RECEIVER' currency, for specific transaction type. CARD_CARD: above, CASH_CARD: RECEIVER, CARD_CASH: SENDER.

requestId

String

Required

@NotNull

128 bit number generated by the user, used to identify single transaction. Ensures that the transaction with the given parameter is processed only once.

sender

Object

Required

@NotNull

Sender PLAIN Sender DATACORE

receiver

Object

Required

@NotNull

Receiver PLAIN Receiver CASH Receiver DATACORE Receiver PHONE

outside3ds.cavv

String

Required

@NotNull

Server transaction Id generated by DS. Required for 3DS 2.X version

outside3ds.eci

String

Required

@NotNull

Electronic Commerce Indicator: 5 (Visa) or 2 (SecureCode) - The cardholder was successfully authenticated. 6 (Visa) or 1 (SecureCode) - Authentication was attempted, but the cardholder was not enrolled. Chargeback protection applies.

outside3ds.authenticationStatus

String

Required

@NotNull

Authentication status. If AuthenticationStatus is "Y" or "A" then outside 3ds flow will be execute.

outside3ds.transactionXId

String

Required

@NotNull

Cardholder Authentication Verification Value. Cardholder Authentication Verification Value. The transactionXId is the field that defines the 3DS version. The presence of this field in the HTTP request specifies that the transaction will be processed with 3DS 2.x.TransactionXId can be obtained by executing the /authentication method.

Example HTTP Request
PLAIN-PLAIN
POST /api/v2/client/send-money-3ds HTTP/1.1
Content-Type: application/vnd.sendmoney3ds.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 1025
Host: java-staging.fenige.pl:8181

{
  "amount" : 1000,
  "cvc2" : "123",
  "merchantUrl" : "https://fenige.pl/payments",
  "addressIp" : "192.168.0.1",
  "type" : "SENDER",
  "outside3ds" : {
    "cavv" : "jEu04WZns7pbARAApU4qgNdJTag=",
    "authenticationStatus" : "Y",
    "eci" : "01",
    "transactionXId" : "d985706f-1631-4a81-ac8d-5836f8b66646"
  },
  "requestId" : "ceedecef-84cc-41e6-9779-58bed30cdef7",
  "sender" : {
    "type" : "PLAIN",
    "firstName" : "Mark",
    "lastName" : "Smith",
    "street" : "Olszewskiego",
    "houseNumber" : "17A",
    "city" : "Lublin",
    "postalCode" : "20-400",
    "flatNumber" : "2",
    "email" : "senderEmail@fenige.pl",
    "birthDate" : "2024-03-28",
    "cardNumber" : "5117964247989169",
    "expirationDate" : "03/26",
    "personalId" : "AGC688910",
    "currency" : "PLN"
  },
  "receiver" : {
    "type" : "PLAIN",
    "firstName" : "Rob",
    "lastName" : "Wring",
    "birthDate" : "2024-03-28",
    "cardNumber" : "5117964247989169",
    "currency" : "PLN",
    "countryOfResidence" : "PL"
  }
}
PLAIN-DATACORE
POST /api/v2/client/send-money-3ds HTTP/1.1
Content-Type: application/vnd.sendmoney3ds.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
API-TOKEN: d94NYa+xqRrazUPzSgYeJ6qR/MzIOb3IzePb7t9sWds=
Content-Length: 1051
Host: java-staging.fenige.pl:8181

{
  "amount" : 1000,
  "cvc2" : "123",
  "merchantUrl" : "https://fenige.pl/payments",
  "addressIp" : "192.168.0.1",
  "type" : "SENDER",
  "outside3ds" : {
    "cavv" : "jEu04WZns7pbARAApU4qgNdJTag=",
    "authenticationStatus" : "Y",
    "eci" : "01",
    "transactionXId" : "c43896eb-cbbf-439a-a1a3-aa9966c0360b"
  },
  "requestId" : "0a905edd-4f63-4610-be40-94624a52673a",
  "sender" : {
    "type" : "PLAIN",
    "firstName" : "Mark",
    "lastName" : "Smith",
    "street" : "Olszewskiego",
    "houseNumber" : "17A",
    "city" : "Lublin",
    "postalCode" : "20-400",
    "flatNumber" : "2",
    "email" : "senderEmail@fenige.pl",
    "birthDate" : "2024-03-28",
    "cardNumber" : "5117964247989169",
    "expirationDate" : "03/26",
    "personalId" : "AGC688910",
    "currency" : "PLN"
  },
  "receiver" : {
    "type" : "DATACORE",
    "firstName" : "Rob",
    "lastName" : "Wring",
    "email" : "receiverEmail@fenige.pl",
    "birthDate" : "2024-03-28",
    "cardId" : 1234,
    "currency" : "PLN",
    "countryOfResidence" : "PL"
  }
}
DATACORE-PLAIN
POST /api/v2/client/send-money-3ds HTTP/1.1
Content-Type: application/vnd.sendmoney3ds.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
API-TOKEN: d94NYa+xqRrazUPzSgYeJ6qR/MzIOb3IzePb7t9sWds=
Content-Length: 946
Host: java-staging.fenige.pl:8181

{
  "amount" : 1000,
  "cvc2" : "123",
  "merchantUrl" : "https://fenige.pl/payments",
  "addressIp" : "192.168.0.1",
  "type" : "SENDER",
  "outside3ds" : {
    "cavv" : "jEu04WZns7pbARAApU4qgNdJTag=",
    "authenticationStatus" : "Y",
    "eci" : "01",
    "transactionXId" : "d599f683-84e8-4ef4-91b3-3eca84bd7724"
  },
  "requestId" : "27b14391-2136-46b2-a33f-ec2224ed413b",
  "sender" : {
    "type" : "DATACORE",
    "firstName" : "Mark",
    "lastName" : "Smith",
    "street" : "Olszewskiego",
    "houseNumber" : "17A",
    "city" : "Lublin",
    "postalCode" : "20-400",
    "flatNumber" : "2",
    "email" : "senderEmail@fenige.pl",
    "birthDate" : "2024-03-28",
    "cardId" : 1234,
    "currency" : "PLN"
  },
  "receiver" : {
    "type" : "PLAIN",
    "firstName" : "Rob",
    "lastName" : "Wring",
    "birthDate" : "2024-03-28",
    "cardNumber" : "5117964247989169",
    "currency" : "PLN",
    "countryOfResidence" : "PL"
  }
}
DATACORE-DATACORE
POST /api/v2/client/send-money-3ds HTTP/1.1
Content-Type: application/vnd.sendmoney3ds.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
API-TOKEN: d94NYa+xqRrazUPzSgYeJ6qR/MzIOb3IzePb7t9sWds=
Content-Length: 972
Host: java-staging.fenige.pl:8181

{
  "amount" : 1000,
  "cvc2" : "123",
  "merchantUrl" : "https://fenige.pl/payments",
  "addressIp" : "192.168.0.1",
  "type" : "SENDER",
  "outside3ds" : {
    "cavv" : "jEu04WZns7pbARAApU4qgNdJTag=",
    "authenticationStatus" : "Y",
    "eci" : "01",
    "transactionXId" : "7fc9e001-3359-40aa-b21c-346ce90fd262"
  },
  "requestId" : "5de6ffc8-410c-4087-82fa-45382b57ab58",
  "sender" : {
    "type" : "DATACORE",
    "firstName" : "Mark",
    "lastName" : "Smith",
    "street" : "Olszewskiego",
    "houseNumber" : "17A",
    "city" : "Lublin",
    "postalCode" : "20-400",
    "flatNumber" : "2",
    "email" : "senderEmail@fenige.pl",
    "birthDate" : "2024-03-28",
    "cardId" : 1234,
    "currency" : "PLN"
  },
  "receiver" : {
    "type" : "DATACORE",
    "firstName" : "Rob",
    "lastName" : "Wring",
    "email" : "receiverEmail@fenige.pl",
    "birthDate" : "2024-03-28",
    "cardId" : 1234,
    "currency" : "PLN",
    "countryOfResidence" : "PL"
  }
}
DATACORE-PHONE
POST /api/v2/client/send-money-3ds HTTP/1.1
Content-Type: application/vnd.sendmoney3ds.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
API-TOKEN: d94NYa+xqRrazUPzSgYeJ6qR/MzIOb3IzePb7t9sWds=
Content-Length: 942
Host: java-staging.fenige.pl:8181

{
  "amount" : 1000,
  "cvc2" : "123",
  "merchantUrl" : "https://fenige.pl/payments",
  "addressIp" : "192.168.0.1",
  "type" : "SENDER",
  "outside3ds" : {
    "cavv" : "jEu04WZns7pbARAApU4qgNdJTag=",
    "authenticationStatus" : "Y",
    "eci" : "01",
    "transactionXId" : "3a510efa-0d13-4b4a-bb6e-85c711d9351f"
  },
  "requestId" : "e1fbaa3d-7113-4a88-ae23-8361d6273e02",
  "sender" : {
    "type" : "DATACORE",
    "firstName" : "Mark",
    "lastName" : "Smith",
    "street" : "Olszewskiego",
    "houseNumber" : "17A",
    "city" : "Lublin",
    "postalCode" : "20-400",
    "flatNumber" : "2",
    "email" : "senderEmail@fenige.pl",
    "birthDate" : "2024-03-28",
    "cardId" : 1234,
    "currency" : "PLN"
  },
  "receiver" : {
    "type" : "PHONE",
    "firstName" : "Rob",
    "lastName" : "Wring",
    "birthDate" : "2024-03-28",
    "phoneNumber" : "48123777619",
    "currency" : "PLN",
    "countryOfResidence" : "PL"
  }
}
SM 3DS DATACORE PHONE
PLAIN-CASH
POST /api/v2/client/send-money-3ds HTTP/1.1
Content-Type: application/vnd.sendmoney3ds.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 1092
Host: java-staging.fenige.pl:8181

{
  "amount" : 1000,
  "cvc2" : "123",
  "merchantUrl" : "https://fenige.pl/payments",
  "addressIp" : "192.168.0.1",
  "type" : "SENDER",
  "outside3ds" : {
    "cavv" : "jEu04WZns7pbARAApU4qgNdJTag=",
    "authenticationStatus" : "Y",
    "eci" : "01",
    "transactionXId" : "9b07bbf2-7aff-4feb-bc85-713ca59fbbb3"
  },
  "requestId" : "59dee677-668e-4737-938a-b205db734f30",
  "sender" : {
    "type" : "PLAIN",
    "firstName" : "Mark",
    "lastName" : "Smith",
    "street" : "Olszewskiego",
    "houseNumber" : "17A",
    "city" : "Lublin",
    "postalCode" : "20-400",
    "flatNumber" : "2",
    "email" : "senderEmail@fenige.pl",
    "birthDate" : "2024-03-28",
    "cardNumber" : "5117964247989169",
    "expirationDate" : "03/26",
    "personalId" : "AGC688910",
    "currency" : "PLN"
  },
  "receiver" : {
    "type" : "CASH",
    "firstName" : "Rob",
    "lastName" : "Wring",
    "street" : "Lubelska",
    "houseNumber" : "17A",
    "city" : "Lubartów",
    "postalCode" : "21-100",
    "flatNumber" : "2",
    "email" : "receiverEmail@fenige.pl",
    "country" : "PL"
  }
}
DATACORE-CASH
POST /api/v2/client/send-money-3ds HTTP/1.1
Content-Type: application/vnd.sendmoney3ds.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
API-TOKEN: d94NYa+xqRrazUPzSgYeJ6qR/MzIOb3IzePb7t9sWds=
Content-Length: 1013
Host: java-staging.fenige.pl:8181

{
  "amount" : 1000,
  "cvc2" : "123",
  "merchantUrl" : "https://fenige.pl/payments",
  "addressIp" : "192.168.0.1",
  "type" : "SENDER",
  "outside3ds" : {
    "cavv" : "jEu04WZns7pbARAApU4qgNdJTag=",
    "authenticationStatus" : "Y",
    "eci" : "01",
    "transactionXId" : "24b0da07-3d04-4f8b-977d-7ad461ab2fd5"
  },
  "requestId" : "601b930c-cce6-4534-bb83-ab125b6fbcd0",
  "sender" : {
    "type" : "DATACORE",
    "firstName" : "Mark",
    "lastName" : "Smith",
    "street" : "Olszewskiego",
    "houseNumber" : "17A",
    "city" : "Lublin",
    "postalCode" : "20-400",
    "flatNumber" : "2",
    "email" : "senderEmail@fenige.pl",
    "birthDate" : "2024-03-28",
    "cardId" : 1234,
    "currency" : "PLN"
  },
  "receiver" : {
    "type" : "CASH",
    "firstName" : "Rob",
    "lastName" : "Wring",
    "street" : "Lubelska",
    "houseNumber" : "17A",
    "city" : "Lubartów",
    "postalCode" : "21-100",
    "flatNumber" : "2",
    "email" : "receiverEmail@fenige.pl",
    "country" : "PL"
  }
}

3.2.2. Response

Response status
Status Description

200 OK

Returned if the transaction completes successfully.

200 OK - Error validation

Returned list of field name which has validation errors.

202 Accepted

Returned when the transaction with the provided requestId has been registered in the system, but has not yet been completed. The user can retry in a few seconds to get the transaction result.

400 Bad Request

Returned e.g. when a different transaction with the provided requestId has already been registered in the system.

401 Unauthorized

Returned when API-TOKEN was broken.

Example HTTP Response
200 OK
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 54

{
	"orderId": "234abf25-c35f-a263-a402-cbaf874f137a"
}

Response fields

Path Type Description

orderId

String

OrderId

200 OK - Error validation
HTTP/1.1 200 OK
Content-Type: application/json;charset=ISO-8859-1

{
	"status": "ERROR_VALIDATION",
	"error": {
		"message": "Some information is missing or incorrect.",
		"errors": [{
				"field": "requestId",
				"message": [
					"may not be null"
				]
			},
			{
				"field": "cvc2",
				"message": [
					"may not be null",
					"length must be 3"
				]
			},
			{
				"field": "amount",
				"message": [
					"may not be null"
				]
			},
			{
				"field": "type",
				"message": [
					"may not be null"
				]
			},
			{
				"field": "sender",
				"message": [
					"may not be null"
				]
			},
			{
				"field": "sender.houseNumber",
				"message": [
					"may not be null",
					"may not be empty",
					"length must be between 1 and 10"
				]
			},
            {
				"field": "sender.street",
				"message": [
					"may not be null",
					"may not be empty",
					"length must be between 1 and 50"
				]
			},
			{
				"field": "sender.firstName",
				"message": [
					"may not be null",
					"may not be empty",
					"length must be between 2 and 35"
				]
			},
			{
				"field": "sender.lastName",
				"message": [
					"may not be empty",
					"may not be null",
					"length must be between 2 and 35"
				]
			},
			{
				"field": "sender.postalCode",
				"message": [
					"may not be empty",
					"may not be null",
					"length must be between 1 and 10"
				]
			},
            {
				"field": "sender.city",
				"message": [
					"may not be empty",
					"may not be null",
					"length must be between 1 and 25"
				]
			},
            {
                "field": "sender.flatNumber",
                "message": [
                    "must be null",
                    "length must be between 0 and 5"
                ]
            },
			{
				"field": "sender.cardNumber",
				"message": [
					"may not be null",
					"may not be empty",
					"card number length must be 16"
				]
			},
			{
				"field": "sender.email",
				"message": [
					"may not be empty",
					"may not be null",
					"not a well-formed email address",
					"lenght must be beetween 1 and 128"
				]
			},
			{
				"field": "sender.expirationDate",
				"message": [
					"invalid card expiration date",
					"may not be null",
					"may not be empty"
				]
			},
			{
				"field": "receiver",
				"message": [
					"may not be null"
				]
			},
			{
				"field": "receiver.firstName",
				"message": [
					"may not be null",
					"may not be empty",
					"length must be between 2 and 35"
				]
			},
			{
				"field": "receiver.lastName",
				"message": [
					"may not be empty",
					"may not be null",
					"length must be between 2 and 35"
				]
			},
			{
				"field": "receiver.currency",
				"message": [
					"may not be null"
				]
			},
			{
				"field": "receiver.cardNumber",
				"message": [
					"may not be null",
					"may not be empty",
				    "card number length must be 16"
				]
			},
			{
                "field": "sender",
                "message": [
                     "province is mandatory only if country code is US or CA"
                ]
            },
            {
                 "field": "sender.province",
                 "message": [
                      "is not correct province code for country code US",
                      "may not be null"
                 ]
            },
            {
                 "field": "sender.province",
                 "message": [
                       "may not be null",
                       "is not correct province code for country code CA"
                 ]
            },
            {
                 "field": "sender.province",
                 "message": [
                        "must match ^[A-Z]{2}$",
                        "is not correct province code for country code US"
                 ]
            },
            {
                 "field": "sender.currency",
                 "message": [
                       "Currency is not supported"
                ]
            },
            {
                 "field": "receiver.currency",
                 "message": [
                       "Currency is not supported"
                ]
            }
        ]
    }
}
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "ERROR_API_TOKEN_NOT_FOUND",
    "error": {
        "message": "API-TOKEN header not found in request with DATACORE/PHONE model in sender or receiver."
    }
}
202 Accepted
HTTP/1.1 202 Accepted
Content-Type: application/json
Content-Length: 56

{
  "orderId" : "0cbc3f21-b44c-4051-a47a-0bead7ce7fd3"
}

Response fields

Path Type Description

orderId

String

Transaction order-id

400 Bad request
HTTP/1.1 400 Bad Request
Content-Type: application/json
Content-Length: 104

{
  "error" : {
    "message" : "Another transaction with the same id has already been processed."
  }
}
401 UNAUTHORIZED
HTTP/1.1 401 Unauthorized
Content-Type: application/json

{
      "timestamp": "2021-12-22T12:39:53.168+0000",
      "status": 401,
      "error": "Unauthorized",
      "message": "Username or password is not correct",
      "path": "/api/v2/client/send-money-3ds"
}
HTTP/1.1 401 Unauthorized
Content-Type: application/json

{
      "timestamp": "2021-12-22T12:39:53.168+0000",
      "status": 401,
      "error": "Unauthorized",
      "message": "ERROR_USER_NOTFOUND",
      "path": "/api/v2/client/send-money-3ds"
}
Table 6. Response fields
Path Description

timestamp

Time when request was executed

status

Http response code

error

Http status name

message

Message for response code

path

Path to a specific resource

403 FORBIDDEN
HTTP Response - Error
HTTP/1.1 403 Forbidden
Content-Type: application/json

{
    "timestamp": 1610464313387,
    "status": 403,
    "error": "Forbidden",
    "message": "No message available",
    "path": "/client/send-money-3ds"
}

3.2.3. Check status

GET /client/send-money-3ds/{orderId}, Authentication: Basic Auth
The method allows obtaining a status of 3ds transaction specified by order-id. Parameter order-id was returned in the previous step (Send money multicurrency 3DS).

From January 2021, there is an internal functionality to restrict access for the Merchant to specific method. The Fenige employee can disable access to a given endpoint, then the HTTP status 403 FORBIDDEN will be returned. The Merchant will be informed about each access restriction action.

Request
Table 7. /client/send-money-3ds/{orderId}
Parameter Description

orderId

Unique transaction identifier.

GET /client/send-money-3ds/00549d98-08cb-45d2-8673-4dcafa81f498 HTTP/1.1
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Host: java-staging.fenige.pl:8181
Response
Response status
Status Description

200 OK

Returned if the transaction completes successfully.

203 NON-AUTHORITATIVE INFORMATION

Returned when transaction was registered for processing. Check status in a while.

500 INTERNAL SERVER ERROR

Returned when user provides wrong order-id or transaction was failed or was Declined.

Example HTTP Response
200 OK
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 986

{
  "amount" : 1000,
  "amountInUsDollar" : 268,
  "bigDecimalAmount" : 10.0,
  "commission" : 200,
  "bigDecimalCommission" : 2.0,
  "orderId" : "00549d98-08cb-45d2-8673-4dcafa81f498",
  "createdDate" : "03-04-2018, 14:01",
  "3DS" : false,
  "revaluationResult" : {
    "revaluationFundingAmount" : 1000,
    "bigDecimalRevaluationFundingAmount" : 10.0,
    "fundingCurrency" : "PLN",
    "revaluationPaymentAmount" : 1000,
    "bigDecimalRevaluationPaymentAmount" : 10.0,
    "paymentCurrency" : "PLN",
    "determineCurrencyRate" : {
      "from" : "PLN",
      "to" : "PLN",
      "currencyRate" : "1"
    }
  },
  "receiver" : {
    "firstName" : "John",
    "lastName" : "Novak",
    "provider" : "MASTERCARD",
    "hiddenCardNumber" : "557455******1623",
    "bankName" : "Alior Bank SA"
  },
  "sender" : {
    "firstName" : "Caroline",
    "lastName" : "Novak",
    "provider" : "MASTERCARD",
    "hiddenCardNumber" : "511796******9169",
    "bankName" : "Alior Bank SA"
  }
}

Response fields

Path Type Description

amount

Number

Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100]

amountInUsDollar

Number

Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100]

bigDecimalAmount

Number

Field informing about the amount of cash transferred with decimal precision.

commission

Number

This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100]

bigDecimalCommission

Number

This is the amount of commission that was added to the transaction at 0.01 currency.

orderId

String

Unique transaction identifier.

createdDate

String

Date of transaction.

3DS

Boolean

Value: true/false determines if transaction was processed with 3ds

revaluationResult

Object (RevaluationResult)

Detailed information about revaluation between sender and receiver currency.

receiver

Object

Personal data of the person to whom the transfer is addressed.

sender

Object

Personal data of the person who performs the transfer of cash.

RevaluationResult

Path Type Description

revaluationFundingAmount

Long

Amount (in pennies) of funding transaction in fundingCurrency

bigDecimalRevaluationFundingAmount

BigDecimal

Amount of funding transaction in fundingCurrency

fundingCurrency

String

Currency code the same as sender’s card currency

revaluationPaymentAmount

Long

Amount (in pennies) of payment transaction in paymentCurrency

bigDecimalRevaluationPaymentAmount

BigDecimal

Amount of payment transaction in paymentCurrency

paymentCurrency

String

Currency code the same as receiver’s card currency

determineCurrencyRate

Object (DetermineCurrencyRate)

Details about conversion

DetermineCurrencyRate

Path Type Description

from

Long

Currency which was conversion from

to

Long

Resulted currency

currencyRate

BigDecimal

Currency rate

200 OK (For PLAIN-CASH, DATACORE-CASH models)
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 946

{
  "amount" : 1000,
  "amountInUsDollar" : 268,
  "bigDecimalAmount" : 10.0,
  "commission" : 200,
  "bigDecimalCommission" : 2.0,
  "orderId" : "00549d98-08cb-45d2-8673-4dcafa81f498",
  "createdDate" : "03-04-2018, 14:01",
  "3DS" : false,
  "revaluationResult" : {
    "revaluationFundingAmount" : 1000,
    "bigDecimalRevaluationFundingAmount" : 10.0,
    "fundingCurrency" : "PLN",
    "revaluationPaymentAmount" : 1000,
    "bigDecimalRevaluationPaymentAmount" : 10.0,
    "paymentCurrency" : "PLN",
    "determineCurrencyRate" : {
      "from" : "PLN",
      "to" : "PLN",
      "currencyRate" : "1"
    }
  },
  "receiver" : {
    "firstName" : "John",
    "lastName" : "Novak",
    "provider" : "CASH",
    "hiddenCardNumber" : "****************"
  },
  "sender" : {
    "firstName" : "Caroline",
    "lastName" : "Novak",
    "provider" : "MASTERCARD",
    "hiddenCardNumber" : "511796******9169",
    "bankName" : "Alior Bank SA"
  }
}

Response fields

Path Type Description

amount

Number

Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100]

amountInUsDollar

Number

Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100]

bigDecimalAmount

Number

Field informing about the amount of cash transferred with decimal precision.

commission

Number

This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100]

bigDecimalCommission

Number

This is the amount of commission that was added to the transaction at 0.01 currency.

orderId

String

Unique transaction identifier.

createdDate

String

Date of transaction.

3DS

Boolean

Value: true/false determines if transaction was processed with 3ds

revaluationResult

Object (RevaluationResult)

Detailed information about revaluation between sender and receiver currency.

receiver

Object

Personal data of the person to whom the transfer is addressed.

sender

Object

Personal data of the person who performs the transfer of cash.

RevaluationResult

Path Type Description

revaluationFundingAmount

Long

Amount (in pennies) of funding transaction in fundingCurrency

bigDecimalRevaluationFundingAmount

BigDecimal

Amount of funding transaction in fundingCurrency

fundingCurrency

String

Currency code the same as sender’s card currency

revaluationPaymentAmount

Long

Amount (in pennies) of payment transaction in paymentCurrency

bigDecimalRevaluationPaymentAmount

BigDecimal

Amount of payment transaction in paymentCurrency

paymentCurrency

String

Currency code the same as receiver’s card currency

determineCurrencyRate

Object (DetermineCurrencyRate)

Details about conversion

DetermineCurrencyRate

Path Type Description

from

Long

Currency which was conversion from

to

Long

Resulted currency

currencyRate

BigDecimal

Currency rate

203 NON-AUTHORITATIVE INFORMATION
HTTP/1.1 203 Non-Authoritative Information

After you get 203 you need to check status in a while because we processing this transaction and if you don’t get a response (200 - succeeded or 500 - declined) within 60 seconds then please contact us.

500 INTERNAL SERVER ERROR
HTTP/1.1 500 Internal Server Error
Content-Type: text/plain;charset=ISO-8859-1

PAYMENT_TRANSACTION_DECLINED:CODE_05

After receiving these statuses, the transaction was rejected

Error statuses

Name Description

FUNDING_TRANSACTION_DECLINED:CODE_XX, PAYMENT_TRANSACTION_DECLINED:CODE_XX

CODE_XX - is MasterCard response code (ISO 8583)

ISSUER_NOT_SUPPORTED

This card is not supported

ERROR_CARD_IS_BLOCKED

Card is blocked for 1 hour in Fenige

ERROR_USER_IS_BLOCKED

User is blocked in Fenige

ERROR_BIN_IS_BLOCKED

Bin is blocked for 1 hour in Fenige

ERROR_FUNDING_BANK_IS_BLOCKED

Funding bank is blocked in Fenige

ERROR_PAYMENT_BANK_IS_BLOCKED

Payment bank is blocked in Fenige

FUNDING_TRANSACTION_DECLINED:ACQ_ERROR [only for CARD-CARD]

Funding transaction was declined and payment not send

PAYMENT_TRANSACTION_DECLINED:ACQ_ERROR

Payment transaction was declined and funding was reversed

ERROR_ACQ_CONNECTION

A connection error occurred to Acquirer service

AML_ERROR

User was found on the stop list

NETWORK_ERROR

Acceptance network is unavailable

CURRENCY_RATES_NOT_FOUND

No currently effective rates found in the database

CURRENCY_NOT_SUPPORTED

Currency is not supported

MERCHANT_CURRENCY_NOT_SUPPORTED

Currency is not supported by Merchant

ERROR_SINGLE_TRANSACTION_LIMIT

Transaction limit for single transaction exceeded

ERROR_DAILY_TRANSACTION_LIMIT

Daily transaction limit for amount per card exceeded

ERROR_DAILY_COUNT_TRANSACTION_LIMIT

Daily transaction limit for count per card exceeded

ERROR_WEEKLY_TRANSACTION_LIMIT

Weekly transaction limit for amount per card exceeded

ERROR_MONTHLY_TRANSACTION_LIMIT

Monthly transaction limit for amount per card exceeded

ERROR_MONTHLY_COUNT_TRANSACTION_LIMIT

Monthly transaction limit for count per card exceeded

ERROR_DAILY_CUMULATIVE_LIMIT

Daily cumulative limit per card was exceeded

ERROR_MONTHLY_CUMULATIVE_LIMIT

Monthly cumulative limit per card was exceeded

ERROR_MERCHANT_MASTERCARD_DAILY_CUMULATIVE_LIMIT

Daily cumulative limit per merchant transactions using mastercard cards was exceeded

ERROR_MERCHANT_MASTERCARD_MONTHLY_CUMULATIVE_LIMIT

Monthly cumulative limit per merchant transactions using mastercard cards was exceeded

ERROR_MERCHANT_VISA_DAILY_CUMULATIVE_LIMIT

Daily cumulative limit per merchant transactions using visa cards was exceeded

ERROR_MERCHANT_VISA_MONTHLY_CUMULATIVE_LIMIT

Monthly cumulative limit per merchant transactions using visa cards was exceeded

ERROR_MERCHANT_DAILY_CUMULATIVE_LIMIT

Daily cumulative limit per merchant transactions using mastercard and visa cards was exceeded

ERROR_MERCHANT_MONTHLY_CUMULATIVE_LIMIT

Monthly cumulative limit per merchant transactions using mastercard and visa cards was exceeded

ERROR_SENDER_CARD_IS_BLOCKED [only for CARD-CARD]

Sender’s card is blocked

ERROR_RECEIVER_CARD_IS_BLOCKED

Receiver’s card is blocked

ERROR_SENDER_USER_IS_BLOCKED [only for CARD-CARD]

User acting as sender is blocked

ERROR_RECEIVER_USER_IS_BLOCKED

User acting as receiver is blocked

ERROR_SENDER_BIN_IS_BLOCKED [only for CARD-CARD]

BIN of sender’s card is blocked

ERROR_RECEIVER_BIN_IS_BLOCKED

BIN of receiver’s card is blocked

ERROR_AMOUNT_IS_BLOCKED

Amount is higher than acceptable limit

ERROR_MONITORING_CONNECTION

Couldn’t established connection to Monitoring service

ERROR_MONITORING

Some unrecognized error occurred

ERROR_USER_VERIFICATION

The transaction user’s personal data verified as incorrect on the verification service. Transaction rejected.

FUNDING_TRANSACTION_DECLINED:MIP_RESPONSE_TIMEOUT [only for CARD-CARD]

Funding transaction declined - mip response timeout

PAYMENT_TRANSACTION_DECLINED:MIP_RESPONSE_TIMEOUT

Payment transaction declined - mip response timeout

FUNDING_TRANSACTION_DECLINED:NEED_MANUAL_VERIFICATION [only for CARD-CARD]

Funding process failed and it is need to manual verification of transaction

PAYMENT_TRANSACTION_DECLINED:NEED_MANUAL_VERIFICATION

Payment process failed and it is need to manual verification of transaction

FUNDING_TRANSACTION_DECLINED:MIP_PROXY_RESPONSE_TIMEOUT [only for CARD-CARD]

Funding transaction declined - mip_proxy response timeout

PAYMENT_TRANSACTION_DECLINED:MIP_PROXY_RESPONSE_TIMEOUT

Payment transaction declined - mip_proxy response timeout

ERROR_FINALIZE_3DS_NOT_AUTHENTICATED

Error finalize 3ds not authenticated. MPI return one of statuses:

N -The customer failed authentication, and the transaction is denied.
U - Authentication could not be performed due to technical or other problems.

ERROR_NO_3DS_AUTHORIZATION

Error no 3ds authorization, when User authenticates successfully but after 15 minutes or User doesn’t authenticate.

ERROR_MPI_STATUS_TO_LOW: Initialize/Finalize: U/N

Error occurs, when merchant configuration allows only for attempted or full authenticated 3DS transactions with mpi status 'A' or 'Y' but mpi service has returned other status e.g. 'N' or 'U' at any stage of the transaction.

ERROR_3DS_INITIALIZE_FAILED

An error occurred while processing initialize 3DS method caused by an error returned by the service provider

ERROR_3DS_FINALIZE_FAILED

An error occurred while processing finalize 3DS method caused by an error returned by the service provider

ERROR_3DS_VERIFY_FAILED

An error occurred while processing verify 3DS method caused by an error returned by the service provider

REJECTED [only for CASH-CARD]

Amount exceeds current merchant deposit limit

ERROR_3DS_VERSION_NOT_ENROLLED

Merchant has configured a different version of 3DS than specified in the request

ERROR_MPI2_INTERNAL_ERROR

Some unrecognized, internal error occurred in MPI2 service

ERROR_3DS_2_X_REQUIRED_DATA_NOT_COMPLETE

Required configuration data of Merchant are not complete to finish 3DS 2.X process

ERROR_3DS_2_X_CARD_FLOW_INVOKED_FOR_OTHER_CARD_NUMBER_THAN_SPECIFIED_IN_THE_REQUEST

TransactionXId is invalid for card number specified in the request, 3DS 2.X flow invoked for other card number than specified in the request

ERROR_3DS_2_X_CARD_FLOW_INVOKED_FOR_OTHER_MERCHANT_THAN_SPECIFIED_IN_THE_REQUEST

TransactionXId is invalid for merchant specified in the request, 3DS 2.X flow invoked for other merchant than specified in the request

ERROR_3DS_2_X_NOT_FOUND_CARD_AUTHENTICATION_BY_TRANSACTION_XID

Card not found by transactionXId

ERROR_3DS_2_X_CARD_AUTHENTICATION_DOES_NOT_MATCH_TO_PAYMENT_TYPE

Card authentication does not match to payment type

ERROR_3DS_2_X_FAILED

Error 3DS 2.X processing failed

ERROR_TRANSACTIONS_WITHOUT_3DS_ABOVE_30_EUR

Transactions without 3ds above 30 EUR (the blockade applies only to EU countries)

ERROR_TRANSACTION_NOT_FOUND

Error transaction not exists

ERROR_CARD_NOT_FOUND

Card was not found

ERROR_DATACORE_CONNECTION

Problem with DC

ERROR_SOMETHING_WRONG

ERROR_SOMETHING_WRONG returned when the check status method is executed means that the details for the indicated transaction could not be retrieved correctly due to an unexpected error. This does not mean that the transaction was rejected by our system. In case of receiving ERROR_SOMETHING_WRONG status, please do not hesitate to notify our support team in order to determine the correctness of the transaction execution and quickly correct the method error.

ERROR_WHILE_VALIDATING_CARD_COUNTRY_CODE_AND_USER_COUNTRY_CODE_FOR_PLAIN

This error may occur if card’s country is other than user’s country for USA or CAN transaction for PLAIN model

ERROR_WHILE_VALIDATING_CARD_COUNTRY_CODE_AND_USER_COUNTRY_CODE

This error may occur if card’s country is other than user’s country for USA or CAN transaction

ERROR_WHILE_GETTING_COUNTRY_CODE

This error may occur when system could not get card country code. Most often, the error is caused by a missing card in the parameters received from the card provider.

ERROR_WHILE_VALIDATING_PROVINCE_NOT_CORRECT_PROVINCE_CODE

Province code is not valid for USA or CAN transactions. Please update user profile

ERROR_VALIDATION

Some validation error occurred

ERROR_VALIDATION Sender type violates merchant model

This error may occur when merchant tries to make transaction in other model than assigned primarily. For example, if merchant’s model is set as CARD-CARD and then merchant will try to make transaction in CASH-CARD model, will receive error as bellow.

ERROR_VALIDATION_EXPIRY_DATE

Card expired

AMOUNT_IS_TOO_SMALL

The amount sent is too small. Enter a larger amount.

AMOUNT_IS_TOO_HIGH

The amount sent is too high. Enter a lower amount.

ERROR_MERCHANT_FUNDING_CARD_COUNTRY_RESTRICTED

Restricted funding card country was used. + This error may occur when a merchant uses a sender card issued in a country that is on the list of countries High Risk or country not allowed to perform transactions in Fenige API. Please contact support.

ERROR_MERCHANT_PAYMENT_CARD_COUNTRY_RESTRICTED

Restricted payment card country was used. + This error may occur when a merchant uses a sender card issued in a country that is on the list of countries High Risk or country not allowed to perform transactions in Fenige API. Please contact support.

ERROR_MERCHANT_NOT_SUPPORT_CARD_PROVIDER

Merchant not support the given card provider, please contact support to check merchant configuration

MERCHANT_CRYPTO_OUTSIDE_EEA_UK_NOT_SUPPORTED

Merchant crypto is not supported outside EEA+UK

ERROR_PAYMENT_CARD_COUNTRY_RESTRICTED

System does not allow the execution of transaction with the receiver card country.

ERROR_FUNDING_CARD_COUNTRY_RESTRICTED

System does not allow the execution of transaction with the sender card country.

ERROR_TRANSACTION_GEOGRAPHIC_SCOPE_BLOCKED

Geographic scope is not permitted for this transaction

ERROR_TRANSACTION_PROCESSING_TIME_TOO_LONG

Processing time of transaction was too long, transaction is declined.

MASTERCARD_MAC_TPE_EXCELLENCE_RULE

Transaction rejected, second transaction with merchant advice code 03 or 21 within 30 days.

INCORRECT_NAME_DATA

Transaction rejected, sender or receiver name contains fraudulent phrase.

ERROR_NAME_VERIFICATION

Transaction rejected, suspicious sender or receiver name.

3.2.4. Check detailed status

GET /client/send-money-3ds/details/{orderId}, Authentication: Basic Auth
The method allows obtaining a detailed status of 3ds transaction specified by order-id. Parameter order-id was returned in the previous step (Send money multicurrency 3DS).

From January 2021, there is an internal functionality to restrict access for the Merchant to specific method. The Fenige employee can disable access to a given endpoint, then the HTTP status 403 FORBIDDEN will be returned. The Merchant will be informed about each access restriction action.

Request
Table 8. /client/send-money-3ds/details/{orderId}
Parameter Description

orderId

Unique transaction identifier.

GET /client/send-money-3ds/details/00549d98-08cb-45d2-8673-4dcafa81f498 HTTP/1.1
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Host: java-staging.fenige.pl:8181
Response
Response status
Status Description

200 OK

Returned if the transaction completes successfully.

203 NON-AUTHORITATIVE INFORMATION

Returned when transaction was registered for processing. Check status in a while.

404 NOT FOUND

Returned when a transaction related to the given orderId doesn’t exist.

422 UNPROCESSABLE ENTITY

Returned when user provides wrong order-id or transaction was failed or was Declined.

500 INTERNAL SERVER ERROR

Returned when an internal error occur.

Example HTTP Response
200 OK
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1022

{
  "amount" : 1000,
  "amountInUsDollar" : 268,
  "bigDecimalAmount" : 10.0,
  "commission" : 200,
  "bigDecimalCommission" : 2.0,
  "orderId" : "00549d98-08cb-45d2-8673-4dcafa81f498",
  "createdDate" : "03-04-2018, 14:01",
  "3DS" : false,
  "revaluationResult" : {
    "revaluationFundingAmount" : 1000,
    "bigDecimalRevaluationFundingAmount" : 10.0,
    "fundingCurrency" : "PLN",
    "revaluationPaymentAmount" : 1000,
    "bigDecimalRevaluationPaymentAmount" : 10.0,
    "paymentCurrency" : "PLN",
    "determineCurrencyRate" : {
      "from" : "PLN",
      "to" : "PLN",
      "currencyRate" : "1"
    }
  },
  "receiver" : {
    "firstName" : "John",
    "lastName" : "Novak",
    "provider" : "MASTERCARD",
    "hiddenCardNumber" : "557455******1623",
    "bankName" : "Alior Bank SA"
  },
  "sender" : {
    "firstName" : "Caroline",
    "lastName" : "Novak",
    "provider" : "MASTERCARD",
    "hiddenCardNumber" : "511796******9169",
    "bankName" : "Alior Bank SA"
  },
  "transactionStatus" : "APPROVED"
}

Response fields

Path Type Description

amount

Number

Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100]

amountInUsDollar

Number

Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100]

bigDecimalAmount

Number

Field informing about the amount of cash transferred with decimal precision.

commission

Number

This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100]

bigDecimalCommission

Number

This is the amount of commission that was added to the transaction at 0.01 currency.

orderId

String

Unique transaction identifier.

createdDate

String

Date of transaction.

3DS

Boolean

Value: true/false determines if transaction was processed with 3ds

revaluationResult

Object (RevaluationResult)

Detailed information about revaluation between sender and receiver currency.

receiver

Object

Personal data of the person to whom the transfer is addressed.

sender

Object

Personal data of the person who performs the transfer of cash.

transactionStatus

String

Status of the transaction (PENDING, APPROVED, DECLINED, REJECTED, REVERSED)

RevaluationResult

Path Type Description

revaluationFundingAmount

Long

Amount (in pennies) of funding transaction in fundingCurrency

bigDecimalRevaluationFundingAmount

BigDecimal

Amount of funding transaction in fundingCurrency

fundingCurrency

String

Currency code the same as sender’s card currency

revaluationPaymentAmount

Long

Amount (in pennies) of payment transaction in paymentCurrency

bigDecimalRevaluationPaymentAmount

BigDecimal

Amount of payment transaction in paymentCurrency

paymentCurrency

String

Currency code the same as receiver’s card currency

determineCurrencyRate

Object (DetermineCurrencyRate)

Details about conversion

DetermineCurrencyRate

Path Type Description

from

Long

Currency which was conversion from

to

Long

Resulted currency

currencyRate

BigDecimal

Currency rate

203 NON-AUTHORITATIVE INFORMATION
HTTP/1.1 203 Non-Authoritative Information

After you get 203 you need to check status in a while because we processing this transaction and if you don’t get a response (200 - succeeded or 500 - declined) within 60 seconds then please contact us.

404 NOT FOUND
HTTP/1.1 404 Not Found
Content-Type: application/json
Content-Length: 51

{
  "errorStatus" : "ERROR_TRANSACTION_NOT_FOUND"
}

Response fields

Path Type Description

errorStatus

String

Additional data of the error occurred during a processing of the request

422 UNPROCESSABLE ENTITY
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json
Content-Length: 1150

{
  "amount" : 1000,
  "amountInUsDollar" : 268,
  "bigDecimalAmount" : 10.0,
  "commission" : 200,
  "bigDecimalCommission" : 2.0,
  "orderId" : "00549d98-08cb-45d2-8673-4dcafa81f498",
  "createdDate" : "03-04-2018, 14:01",
  "3DS" : false,
  "revaluationResult" : {
    "revaluationFundingAmount" : 1000,
    "bigDecimalRevaluationFundingAmount" : 10.0,
    "fundingCurrency" : "PLN",
    "revaluationPaymentAmount" : 1000,
    "bigDecimalRevaluationPaymentAmount" : 10.0,
    "paymentCurrency" : "PLN",
    "determineCurrencyRate" : {
      "from" : "PLN",
      "to" : "PLN",
      "currencyRate" : "1"
    }
  },
  "receiver" : {
    "firstName" : "John",
    "lastName" : "Novak",
    "provider" : "MASTERCARD",
    "hiddenCardNumber" : "557455******1623",
    "bankName" : "Alior Bank SA"
  },
  "sender" : {
    "firstName" : "Caroline",
    "lastName" : "Novak",
    "provider" : "MASTERCARD",
    "hiddenCardNumber" : "511796******9169",
    "bankName" : "Alior Bank SA"
  },
  "transactionStatus" : "DECLINED",
  "cardBlockType" : "TEMP",
  "cardBlockedUntil" : "2024-03-30T01:03:51.497",
  "errorStatus" : "ERROR_SENDER_CARD_IS_BLOCKED"
}

Response fields

Path Type Description

amount

Number

Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100]

amountInUsDollar

Number

Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100]

bigDecimalAmount

Number

Field informing about the amount of cash transferred with decimal precision.

commission

Number

This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100]

bigDecimalCommission

Number

This is the amount of commission that was added to the transaction at 0.01 currency.

orderId

String

Unique transaction identifier.

createdDate

String

Date of transaction.

3DS

Boolean

Value: true/false determines if transaction was processed with 3ds

revaluationResult

Object (RevaluationResult)

Detailed information about revaluation between sender and receiver currency.

receiver

Object

Personal data of the person to whom the transfer is addressed.

sender

Object

Personal data of the person who performs the transfer of cash.

transactionStatus

String

Status of the transaction (PENDING, APPROVED, DECLINED, REJECTED, REVERSED)

errorStatus

String

The code of the error occurred during a processing of the request

cardBlockType

String

Card lock type

cardBlockedUntil

String

Card’s lock end date

merchantAdviceCode

String

Information about the reasons for declined transactions and actions that merchants can take. Occurs only for mastercard and for rejected transactions if Mastercard returns this information

RevaluationResult

Path Type Description

revaluationFundingAmount

Long

Amount (in pennies) of funding transaction in fundingCurrency

bigDecimalRevaluationFundingAmount

BigDecimal

Amount of funding transaction in fundingCurrency

fundingCurrency

String

Currency code the same as sender’s card currency

revaluationPaymentAmount

Long

Amount (in pennies) of payment transaction in paymentCurrency

bigDecimalRevaluationPaymentAmount

BigDecimal

Amount of payment transaction in paymentCurrency

paymentCurrency

String

Currency code the same as receiver’s card currency

determineCurrencyRate

Object (DetermineCurrencyRate)

Details about conversion

DetermineCurrencyRate

Path Type Description

from

Long

Currency which was conversion from

to

Long

Resulted currency

currencyRate

BigDecimal

Currency rate

500 INTERNAL SERVER ERROR
HTTP/1.1 500 Internal Server Error
Content-Type: application/json
Content-Length: 69

{
  "errorStatus" : "ERROR_SOMETHING_WRONG - Something went wrong."
}

Response fields

Path Type Description

errorStatus

String

Additional data of the error occurred during a processing of the request

3.2.5. Transaction history

GET /client/{clientId}/transactions?page=0&size=100 Content Type: application/json, Authorization: Basic Auth
Method return page with list of user transactions. Transactions are filtered by clientId provided in GET parameter.
User can send additional optional parameters (page, size) to obtain given page with defined size.

From January 2021, there is an internal functionality to restrict access for the Merchant to specific method. The Fenige employee can disable access to a given endpoint, then the HTTP status 403 FORBIDDEN will be returned. The Merchant will be informed about each access restriction action.

Request
GET /client/0/transactions?fromDate=2018-03-06&toDate=2018-03-08&page=0&size=100 HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Host: java-staging.fenige.pl:8181
Response
Response status
Status Description

200 OK

Returned list of transactions history.

404 NOT FOUND

Returning the list failed.

Example Response
200 OK
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1118

{
  "content" : [ {
    "correlationId" : "6137b323-5c26-4ae8-ada9-5fadb8a1ff21",
    "createdDate" : "2018-03-15T10:24:52.149Z",
    "amount" : 15000,
    "amountInUsDollar" : 4024,
    "textAmount" : "150.00 PLN",
    "currency" : "PLN",
    "cardId" : 3574,
    "receiverFirstName" : "Patrick",
    "receiverLastName" : "Evans",
    "receiverHiddenCardNumber" : "511123******1234",
    "receiverProvider" : "MASTERCARD",
    "receiverBankName" : "Bank Polska Kasa Opieki Spółka Akcyjna",
    "receiverEmail" : "receiver@fenige.pl",
    "receiverPhone" : "600300200",
    "senderFirstName" : "Rob",
    "senderLastName" : "Wring",
    "senderHiddenCardNumber" : "522212******4321",
    "senderProvider" : "MASTERCARD",
    "senderBankName" : "Alior Bank SA",
    "status" : "approved",
    "transactionDirection" : "OUTGOING",
    "3DS" : false
  } ],
  "pageable" : "INSTANCE",
  "last" : true,
  "totalElements" : 1,
  "totalPages" : 1,
  "size" : 1,
  "number" : 0,
  "sort" : {
    "empty" : true,
    "sorted" : false,
    "unsorted" : true
  },
  "first" : true,
  "numberOfElements" : 1,
  "empty" : false
}

Response fields

Path Type Description

content.[].correlationId

String

Unique UUID describing single transaction in system

content.[].createdDate

String

Date of transaction processing

content.[].amount

Number

Transaction amount in pennies

content.[].amountInUsDollar

Number

Transaction amount in USD currency in pennies.

content.[].textAmount

String

Transaction amount with currency

content.[].currency

String

Transaction currency

content.[].cardId

Number

Datacore card id used in transaction (sender card)

content.[].3DS

Boolean

Value: true/false determines if transaction was processed with 3ds

content.[].receiverFirstName

String

Transaction receiver first name

content.[].receiverLastName

String

Transaction receiver last name

content.[].receiverHiddenCardNumber

String

Transaction receiver hidden card number

content.[].receiverProvider

String

VISA or MASTERCARD or MAESTRO

content.[].receiverBankName

String

Transaction receiver card bank name.

content.[].senderFirstName

String

Transaction sender first name.

content.[].senderLastName

String

Transaction sender last name.

content.[].senderHiddenCardNumber

String

Transaction sender hidden card numbe.

content.[].senderProvider

String

VISA or MASTERCARD or MAESTRO

content.[].senderBankName

String

Transaction sender card bank name.

content.[].receiverPhone

String

Transaction receiver phone number

content.[].receiverEmail

String

Transaction receiver email

content.[].status

String

Status of the transaction (approved, reversed)

content.[].transactionDirection

String

Direction of the transaction (INCOMING, OUTGOING)

content.[].merchantAdviceCode

String

Information about the reasons for declined transactions and actions that merchants can take. Occurs only for mastercard and for rejected transactions if Mastercard returns this information

last

Boolean

Describes whether the page is last (true ot false)

totalPages

Number

Total number of all pages

totalElements

Number

Total number of all transactions

numberOfElements

Number

Number of transactions on page

first

Boolean

Describes whether the page is first (true ot false)

sort

Object

Details of sort

size

Number

Max number of transactions on page

number

Number

Page number

pageable

String

Page number

404 NOT FOUND
HTTP/1.1 404 Not Found

3.2.6. Transaction details

GET /client/transactions/{orderId} Content Type: application/json, Authorization: Basic Auth
Method return transaction details for single transaction given in method parameter orderId

From January 2021, there is an internal functionality to restrict access for the Merchant to specific method. The Fenige employee can disable access to a given endpoint, then the HTTP status 403 FORBIDDEN will be returned. The Merchant will be informed about each access restriction action.

Request
GET /client/transactions/fae3ee90-6f88-4aa6-aff5-7d9f6a5645d3 HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Host: java-staging.fenige.pl:8181
Response
Response status
Status Description

200 OK

Returned details of transaction.

Example Response
200 OK
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 297

{
  "fundingAmount" : "2.00 PLN",
  "chargedAmount" : "2.04 PLN",
  "commission" : "0.04 PLN",
  "paymentAmount" : "0.54 USD",
  "exchange" : "1.00 PLN = 0.27 USD",
  "transactionTime" : "2018-07-26T17:01:56.364Z",
  "cardIssuer" : "MASTERCARD",
  "amountInUsDollar" : 1,
  "status" : "approved"
}

Response fields

Path Type Description

fundingAmount

String

Funding amount in transaction currency

chargedAmount

String

Charged amount in transaction currency

commission

String

Transaction commission with currency

paymentAmount

String

Payment amount in receiver currency

exchange

String

Revaluation amount from sender to receiver currency

transactionTime

String

Date of the transaction

cardIssuer

String

Card issuer MASTERCARD/VISA

amountInUsDollar

Number

Transaction amount in USD currency in pennies

status

String

Status of transaction approved/reject/decline

3.3. Payouts from deposit

POST /api/v2/client/send-money Content-Type: application/vnd.sendmoney.v2+json, Authorization: Basic Auth, API-TOKEN*
Quick money transfers to debit or credit cards in 150 major currencies. Lower the costs, save time and increase the end-user satisfaction.
1 - User by selecting type = RECEIVER defines amount of payment in given currency. This amount is transferred to receiver card in selected currency.
In case there's need revaluation from one currency to another, system uses higherRate for this situation.
For more details about specific rates please refer to Currency Rate method.
*API-TOKEN CASH-PHONE
The API-TOKEN is refreshed each time it is used in the header. The API-TOKEN is refreshed for 30 minutes.
Please notice that you can choose language of email confirmation of this transaction. It is able by attach proper header to request.
SM MULTI CURRENCY
The success of the multicurrency send-money transaction depends primarily on the correctness of the merchant's currency configuration which is done by the admin. To make transactions in a currency other than the currency of the card, contact the admin.
In order to provide users with the ability to safely retry transaction (for example to request for an undelivered response), the v2 of API supports idempotent send money multi-currency operation.
To use the BLIK to card transfer service, you will need to have a mobile banking app from one of the participating banks. Follow the instructions on the app to complete the transfer. Once you have confirmed the transaction, the money
will be transferred to the card instantly.

From January 2021, there is an internal functionality to restrict access for the Merchant to specific method. The Fenige employee can disable access to a given endpoint, then the HTTP status 403 FORBIDDEN will be returned. The Merchant will be informed about each access restriction action.

When performing authorization, remember that there are currencies with different number of decimal places. For example: VND has no pennies and KWD has three decimal places. Please take this into account in the Amout field. For more information on other currencies, see ISO 4217.

An important piece of information to ensure high transaction compliance is the ability to execute the /api/v2/client/send-money/validate method, which will make sure that your request body is correct and can be processed correctly in a real transaction with the /api/v2/client/send-money method. Your request body will be validate in Visa/Mastercard side so we can be sure that information you gathered is correct.

3.3.1. Request

Request fields

Example HTTP Request
CASH-PLAIN
POST /api/v2/client/send-money HTTP/1.1
Content-Type: application/vnd.sendmoney.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 676
Host: java-staging.fenige.pl:8181

{
  "amount" : 1000,
  "type" : "RECEIVER",
  "requestId" : "fc0d85fe-2746-46f1-94e5-725ae234bad9",
  "transactionId" : "TRX220132AM",
  "sender" : {
    "type" : "CASH",
    "firstName" : "Mark",
    "lastName" : "Smith",
    "street" : "Olszewskiego",
    "houseNumber" : "17A",
    "city" : "Lublin",
    "postalCode" : "20-400",
    "flatNumber" : "2",
    "email" : "senderEmail@fenige.pl",
    "personalId" : "AGC688910",
    "country" : "PL"
  },
  "receiver" : {
    "type" : "PLAIN",
    "firstName" : "Rob",
    "lastName" : "Wring",
    "birthDate" : "2024-03-28",
    "cardNumber" : "5117964247989169",
    "currency" : "PLN",
    "countryOfResidence" : "PL"
  }
}

Response fields

Table 9. Multicurrency
Path Type Validation Rule Description

amount

Number

Required

@NotNull, positive

The total transfer amount (in pennies).

type

String

Required

@NotNull

Transaction in 'SENDER' or 'RECEIVER' currency, for specific transaction type. CARD_CARD: above, CASH_CARD: RECEIVER, CARD_CASH: SENDER.

requestId

String

Required

@NotNull

128 bit number generated by the user, used to identify single transaction. Ensures that the transaction with the given parameter is processed only once.

transactionId

String

Optional

@Length(max = 64)

The transactionId field is used for the Merchant to send its own internal transaction identifier. This field is returned in the response from the Check status method and sent by the Webhooks method.

sender

Object

Required

@NotNull

Sender CASH

receiver

Object

Required

@NotNull

Receiver PLAIN Receiver CASH Receiver PHONE

CASH-PLAIN with calculate commission result
POST /api/v2/client/send-money HTTP/1.1
Content-Type: application/vnd.sendmoney.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 746
Host: java-staging.fenige.pl:8181

{
  "calculateCommissionUuid" : "37237bf7-e868-4ca2-9690-10f2626ede8e",
  "amount" : 1000,
  "type" : "RECEIVER",
  "requestId" : "f6b6b439-b083-4371-8e3a-435e42306379",
  "transactionId" : "TRX220132AM",
  "sender" : {
    "type" : "CASH",
    "firstName" : "Mark",
    "lastName" : "Smith",
    "street" : "Olszewskiego",
    "houseNumber" : "17A",
    "city" : "Lublin",
    "postalCode" : "20-400",
    "flatNumber" : "2",
    "email" : "senderEmail@fenige.pl",
    "personalId" : "AGC688910",
    "country" : "PL"
  },
  "receiver" : {
    "type" : "PLAIN",
    "firstName" : "Rob",
    "lastName" : "Wring",
    "birthDate" : "2024-03-28",
    "cardNumber" : "5117964247989169",
    "currency" : "PLN",
    "countryOfResidence" : "PL"
  }
}

Response fields

Table 10. Multicurrency
Path Type Validation Rule Description

amount

Number

Required

@NotNull, positive

The total transfer amount (in pennies).

type

String

Required

@NotNull

Transaction in 'SENDER' or 'RECEIVER' currency, for specific transaction type. CARD_CARD: above, CASH_CARD: RECEIVER, CARD_CASH: SENDER.

requestId

String

Required

@NotNull

128 bit number generated by the user, used to identify single transaction. Ensures that the transaction with the given parameter is processed only once.

transactionId

String

Optional

@Length(max = 64)

The transactionId field is used for the Merchant to send its own internal transaction identifier. This field is returned in the response from the Check status method and sent by the Webhooks method.

sender

Object

Required

@NotNull

Sender CASH

receiver

Object

Required

@NotNull

Receiver PLAIN Receiver CASH Receiver PHONE

calculateCommissionUuid

String

Optional

@Optional

Unique calculate commission result identifier that allows to use calculated commission in transaction. More information in Calculate commission payout chapter. If calculateCommissionUuid is not provided, commissions will be calculated based on actual currency rates.

CASH-PHONE
POST /api/v2/client/send-money HTTP/1.1
Content-Type: application/vnd.sendmoney.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
API-TOKEN: d94NYa+xqRrazUPzSgYeJ6qR/MzIOb3IzePb7t9sWds=
Content-Length: 672
Host: java-staging.fenige.pl:8181

{
  "amount" : 1000,
  "type" : "RECEIVER",
  "requestId" : "e61f3730-df3b-41ba-826c-89ff1fd042dc",
  "transactionId" : "TRX220132AM",
  "sender" : {
    "type" : "CASH",
    "firstName" : "Mark",
    "lastName" : "Smith",
    "street" : "Olszewskiego",
    "houseNumber" : "17A",
    "city" : "Lublin",
    "postalCode" : "20-400",
    "flatNumber" : "2",
    "email" : "senderEmail@fenige.pl",
    "personalId" : "AGC688910",
    "country" : "PL"
  },
  "receiver" : {
    "type" : "PHONE",
    "firstName" : "Rob",
    "lastName" : "Wring",
    "birthDate" : "2024-03-28",
    "phoneNumber" : "48123777619",
    "currency" : "PLN",
    "countryOfResidence" : "PL"
  }
}

Response fields

Table 11. Multicurrency
Path Type Validation Rule Description

amount

Number

Required

@NotNull, positive

The total transfer amount (in pennies).

type

String

Required

@NotNull

Transaction in 'SENDER' or 'RECEIVER' currency, for specific transaction type. CARD_CARD: above, CASH_CARD: RECEIVER, CARD_CASH: SENDER.

requestId

String

Required

@NotNull

128 bit number generated by the user, used to identify single transaction. Ensures that the transaction with the given parameter is processed only once.

transactionId

String

Optional

@Length(max = 64)

The transactionId field is used for the Merchant to send its own internal transaction identifier. This field is returned in the response from the Check status method and sent by the Webhooks method.

sender

Object

Required

@NotNull

Sender CASH

receiver

Object

Required

@NotNull

Receiver PLAIN Receiver CASH Receiver PHONE

CASH-ACCOUNT
POST /api/v2/client/send-money HTTP/1.1
Content-Type: application/vnd.sendmoney.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 1003
Host: java-staging.fenige.pl:8181

{
  "amount" : 1000,
  "type" : "RECEIVER",
  "requestId" : "2e183821-d72d-4e9d-8da8-36c009ae3616",
  "transactionId" : "TRX220132AM",
  "description" : "Test Account transaction",
  "sender" : {
    "type" : "CASH",
    "firstName" : "Mark",
    "lastName" : "Smith",
    "street" : "Olszewskiego",
    "houseNumber" : "17A",
    "city" : "Lublin",
    "postalCode" : "20-400",
    "flatNumber" : "2",
    "email" : "senderEmail@fenige.pl",
    "personalId" : "AGC688910",
    "country" : "PL"
  },
  "receiver" : {
    "type" : "ACCOUNT",
    "firstName" : "Rob",
    "lastName" : "Wring",
    "birthDate" : "2024-03-28",
    "currency" : "PLN",
    "bank" : {
      "bankCode" : "800554",
      "bankCodeType" : "SORT_CODE",
      "bankName" : "Barclays",
      "accountName" : "Money Market",
      "accountNumber" : "BE71096123456769",
      "accountNumberType" : "IBAN",
      "countryCode" : "BE",
      "currencyCode" : "EUR"
    },
    "accountType" : "I",
    "countryOfResidence" : "PL"
  }
}

Response fields

Table 12. Multicurrency
Path Type Validation Rule Description

amount

Number

Required

@NotNull, positive

The total transfer amount (in pennies).

type

String

Required

@NotNull

Transaction in 'SENDER' or 'RECEIVER' currency, for specific transaction type. CARD_CARD: above, CASH_CARD: RECEIVER, CARD_CASH: SENDER.

requestId

String

Required

@NotNull

128 bit number generated by the user, used to identify single transaction. Ensures that the transaction with the given parameter is processed only once.

transactionId

String

Optional

@Length(max = 64)

The transactionId field is used for the Merchant to send its own internal transaction identifier. This field is returned in the response from the Check status method and sent by the Webhooks method.

sender

Object

Required

@NotNull

Sender CASH

receiver

Object

Required

@NotNull

Receiver PLAIN Receiver CASH Receiver PHONE

CASH-ACCOUNT (Validation)
POST /client/send-money/validate HTTP/1.1
Content-Type: application/vnd.sendmoney.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 957
Host: java-staging.fenige.pl:8181

{
  "amount" : 1000,
  "type" : "RECEIVER",
  "requestId" : "32a99272-6e82-47ea-b034-c571dcc5ac45",
  "transactionId" : "TRX220132AM",
  "sender" : {
    "type" : "CASH",
    "firstName" : "Mark",
    "lastName" : "Smith",
    "street" : "Olszewskiego",
    "houseNumber" : "17A",
    "city" : "Lublin",
    "postalCode" : "20-400",
    "flatNumber" : "2",
    "email" : "senderEmail@fenige.pl",
    "personalId" : "AGC688910",
    "country" : "PL"
  },
  "receiver" : {
    "type" : "ACCOUNT",
    "firstName" : "Rob",
    "lastName" : "Wring",
    "birthDate" : "2023-12-13",
    "currency" : "PLN",
    "bank" : {
      "bankCode" : "800554",
      "bankCodeType" : "SORT_CODE",
      "bankName" : "Barclays",
      "accountName" : "Money Market",
      "accountNumber" : "BE71096123456769",
      "accountNumberType" : "IBAN",
      "countryCode" : "BE",
      "currencyCode" : "EUR"
    },
    "accountType" : "I",
    "countryOfResidence" : "PL"
  }
}

Response fields

Table 13. Multicurrency
Path Type Validation Rule Description

amount

Number

Required

@NotNull, positive

The total transfer amount (in pennies).

type

String

Required

@NotNull

Transaction in 'SENDER' or 'RECEIVER' currency, for specific transaction type. CARD_CARD: above, CASH_CARD: RECEIVER, CARD_CASH: SENDER.

requestId

String

Required

@NotNull

128 bit number generated by the user, used to identify single transaction. Ensures that the transaction with the given parameter is processed only once.

transactionId

String

Optional

@Length(max = 64)

The transactionId field is used for the Merchant to send its own internal transaction identifier. This field is returned in the response from the Check status method and sent by the Webhooks method.

sender

Object

Required

@NotNull

Sender CASH

receiver

Object

Required

@NotNull

Receiver PLAIN Receiver CASH Receiver PHONE

3.3.2. Response

Response status
Status Description

200 OK - Error validation

Returned list of field name which has validation errors.

202 Accepted

- Returned when the transaction with the provided requestId has been registered in the system, but has not yet been completed. The user can retry in a few seconds to get the transaction result. Response body: Empty
or
- Returned order-id when transaction will be processed.

400 Bad Request

Returned e.g. when a different transaction with the provided requestId has already been registered in the system.

401 Unauthorized

Returned when API-TOKEN was broken.

Example HTTP Response
202 Accepted
HTTP/1.1 202 Accepted
Content-Type: application/json
Content-Length: 56

{
  "orderId" : "e6be602a-40c6-4383-b110-a1d71d629d07"
}

Response fields

Path Type Description

orderId

String

Unique transaction identifier

400 Bad request
HTTP/1.1 400 Bad Request
Content-Type: application/json
Content-Length: 104

{
  "error" : {
    "message" : "Another transaction with the same id has already been processed."
  }
}
200 OK - Error validation
HTTP/1.1 200 OK
Content-Type: application/json;charset=ISO-8859-1

{
	"status": "ERROR_VALIDATION",
	"error": {
		"message": "Some information is missing or incorrect.",
		"errors": [{
				"field": "requestId",
				"message": [
					"may not be null"
				]
			},
			{
				"field": "cvc2",
				"message": [
					"may not be null",
					"length must be 3"
				]
			},
			{
				"field": "type",
				"message": [
					"may not be null"
				]
			},
			{
				"field": "amount",
				"message": [
					"may not be null"
				]
			},
			{
				"field": "sender",
				"message": [
					"may not be null"
				]
			},
			{
				"field": "sender.cardNumber",
				"message": [
					"may not be null",
					"may not be empty",
					"card number length must be 16"
				]
			},
			{
				"field": "sender.expirationDate",
				"message": [
					"invalid card expiration date",
					"may not be null",
					"may not be empty"
				]
			},
			{
				"field": "sender.city",
				"message": [
					"may not be empty",
					"may not be null",
					"length must be between 1 and 25"
				]
			},
			{
				"field": "sender.street",
				"message": [
					"may not be null",
					"may not be empty",
					"length must be between 1 and 50"
				]
			},
            {
				"field": "sender.postalCode",
				"message": [
					"may not be empty",
					"may not be null",
					"length must be between 1 and 10"
				]
			},
            {
                "field": "sender.flatNumber",
                "message": [
                    "must be null",
                    "length must be between 0 and 5"
                ]
            },
			{
				"field": "sender.lastName",
				"message": [
					"may not be empty",
					"may not be null",
					"length must be between 2 and 35"
				]
			},
			{
				"field": "sender.houseNumber",
				"message": [
					"may not be empty",
					"may not be null",
					"length must be between 1 and 10",
                    "must match the expression: [1-9][0-9]{0,4}(?:[A-z]?[0-9]{0,4})?((?:[-/ ][1-9]?[A-z]?[0-9]{0,4})*[A-z]?)?$"
				]
			},
			{
				"field": "sender.firstName",
				"message": [
					"may not be empty",
					"may not be null",
					"length must be between 2 and 35"
				]
			},
            {
				"field": "sender.email",
				"message": [
					"may not be empty",
					"may not be null",
					"not a well-formed email address",
					"lenght must be beetween 1 and 128"
				]
			},
			{
				"field": "receiver",
				"message": [
					"may not be null"
				]
			},
			{
				"field": "receiver.firstName",
				"message": [
					"may not be empty",
					"may not be null",
					"length must be between 2 and 35"
				]
			},
			{
				"field": "receiver.lastName",
				"message": [
					"may not be empty",
					"may not be null",
					"length must be between 2 and 35"
				]
			},
			{
				"field": "receiver.currency",
				"message": [
					"may not be null"
				]
			},
			{
				"field": "receiver.cardNumber",
				"message": [
					"may not be null",
					"may not be empty",
					"card number length must be 16"
				]
			},
			{
                "field": "sender",
                "message": [
                     "province is mandatory only if country code is US or CA"
                ]
            },
            {
                "field": "sender.province",
                "message": [
                      "is not correct province code for country code US",
                      "may not be null"
                ]
            },
            {
                "field": "sender.province",
                 "message": [
                       "may not be null",
                       "is not correct province code for country code CA"
                 ]
            },
            {
                 "field": "sender.province",
                 "message": [
                        "must match ^[A-Z]{2}$",
                        "is not correct province code for country code US"
                 ]
            },
            {
                 "field": "sender.currency",
                 "message": [
                       "Currency is not supported"
                ]
            },
            {
                 "field": "receiver.currency",
                 "message": [
                       "Currency is not supported"
                ]
            }
		]
	}
}
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "ERROR_API_TOKEN_NOT_FOUND",
    "error": {
        "message": "API-TOKEN header not found in request with DATACORE/PHONE model in sender or receiver."
    }
}
401 UNAUTHORIZED
HTTP/1.1 401 Unauthorized
Content-Type: application/json

{
      "timestamp": "2021-12-22T12:39:53.168+0000",
      "status": 401,
      "error": "Unauthorized",
      "message": "Username or password is not correct",
      "path": "/api/v2/client/send-money"
}
HTTP/1.1 401 Unauthorized
Content-Type: application/json

{
      "timestamp": "2021-12-22T12:39:53.168+0000",
      "status": 401,
      "error": "Unauthorized",
      "message": "ERROR_USER_NOTFOUND",
      "path": "/api/v2/client/send-money"
}
Table 14. Response fields
Path Description

timestamp

Time when request was executed

status

Http response code

error

Http status name

message

Message for response code

path

Path to a specific resource

403 FORBIDDEN
HTTP Response - Error
HTTP/1.1 403 Forbidden
Content-Type: application/json

{
    "timestamp": 1610464313387,
    "status": 403,
    "error": "Forbidden",
    "message": "No message available",
    "path": "/client/send-money-3ds"
}

3.3.3. Calculate commission payout

POST /client/calculate-commission/payout, Authentication: Basic Auth
This method is used to receive information about the commission that will be charged for the transaction. Merchant has to specify in the field: type two values (SENDER OR RECEIVER). After selecting the value: "SENDER", the transaction will be sent in the amount indicated in the field: amount. Whereas after choosing the value: "RECEIVER", the transaction will be received in the amount indicated in the field: amount. For Payouts the value must be RECEIVER. The method allows merchant to calculate commissions for the currencies that have been entered. Result of this method can be used in transaction by passing calculateCommissionUuid from the response.
Request
CASH-PLAIN
POST /client/calculate-commission/payout HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 189
Host: java-staging.fenige.pl:8181

{
  "amount" : 100,
  "type" : "RECEIVER",
  "sender" : {
    "type" : "CASH"
  },
  "receiver" : {
    "type" : "PLAIN",
    "cardNumber" : "5575167825713507",
    "currency" : "PLN"
  }
}
Table 15. Calculate commission request fields
Path Type Validation Rule Description

amount

Number

Required

@NotNull, @Min(100)

The total transfer amount (in pennies)

type

String

Required

@NotNull

Value for specific transaction type. Must be RECEIVER

sender

Object

Required

@NotNull

Required configuration per request. Must be CASH type.

receiver

Object

Required

@NotNull

Required configuration per request (PLAIN RECEIVER, PHONE RECEIVER)

Example HTTP Response
200 OK
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 186

{
  "calculateCommissionUuid" : "093aa287-200e-4169-9c79-09c70496df8d",
  "depositChargeAmount" : 200,
  "depositChargeCurrency" : "PLN",
  "calculateCommissionExpiration" : 1711670640
}

Response fields

Path Type Description

calculateCommissionUuid

String

Unique identifier that can be used in authorization to use calculate commission result.

depositChargeAmount

Number

Amount that will be charged from deposit in pennies

depositChargeCurrency

String

Deposit currency

calculateCommissionExpiration

Number

Expiration date of calculate commission result in unix time

422 Unprocessable entity
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json
Content-Length: 184

{
  "status" : "E0152",
  "message" : "Transaction rejected, issuer card not supported",
  "httpStatus" : "UNPROCESSABLE_ENTITY",
  "traceId" : "1a1536a5-bdc8-4a94-8d52-505080d55c51"
}

Response fields

Path Type Description

traceId

String

Trace identifier

status

String

Response code from Fenige system

message

String

Message for response code from Fenige system

httpStatus

String

Response http status

500 Internal server error
HTTP/1.1 500 Internal Server Error
Content-Type: application/json
Content-Length: 150

{
  "status" : "E9000",
  "message" : "Domain error",
  "httpStatus" : "INTERNAL_SERVER_ERROR",
  "traceId" : "30f390c0-90a4-4646-80f4-398adc55fbe4"
}

Response fields

Path Type Description

traceId

String

Trace identifier

status

String

Response code from Fenige system

message

String

Message for response code from Fenige system

httpStatus

String

Response http status

3.3.4. Check status

GET /client/send-money/{orderId}, Authentication: Basic Auth
The method allows obtaining a status of multi-currency transaction specified by order-id. Parameter order-id was returned in the previous step (Send money multicurrency).

From January 2021, there is an internal functionality to restrict access for the Merchant to specific method. The Fenige employee can disable access to a given endpoint, then the HTTP status 403 FORBIDDEN will be returned. The Merchant will be informed about each access restriction action.

Request
Table 16. /client/send-money/{orderId}
Parameter Description

orderId

Unique transaction identifier.

GET /client/send-money/00549d98-08cb-45d2-8673-4dcafa81f498 HTTP/1.1
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Host: java-staging.fenige.pl:8181
Response
Response status
Status Description

200 OK

Returned if the transaction completes successfully.

203 NON-AUTHORITATIVE INFORMATION

Returned when transaction was registered for processing. Check status in a while.

500 INTERNAL SERVER ERROR

Returned when user provides wrong order-id or transaction was failed or was Declined.

Example HTTP Response
200 OK
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1260

{
  "transactionId" : "TRX220132AM",
  "amount" : 1000,
  "amountInUsDollar" : 268,
  "bigDecimalAmount" : 10.0,
  "commission" : 200,
  "bigDecimalCommission" : 2.0,
  "orderId" : "00549d98-08cb-45d2-8673-4dcafa81f498",
  "createdDate" : "03-04-2018, 14:01",
  "fundingRrn" : "014011103023",
  "paymentRrn" : "014011103024",
  "arn" : "05411640143500000019325",
  "3DS" : false,
  "revaluationResult" : {
    "revaluationFundingAmount" : 1000,
    "bigDecimalRevaluationFundingAmount" : 10.0,
    "fundingCurrency" : "PLN",
    "revaluationPaymentAmount" : 1000,
    "bigDecimalRevaluationPaymentAmount" : 10.0,
    "paymentCurrency" : "PLN",
    "determineCurrencyRate" : {
      "from" : "PLN",
      "to" : "PLN",
      "currencyRate" : "1"
    }
  },
  "receiver" : {
    "firstName" : "John",
    "lastName" : "Novak",
    "provider" : "MASTERCARD",
    "hiddenCardNumber" : "557455******1623",
    "bankName" : "Alior Bank SA"
  },
  "sender" : {
    "firstName" : "Caroline",
    "lastName" : "Novak",
    "provider" : "CASH",
    "hiddenCardNumber" : "****************",
    "bankName" : ""
  },
  "merchantSettlementCurrency" : "USD",
  "fenigeCommissionInMerchantSettlementCurrency" : 0.05,
  "transactionAmountInMerchantSettlementCurrency" : 2.68
}

Response fields

Path Type Description

amount

Number

Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100]

amountInUsDollar

Number

Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100]

bigDecimalAmount

Number

Field informing about the amount of cash transferred with decimal precision.

commission

Number

This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100]

bigDecimalCommission

Number

This is the amount of commission that was added to the transaction at 0.01 currency.

orderId

String

Unique transaction identifier.

transactionId

String

The transactionId field is used for the Merchant to send its own internal transaction identifier. This field is returned in the response from the Check status method and sent by the Webhooks method. @Length(max = 64). Optional

createdDate

String

Date of transaction.

fundingRrn

String

Funding Retrieval Reference Number.

paymentRrn

String

Payment Retrieval Reference Number.

arn

String

Acquirer Reference Number

3DS

Boolean

Value: true/false determines if transaction was processed with 3ds

revaluationResult

Object (RevaluationResult)

Detailed information about revaluation between sender currency and receiver currency.

receiver

Object

Personal data of the person to whom the transfer is addressed.

sender

Object

Personal data of the person who performs the transfer of cash.

merchantSettlementCurrency

String

Merchant settlement currency

fenigeCommissionInMerchantSettlementCurrency

Number

Commission Fenige in merchant settlement currency

transactionAmountInMerchantSettlementCurrency

Number

Transaction amount in merchant settlement currency

RevaluationResult

Path Type Description

revaluationFundingAmount

Long

Amount (in pennies) of funding transaction in fundingCurrency

bigDecimalRevaluationFundingAmount

BigDecimal

Amount of funding transaction in fundingCurrency

fundingCurrency

String

Currency code the same as sender’s card currency

revaluationPaymentAmount

Long

Amount (in pennies) of payment transaction in paymentCurrency

bigDecimalRevaluationPaymentAmount

BigDecimal

Amount of payment transaction in paymentCurrency

paymentCurrency

String

Currency code the same as receiver’s card currency

determineCurrencyRate

Object (DetermineCurrencyRate)

Details about conversion

DetermineCurrencyRate

Path Type Description

from

Long

Currency which was conversion from

to

Long

Resulted currency

currencyRate

BigDecimal

Currency rate

203 NON-AUTHORITATIVE INFORMATION
HTTP/1.1 203 Non-Authoritative Information

After you get 203 you need to check status in a while because we processing this transaction and if you don’t get a response (200 - succeeded or 500 - declined) within 60 seconds then please contact us.

500 INTERNAL SERVER ERROR
HTTP/1.1 500 Internal Server Error
Content-Type: text/plain;charset=ISO-8859-1

PAYMENT_TRANSACTION_DECLINED:CODE_05

After receiving these statuses, the transaction was rejected

Error statuses

Name Description

FUNDING_TRANSACTION_DECLINED:CODE_XX, PAYMENT_TRANSACTION_DECLINED:CODE_XX

CODE_XX - is MasterCard response code (ISO 8583)

ISSUER_NOT_SUPPORTED

This card is not supported

ERROR_CARD_IS_BLOCKED

Card is blocked for 1 hour in Fenige

ERROR_USER_IS_BLOCKED

User is blocked in Fenige

ERROR_BIN_IS_BLOCKED

Bin is blocked for 1 hour in Fenige

ERROR_FUNDING_BANK_IS_BLOCKED

Funding bank is blocked in Fenige

ERROR_PAYMENT_BANK_IS_BLOCKED

Payment bank is blocked in Fenige

FUNDING_TRANSACTION_DECLINED:ACQ_ERROR [only for CARD-CARD]

Funding transaction was declined and payment not send

PAYMENT_TRANSACTION_DECLINED:ACQ_ERROR

Payment transaction was declined and funding was reversed

ERROR_ACQ_CONNECTION

A connection error occurred to Acquirer service

AML_ERROR

User was found on the stop list

NETWORK_ERROR

Acceptance network is unavailable

CURRENCY_RATES_NOT_FOUND

No currently effective rates found in the database

CURRENCY_NOT_SUPPORTED

Currency is not supported

MERCHANT_CURRENCY_NOT_SUPPORTED

Currency is not supported by Merchant

ERROR_SINGLE_TRANSACTION_LIMIT

Transaction limit for single transaction exceeded

ERROR_DAILY_TRANSACTION_LIMIT

Daily transaction limit for amount per card exceeded

ERROR_DAILY_COUNT_TRANSACTION_LIMIT

Daily transaction limit for count per card exceeded

ERROR_WEEKLY_TRANSACTION_LIMIT

Weekly transaction limit for amount per card exceeded

ERROR_MONTHLY_TRANSACTION_LIMIT

Monthly transaction limit for amount per card exceeded

ERROR_MONTHLY_COUNT_TRANSACTION_LIMIT

Monthly transaction limit for count per card exceeded

ERROR_DAILY_CUMULATIVE_LIMIT

Daily cumulative limit per card was exceeded

ERROR_MONTHLY_CUMULATIVE_LIMIT

Monthly cumulative limit per card was exceeded

ERROR_MERCHANT_MASTERCARD_DAILY_CUMULATIVE_LIMIT

Daily cumulative limit per merchant transactions using mastercard cards was exceeded

ERROR_MERCHANT_MASTERCARD_MONTHLY_CUMULATIVE_LIMIT

Monthly cumulative limit per merchant transactions using mastercard cards was exceeded

ERROR_MERCHANT_VISA_DAILY_CUMULATIVE_LIMIT

Daily cumulative limit per merchant transactions using visa cards was exceeded

ERROR_MERCHANT_VISA_MONTHLY_CUMULATIVE_LIMIT

Monthly cumulative limit per merchant transactions using visa cards was exceeded

ERROR_MERCHANT_DAILY_CUMULATIVE_LIMIT

Daily cumulative limit per merchant transactions using mastercard and visa cards was exceeded

ERROR_MERCHANT_MONTHLY_CUMULATIVE_LIMIT

Monthly cumulative limit per merchant transactions using mastercard and visa cards was exceeded

ERROR_SENDER_CARD_IS_BLOCKED [only for CARD-CARD]

Sender’s card is blocked

ERROR_RECEIVER_CARD_IS_BLOCKED

Receiver’s card is blocked

ERROR_SENDER_USER_IS_BLOCKED [only for CARD-CARD]

User acting as sender is blocked

ERROR_RECEIVER_USER_IS_BLOCKED

User acting as receiver is blocked

ERROR_SENDER_BIN_IS_BLOCKED [only for CARD-CARD]

BIN of sender’s card is blocked

ERROR_RECEIVER_BIN_IS_BLOCKED

BIN of receiver’s card is blocked

ERROR_AMOUNT_IS_BLOCKED

Amount is higher than acceptable limit

ERROR_MONITORING_CONNECTION

Couldn’t established connection to Monitoring service

ERROR_MONITORING

Some unrecognized error occurred

ERROR_USER_VERIFICATION

The transaction user’s personal data verified as incorrect on the verification service. Transaction rejected.

FUNDING_TRANSACTION_DECLINED:MIP_RESPONSE_TIMEOUT [only for CARD-CARD]

Funding transaction declined - mip response timeout

PAYMENT_TRANSACTION_DECLINED:MIP_RESPONSE_TIMEOUT

Payment transaction declined - mip response timeout

FUNDING_TRANSACTION_DECLINED:NEED_MANUAL_VERIFICATION [only for CARD-CARD]

Funding process failed and it is need to manual verification of transaction

PAYMENT_TRANSACTION_DECLINED:NEED_MANUAL_VERIFICATION

Payment process failed and it is need to manual verification of transaction

FUNDING_TRANSACTION_DECLINED:MIP_PROXY_RESPONSE_TIMEOUT [only for CARD-CARD]

Funding transaction declined - mip_proxy response timeout

PAYMENT_TRANSACTION_DECLINED:MIP_PROXY_RESPONSE_TIMEOUT

Payment transaction declined - mip_proxy response timeout

REJECTED [only for CASH-CARD]

Amount exceeds current merchant deposit limit

ERROR_TRANSACTION_NOT_FOUND

Error transaction not exists

ERROR_CARD_NOT_FOUND

Card was not found

ERROR_DATACORE_CONNECTION

Problem with DC

ERROR_SOMETHING_WRONG

ERROR_SOMETHING_WRONG returned when the check status method is executed means that the details for the indicated transaction could not be retrieved correctly due to an unexpected error. This does not mean that the transaction was rejected by our system. In case of receiving ERROR_SOMETHING_WRONG status, please do not hesitate to notify our support team in order to determine the correctness of the transaction execution and quickly correct the method error.

ERROR_WHILE_VALIDATING_CARD_COUNTRY_CODE_AND_USER_COUNTRY_CODE_FOR_PLAIN

This error may occur if card’s country is other than user’s country for USA or CAN transaction for PLAIN model

ERROR_WHILE_VALIDATING_CARD_COUNTRY_CODE_AND_USER_COUNTRY_CODE

This error may occur if card’s country is other than user’s country for USA or CAN transaction

ERROR_WHILE_GETTING_COUNTRY_CODE

This error may occur when system could not get card country code. Most often, the error is caused by a missing card in the parameters received from the card provider.

ERROR_WHILE_VALIDATING_PROVINCE_NOT_CORRECT_PROVINCE_CODE

Province code is not valid for USA or CAN transactions. Please update user profile

ERROR_VALIDATION

Some validation error occurred

ERROR_VALIDATION Sender type violates merchant model

This error may occur when merchant tries to make transaction in other model than assigned primarily. For example, if merchant’s model is set as CARD-CARD and then merchant will try to make transaction in CASH-CARD model, will receive error as bellow.

ERROR_VALIDATION_EXPIRY_DATE

Card expired

AMOUNT_IS_TOO_SMALL

The amount sent is too small. Enter a larger amount.

AMOUNT_IS_TOO_HIGH

The amount sent is too high. Enter a lower amount.

ERROR_MERCHANT_FUNDING_CARD_COUNTRY_RESTRICTED

Restricted funding card country was used. + This error may occur when a merchant uses a sender card issued in a country that is on the list of countries High Risk or country not allowed to perform transactions in Fenige API. Please contact support.

ERROR_MERCHANT_PAYMENT_CARD_COUNTRY_RESTRICTED

Restricted payment card country was used. + This error may occur when a merchant uses a sender card issued in a country that is on the list of countries High Risk or country not allowed to perform transactions in Fenige API. Please contact support.

ERROR_MERCHANT_NOT_SUPPORT_CARD_PROVIDER

Merchant not support the given card provider, please contact support to check merchant configuration

MERCHANT_CRYPTO_OUTSIDE_EEA_UK_NOT_SUPPORTED

Merchant crypto is not supported outside EEA+UK

ERROR_PAYMENT_CARD_COUNTRY_RESTRICTED

System does not allow the execution of transaction with the receiver card country.

ERROR_FUNDING_CARD_COUNTRY_RESTRICTED

System does not allow the execution of transaction with the sender card country.

ERROR_TRANSACTION_GEOGRAPHIC_SCOPE_BLOCKED

Geographic scope is not permitted for this transaction

ERROR_TRANSACTION_PROCESSING_TIME_TOO_LONG

Processing time of transaction was too long, transaction is declined.

MASTERCARD_MAC_TPE_EXCELLENCE_RULE

Transaction rejected, second transaction with merchant advice code 03 or 21 within 30 days.

INCORRECT_NAME_DATA

Transaction rejected, sender or receiver name contains fraudulent phrase.

ERROR_NAME_VERIFICATION

Transaction rejected, suspicious sender or receiver name.

ERROR_TRANSACTION_REJECTED_COUNTRY_OF_RESIDENCE_NOT_PERMITTED

Transaction rejected, card country is not supported for merchants crypto.

3.3.5. Check detailed status

GET /client/send-money/details/{orderId}, Authentication: Basic Auth
    The method allows obtaining a detailed status of multi-currency transaction specified by order-id. Parameter order-id was returned in the previous step (Send money
multicurrency).

From January 2021, there is an internal functionality to restrict access for the Merchant to specific method. The Fenige employee can disable access to a given endpoint, then the HTTP status 403 FORBIDDEN will be returned. The Merchant will be informed about each access restriction action.

Request
Table 17. /client/send-money/details/{orderId}
Parameter Description

orderId

Unique transaction identifier.

GET /client/send-money/details/00549d98-08cb-45d2-8673-4dcafa81f498 HTTP/1.1
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Host: java-staging.fenige.pl:8181
Response
Response status
Status Description

200 OK

Returned if the transaction completes successfully.

203 NON-AUTHORITATIVE INFORMATION

Returned when transaction was registered for processing. Check status in a while.

404 NOT FOUND

Returned when a transaction related to the given orderId doesn’t exist.

422 UNPROCESSABLE ENTITY

Returned when user provides wrong order-id or transaction was failed or was Declined.

500 INTERNAL SERVER ERROR

Returned when an internal error occur.

Example HTTP Response
200 OK
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1230

{
  "transactionId" : "TRX220132AM",
  "amount" : 1000,
  "amountInUsDollar" : 268,
  "bigDecimalAmount" : 10.0,
  "commission" : 200,
  "bigDecimalCommission" : 2.0,
  "orderId" : "00549d98-08cb-45d2-8673-4dcafa81f498",
  "createdDate" : "03-04-2018, 14:01",
  "fundingRrn" : "014011103023",
  "paymentRrn" : "014011103024",
  "arn" : "05411640143500000019325",
  "3DS" : false,
  "revaluationResult" : {
    "revaluationFundingAmount" : 1000,
    "bigDecimalRevaluationFundingAmount" : 10.0,
    "fundingCurrency" : "PLN",
    "revaluationPaymentAmount" : 1000,
    "bigDecimalRevaluationPaymentAmount" : 10.0,
    "paymentCurrency" : "PLN",
    "determineCurrencyRate" : {
      "from" : "PLN",
      "to" : "PLN",
      "currencyRate" : "1"
    }
  },
  "receiver" : {
    "firstName" : "John",
    "lastName" : "Novak",
    "provider" : "MASTERCARD",
    "hiddenCardNumber" : "557455******1623",
    "bankName" : "Alior Bank SA"
  },
  "sender" : {
    "firstName" : "Caroline",
    "lastName" : "Novak",
    "provider" : "CASH"
  },
  "transactionStatus" : "APPROVED",
  "merchantSettlementCurrency" : "USD",
  "fenigeCommissionInMerchantSettlementCurrency" : 0.05,
  "transactionAmountInMerchantSettlementCurrency" : 2.68
}

Response fields

Path Type Description

amount

Number

Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100]

amountInUsDollar

Number

Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100]

bigDecimalAmount

Number

Field informing about the amount of cash transferred with decimal precision.

commission

Number

This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100]

bigDecimalCommission

Number

This is the amount of commission that was added to the transaction at 0.01 currency.

orderId

String

Unique transaction identifier.

transactionId

String

The transactionId field is used for the Merchant to send its own internal transaction identifier. This field is returned in the response from the Check status method and sent by the Webhooks method. @Length(max = 64). Optional

createdDate

String

Date of transaction.

fundingRrn

String

Funding Retrieval Reference Number.

paymentRrn

String

Payment Retrieval Reference Number.

arn

String

Acquirer Reference Number

3DS

Boolean

Value: true/false determines if transaction was processed with 3ds

revaluationResult

Object (RevaluationResult)

Detailed information about revaluation between sender currency and receiver currency.

receiver

Object

Personal data of the person to whom the transfer is addressed.

sender

Object

Personal data of the person who performs the transfer of cash.

merchantSettlementCurrency

String

Merchant settlement currency

fenigeCommissionInMerchantSettlementCurrency

Number

Commission Fenige in merchant settlement currency

transactionAmountInMerchantSettlementCurrency

Number

Transaction amount in merchant settlement currency

transactionStatus

String

Status of the transaction (PENDING, APPROVED, DECLINED, REJECTED, REVERSED)

RevaluationResult

Path Type Description

revaluationFundingAmount

Long

Amount (in pennies) of funding transaction in fundingCurrency

bigDecimalRevaluationFundingAmount

BigDecimal

Amount of funding transaction in fundingCurrency

fundingCurrency

String

Currency code the same as sender’s card currency

revaluationPaymentAmount

Long

Amount (in pennies) of payment transaction in paymentCurrency

bigDecimalRevaluationPaymentAmount

BigDecimal

Amount of payment transaction in paymentCurrency

paymentCurrency

String

Currency code the same as receiver’s card currency

determineCurrencyRate

Object (DetermineCurrencyRate)

Details about conversion

DetermineCurrencyRate

Path Type Description

from

Long

Currency which was conversion from

to

Long

Resulted currency

currencyRate

BigDecimal

Currency rate

203 NON-AUTHORITATIVE INFORMATION
HTTP/1.1 203 Non-Authoritative Information

After you get 203 you need to check status in a while because we processing this transaction and if you don’t get a response (200 - succeeded or 500 - declined) within 60 seconds then please contact us.

404 NOT FOUND
HTTP/1.1 404 Not Found
Content-Type: application/json
Content-Length: 51

{
  "errorStatus" : "ERROR_TRANSACTION_NOT_FOUND"
}

Response fields

Path Type Description

errorStatus

String

Additional data of the error occurred during a processing of the request

422 UNPROCESSABLE ENTITY
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json
Content-Length: 1287

{
  "transactionId" : "TRX220132AM",
  "amount" : 1000,
  "amountInUsDollar" : 268,
  "bigDecimalAmount" : 10.0,
  "commission" : 200,
  "bigDecimalCommission" : 2.0,
  "orderId" : "00549d98-08cb-45d2-8673-4dcafa81f498",
  "createdDate" : "03-04-2018, 14:01",
  "fundingRrn" : "014011103023",
  "paymentRrn" : "014011103024",
  "arn" : "05411640143500000019325",
  "3DS" : true,
  "revaluationResult" : {
    "revaluationFundingAmount" : 1000,
    "bigDecimalRevaluationFundingAmount" : 10.0,
    "fundingCurrency" : "PLN",
    "revaluationPaymentAmount" : 1000,
    "bigDecimalRevaluationPaymentAmount" : 10.0,
    "paymentCurrency" : "PLN",
    "determineCurrencyRate" : {
      "from" : "PLN",
      "to" : "PLN",
      "currencyRate" : "1"
    }
  },
  "receiver" : {
    "firstName" : "John",
    "lastName" : "Novak",
    "provider" : "MASTERCARD",
    "hiddenCardNumber" : "557455******1623",
    "bankName" : "Alior Bank SA"
  },
  "sender" : {
    "firstName" : "Caroline",
    "lastName" : "Novak",
    "provider" : "MASTERCARD",
    "hiddenCardNumber" : "511796******9169",
    "bankName" : "Alior Bank SA"
  },
  "transactionStatus" : "DECLINED",
  "cardBlockType" : "TEMP",
  "cardBlockedUntil" : "2024-03-30T01:03:52.133",
  "errorStatus" : "ERROR_SENDER_CARD_IS_BLOCKED"
}

Response fields

Path Type Description

amount

Number

Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100]

amountInUsDollar

Number

Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100]

bigDecimalAmount

Number

Field informing about the amount of cash transferred with decimal precision.

commission

Number

This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100]

bigDecimalCommission

Number

This is the amount of commission that was added to the transaction at 0.01 currency.

orderId

String

Unique transaction identifier.

transactionId

String

The transactionId field is used for the Merchant to send its own internal transaction identifier. This field is returned in the response from the Check status method and sent by the Webhooks method. @Length(max = 64). Optional

createdDate

String

Date of transaction.

fundingRrn

String

Funding Retrieval Reference Number.

paymentRrn

String

Payment Retrieval Reference Number.

arn

String

Acquirer Reference Number

3DS

Boolean

Value: true/false determines if transaction was processed with 3ds

revaluationResult

Object (RevaluationResult)

Detailed information about revaluation between sender currency and receiver currency.

receiver

Object

Personal data of the person to whom the transfer is addressed.

sender

Object

Personal data of the person who performs the transfer of cash.

transactionStatus

String

Status of the transaction (PENDING, APPROVED, DECLINED, REJECTED, REVERSED)

errorStatus

String

Additional data of the error occurred during a processing of the request

cardBlockType

String

Card lock type

cardBlockedUntil

String

Card’s lock end date

merchantAdviceCode

String

Information about the reasons for declined transactions and actions that merchants can take. Occurs only for mastercard and for rejected transactions if Mastercard returns this information

RevaluationResult

Path Type Description

revaluationFundingAmount

Long

Amount (in pennies) of funding transaction in fundingCurrency

bigDecimalRevaluationFundingAmount

BigDecimal

Amount of funding transaction in fundingCurrency

fundingCurrency

String

Currency code the same as sender’s card currency

revaluationPaymentAmount

Long

Amount (in pennies) of payment transaction in paymentCurrency

bigDecimalRevaluationPaymentAmount

BigDecimal

Amount of payment transaction in paymentCurrency

paymentCurrency

String

Currency code the same as receiver’s card currency

determineCurrencyRate

Object (DetermineCurrencyRate)

Details about conversion

DetermineCurrencyRate

Path Type Description

from

Long

Currency which was conversion from

to

Long

Resulted currency

currencyRate

BigDecimal

Currency rate

422 UNPROCESSABLE ENTITY CASH-CARD
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json
Content-Length: 1358

{
  "transactionId" : "TRX220132AM",
  "amount" : 1000,
  "amountInUsDollar" : 268,
  "bigDecimalAmount" : 10.0,
  "commission" : 200,
  "bigDecimalCommission" : 2.0,
  "orderId" : "00549d98-08cb-45d2-8673-4dcafa81f498",
  "createdDate" : "03-04-2018, 14:01",
  "fundingRrn" : "014011103023",
  "paymentRrn" : "014011103024",
  "arn" : "05411640143500000019325",
  "3DS" : false,
  "revaluationResult" : {
    "revaluationFundingAmount" : 1000,
    "bigDecimalRevaluationFundingAmount" : 10.0,
    "fundingCurrency" : "PLN",
    "revaluationPaymentAmount" : 1000,
    "bigDecimalRevaluationPaymentAmount" : 10.0,
    "paymentCurrency" : "PLN",
    "determineCurrencyRate" : {
      "from" : "PLN",
      "to" : "PLN",
      "currencyRate" : "1"
    }
  },
  "receiver" : {
    "firstName" : "John",
    "lastName" : "Novak",
    "provider" : "MASTERCARD",
    "hiddenCardNumber" : "557455******1623",
    "bankName" : "Alior Bank SA"
  },
  "sender" : {
    "firstName" : "Caroline",
    "lastName" : "Novak",
    "provider" : "CASH"
  },
  "transactionStatus" : "DECLINED",
  "merchantSettlementCurrency" : "USD",
  "fenigeCommissionInMerchantSettlementCurrency" : 0.05,
  "transactionAmountInMerchantSettlementCurrency" : 2.68,
  "cardBlockType" : "TEMP",
  "cardBlockedUntil" : "2024-03-30T01:03:52.560",
  "errorStatus" : "ERROR_SENDER_CARD_IS_BLOCKED"
}

Response fields

Path Type Description

amount

Number

Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100]

amountInUsDollar

Number

Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100]

bigDecimalAmount

Number

Field informing about the amount of cash transferred with decimal precision.

commission

Number

This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100]

bigDecimalCommission

Number

This is the amount of commission that was added to the transaction at 0.01 currency.

orderId

String

Unique transaction identifier.

transactionId

String

The transactionId field is used for the Merchant to send its own internal transaction identifier. This field is returned in the response from the Check status method and sent by the Webhooks method. @Length(max = 64). Optional

createdDate

String

Date of transaction.

fundingRrn

String

Funding Retrieval Reference Number.

paymentRrn

String

Payment Retrieval Reference Number.

arn

String

Acquirer Reference Number

3DS

Boolean

Value: true/false determines if transaction was processed with 3ds

revaluationResult

Object (RevaluationResult)

Detailed information about revaluation between sender currency and receiver currency.

receiver

Object

Personal data of the person to whom the transfer is addressed.

sender

Object

Personal data of the person who performs the transfer of cash.

merchantSettlementCurrency

String

Merchant settlement currency

fenigeCommissionInMerchantSettlementCurrency

Number

Commission Fenige in merchant settlement currency

transactionAmountInMerchantSettlementCurrency

Number

Transaction amount in merchant settlement currency

transactionStatus

String

Status of the transaction (PENDING, APPROVED, DECLINED, REJECTED, REVERSED)

errorStatus

String

The code of the error occurred during a processing of the request

cardBlockType

String

Card lock type

cardBlockedUntil

String

Card’s lock end date

merchantAdviceCode

String

Information about the reasons for declined transactions and actions that merchants can take. Occurs only for mastercard and for declined transactions if Mastercard returns this information

RevaluationResult

Path Type Description

revaluationFundingAmount

Long

Amount (in pennies) of funding transaction in fundingCurrency

bigDecimalRevaluationFundingAmount

BigDecimal

Amount of funding transaction in fundingCurrency

fundingCurrency

String

Currency code the same as sender’s card currency

revaluationPaymentAmount

Long

Amount (in pennies) of payment transaction in paymentCurrency

bigDecimalRevaluationPaymentAmount

BigDecimal

Amount of payment transaction in paymentCurrency

paymentCurrency

String

Currency code the same as receiver’s card currency

determineCurrencyRate

Object (DetermineCurrencyRate)

Details about conversion

DetermineCurrencyRate

Path Type Description

from

Long

Currency which was conversion from

to

Long

Resulted currency

currencyRate

BigDecimal

Currency rate

500 INTERNAL SERVER ERROR
HTTP/1.1 500 Internal Server Error
Content-Type: application/json
Content-Length: 69

{
  "errorStatus" : "ERROR_SOMETHING_WRONG - Something went wrong."
}

Response fields

Path Type Description

errorStatus

String

Additional data of the error occurred during a processing of the request

3.4. BLIK to Card

POST /api/v2/client/send-money Content-Type: application/vnd.sendmoney.v2+json, Authorization: Basic Auth, API-TOKEN*
Innovative technology that allows to send money between BLIK and cards instantly anywhere in the world. No SWIFT or bank account number needed!
This method is used to MoneySend transaction (funding and payment). To enable users to make transfers in any currency, Fenige introduces the send-money method for
multicurrency.
1 - User by selecting type = SENDER defines amount of funding in PLN. This amount is collected from sender card in PLN currency.
2 - User by selecting type = RECEIVER defines amount of payment in given currency. This amount is transferred to receiver card in selected currency.
In case there's need revaluation from one currency to another, system uses lowerRate for situation 1 and higherRate for situation 2.
For more details about specific rates please refer to Currency Rate method.
TIP: Please notice that you can choose language of email confirmation of this transaction. It is able by attach proper header to request.
SM MULTI CURRENCY
The success of the multicurrency send-money transaction depends primarily on the correctness of the merchant's currency configuration which is done by the admin. To make transactions in a currency other than the currency of the card, contact the admin.
In order to provide users with the ability to safely retry transaction (for example to request for an undelivered response), the v2 of API supports idempotent send money multi-currency operation.
To use the BLIK to card transfer service, you will need to have a mobile banking app from one of the participating banks. Follow the instructions on the app to complete the transfer. Once you have confirmed the transaction, the money
will be transferred to the card instantly.

From January 2021, there is an internal functionality to restrict access for the Merchant to specific method. The Fenige employee can disable access to a given endpoint, then the HTTP status 403 FORBIDDEN will be returned. The Merchant will be informed about each access restriction action.

When performing authorization, remember that there are currencies with different number of decimal places. For example: VND has no pennies and KWD has three decimal places. Please take this into account in the Amout field. For more information on other currencies, see ISO 4217.

3.4.1. Request

Request fields

Table 18. Multicurrency
Path Type Validation Rule Description

amount

Number

Required

@NotNull, positive

The total transfer amount (in pennies)

cvc2

String

Required

@Length(min = 3, max = 3)

Sender card cvc2/cvv2

merchantUrl

String

Required except CASH-PLAIN transactions.

@NotNull except CASH-PLAIN

Merchant identifier such as the business website URL or reverse domain name as presented to the consumer during checkout

addressIp

String

Required except CASH-PLAIN transactions @Must conform to the IPv4 or IPv6 standard.

@NotNull except CASH-PLAIN

The IP address of the order of transaction.

type

String

Required

@NotNull

Transaction in 'SENDER' or 'RECEIVER' currency, for specific transaction type. CARD_CARD: above, CASH_CARD: RECEIVER, CARD_CASH: SENDER.

requestId

String

Required

@NotNull

128 bit number generated by the user, used to identify single transaction. Ensures that the transaction with the given parameter is processed only once.

transactionId

String

Optional

@Length(max = 64)

The transactionId field is used for the Merchant to send its own internal transaction identifier. This field is returned in the response from the Check status method and sent by the Webhooks method.

sender

Object

Required

@NotNull

Sender PLAIN Sender CASH Sender DATACORE Sender BLIK

receiver

Object

Required

@NotNull

Receiver PLAIN Receiver CASH Receiver DATACORE Receiver PHONE

Example HTTP Request
BLIK-PLAIN
POST /api/v2/client/send-money HTTP/1.1
Content-Type: application/vnd.sendmoney.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 1225
Host: java-staging.fenige.pl:8181

{
  "amount" : 1000,
  "cvc2" : "123",
  "merchantUrl" : "https://fenige.pl/payments",
  "addressIp" : "192.168.0.1",
  "type" : "SENDER",
  "requestId" : "7d4267e0-094f-4f23-bd45-a32b651cc3dd",
  "transactionId" : "TRX220132AM",
  "sender" : {
    "type" : "BLIK",
    "firstName" : "Mark",
    "lastName" : "Smith",
    "street" : "Olszewskiego",
    "houseNumber" : "17A",
    "city" : "Lublin",
    "postalCode" : "20-400",
    "flatNumber" : "2",
    "email" : "senderEmail@fenige.pl",
    "birthDate" : "2024-03-28",
    "country" : "PL",
    "personalId" : "AGC688910",
    "currency" : "PLN",
    "firstDescriptionLine" : "Shop description",
    "secondDescriptionLine" : "Second line of description",
    "thirdDescriptionLine" : "Third line of description",
    "fourthDescriptionLine" : "https://ecom-staging.fenige.pl/",
    "redirectUrlAuthorized" : "https://ecom-staging.fenige.pl/transaction/authorized",
    "redirectUrlDenied" : "https://ecom-staging.fenige.pl/transaction/denied"
  },
  "receiver" : {
    "type" : "PLAIN",
    "firstName" : "Rob",
    "lastName" : "Wring",
    "birthDate" : "2024-03-28",
    "cardNumber" : "5117964247989169",
    "currency" : "PLN",
    "countryOfResidence" : "PL"
  }
}

3.4.2. Response

Response status
Status Description

200 OK - Error validation

Returned list of field name which has validation errors.

202 Accepted

- Returned when the transaction with the provided requestId has been registered in the system, but has not yet been completed. The user can retry in a few seconds to get the transaction result. Response body: Empty
or
- Returned order-id when transaction will be processed.

400 Bad Request

Returned e.g. when a different transaction with the provided requestId has already been registered in the system.

401 Unauthorized

Returned when API-TOKEN was broken.

Example HTTP Response
202 Accepted BLIK
HTTP/1.1 202 Accepted
Content-Type: application/json
Content-Length: 1261

{
  "orderId" : "45557168-c210-4ecf-95b4-698ff736fe28",
  "base64Form" : "PGh0bWw+PFNDUklQVCBMQU5HVUFHRT0iSmF2YXNjcmlwdCI+ZnVuY3Rpb24gT25Mb2FkRXZlbnQoKSB7ZG9jdW1lbnQuZG93bmxvYWRGb3JtLnN1Ym1pdCgpO308L1NDUklQVD48Ym9keSBPbkxvYWQ9Ik9uTG9hZEV2ZW50KCk7Ij48Zm9ybSBuYW1lPSJkb3dubG9hZEZvcm0iIGFjY2VwdC1jaGFyc2V0PSJJU08tODg1OS0yIiBhY3Rpb249Imh0dHBzOi8vMTkzLjI3LjYuMjI1L2JsaWt3ZWIvdHJhbnNhY3Rpb24vdHJhbnNhY3Rpb25faW5pdC9zdWJtaXQiIG1ldGhvZD0iUE9TVCI+PElOUFVUIHR5cGU9ImhpZGRlbiIgbmFtZT0iVHlwZSIgdmFsdWU9IklwYXkyIj48SU5QVVQgdHlwZT0iaGlkZGVuIiBuYW1lPSJNZXJjaGFudElEIiB2YWx1ZT0iMTcxOTUiPjxJTlBVVCB0eXBlPSJoaWRkZW4iIG5hbWU9IkN1cnJlbmN5IiB2YWx1ZT0iUExOIj48SU5QVVQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBbW91bnQiIHZhbHVlPSIxMDAwIj48SU5QVVQgdHlwZT0iaGlkZGVuIiBuYW1lPSJDdXN0b21QYXJhbSIgdmFsdWU9Ijg0MGY1ZjYzOGY0OTQwNGZiMGU1OGQwMDU1NTg1NzM4Ij48SU5QVVQgdHlwZT0iaGlkZGVuIiBuYW1lPSJEZXNjcmlwdGlvbiIgdmFsdWU9ImV4YW1wbGV8ZGVzY3JpcHRpb258w7PEhcWbxIfFm8SFfCI+PElOUFVUIHR5cGU9ImhpZGRlbiIgbmFtZT0iVGltZXN0YW1wIiB2YWx1ZT0iMjAyMi0wNi0yOVQxNTo0MDo1OC4zMjIrMDI6MDAiPjxJTlBVVCB0eXBlPSJoaWRkZW4iIG5hbWU9Ik1DQyIgdmFsdWU9IjA3NDIiPjxJTlBVVCB0eXBlPSJoaWRkZW4iIG5hbWU9IkNvbnRyb2xEYXRhIiB2YWx1ZT0iZDkyZjI2MTI1NmQwMWNiNjU4ZWI3MzIwZDczNDE2MjYyOGNhOTViNzRmYWRmY2UxOGFmMDliMDdkOWIwOGNjMCI+PC9mb3JtPjwvYm9keT48L2h0bWw+"
}

Response fields

Path Type Description

orderId

String

Unique transaction identifier

base64Form

String

HTML page encoded base64 that includes all necessary data that has to be send to BLIK. Page can be simply decoded and used for making transactions.

400 Bad request
HTTP/1.1 400 Bad Request
Content-Type: application/json
Content-Length: 104

{
  "error" : {
    "message" : "Another transaction with the same id has already been processed."
  }
}
200 OK - Error validation
HTTP/1.1 200 OK
Content-Type: application/json;charset=ISO-8859-1

{
	"status": "ERROR_VALIDATION",
	"error": {
		"message": "Some information is missing or incorrect.",
		"errors": [{
				"field": "requestId",
				"message": [
					"may not be null"
				]
			},
			{
				"field": "cvc2",
				"message": [
					"may not be null",
					"length must be 3"
				]
			},
			{
				"field": "type",
				"message": [
					"may not be null"
				]
			},
			{
				"field": "amount",
				"message": [
					"may not be null"
				]
			},
			{
				"field": "sender",
				"message": [
					"may not be null"
				]
			},
			{
				"field": "sender.cardNumber",
				"message": [
					"may not be null",
					"may not be empty",
					"card number length must be 16"
				]
			},
			{
				"field": "sender.expirationDate",
				"message": [
					"invalid card expiration date",
					"may not be null",
					"may not be empty"
				]
			},
			{
				"field": "sender.city",
				"message": [
					"may not be empty",
					"may not be null",
					"length must be between 1 and 25"
				]
			},
			{
				"field": "sender.street",
				"message": [
					"may not be null",
					"may not be empty",
					"length must be between 1 and 50"
				]
			},
            {
				"field": "sender.postalCode",
				"message": [
					"may not be empty",
					"may not be null",
					"length must be between 1 and 10"
				]
			},
            {
                "field": "sender.flatNumber",
                "message": [
                    "must be null",
                    "length must be between 0 and 5"
                ]
            },
			{
				"field": "sender.lastName",
				"message": [
					"may not be empty",
					"may not be null",
					"length must be between 2 and 35"
				]
			},
			{
				"field": "sender.houseNumber",
				"message": [
					"may not be empty",
					"may not be null",
					"length must be between 1 and 10",
                    "must match the expression: [1-9][0-9]{0,4}(?:[A-z]?[0-9]{0,4})?((?:[-/ ][1-9]?[A-z]?[0-9]{0,4})*[A-z]?)?$"
				]
			},
			{
				"field": "sender.firstName",
				"message": [
					"may not be empty",
					"may not be null",
					"length must be between 2 and 35"
				]
			},
            {
				"field": "sender.email",
				"message": [
					"may not be empty",
					"may not be null",
					"not a well-formed email address",
					"lenght must be beetween 1 and 128"
				]
			},
			{
				"field": "receiver",
				"message": [
					"may not be null"
				]
			},
			{
				"field": "receiver.firstName",
				"message": [
					"may not be empty",
					"may not be null",
					"length must be between 2 and 35"
				]
			},
			{
				"field": "receiver.lastName",
				"message": [
					"may not be empty",
					"may not be null",
					"length must be between 2 and 35"
				]
			},
			{
				"field": "receiver.currency",
				"message": [
					"may not be null"
				]
			},
			{
				"field": "receiver.cardNumber",
				"message": [
					"may not be null",
					"may not be empty",
					"card number length must be 16"
				]
			},
			{
                "field": "sender",
                "message": [
                     "province is mandatory only if country code is US or CA"
                ]
            },
            {
                "field": "sender.province",
                "message": [
                      "is not correct province code for country code US",
                      "may not be null"
                ]
            },
            {
                "field": "sender.province",
                 "message": [
                       "may not be null",
                       "is not correct province code for country code CA"
                 ]
            },
            {
                 "field": "sender.province",
                 "message": [
                        "must match ^[A-Z]{2}$",
                        "is not correct province code for country code US"
                 ]
            },
            {
                 "field": "sender.currency",
                 "message": [
                       "Currency is not supported"
                ]
            },
            {
                 "field": "receiver.currency",
                 "message": [
                       "Currency is not supported"
                ]
            }
		]
	}
}
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "ERROR_API_TOKEN_NOT_FOUND",
    "error": {
        "message": "API-TOKEN header not found in request with DATACORE/PHONE model in sender or receiver."
    }
}
401 UNAUTHORIZED
HTTP/1.1 401 Unauthorized
Content-Type: application/json

{
      "timestamp": "2021-12-22T12:39:53.168+0000",
      "status": 401,
      "error": "Unauthorized",
      "message": "Username or password is not correct",
      "path": "/api/v2/client/send-money"
}
HTTP/1.1 401 Unauthorized
Content-Type: application/json

{
      "timestamp": "2021-12-22T12:39:53.168+0000",
      "status": 401,
      "error": "Unauthorized",
      "message": "ERROR_USER_NOTFOUND",
      "path": "/api/v2/client/send-money"
}
Table 19. Response fields
Path Description

timestamp

Time when request was executed

status

Http response code

error

Http status name

message

Message for response code

path

Path to a specific resource

403 FORBIDDEN
HTTP Response - Error
HTTP/1.1 403 Forbidden
Content-Type: application/json

{
    "timestamp": 1610464313387,
    "status": 403,
    "error": "Forbidden",
    "message": "No message available",
    "path": "/client/send-money-3ds"
}

3.4.3. BLIK

General information

BLIK is a popular mobile payment system, enabling users to carry out secure transactions using their smartphones. Integrated within banking apps, BLIK allows for online and in-store payments, ATM withdrawals, and more, through a generated six-digit code, making financial transactions swift and straightforward.

How does it work

Customer choose the BLIK payment method, in order to complete the transaction he has to provide a BLIK code from bank application. The BLIK code is a one-off, 6-digit code, it is valid for 2 minutes. After that time, new one has to be generated. When code is provide it has to be also confirmed in bank app and that ends the transaction.

Example BLIK payment form

eblik payment form

For development purposes, please note the following special rule for BLIK codes: Use codes that begin with "777 xxx", to process payment successfully. For codes that begin with any other number, the transaction will be rejected.

3.4.4. Check status

GET /client/send-money/{orderId}, Authentication: Basic Auth
The method allows obtaining a status of multi-currency transaction specified by order-id. Parameter order-id was returned in the previous step (Send money multicurrency).

From January 2021, there is an internal functionality to restrict access for the Merchant to specific method. The Fenige employee can disable access to a given endpoint, then the HTTP status 403 FORBIDDEN will be returned. The Merchant will be informed about each access restriction action.

Request
Table 20. /client/send-money/{orderId}
Parameter Description

orderId

Unique transaction identifier.

GET /client/send-money/00549d98-08cb-45d2-8673-4dcafa81f498 HTTP/1.1
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Host: java-staging.fenige.pl:8181
Response
Response status
Status Description

200 OK

Returned if the transaction completes successfully.

203 NON-AUTHORITATIVE INFORMATION

Returned when transaction was registered for processing. Check status in a while.

500 INTERNAL SERVER ERROR

Returned when user provides wrong order-id or transaction was failed or was Declined.

Example HTTP Response
200 OK
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1123

{
  "transactionId" : "TRX220132AM",
  "amount" : 1000,
  "amountInUsDollar" : 268,
  "bigDecimalAmount" : 10.0,
  "commission" : 200,
  "bigDecimalCommission" : 2.0,
  "orderId" : "00549d98-08cb-45d2-8673-4dcafa81f498",
  "createdDate" : "03-04-2018, 14:01",
  "fundingRrn" : "014011103023",
  "paymentRrn" : "014011103024",
  "arn" : "05411640143500000019325",
  "3DS" : true,
  "revaluationResult" : {
    "revaluationFundingAmount" : 1000,
    "bigDecimalRevaluationFundingAmount" : 10.0,
    "fundingCurrency" : "PLN",
    "revaluationPaymentAmount" : 1000,
    "bigDecimalRevaluationPaymentAmount" : 10.0,
    "paymentCurrency" : "PLN",
    "determineCurrencyRate" : {
      "from" : "PLN",
      "to" : "PLN",
      "currencyRate" : "1"
    }
  },
  "receiver" : {
    "firstName" : "John",
    "lastName" : "Novak",
    "provider" : "MASTERCARD",
    "hiddenCardNumber" : "557455******1623",
    "bankName" : "Alior Bank SA"
  },
  "sender" : {
    "firstName" : "Caroline",
    "lastName" : "Novak",
    "provider" : "MASTERCARD",
    "hiddenCardNumber" : "511796******9169",
    "bankName" : "Alior Bank SA"
  }
}

Response fields

Path Type Description

amount

Number

Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100]

amountInUsDollar

Number

Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100]

bigDecimalAmount

Number

Field informing about the amount of cash transferred with decimal precision.

commission

Number

This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100]

bigDecimalCommission

Number

This is the amount of commission that was added to the transaction at 0.01 currency.

orderId

String

Unique transaction identifier.

transactionId

String

The transactionId field is used for the Merchant to send its own internal transaction identifier. This field is returned in the response from the Check status method and sent by the Webhooks method. @Length(max = 64). Optional

createdDate

String

Date of transaction.

fundingRrn

String

Funding Retrieval Reference Number.

paymentRrn

String

Payment Retrieval Reference Number.

arn

String

Acquirer Reference Number

3DS

Boolean

Value: true/false determines if transaction was processed with 3ds

revaluationResult

Object (RevaluationResult)

Detailed information about revaluation between sender currency and receiver currency.

receiver

Object

Personal data of the person to whom the transfer is addressed.

sender

Object

Personal data of the person who performs the transfer of cash.

RevaluationResult

Path Type Description

revaluationFundingAmount

Long

Amount (in pennies) of funding transaction in fundingCurrency

bigDecimalRevaluationFundingAmount

BigDecimal

Amount of funding transaction in fundingCurrency

fundingCurrency

String

Currency code the same as sender’s card currency

revaluationPaymentAmount

Long

Amount (in pennies) of payment transaction in paymentCurrency

bigDecimalRevaluationPaymentAmount

BigDecimal

Amount of payment transaction in paymentCurrency

paymentCurrency

String

Currency code the same as receiver’s card currency

determineCurrencyRate

Object (DetermineCurrencyRate)

Details about conversion

DetermineCurrencyRate

Path Type Description

from

Long

Currency which was conversion from

to

Long

Resulted currency

currencyRate

BigDecimal

Currency rate

200 OK CASH-CARD
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1260

{
  "transactionId" : "TRX220132AM",
  "amount" : 1000,
  "amountInUsDollar" : 268,
  "bigDecimalAmount" : 10.0,
  "commission" : 200,
  "bigDecimalCommission" : 2.0,
  "orderId" : "00549d98-08cb-45d2-8673-4dcafa81f498",
  "createdDate" : "03-04-2018, 14:01",
  "fundingRrn" : "014011103023",
  "paymentRrn" : "014011103024",
  "arn" : "05411640143500000019325",
  "3DS" : false,
  "revaluationResult" : {
    "revaluationFundingAmount" : 1000,
    "bigDecimalRevaluationFundingAmount" : 10.0,
    "fundingCurrency" : "PLN",
    "revaluationPaymentAmount" : 1000,
    "bigDecimalRevaluationPaymentAmount" : 10.0,
    "paymentCurrency" : "PLN",
    "determineCurrencyRate" : {
      "from" : "PLN",
      "to" : "PLN",
      "currencyRate" : "1"
    }
  },
  "receiver" : {
    "firstName" : "John",
    "lastName" : "Novak",
    "provider" : "MASTERCARD",
    "hiddenCardNumber" : "557455******1623",
    "bankName" : "Alior Bank SA"
  },
  "sender" : {
    "firstName" : "Caroline",
    "lastName" : "Novak",
    "provider" : "CASH",
    "hiddenCardNumber" : "****************",
    "bankName" : ""
  },
  "merchantSettlementCurrency" : "USD",
  "fenigeCommissionInMerchantSettlementCurrency" : 0.05,
  "transactionAmountInMerchantSettlementCurrency" : 2.68
}

Response fields

Path Type Description

amount

Number

Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100]

amountInUsDollar

Number

Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100]

bigDecimalAmount

Number

Field informing about the amount of cash transferred with decimal precision.

commission

Number

This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100]

bigDecimalCommission

Number

This is the amount of commission that was added to the transaction at 0.01 currency.

orderId

String

Unique transaction identifier.

transactionId

String

The transactionId field is used for the Merchant to send its own internal transaction identifier. This field is returned in the response from the Check status method and sent by the Webhooks method. @Length(max = 64). Optional

createdDate

String

Date of transaction.

fundingRrn

String

Funding Retrieval Reference Number.

paymentRrn

String

Payment Retrieval Reference Number.

arn

String

Acquirer Reference Number

3DS

Boolean

Value: true/false determines if transaction was processed with 3ds

revaluationResult

Object (RevaluationResult)

Detailed information about revaluation between sender currency and receiver currency.

receiver

Object

Personal data of the person to whom the transfer is addressed.

sender

Object

Personal data of the person who performs the transfer of cash.

merchantSettlementCurrency

String

Merchant settlement currency

fenigeCommissionInMerchantSettlementCurrency

Number

Commission Fenige in merchant settlement currency

transactionAmountInMerchantSettlementCurrency

Number

Transaction amount in merchant settlement currency

RevaluationResult

Path Type Description

revaluationFundingAmount

Long

Amount (in pennies) of funding transaction in fundingCurrency

bigDecimalRevaluationFundingAmount

BigDecimal

Amount of funding transaction in fundingCurrency

fundingCurrency

String

Currency code the same as sender’s card currency

revaluationPaymentAmount

Long

Amount (in pennies) of payment transaction in paymentCurrency

bigDecimalRevaluationPaymentAmount

BigDecimal

Amount of payment transaction in paymentCurrency

paymentCurrency

String

Currency code the same as receiver’s card currency

determineCurrencyRate

Object (DetermineCurrencyRate)

Details about conversion

DetermineCurrencyRate

Path Type Description

from

Long

Currency which was conversion from

to

Long

Resulted currency

currencyRate

BigDecimal

Currency rate

203 NON-AUTHORITATIVE INFORMATION
HTTP/1.1 203 Non-Authoritative Information

After you get 203 you need to check status in a while because we processing this transaction and if you don’t get a response (200 - succeeded or 500 - declined) within 60 seconds then please contact us.

500 INTERNAL SERVER ERROR
HTTP/1.1 500 Internal Server Error
Content-Type: text/plain;charset=ISO-8859-1

PAYMENT_TRANSACTION_DECLINED:CODE_05

After receiving these statuses, the transaction was rejected

Error statuses

Name Description

FUNDING_TRANSACTION_DECLINED:CODE_XX, PAYMENT_TRANSACTION_DECLINED:CODE_XX

CODE_XX - is MasterCard response code (ISO 8583)

ISSUER_NOT_SUPPORTED

This card is not supported

ERROR_CARD_IS_BLOCKED

Card is blocked for 1 hour in Fenige

ERROR_USER_IS_BLOCKED

User is blocked in Fenige

ERROR_BIN_IS_BLOCKED

Bin is blocked for 1 hour in Fenige

ERROR_FUNDING_BANK_IS_BLOCKED

Funding bank is blocked in Fenige

ERROR_PAYMENT_BANK_IS_BLOCKED

Payment bank is blocked in Fenige

FUNDING_TRANSACTION_DECLINED:ACQ_ERROR [only for CARD-CARD]

Funding transaction was declined and payment not send

PAYMENT_TRANSACTION_DECLINED:ACQ_ERROR

Payment transaction was declined and funding was reversed

ERROR_ACQ_CONNECTION

A connection error occurred to Acquirer service

AML_ERROR

User was found on the stop list

NETWORK_ERROR

Acceptance network is unavailable

CURRENCY_RATES_NOT_FOUND

No currently effective rates found in the database

CURRENCY_NOT_SUPPORTED

Currency is not supported

MERCHANT_CURRENCY_NOT_SUPPORTED

Currency is not supported by Merchant

ERROR_SINGLE_TRANSACTION_LIMIT

Transaction limit for single transaction exceeded

ERROR_DAILY_TRANSACTION_LIMIT

Daily transaction limit for amount per card exceeded

ERROR_DAILY_COUNT_TRANSACTION_LIMIT

Daily transaction limit for count per card exceeded

ERROR_WEEKLY_TRANSACTION_LIMIT

Weekly transaction limit for amount per card exceeded

ERROR_MONTHLY_TRANSACTION_LIMIT

Monthly transaction limit for amount per card exceeded

ERROR_MONTHLY_COUNT_TRANSACTION_LIMIT

Monthly transaction limit for count per card exceeded

ERROR_DAILY_CUMULATIVE_LIMIT

Daily cumulative limit per card was exceeded

ERROR_MONTHLY_CUMULATIVE_LIMIT

Monthly cumulative limit per card was exceeded

ERROR_MERCHANT_MASTERCARD_DAILY_CUMULATIVE_LIMIT

Daily cumulative limit per merchant transactions using mastercard cards was exceeded

ERROR_MERCHANT_MASTERCARD_MONTHLY_CUMULATIVE_LIMIT

Monthly cumulative limit per merchant transactions using mastercard cards was exceeded

ERROR_MERCHANT_VISA_DAILY_CUMULATIVE_LIMIT

Daily cumulative limit per merchant transactions using visa cards was exceeded

ERROR_MERCHANT_VISA_MONTHLY_CUMULATIVE_LIMIT

Monthly cumulative limit per merchant transactions using visa cards was exceeded

ERROR_MERCHANT_DAILY_CUMULATIVE_LIMIT

Daily cumulative limit per merchant transactions using mastercard and visa cards was exceeded

ERROR_MERCHANT_MONTHLY_CUMULATIVE_LIMIT

Monthly cumulative limit per merchant transactions using mastercard and visa cards was exceeded

ERROR_SENDER_CARD_IS_BLOCKED [only for CARD-CARD]

Sender’s card is blocked

ERROR_RECEIVER_CARD_IS_BLOCKED

Receiver’s card is blocked

ERROR_SENDER_USER_IS_BLOCKED [only for CARD-CARD]

User acting as sender is blocked

ERROR_RECEIVER_USER_IS_BLOCKED

User acting as receiver is blocked

ERROR_SENDER_BIN_IS_BLOCKED [only for CARD-CARD]

BIN of sender’s card is blocked

ERROR_RECEIVER_BIN_IS_BLOCKED

BIN of receiver’s card is blocked

ERROR_AMOUNT_IS_BLOCKED

Amount is higher than acceptable limit

ERROR_MONITORING_CONNECTION

Couldn’t established connection to Monitoring service

ERROR_MONITORING

Some unrecognized error occurred

ERROR_USER_VERIFICATION

The transaction user’s personal data verified as incorrect on the verification service. Transaction rejected.

FUNDING_TRANSACTION_DECLINED:MIP_RESPONSE_TIMEOUT [only for CARD-CARD]

Funding transaction declined - mip response timeout

PAYMENT_TRANSACTION_DECLINED:MIP_RESPONSE_TIMEOUT

Payment transaction declined - mip response timeout

FUNDING_TRANSACTION_DECLINED:NEED_MANUAL_VERIFICATION [only for CARD-CARD]

Funding process failed and it is need to manual verification of transaction

PAYMENT_TRANSACTION_DECLINED:NEED_MANUAL_VERIFICATION

Payment process failed and it is need to manual verification of transaction

FUNDING_TRANSACTION_DECLINED:MIP_PROXY_RESPONSE_TIMEOUT [only for CARD-CARD]

Funding transaction declined - mip_proxy response timeout

PAYMENT_TRANSACTION_DECLINED:MIP_PROXY_RESPONSE_TIMEOUT

Payment transaction declined - mip_proxy response timeout

REJECTED [only for CASH-CARD]

Amount exceeds current merchant deposit limit

ERROR_TRANSACTION_NOT_FOUND

Error transaction not exists

ERROR_CARD_NOT_FOUND

Card was not found

ERROR_DATACORE_CONNECTION

Problem with DC

ERROR_SOMETHING_WRONG

ERROR_SOMETHING_WRONG returned when the check status method is executed means that the details for the indicated transaction could not be retrieved correctly due to an unexpected error. This does not mean that the transaction was rejected by our system. In case of receiving ERROR_SOMETHING_WRONG status, please do not hesitate to notify our support team in order to determine the correctness of the transaction execution and quickly correct the method error.

ERROR_WHILE_VALIDATING_CARD_COUNTRY_CODE_AND_USER_COUNTRY_CODE_FOR_PLAIN

This error may occur if card’s country is other than user’s country for USA or CAN transaction for PLAIN model

ERROR_WHILE_VALIDATING_CARD_COUNTRY_CODE_AND_USER_COUNTRY_CODE

This error may occur if card’s country is other than user’s country for USA or CAN transaction

ERROR_WHILE_GETTING_COUNTRY_CODE

This error may occur when system could not get card country code. Most often, the error is caused by a missing card in the parameters received from the card provider.

ERROR_WHILE_VALIDATING_PROVINCE_NOT_CORRECT_PROVINCE_CODE

Province code is not valid for USA or CAN transactions. Please update user profile

ERROR_VALIDATION

Some validation error occurred

ERROR_VALIDATION Sender type violates merchant model

This error may occur when merchant tries to make transaction in other model than assigned primarily. For example, if merchant’s model is set as CARD-CARD and then merchant will try to make transaction in CASH-CARD model, will receive error as bellow.

ERROR_VALIDATION_EXPIRY_DATE

Card expired

AMOUNT_IS_TOO_SMALL

The amount sent is too small. Enter a larger amount.

AMOUNT_IS_TOO_HIGH

The amount sent is too high. Enter a lower amount.

ERROR_MERCHANT_FUNDING_CARD_COUNTRY_RESTRICTED

Restricted funding card country was used. + This error may occur when a merchant uses a sender card issued in a country that is on the list of countries High Risk or country not allowed to perform transactions in Fenige API. Please contact support.

ERROR_MERCHANT_PAYMENT_CARD_COUNTRY_RESTRICTED

Restricted payment card country was used. + This error may occur when a merchant uses a sender card issued in a country that is on the list of countries High Risk or country not allowed to perform transactions in Fenige API. Please contact support.

ERROR_MERCHANT_NOT_SUPPORT_CARD_PROVIDER

Merchant not support the given card provider, please contact support to check merchant configuration

MERCHANT_CRYPTO_OUTSIDE_EEA_UK_NOT_SUPPORTED

Merchant crypto is not supported outside EEA+UK

ERROR_PAYMENT_CARD_COUNTRY_RESTRICTED

System does not allow the execution of transaction with the receiver card country.

ERROR_FUNDING_CARD_COUNTRY_RESTRICTED

System does not allow the execution of transaction with the sender card country.

ERROR_TRANSACTION_GEOGRAPHIC_SCOPE_BLOCKED

Geographic scope is not permitted for this transaction

ERROR_TRANSACTION_PROCESSING_TIME_TOO_LONG

Processing time of transaction was too long, transaction is declined.

MASTERCARD_MAC_TPE_EXCELLENCE_RULE

Transaction rejected, second transaction with merchant advice code 03 or 21 within 30 days.

INCORRECT_NAME_DATA

Transaction rejected, sender or receiver name contains fraudulent phrase.

ERROR_NAME_VERIFICATION

Transaction rejected, suspicious sender or receiver name.

ERROR_TRANSACTION_REJECTED_COUNTRY_OF_RESIDENCE_NOT_PERMITTED

Transaction rejected, card country is not supported for merchants crypto.

3.4.5. Check detailed status

GET /client/send-money/details/{orderId}, Authentication: Basic Auth
    The method allows obtaining a detailed status of multi-currency transaction specified by order-id. Parameter order-id was returned in the previous step (Send money
multicurrency).

From January 2021, there is an internal functionality to restrict access for the Merchant to specific method. The Fenige employee can disable access to a given endpoint, then the HTTP status 403 FORBIDDEN will be returned. The Merchant will be informed about each access restriction action.

Request
Table 21. /client/send-money/details/{orderId}
Parameter Description

orderId

Unique transaction identifier.

GET /client/send-money/details/00549d98-08cb-45d2-8673-4dcafa81f498 HTTP/1.1
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Host: java-staging.fenige.pl:8181
Response
Response status
Status Description

200 OK

Returned if the transaction completes successfully.

203 NON-AUTHORITATIVE INFORMATION

Returned when transaction was registered for processing. Check status in a while.

404 NOT FOUND

Returned when a transaction related to the given orderId doesn’t exist.

422 UNPROCESSABLE ENTITY

Returned when user provides wrong order-id or transaction was failed or was Declined.

500 INTERNAL SERVER ERROR

Returned when an internal error occur.

Example HTTP Response
200 OK
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1159

{
  "transactionId" : "TRX220132AM",
  "amount" : 1000,
  "amountInUsDollar" : 268,
  "bigDecimalAmount" : 10.0,
  "commission" : 200,
  "bigDecimalCommission" : 2.0,
  "orderId" : "00549d98-08cb-45d2-8673-4dcafa81f498",
  "createdDate" : "03-04-2018, 14:01",
  "fundingRrn" : "014011103023",
  "paymentRrn" : "014011103024",
  "arn" : "05411640143500000019325",
  "3DS" : true,
  "revaluationResult" : {
    "revaluationFundingAmount" : 1000,
    "bigDecimalRevaluationFundingAmount" : 10.0,
    "fundingCurrency" : "PLN",
    "revaluationPaymentAmount" : 1000,
    "bigDecimalRevaluationPaymentAmount" : 10.0,
    "paymentCurrency" : "PLN",
    "determineCurrencyRate" : {
      "from" : "PLN",
      "to" : "PLN",
      "currencyRate" : "1"
    }
  },
  "receiver" : {
    "firstName" : "John",
    "lastName" : "Novak",
    "provider" : "MASTERCARD",
    "hiddenCardNumber" : "557455******1623",
    "bankName" : "Alior Bank SA"
  },
  "sender" : {
    "firstName" : "Caroline",
    "lastName" : "Novak",
    "provider" : "MASTERCARD",
    "hiddenCardNumber" : "511796******9169",
    "bankName" : "Alior Bank SA"
  },
  "transactionStatus" : "APPROVED"
}

Response fields

Path Type Description

amount

Number

Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100]

amountInUsDollar

Number

Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100]

bigDecimalAmount

Number

Field informing about the amount of cash transferred with decimal precision.

commission

Number

This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100]

bigDecimalCommission

Number

This is the amount of commission that was added to the transaction at 0.01 currency.

orderId

String

Unique transaction identifier.

transactionId

String

The transactionId field is used for the Merchant to send its own internal transaction identifier. This field is returned in the response from the Check status method and sent by the Webhooks method. @Length(max = 64). Optional

createdDate

String

Date of transaction.

fundingRrn

String

Funding Retrieval Reference Number.

paymentRrn

String

Payment Retrieval Reference Number.

arn

String

Acquirer Reference Number

3DS

Boolean

Value: true/false determines if transaction was processed with 3ds

revaluationResult

Object (RevaluationResult)

Detailed information about revaluation between sender currency and receiver currency.

receiver

Object

Personal data of the person to whom the transfer is addressed.

sender

Object

Personal data of the person who performs the transfer of cash.

transactionStatus

String

Status of the transaction (PENDING, APPROVED, DECLINED, REJECTED, REVERSED)

RevaluationResult

Path Type Description

revaluationFundingAmount

Long

Amount (in pennies) of funding transaction in fundingCurrency

bigDecimalRevaluationFundingAmount

BigDecimal

Amount of funding transaction in fundingCurrency

fundingCurrency

String

Currency code the same as sender’s card currency

revaluationPaymentAmount

Long

Amount (in pennies) of payment transaction in paymentCurrency

bigDecimalRevaluationPaymentAmount

BigDecimal

Amount of payment transaction in paymentCurrency

paymentCurrency

String

Currency code the same as receiver’s card currency

determineCurrencyRate

Object (DetermineCurrencyRate)

Details about conversion

DetermineCurrencyRate

Path Type Description

from

Long

Currency which was conversion from

to

Long

Resulted currency

currencyRate

BigDecimal

Currency rate

200 OK CASH-CARD
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1230

{
  "transactionId" : "TRX220132AM",
  "amount" : 1000,
  "amountInUsDollar" : 268,
  "bigDecimalAmount" : 10.0,
  "commission" : 200,
  "bigDecimalCommission" : 2.0,
  "orderId" : "00549d98-08cb-45d2-8673-4dcafa81f498",
  "createdDate" : "03-04-2018, 14:01",
  "fundingRrn" : "014011103023",
  "paymentRrn" : "014011103024",
  "arn" : "05411640143500000019325",
  "3DS" : false,
  "revaluationResult" : {
    "revaluationFundingAmount" : 1000,
    "bigDecimalRevaluationFundingAmount" : 10.0,
    "fundingCurrency" : "PLN",
    "revaluationPaymentAmount" : 1000,
    "bigDecimalRevaluationPaymentAmount" : 10.0,
    "paymentCurrency" : "PLN",
    "determineCurrencyRate" : {
      "from" : "PLN",
      "to" : "PLN",
      "currencyRate" : "1"
    }
  },
  "receiver" : {
    "firstName" : "John",
    "lastName" : "Novak",
    "provider" : "MASTERCARD",
    "hiddenCardNumber" : "557455******1623",
    "bankName" : "Alior Bank SA"
  },
  "sender" : {
    "firstName" : "Caroline",
    "lastName" : "Novak",
    "provider" : "CASH"
  },
  "transactionStatus" : "APPROVED",
  "merchantSettlementCurrency" : "USD",
  "fenigeCommissionInMerchantSettlementCurrency" : 0.05,
  "transactionAmountInMerchantSettlementCurrency" : 2.68
}

Response fields

Path Type Description

amount

Number

Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100]

amountInUsDollar

Number

Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100]

bigDecimalAmount

Number

Field informing about the amount of cash transferred with decimal precision.

commission

Number

This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100]

bigDecimalCommission

Number

This is the amount of commission that was added to the transaction at 0.01 currency.

orderId

String

Unique transaction identifier.

transactionId

String

The transactionId field is used for the Merchant to send its own internal transaction identifier. This field is returned in the response from the Check status method and sent by the Webhooks method. @Length(max = 64). Optional

createdDate

String

Date of transaction.

fundingRrn

String

Funding Retrieval Reference Number.

paymentRrn

String

Payment Retrieval Reference Number.

arn

String

Acquirer Reference Number

3DS

Boolean

Value: true/false determines if transaction was processed with 3ds

revaluationResult

Object (RevaluationResult)

Detailed information about revaluation between sender currency and receiver currency.

receiver

Object

Personal data of the person to whom the transfer is addressed.

sender

Object

Personal data of the person who performs the transfer of cash.

merchantSettlementCurrency

String

Merchant settlement currency

fenigeCommissionInMerchantSettlementCurrency

Number

Commission Fenige in merchant settlement currency

transactionAmountInMerchantSettlementCurrency

Number

Transaction amount in merchant settlement currency

transactionStatus

String

Status of the transaction (PENDING, APPROVED, DECLINED, REJECTED, REVERSED)

RevaluationResult

Path Type Description

revaluationFundingAmount

Long

Amount (in pennies) of funding transaction in fundingCurrency

bigDecimalRevaluationFundingAmount

BigDecimal

Amount of funding transaction in fundingCurrency

fundingCurrency

String

Currency code the same as sender’s card currency

revaluationPaymentAmount

Long

Amount (in pennies) of payment transaction in paymentCurrency

bigDecimalRevaluationPaymentAmount

BigDecimal

Amount of payment transaction in paymentCurrency

paymentCurrency

String

Currency code the same as receiver’s card currency

determineCurrencyRate

Object (DetermineCurrencyRate)

Details about conversion

DetermineCurrencyRate

Path Type Description

from

Long

Currency which was conversion from

to

Long

Resulted currency

currencyRate

BigDecimal

Currency rate

203 NON-AUTHORITATIVE INFORMATION
HTTP/1.1 203 Non-Authoritative Information

After you get 203 you need to check status in a while because we processing this transaction and if you don’t get a response (200 - succeeded or 500 - declined) within 60 seconds then please contact us.

404 NOT FOUND
HTTP/1.1 404 Not Found
Content-Type: application/json
Content-Length: 51

{
  "errorStatus" : "ERROR_TRANSACTION_NOT_FOUND"
}

Response fields

Path Type Description

errorStatus

String

Additional data of the error occurred during a processing of the request

422 UNPROCESSABLE ENTITY
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json
Content-Length: 1287

{
  "transactionId" : "TRX220132AM",
  "amount" : 1000,
  "amountInUsDollar" : 268,
  "bigDecimalAmount" : 10.0,
  "commission" : 200,
  "bigDecimalCommission" : 2.0,
  "orderId" : "00549d98-08cb-45d2-8673-4dcafa81f498",
  "createdDate" : "03-04-2018, 14:01",
  "fundingRrn" : "014011103023",
  "paymentRrn" : "014011103024",
  "arn" : "05411640143500000019325",
  "3DS" : true,
  "revaluationResult" : {
    "revaluationFundingAmount" : 1000,
    "bigDecimalRevaluationFundingAmount" : 10.0,
    "fundingCurrency" : "PLN",
    "revaluationPaymentAmount" : 1000,
    "bigDecimalRevaluationPaymentAmount" : 10.0,
    "paymentCurrency" : "PLN",
    "determineCurrencyRate" : {
      "from" : "PLN",
      "to" : "PLN",
      "currencyRate" : "1"
    }
  },
  "receiver" : {
    "firstName" : "John",
    "lastName" : "Novak",
    "provider" : "MASTERCARD",
    "hiddenCardNumber" : "557455******1623",
    "bankName" : "Alior Bank SA"
  },
  "sender" : {
    "firstName" : "Caroline",
    "lastName" : "Novak",
    "provider" : "MASTERCARD",
    "hiddenCardNumber" : "511796******9169",
    "bankName" : "Alior Bank SA"
  },
  "transactionStatus" : "DECLINED",
  "cardBlockType" : "TEMP",
  "cardBlockedUntil" : "2024-03-30T01:03:52.133",
  "errorStatus" : "ERROR_SENDER_CARD_IS_BLOCKED"
}

Response fields

Path Type Description

amount

Number

Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100]

amountInUsDollar

Number

Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100]

bigDecimalAmount

Number

Field informing about the amount of cash transferred with decimal precision.

commission

Number

This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100]

bigDecimalCommission

Number

This is the amount of commission that was added to the transaction at 0.01 currency.

orderId

String

Unique transaction identifier.

transactionId

String

The transactionId field is used for the Merchant to send its own internal transaction identifier. This field is returned in the response from the Check status method and sent by the Webhooks method. @Length(max = 64). Optional

createdDate

String

Date of transaction.

fundingRrn

String

Funding Retrieval Reference Number.

paymentRrn

String

Payment Retrieval Reference Number.

arn

String

Acquirer Reference Number

3DS

Boolean

Value: true/false determines if transaction was processed with 3ds

revaluationResult

Object (RevaluationResult)

Detailed information about revaluation between sender currency and receiver currency.

receiver

Object

Personal data of the person to whom the transfer is addressed.

sender

Object

Personal data of the person who performs the transfer of cash.

transactionStatus

String

Status of the transaction (PENDING, APPROVED, DECLINED, REJECTED, REVERSED)

errorStatus

String

Additional data of the error occurred during a processing of the request

cardBlockType

String

Card lock type

cardBlockedUntil

String

Card’s lock end date

merchantAdviceCode

String

Information about the reasons for declined transactions and actions that merchants can take. Occurs only for mastercard and for rejected transactions if Mastercard returns this information

RevaluationResult

Path Type Description

revaluationFundingAmount

Long

Amount (in pennies) of funding transaction in fundingCurrency

bigDecimalRevaluationFundingAmount

BigDecimal

Amount of funding transaction in fundingCurrency

fundingCurrency

String

Currency code the same as sender’s card currency

revaluationPaymentAmount

Long

Amount (in pennies) of payment transaction in paymentCurrency

bigDecimalRevaluationPaymentAmount

BigDecimal

Amount of payment transaction in paymentCurrency

paymentCurrency

String

Currency code the same as receiver’s card currency

determineCurrencyRate

Object (DetermineCurrencyRate)

Details about conversion

DetermineCurrencyRate

Path Type Description

from

Long

Currency which was conversion from

to

Long

Resulted currency

currencyRate

BigDecimal

Currency rate

422 UNPROCESSABLE ENTITY CASH-CARD
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json
Content-Length: 1358

{
  "transactionId" : "TRX220132AM",
  "amount" : 1000,
  "amountInUsDollar" : 268,
  "bigDecimalAmount" : 10.0,
  "commission" : 200,
  "bigDecimalCommission" : 2.0,
  "orderId" : "00549d98-08cb-45d2-8673-4dcafa81f498",
  "createdDate" : "03-04-2018, 14:01",
  "fundingRrn" : "014011103023",
  "paymentRrn" : "014011103024",
  "arn" : "05411640143500000019325",
  "3DS" : false,
  "revaluationResult" : {
    "revaluationFundingAmount" : 1000,
    "bigDecimalRevaluationFundingAmount" : 10.0,
    "fundingCurrency" : "PLN",
    "revaluationPaymentAmount" : 1000,
    "bigDecimalRevaluationPaymentAmount" : 10.0,
    "paymentCurrency" : "PLN",
    "determineCurrencyRate" : {
      "from" : "PLN",
      "to" : "PLN",
      "currencyRate" : "1"
    }
  },
  "receiver" : {
    "firstName" : "John",
    "lastName" : "Novak",
    "provider" : "MASTERCARD",
    "hiddenCardNumber" : "557455******1623",
    "bankName" : "Alior Bank SA"
  },
  "sender" : {
    "firstName" : "Caroline",
    "lastName" : "Novak",
    "provider" : "CASH"
  },
  "transactionStatus" : "DECLINED",
  "merchantSettlementCurrency" : "USD",
  "fenigeCommissionInMerchantSettlementCurrency" : 0.05,
  "transactionAmountInMerchantSettlementCurrency" : 2.68,
  "cardBlockType" : "TEMP",
  "cardBlockedUntil" : "2024-03-30T01:03:52.560",
  "errorStatus" : "ERROR_SENDER_CARD_IS_BLOCKED"
}

Response fields

Path Type Description

amount

Number

Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100]

amountInUsDollar

Number

Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100]

bigDecimalAmount

Number

Field informing about the amount of cash transferred with decimal precision.

commission

Number

This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100]

bigDecimalCommission

Number

This is the amount of commission that was added to the transaction at 0.01 currency.

orderId

String

Unique transaction identifier.

transactionId

String

The transactionId field is used for the Merchant to send its own internal transaction identifier. This field is returned in the response from the Check status method and sent by the Webhooks method. @Length(max = 64). Optional

createdDate

String

Date of transaction.

fundingRrn

String

Funding Retrieval Reference Number.

paymentRrn

String

Payment Retrieval Reference Number.

arn

String

Acquirer Reference Number

3DS

Boolean

Value: true/false determines if transaction was processed with 3ds

revaluationResult

Object (RevaluationResult)

Detailed information about revaluation between sender currency and receiver currency.

receiver

Object

Personal data of the person to whom the transfer is addressed.

sender

Object

Personal data of the person who performs the transfer of cash.

merchantSettlementCurrency

String

Merchant settlement currency

fenigeCommissionInMerchantSettlementCurrency

Number

Commission Fenige in merchant settlement currency

transactionAmountInMerchantSettlementCurrency

Number

Transaction amount in merchant settlement currency

transactionStatus

String

Status of the transaction (PENDING, APPROVED, DECLINED, REJECTED, REVERSED)

errorStatus

String

The code of the error occurred during a processing of the request

cardBlockType

String

Card lock type

cardBlockedUntil

String

Card’s lock end date

merchantAdviceCode

String

Information about the reasons for declined transactions and actions that merchants can take. Occurs only for mastercard and for declined transactions if Mastercard returns this information

RevaluationResult

Path Type Description

revaluationFundingAmount

Long

Amount (in pennies) of funding transaction in fundingCurrency

bigDecimalRevaluationFundingAmount

BigDecimal

Amount of funding transaction in fundingCurrency

fundingCurrency

String

Currency code the same as sender’s card currency

revaluationPaymentAmount

Long

Amount (in pennies) of payment transaction in paymentCurrency

bigDecimalRevaluationPaymentAmount

BigDecimal

Amount of payment transaction in paymentCurrency

paymentCurrency

String

Currency code the same as receiver’s card currency

determineCurrencyRate

Object (DetermineCurrencyRate)

Details about conversion

DetermineCurrencyRate

Path Type Description

from

Long

Currency which was conversion from

to

Long

Resulted currency

currencyRate

BigDecimal

Currency rate

500 INTERNAL SERVER ERROR
HTTP/1.1 500 Internal Server Error
Content-Type: application/json
Content-Length: 69

{
  "errorStatus" : "ERROR_SOMETHING_WRONG - Something went wrong."
}

Response fields

Path Type Description

errorStatus

String

Additional data of the error occurred during a processing of the request

3.5. Delayed payment

Mastercard and Visa requires for intra-European Economic Area (EEA), plus United Kingdom, for which EMV 3DS must be used subsequent to a valid authorization soft decline DE39=65 (Mastercard)/1A(Visa). To perform a transaction for which the card has previously received CODE_65-Mastercard, CODE_1A-VISA, the transaction must be processed with full EMV 3DS (3DS 2.x) and the authentication status must be 'Y'.

Correct flow:

  • 3DS 2.x → Challenge → Authentication status Y → Transaction (Recommended)

soft decline Code 65 EMV 3DS

3.5.1. Delayed Send Money

POST /client/delayed/send-money Content-Type: application/json, Authorization: Basic Auth, API-TOKEN*
The Delayed Send Money functionality provides the ability to perform transactions, where recipient is not known at the time of funding execution.
Transaction in the Send Money system consists of Funding and Payment.
In order to perform the method that request is described below, we can execute Funding (with Payment for some cases**).
Money specified in the request ('amount' field) will be charged from the Sender's card, but these money will be transferred to the Receiver's card when Receiver is known (After Delayed Payment method execution).
In order to make the full flow of the transaction, the Delayed Payment method must be executed. In Delayed Payment methods you should define Receiver of Funding - then transaction will be processed.
*API-TOKEN is required for model when sender is DATACORE type.
**See table below with Delayed Send Money models. You can find there information which model executes only Funding or Funding with Payment at the same time.
The API-TOKEN is refreshed each time it is used in the header. The API-TOKEN is refreshed for 30 minutes.
The maximum time for the execution of Delayed Payment after earlier calling Delayed Send Money is 12 hours. After 12 hours after Funding without Payment, it will be reversed.
There is 3 attempts to execute Delayed Payment after earlier call Delayed Send Money.

From January 2021, there is an internal functionality to restrict access for the Merchant to specific method. The Fenige employee can disable access to a given endpoint, then the HTTP status 403 FORBIDDEN will be returned. The Merchant will be informed about each access restriction action.

When performing authorization, remember that there are currencies with different number of decimal places. For example: VND has no pennies and KWD has three decimal places. Please take this into account in the Amout field. For more information on other currencies, see ISO 4217.

Quick tour of Delayed Send Money models
Model Sender Receiver Description Transaction Type

DATACORE_SENDER - DELAYED_RECEIVER

DATACORE

DELAYED

For transactions in this model, we provide the full Sender’s data in the request without card number but with the 'cardId' (card is stored in Fenige Datacenter). The user must get API-TOKEN in the /client/login method. The Receiver’s details are unknown yet, so we are waiting for a Delayed Payment to be made.

Funding or Funding & Payment

PLAIN_SENDER - DELAYED_RECEIVER

PLAIN

DELAYED

For transactions in this model, user must provide all the full Sender data in the request. The Receiver’s details are unknown yet, so we are waiting for a Delayed Payment to be made.

Funding or Funding & Payment

Delayed Send Money Examples
DATACORE_SENDER-DELAYED_RECEIVER_EXISTS_IN_DATABASE
DP DATACORE DELAYED SENDER DELAYED RECEIVER EXISTS
DATACORE_SENDER-DELAYED_RECEIVER_NOT_EXISTS_IN_DATABASE
DP DATACORE DELAYED SENDER DELAYED RECEIVER NOT EXISTS
PLAIN_SENDER-DELAYED_RECEIVER_EXISTS_IN_DATABASE
DP PLAIN DELAYED SENDER DELAYED RECEIVER EXISTS
PLAIN_SENDER-DELAYED_RECEIVER_NOT_EXISTS_IN_DATABASE
DP PLAIN DELAYED SENDER DELAYED RECEIVER NOT EXISTS
Requests
DATACORE_SENDER-DELAYED_RECEIVER(Phone)
POST /client/delayed/send-money HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
API-TOKEN: d94NYa+xqRrazUPzSgYeJ6qR/MzIOb3IzePb7t9sWds=
Content-Length: 939
Host: java-staging.fenige.pl:8181

{
  "amount" : 1000,
  "cvc2" : "123",
  "merchantUrl" : "https://fenige.pl/payments",
  "addressIp" : "192.168.0.1",
  "type" : "SENDER",
  "outside3ds" : {
    "cavv" : "jEu04WZns7pbARAApU4qgNdJTag=",
    "cavvAlgorithm" : "02",
    "authenticationStatus" : "Y",
    "eci" : "02",
    "transactionXId" : "e29bd7bc-f805-44ab-9dd1-2a4872187aee"
  },
  "requestId" : "37be594c-9846-4e76-bb53-d3410cefae34",
  "sender" : {
    "type" : "DATACORE",
    "firstName" : "Mark",
    "lastName" : "Smith",
    "street" : "Olszewskiego",
    "houseNumber" : "17A",
    "city" : "Lublin",
    "postalCode" : "20-400",
    "flatNumber" : "2",
    "email" : "senderEmail@fenige.pl",
    "birthDate" : "2024-03-28",
    "cardId" : 1234,
    "currency" : "PLN"
  },
  "receiver" : {
    "type" : "DELAYED",
    "firstName" : "Rob",
    "lastName" : "Wring",
    "birthDate" : "2024-03-28",
    "phoneNumber" : "48600300200",
    "currency" : "USD"
  }
}
Table 22. Delayed Send Money Request Fields
Path Type Validation Rule Description

amount

Number

Required

@NotNull, positive

The total transfer amount (in pennies).

cvc2

String

Required

@Length(min = 3, max = 3)

Sender card cvc2/cvv2.

type

String

Required

@NotNull

Transaction in 'SENDER' or 'RECEIVER' currency, for specific transaction type. CARD_CARD: above, CASH_CARD: RECEIVER, CARD_CASH: SENDER.

merchantUrl

String

Required except CASH-PLAIN transactions.

@NotNull except CASH-PLAIN

Merchant identifier such as the business website URL or reverse domain name as presented to the consumer during checkout

addressIp

String

Required except CASH-PLAIN transactions @Must conform to the IPv4 or IPv6 standard.

@NotNull except CASH-PLAIN

The IP address of the order of transaction.

requestId

String

Optional

@NotNull

128 bit number generated by the user, used to identify single transaction. Ensures that the transaction with the given parameter is processed only once.

sender

Object

Required

@NotNull

Personal data of Sender.

receiver

Object

Required

@NotNull

Personal data of Receiver.

outside3ds.cavv

String

Required

@NotNull

Cardholder Authentication Verification Value.

outside3ds.eci

String

Required

@NotNull

Electronic Commerce Indicator: 5 (Visa) or 2 (SecureCode) - The cardholder was successfully authenticated. 6 (Visa) or 1 (SecureCode) - Authentication was attempted, but the cardholder was not enrolled. Chargeback protection applies.

outside3ds.authenticationStatus

String

Required

@NotNull

Authentication status. If AuthenticationStatus is "Y" or "A" then outside 3ds flow will be execute.

outside3ds.transactionXId

String

Optional

@NotNull

Cardholder Authentication Verification Value. The transactionXId is the field that defines the 3DS version. The presence of this field in the HTTP request specifies that the transaction will be processed with 3DS 2.X. TransactionXId can be obtained by executing the /authentication method.

outside3ds.cavvAlgorithm

String

Optional

@Optional

Indicates the algorithm used to generate the AuthenticationCAVV value 0 - HMAC 1 - CVV 2 - CVV with ATN 3 - MasterCard SPA algorithm.

DATACORE_SENDER-DELAYED_RECEIVER(Email)
POST /client/delayed/send-money HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
API-TOKEN: d94NYa+xqRrazUPzSgYeJ6qR/MzIOb3IzePb7t9sWds=
Content-Length: 945
Host: java-staging.fenige.pl:8181

{
  "amount" : 1000,
  "cvc2" : "123",
  "merchantUrl" : "https://fenige.pl/payments",
  "addressIp" : "192.168.0.1",
  "type" : "SENDER",
  "outside3ds" : {
    "cavv" : "jEu04WZns7pbARAApU4qgNdJTag=",
    "cavvAlgorithm" : "02",
    "authenticationStatus" : "Y",
    "eci" : "02",
    "transactionXId" : "2e94aa28-d500-4893-92b4-addc97bb7c5f"
  },
  "requestId" : "0ab5bc70-2fb7-4710-a017-df2ed2f5aa28",
  "sender" : {
    "type" : "DATACORE",
    "firstName" : "Mark",
    "lastName" : "Smith",
    "street" : "Olszewskiego",
    "houseNumber" : "17A",
    "city" : "Lublin",
    "postalCode" : "20-400",
    "flatNumber" : "2",
    "email" : "senderEmail@fenige.pl",
    "birthDate" : "2024-03-28",
    "cardId" : 1234,
    "currency" : "PLN"
  },
  "receiver" : {
    "type" : "DELAYED",
    "firstName" : "Rob",
    "lastName" : "Wring",
    "email" : "receiverEmail@fenige.pl",
    "birthDate" : "2024-03-28",
    "currency" : "USD"
  }
}
Table 23. Delayed Send Money Request Fields
Path Type Validation Rule Description

amount

Number

Required

@NotNull, positive

The total transfer amount (in pennies).

cvc2

String

Required

@Length(min = 3, max = 3)

Sender card cvc2/cvv2.

type

String

Required

@NotNull

Transaction in 'SENDER' or 'RECEIVER' currency, for specific transaction type. CARD_CARD: above, CASH_CARD: RECEIVER, CARD_CASH: SENDER.

merchantUrl

String

Required except CASH-PLAIN transactions.

@NotNull except CASH-PLAIN

Merchant identifier such as the business website URL or reverse domain name as presented to the consumer during checkout

addressIp

String

Required except CASH-PLAIN transactions @Must conform to the IPv4 or IPv6 standard.

@NotNull except CASH-PLAIN

The IP address of the order of transaction.

requestId

String

Optional

@NotNull

128 bit number generated by the user, used to identify single transaction. Ensures that the transaction with the given parameter is processed only once.

sender

Object

Required

@NotNull

Personal data of Sender.

receiver

Object

Required

@NotNull

Personal data of Receiver.

outside3ds.cavv

String

Required

@NotNull

Cardholder Authentication Verification Value.

outside3ds.eci

String

Required

@NotNull

Electronic Commerce Indicator: 5 (Visa) or 2 (SecureCode) - The cardholder was successfully authenticated. 6 (Visa) or 1 (SecureCode) - Authentication was attempted, but the cardholder was not enrolled. Chargeback protection applies.

outside3ds.authenticationStatus

String

Required

@NotNull

Authentication status. If AuthenticationStatus is "Y" or "A" then outside 3ds flow will be execute.

outside3ds.transactionXId

String

Optional

@NotNull

Cardholder Authentication Verification Value. The transactionXId is the field that defines the 3DS version. The presence of this field in the HTTP request specifies that the transaction will be processed with 3DS 2.X. TransactionXId can be obtained by executing the /authentication method.

outside3ds.cavvAlgorithm

String

Optional

@Optional

Indicates the algorithm used to generate the AuthenticationCAVV value 0 - HMAC 1 - CVV 2 - CVV with ATN 3 - MasterCard SPA algorithm.

PLAIN_SENDER-DELAYED_RECEIVER(Phone)
POST /client/delayed/send-money HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 1018
Host: java-staging.fenige.pl:8181

{
  "amount" : 1000,
  "cvc2" : "123",
  "merchantUrl" : "https://fenige.pl/payments",
  "addressIp" : "192.168.0.1",
  "type" : "SENDER",
  "outside3ds" : {
    "cavv" : "jEu04WZns7pbARAApU4qgNdJTag=",
    "cavvAlgorithm" : "02",
    "authenticationStatus" : "Y",
    "eci" : "02",
    "transactionXId" : "7f122337-024d-4135-9d7a-1a49e5e68298"
  },
  "requestId" : "57139069-98a6-44b9-90ca-7cb014260d6e",
  "sender" : {
    "type" : "PLAIN",
    "firstName" : "Mark",
    "lastName" : "Smith",
    "street" : "Olszewskiego",
    "houseNumber" : "17A",
    "city" : "Lublin",
    "postalCode" : "20-400",
    "flatNumber" : "2",
    "email" : "senderEmail@fenige.pl",
    "birthDate" : "2024-03-28",
    "cardNumber" : "5117964247989169",
    "expirationDate" : "03/26",
    "personalId" : "AGC688910",
    "currency" : "PLN"
  },
  "receiver" : {
    "type" : "DELAYED",
    "firstName" : "Rob",
    "lastName" : "Wring",
    "birthDate" : "2024-03-28",
    "phoneNumber" : "48600300200",
    "currency" : "USD"
  }
}
Table 24. Delayed Send Money Request Fields
Path Type Validation Rule Description

amount

Number

Required

@NotNull, positive

The total transfer amount (in pennies).

cvc2

String

Required

@Length(min = 3, max = 3)

Sender card cvc2/cvv2.

type

String

Required

@NotNull

Transaction in 'SENDER' or 'RECEIVER' currency, for specific transaction type. CARD_CARD: above, CASH_CARD: RECEIVER, CARD_CASH: SENDER.

merchantUrl

String

Required except CASH-PLAIN transactions.

@NotNull except CASH-PLAIN

Merchant identifier such as the business website URL or reverse domain name as presented to the consumer during checkout

addressIp

String

Required except CASH-PLAIN transactions @Must conform to the IPv4 or IPv6 standard.

@NotNull except CASH-PLAIN

The IP address of the order of transaction.

requestId

String

Optional

@NotNull

128 bit number generated by the user, used to identify single transaction. Ensures that the transaction with the given parameter is processed only once.

sender

Object

Required

@NotNull

Personal data of Sender.

receiver

Object

Required

@NotNull

Personal data of Receiver.

outside3ds.cavv

String

Required

@NotNull

Cardholder Authentication Verification Value.

outside3ds.eci

String

Required

@NotNull

Electronic Commerce Indicator: 5 (Visa) or 2 (SecureCode) - The cardholder was successfully authenticated. 6 (Visa) or 1 (SecureCode) - Authentication was attempted, but the cardholder was not enrolled. Chargeback protection applies.

outside3ds.authenticationStatus

String

Required

@NotNull

Authentication status. If AuthenticationStatus is "Y" or "A" then outside 3ds flow will be execute.

outside3ds.transactionXId

String

Optional

@NotNull

Cardholder Authentication Verification Value. The transactionXId is the field that defines the 3DS version. The presence of this field in the HTTP request specifies that the transaction will be processed with 3DS 2.X. TransactionXId can be obtained by executing the /authentication method.

outside3ds.cavvAlgorithm

String

Optional

@Optional

Indicates the algorithm used to generate the AuthenticationCAVV value 0 - HMAC 1 - CVV 2 - CVV with ATN 3 - MasterCard SPA algorithm.

PLAIN_SENDER-DELAYED_RECEIVER(Email)
POST /client/delayed/send-money HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 1024
Host: java-staging.fenige.pl:8181

{
  "amount" : 1000,
  "cvc2" : "123",
  "merchantUrl" : "https://fenige.pl/payments",
  "addressIp" : "192.168.0.1",
  "type" : "SENDER",
  "outside3ds" : {
    "cavv" : "jEu04WZns7pbARAApU4qgNdJTag=",
    "cavvAlgorithm" : "02",
    "authenticationStatus" : "Y",
    "eci" : "02",
    "transactionXId" : "10d17ff8-5f97-4494-b67c-9697b41894e6"
  },
  "requestId" : "5f8c6324-2441-4363-a946-d87afc355031",
  "sender" : {
    "type" : "PLAIN",
    "firstName" : "Mark",
    "lastName" : "Smith",
    "street" : "Olszewskiego",
    "houseNumber" : "17A",
    "city" : "Lublin",
    "postalCode" : "20-400",
    "flatNumber" : "2",
    "email" : "senderEmail@fenige.pl",
    "birthDate" : "2024-03-28",
    "cardNumber" : "5117964247989169",
    "expirationDate" : "03/26",
    "personalId" : "AGC688910",
    "currency" : "PLN"
  },
  "receiver" : {
    "type" : "DELAYED",
    "firstName" : "Rob",
    "lastName" : "Wring",
    "email" : "receiverEmail@fenige.pl",
    "birthDate" : "2024-03-28",
    "currency" : "USD"
  }
}
Table 25. Delayed Send Money Request Fields
Path Type Validation Rule Description

amount

Number

Required

@NotNull, positive

The total transfer amount (in pennies).

cvc2

String

Required

@Length(min = 3, max = 3)

Sender card cvc2/cvv2.

type

String

Required

@NotNull

Transaction in 'SENDER' or 'RECEIVER' currency, for specific transaction type. CARD_CARD: above, CASH_CARD: RECEIVER, CARD_CASH: SENDER.

merchantUrl

String

Required except CASH-PLAIN transactions.

@NotNull except CASH-PLAIN

Merchant identifier such as the business website URL or reverse domain name as presented to the consumer during checkout

addressIp

String

Required except CASH-PLAIN transactions @Must conform to the IPv4 or IPv6 standard.

@NotNull except CASH-PLAIN

The IP address of the order of transaction.

requestId

String

Optional

@NotNull

128 bit number generated by the user, used to identify single transaction. Ensures that the transaction with the given parameter is processed only once.

sender

Object

Required

@NotNull

Personal data of Sender.

receiver

Object

Required

@NotNull

Personal data of Receiver.

outside3ds.cavv

String

Required

@NotNull

Cardholder Authentication Verification Value.

outside3ds.eci

String

Required

@NotNull

Electronic Commerce Indicator: 5 (Visa) or 2 (SecureCode) - The cardholder was successfully authenticated. 6 (Visa) or 1 (SecureCode) - Authentication was attempted, but the cardholder was not enrolled. Chargeback protection applies.

outside3ds.authenticationStatus

String

Required

@NotNull

Authentication status. If AuthenticationStatus is "Y" or "A" then outside 3ds flow will be execute.

outside3ds.transactionXId

String

Optional

@NotNull

Cardholder Authentication Verification Value. The transactionXId is the field that defines the 3DS version. The presence of this field in the HTTP request specifies that the transaction will be processed with 3DS 2.X. TransactionXId can be obtained by executing the /authentication method.

outside3ds.cavvAlgorithm

String

Optional

@Optional

Indicates the algorithm used to generate the AuthenticationCAVV value 0 - HMAC 1 - CVV 2 - CVV with ATN 3 - MasterCard SPA algorithm.

Response
Response status
Status Description

200 OK

Delayed Send Money approved for processing and transaction details returned.

200 OK - Error validation

Returned list of field name which has validation errors.

202 Accepted

- Returned when the transaction with the provided requestId has been registered in the system, but has not yet been completed. The user can retry in a few seconds to get the transaction result. Response body: Empty
or
- Returned order-id when transaction will be processed.

400 Bad Request

Returned when request is incorrect, required fields are missing or the values are not valid.

401 Unauthorized

Returned when API-TOKEN was broken.

500 Internal Server Error

Returned when user provides wrong order-id or transaction was failed or was Declined.

Example HTTP Response
200 OK When receiver is in database
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1080

{
  "amount" : 2000,
  "bigDecimalAmount" : 20.0,
  "commission" : 0,
  "bigDecimalCommission" : 0,
  "orderId" : "628c1a6b-1199-433b-93c1-58b750e97065",
  "createdDate" : "09-11-2020, 21:12",
  "fundingRrn" : "031420000725",
  "paymentRrn" : "031420000725",
  "transactionStatus" : "APPROVED",
  "responseCode" : "CODE_00",
  "revaluationResult" : {
    "revaluationFundingAmount" : 2000,
    "bigDecimalRevaluationFundingAmount" : 20.0,
    "fundingCurrency" : "PLN",
    "revaluationPaymentAmount" : 2000,
    "bigDecimalRevaluationPaymentAmount" : 20.0,
    "paymentCurrency" : "PLN",
    "determineCurrencyRate" : {
      "from" : "PLN",
      "to" : "PLN",
      "currencyRate" : "1"
    }
  },
  "receiver" : {
    "firstName" : "Rob",
    "lastName" : "Wring",
    "hiddenCardNumber" : "511796******9169",
    "provider" : "MASTERCARD",
    "bankName" : "Alior Bank SA"
  },
  "sender" : {
    "firstName" : "Mark",
    "lastName" : "Smith",
    "hiddenCardNumber" : "511796******9169",
    "provider" : "MASTERCARD",
    "bankName" : "Alior Bank SA"
  },
  "3DS" : true
}

Response fields

Path Type Description

orderId

String

Unique transaction identifier.

transactionStatus

String

Transaction status.

responseCode

String

Response code.

amount

Number

Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100].

bigDecimalAmount

Number

Field informing about the amount of cash transferred with decimal precision.

commission

Number

This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100].

bigDecimalCommission

Number

This is the amount of commission that was added to the transaction at 0.01 currency.

createdDate

String

Date of transaction.

fundingRrn

String

Funding Retrieval Reference Number.

paymentRrn

String

Payment Retrieval Reference Number.

revaluationResult.revaluationFundingAmount

Number

Amount (in pennies) of funding transaction in fundingCurrency.

revaluationResult.bigDecimalRevaluationFundingAmount

Number

Amount of funding transaction in fundingCurrency.

revaluationResult.fundingCurrency

String

Currency code the same as sender’s card currency.

revaluationResult.revaluationPaymentAmount

Number

Amount (in pennies) of payment transaction in paymentCurrency.

revaluationResult.bigDecimalRevaluationPaymentAmount

Number

Amount of payment transaction in paymentCurrency.

revaluationResult.paymentCurrency

String

Currency code the same as receiver’s card currency.

revaluationResult.determineCurrencyRate.from

String

Currency which was conversion from.

revaluationResult.determineCurrencyRate.to

String

Resulted currency.

revaluationResult.determineCurrencyRate.currencyRate

String

Currency rate.

3DS

Boolean

Value: true/false determines if transaction was processed with 3ds

receiver

Object

Personal data of the person to whom the transfer is addressed.

sender

Object

Personal data of the person who performs the transfer of cash.

200 OK When receiver is unknown
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 943

{
  "amount" : 2000,
  "bigDecimalAmount" : 20.0,
  "commission" : 0,
  "bigDecimalCommission" : 0,
  "orderId" : "7aa61165-b862-4e89-b271-aa022bc4c85a",
  "createdDate" : "09-11-2020, 21:12",
  "fundingRrn" : "031420000725",
  "transactionStatus" : "APPROVED_WAITING_FOR_RECEIVER",
  "responseCode" : "CODE_00",
  "revaluationResult" : {
    "revaluationFundingAmount" : 2000,
    "bigDecimalRevaluationFundingAmount" : 20.0,
    "fundingCurrency" : "PLN",
    "revaluationPaymentAmount" : 2000,
    "bigDecimalRevaluationPaymentAmount" : 20.0,
    "paymentCurrency" : "PLN",
    "determineCurrencyRate" : {
      "from" : "PLN",
      "to" : "PLN",
      "currencyRate" : "1"
    }
  },
  "receiver" : {
    "email" : "receiver@fenige.pl"
  },
  "sender" : {
    "firstName" : "Mark",
    "lastName" : "Smith",
    "hiddenCardNumber" : "511796******9169",
    "provider" : "MASTERCARD",
    "bankName" : "Alior Bank SA"
  },
  "3DS" : true
}

Response fields

Path Type Description

orderId

String

Unique transaction identifier.

transactionStatus

String

Transaction status.

responseCode

String

Response code.

amount

Number

Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100].

bigDecimalAmount

Number

Field informing about the amount of cash transferred with decimal precision.

commission

Number

This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100].

bigDecimalCommission

Number

This is the amount of commission that was added to the transaction at 0.01 currency.

createdDate

String

Date of transaction.

fundingRrn

String

Funding Retrieval Reference Number.

revaluationResult.revaluationFundingAmount

Number

Amount (in pennies) of funding transaction in fundingCurrency.

revaluationResult.bigDecimalRevaluationFundingAmount

Number

Amount of funding transaction in fundingCurrency.

revaluationResult.fundingCurrency

String

Currency code the same as sender’s card currency.

revaluationResult.revaluationPaymentAmount

Number

Amount (in pennies) of payment transaction in paymentCurrency.

revaluationResult.bigDecimalRevaluationPaymentAmount

Number

Amount of payment transaction in paymentCurrency.

revaluationResult.paymentCurrency

String

Currency code the same as receiver’s card currency.

revaluationResult.determineCurrencyRate.from

String

Currency which was conversion from.

revaluationResult.determineCurrencyRate.to

String

Resulted currency.

revaluationResult.determineCurrencyRate.currencyRate

String

Currency rate.

3DS

Boolean

Value: true/false determines if transaction was processed with 3ds

receiver

Object

Personal data of the person to whom the transfer is addressed.

sender

Object

Personal data of the person who performs the transfer of cash.

400 Bad request
HTTP/1.1 400 Bad Request
Content-Type: application/json
Content-Length: 104

{
  "error" : {
    "status" : "ERROR_INVALID_JSON",
    "message" : "Some properties are invalid"
  }
}
500 Internal Server Error
HTTP/1.1 500 Internal Server Error
Content-Type: text/plain;charset=ISO-8859-1
{
    “status”: “ERROR_FUNDING_FAILED”,
    “error”: {
        “message”: “FUNDING_TRANSACTION_DECLINED:CODE_05”
    }
}

After receiving these statuses, the transaction was rejected

Error statuses

Name Description

FUNDING_TRANSACTION_DECLINED:CODE_XX, PAYMENT_TRANSACTION_DECLINED:CODE_XX

CODE_XX - is MasterCard response code (ISO 8583)

ISSUER_NOT_SUPPORTED

This card is not supported

ERROR_CARD_IS_BLOCKED

Card is blocked for 1 hour in Fenige

ERROR_USER_IS_BLOCKED

User is blocked in Fenige

ERROR_API_TOKEN_NOT_FOUND

API-TOKEN header not found in request with DATACORE/PHONE model in sender or receiver

ERROR_BIN_IS_BLOCKED

Bin is blocked for 1 hour in Fenige

ERROR_FUNDING_BANK_IS_BLOCKED

Funding bank is blocked in Fenige

ERROR_PAYMENT_BANK_IS_BLOCKED

Payment bank is blocked in Fenige

FUNDING_TRANSACTION_DECLINED:ACQ_ERROR

Funding transaction was declined and payment not send

PAYMENT_TRANSACTION_DECLINED:ACQ_ERROR

Payment transaction was declined and funding was reversed

ERROR_ACQ_CONNECTION

A connection error occurred to Acquirer service

AML_ERROR

User was found on the stop list

NETWORK_ERROR

Acceptance network is unavailable

CURRENCY_RATES_NOT_FOUND

No currently effective rates found in the database

CURRENCY_NOT_SUPPORTED

Currency is not supported

MERCHANT_CURRENCY_NOT_SUPPORTED

Currency is not supported by Merchant

ERROR_SENDER_CARD_IS_BLOCKED

Sender’s card is blocked

ERROR_RECEIVER_CARD_IS_BLOCKED

Receiver’s card is blocked

ERROR_SENDER_USER_IS_BLOCKED

User acting as sender is blocked

ERROR_RECEIVER_USER_IS_BLOCKED

User acting as receiver is blocked

ERROR_SENDER_BIN_IS_BLOCKED

BIN of sender’s card is blocked

ERROR_RECEIVER_BIN_IS_BLOCKED

BIN of receiver’s card is blocked

ERROR_AMOUNT_IS_BLOCKED

Amount is higher than acceptable limit

ERROR_MONITORING_CONNECTION

Couldn’t established connection to Monitoring service

ERROR_MONITORING

Some unrecognized error occurred

ERROR_MPI_CONNECTION

Couldn’t established connection to MPI service

FUNDING_TRANSACTION_DECLINED:MIP_RESPONSE_TIMEOUT

Funding transaction declined - mip response timeout

PAYMENT_TRANSACTION_DECLINED:MIP_RESPONSE_TIMEOUT

Payment transaction declined - mip response timeout

FUNDING_TRANSACTION_DECLINED:NEED_MANUAL_VERIFICATION

Funding process failed and it is need to manual verification of transaction

PAYMENT_TRANSACTION_DECLINED:NEED_MANUAL_VERIFICATION

Payment process failed and it is need to manual verification of transaction

FUNDING_TRANSACTION_DECLINED:MIP_PROXY_RESPONSE_TIMEOUT

Funding transaction declined - mip_proxy response timeout

PAYMENT_TRANSACTION_DECLINED:MIP_PROXY_RESPONSE_TIMEOUT

Payment transaction declined - mip_proxy response timeout

ERROR_3DS_2_X_CARD_FLOW_INVOKED_FOR_OTHER_CARD_NUMBER_THAN_SPECIFIED_IN_THE_REQUEST

TransactionXId is invalid for card number specified in the request, 3DS 2.X flow invoked for other card number than specified in the request

ERROR_3DS_2_X_CARD_FLOW_INVOKED_FOR_OTHER_MERCHANT_THAN_SPECIFIED_IN_THE_REQUEST

TransactionXId is invalid for merchant specified in the request, 3DS 2.X flow invoked for other merchant than specified in the request

ERROR_3DS_2_X_NOT_FOUND_CARD_AUTHENTICATION_BY_TRANSACTION_XID

Card not found by transactionXId

ERROR_3DS_2_X_CARD_AUTHENTICATION_DOES_NOT_MATCH_TO_PAYMENT_TYPE

Card authentication does not match to payment type

ERROR_3DS_2_X_FAILED

Error 3DS 2.X processing failed

ERROR_3DS_2_X_REQUIRED_DATA_NOT_COMPLETE

Required configuration data of Merchant are not complete to finish 3DS 2.X process

ERROR_MPI2_INTERNAL_ERROR

Some unrecognized, internal error occurred in MPI2 service

ERROR_3DS_VERSION_NOT_ENROLLED

Merchant has configured a different version of 3DS than specified in the request

ERROR_NO_3DS_AUTHORIZATION

Error no 3ds authorization, when User authenticates successfully but after 15 minutes or User doesn’t authenticate.

ERROR_MPI_STATUS_TO_LOW: Initialize/Finalize: U/N

Error occurs, when merchant configuration allows only for attempted or full authenticated 3DS transactions with mpi status 'A' or 'Y' but mpi service has returned other status e.g. 'N' or 'U' at any stage of the transaction.

ERROR_TRANSACTION_NOT_FOUND

Error transaction not exists

ERROR_CARD_NOT_FOUND

Card was not found

ERROR_VALIDATION

Some validation error occurred

ERROR_SINGLE_TRANSACTION_LIMIT

Transaction limit for single transaction exceeded

ERROR_DAILY_TRANSACTION_LIMIT

Daily transaction limit for amount per card exceeded

ERROR_DAILY_COUNT_TRANSACTION_LIMIT

Daily transaction limit for count per card exceeded

ERROR_MONTHLY_TRANSACTION_LIMIT

Monthly transaction limit for amount per card exceeded

ERROR_MONTHLY_COUNT_TRANSACTION_LIMIT

Monthly transaction limit for count per card exceeded

ERROR_DAILY_CUMULATIVE_LIMIT

Daily cumulative limit per card was exceeded

ERROR_MONTHLY_CUMULATIVE_LIMIT

Monthly cumulative limit per card was exceeded

ERROR_MERCHANT_MASTERCARD_DAILY_CUMULATIVE_LIMIT

Daily cumulative limit per merchant transactions using mastercard cards was exceeded

ERROR_MERCHANT_MASTERCARD_MONTHLY_CUMULATIVE_LIMIT

Monthly cumulative limit per merchant transactions using mastercard cards was exceeded

ERROR_MERCHANT_VISA_DAILY_CUMULATIVE_LIMIT

Daily cumulative limit per merchant transactions using visa cards was exceeded

ERROR_MERCHANT_VISA_MONTHLY_CUMULATIVE_LIMIT

Monthly cumulative limit per merchant transactions using visa cards was exceeded

ERROR_MERCHANT_DAILY_CUMULATIVE_LIMIT

Daily cumulative limit per merchant transactions using mastercard and visa cards was exceeded

ERROR_MERCHANT_MONTHLY_CUMULATIVE_LIMIT

Monthly cumulative limit per merchant transactions using mastercard and visa cards was exceeded

LIMIT_ERROR

Error during limit checking

MASTERCARD_MAC_TPE_EXCELLENCE_RULE

Transaction rejected, second transaction with merchant advice code 03 or 21 within 30 days.

ERROR_SOMETHING_WRONG

An unrecognized error occurred

AMOUNT_IS_TOO_SMALL

The amount sent is too small. Enter a larger amount

AMOUNT_IS_TOO_HIGH

The amount sent is too high. Enter a lower amount

500 Internal Server Error - Card Blocked
HTTP/1.1 500 Internal Server Error
Content-Type: text/plain;charset=ISO-8859-1
{
    "status" : "ERROR_RECEIVER_CARD_IS_BLOCKED"
    "cardBlockData": {
        "blockType": "TEMP",
        "blockedUntil": "2022-09-24T14:03:56.000"
    }
}

After receiving these statuses, the transaction was rejected

Error statuses

Name Description Allow to try again

WAITING_FOR_RECEIVER_TIMEOUT

The time of 12 hours has been exceeded

No

ERROR_DELAYED_PAYMENT_ATTEMPTS_EXCEEDED

The number of 3 payment attempts has been exceeded

No

ERROR_DELAYED_PAYMENT_TRX_NOT_REGISTERED_FOR_DELAYED_PROCESSING

Payment of transaction was not registered for delayed processing. Cannot process payment

No

ERROR_DELAYED_PAYMENT_NOT_FOUND

There is no Delayed Payment with given orderId

No

ERROR_DELAYED_PAYMENT_UNEXPECTED_EXCEPTION_OCCURRED

Critical internal exception occurred in system while trying to make Delayed Payment

Yes

ERROR_DELAYED_PAYMENT_RECEIVER_NOT_PRESENT

There is no receiver with given phone or email.

Yes

PAYMENT_TRANSACTION_DECLINED:CODE_XX

CODE_XX - is MasterCard response code (ISO 8583)

Yes

ISSUER_NOT_SUPPORTED

This card is not supported

Yes

ERROR_CARD_IS_BLOCKED

Card is blocked for 1 hour in Fenige

Yes

ERROR_USER_IS_BLOCKED

User is blocked in Fenige

Yes

ERROR_BIN_IS_BLOCKED

Bin is blocked for 1 hour in Fenige

Yes

ERROR_PAYMENT_BANK_IS_BLOCKED

Payment bank is blocked in Fenige

Yes

PAYMENT_TRANSACTION_DECLINED:ACQ_ERROR

Payment transaction was declined and funding was reversed

Yes

ERROR_ACQ_CONNECTION

A connection error occurred to Acquirer service

Yes

AML_ERROR

User was found on the stop list

Yes

NETWORK_ERROR

Acceptance network is unavailable

Yes

CURRENCY_RATES_NOT_FOUND

No currently effective rates found in the database

Yes

CURRENCY_NOT_SUPPORTED

Currency is not supported

Yes

MERCHANT_CURRENCY_NOT_SUPPORTED

Currency is not supported by Merchant

Yes

ERROR_RECEIVER_CARD_IS_BLOCKED

Receiver’s card is blocked

Yes

ERROR_RECEIVER_USER_IS_BLOCKED

User acting as receiver is blocked

Yes

ERROR_RECEIVER_BIN_IS_BLOCKED

BIN of receiver’s card is blocked

Yes

ERROR_AMOUNT_IS_BLOCKED

Amount is higher than acceptable limit

Yes

ERROR_MONITORING_CONNECTION

Couldn’t established connection to Monitoring service

Yes

ERROR_MONITORING_UNAUTHORIZED

Error with service authorization occurred

Yes

ERROR_MONITORING

Some unrecognized error occurred

Yes

ERROR_USER_NOTFOUND

Some problem with authorized the user.

Yes

ERROR_USER_VERIFICATION

The transaction user’s personal data verified as incorrect on the verification service. Transaction rejected.

No

ERROR_MPI_CONNECTION

Couldn’t established connection to MPI service

Yes

PAYMENT_TRANSACTION_DECLINED:MIP_RESPONSE_TIMEOUT

Payment transaction declined - mip response timeout

Yes

PAYMENT_TRANSACTION_DECLINED:NEED_MANUAL_VERIFICATION

Payment process failed and it is need to manual verification of transaction

Yes

PAYMENT_TRANSACTION_DECLINED:MIP_PROXY_RESPONSE_TIMEOUT

Payment transaction declined - mip_proxy response timeout

Yes

ERROR_TRANSACTION_NOT_FOUND

Error transaction not exists

Yes

ERROR_CARD_NOT_FOUND

Card was not found

No

ERROR_DATACORE_CONNECTION

Problem with DC

Yes

ERROR_VALIDATION

Some validation error occurred

Yes

ERROR_SOMETHING_WRONG

An unrecognized error occurred

Yes

ERROR_MERCHANT_DELAYED_PAYMENT_CARD_COUNTRY_RESTRICTED

Merchant is marked as high risk and does not allow the execution of transaction with the given card country

Yes

ERROR_DELAYED_PAYMENT_CARD_COUNTRY_RESTRICTED

System does not allow the execution of transaction with the given card country

Yes

ERROR_TRANSACTION_GEOGRAPHIC_SCOPE_BLOCKED

Geographic scope is not permitted for this transaction

Yes

200 OK - Error validation
HTTP/1.1 200 OK
Content-Type: application/json;charset=ISO-8859-1

{
	"status" : "ERROR_VALIDATION",
	"error" : {
		"message": "Some information is missing or incorrect.",
		"errors": [{
				"field": "requestId",
				"message": [
					"may not be null"
				]
			},
			{
				"field": "cvc2",
				"message": [
					"may not be null",
					"length must be 3"
				]
			},
			{
				"field": "type",
				"message": [
					"may not be null"
				]
			},
			{
				"field": "amount",
				"message": [
					"may not be null"
				]
			},
			{
				"field": "sender",
				"message": [
					"may not be null"
				]
			},
			{
				"field": "sender.cardNumber",
				"message": [
					"may not be null",
					"may not be empty",
					"card number length must be 16"
				]
			},
			{
				"field": "sender.expirationDate",
				"message": [
					"invalid card expiration date",
					"may not be null",
					"may not be empty"
				]
			},
			{
				"field": "sender.city",
				"message": [
					"may not be empty",
					"may not be null",
					"length must be between 1 and 25"
				]
			},
			{
				"field": "sender.street",
				"message": [
					"may not be null",
					"may not be empty",
					"length must be between 1 and 50"
				]
			},
            {
				"field": "sender.postalCode",
				"message": [
					"may not be empty",
					"may not be null",
					"length must be between 1 and 10"
				]
			},
            {
                "field": "sender.flatNumber",
                "message": [
                    "must be null",
                    "length must be between 0 and 5"
                ]
            },
			{
				"field": "sender.lastName",
				"message": [
					"may not be empty",
					"may not be null",
					"length must be between 2 and 35"
				]
			},
			{
				"field": "sender.houseNumber",
				"message": [
					"may not be empty",
					"may not be null",
					"length must be between 1 and 10",
                    "must match the expression: [1-9][0-9]{0,4}(?:[A-z]?[0-9]{0,4})?((?:[-/ ][1-9]?[A-z]?[0-9]{0,4})*[A-z]?)?$"
				]
			},
			{
				"field": "sender.firstName",
				"message": [
					"may not be empty",
					"may not be null",
					"length must be between 2 and 35"
				]
			},
            {
				"field": "sender.email",
				"message": [
					"may not be empty",
					"may not be null",
					"not a well-formed email address",
					"lenght must be beetween 1 and 128"
				]
			},
			{
				"field": "receiver",
				"message": [
					"may not be null"
				]
			},

			{
				"field": "receiver.currency",
				"message": [
					"may not be null"
				]
			},
			{
				"field": "receiver.phoneNumber",
				"message": [
					"may not be null",
					"may not be empty"
				]
			},
            {
				"field": "receiver.email",
				"message": [
					"may not be null",
					"may not be empty"
				]
			},
            {
                "field": "receiver",
                "message": [
                    "Phone number or email must be present"
                ]
            },
			{
                "field": "sender",
                "message": [
                     "province is mandatory only if country code is US or CA"
                ]
            },
            {
                "field": "sender.province",
                "message": [
                      "is not correct province code for country code US",
                      "may not be null"
                ]
            },
            {
                "field": "sender.province",
                 "message": [
                       "may not be null",
                       "is not correct province code for country code CA"
                 ]
            },
            {
                 "field": "sender.province",
                 "message": [
                        "must match ^[A-Z]{2}$",
                        "is not correct province code for country code US"
                 ]
            },
            {
                 "field": "sender.currency",
                 "message": [
                       "Currency is not supported"
                ]
            },
            {
                 "field": "receiver.currency",
                 "message": [
                       "Currency is not supported"
                ]
            }
		]
	}
}
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "ERROR_API_TOKEN_NOT_FOUND",
    "error": {
        "message": "API-TOKEN header not found in request with DATACORE/PHONE model in sender or receiver."
    }
}
HTTP/1.1 200 OK
Content-Type: application/json;charset=ISO-8859-1

{
    "status": "ERROR_MERCHANT_NOT_SUPPORT_CARD_PROVIDER",
    "error": {
        "message": "Merchant not support the given card provider, please check merchant configuration"
    }
}
Errors mentioned below may occur if card’s country is other than user’s country for USA or CAN transaction
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "ERROR_WHILE_VALIDATING_CARD_COUNTRY_CODE_AND_USER_COUNTRY_CODE_FOR_PLAIN",
    "error": {
        "message": "Card country code not compatible with user country code. Please update country in request."
    }
}
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "ERROR_WHILE_VALIDATING_CARD_COUNTRY_CODE_AND_USER_COUNTRY_CODE",
    "error": {
        "message": "Card country code not compatible with user country code. Please update user profile."
    }
}
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "ERROR_WHILE_GETTING_COUNTRY_CODE",
    "error": {
        "message": "Could not get card country code"
    }
}
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "ERROR_WHILE_VALIDATING_PROVINCE_NOT_CORRECT_PROVINCE_CODE",
    "error": {
        "message": "Province code is not valid province code. Please update user profile"
    }
}
Error described bellow may occur when merchant tries to make transaction in other model than assigned primarily. For example, if merchant’s model is set as Card-Card and then merchant will try to make transaction in Cash-Card model, will receive error as bellow.
HTTP/1.1 200 OK
Content-Type: application/json;charset=ISO-8859-1

{
    "status": "ERROR_VALIDATION",
    "error": {
        "message": "Some information is missing or incorrect.",
        "errors": [
            {
                "field": "sender.type",
                "message": [
                    "Sender type violates merchant model"
                ]
            }
        ]
    }
}
Errors below may occur when a merchant uses a sender card or a receiver card issued in a country that is on the list of countries High Risk excluded from the Fenige API transactions. The transaction is treated as high risk and rejected. Please contact support.
HTTP/1.1 200 OK
Content-Type: application/json;charset=ISO-8859-1

{
    "status": "ERROR_MERCHANT_FUNDING_CARD_COUNTRY_RESTRICTED",
    "error": {
        "message": "Restricted funding card country was used."
    }
}
HTTP/1.1 200 OK
Content-Type: application/json;charset=ISO-8859-1

{
    "status": "ERROR_MERCHANT_PAYMENT_CARD_COUNTRY_RESTRICTED",
    "error": {
        "message": "Restricted payment card country was used."
    }
}
HTTP/1.1 200 OK
Content-Type: application/json;charset=ISO-8859-1

{
    "status": "ERROR_TRANSACTION_GEOGRAPHIC_SCOPE_BLOCKED",
    "error": {
        "message": "Geographic scope is not permitted for this transaction"
    }
}
Errors below may occur when a merchant uses a sender card or a receiver card issued in a country that is on the list of countries excluded from the Fenige API transactions. Please contact support.
HTTP/1.1 200 OK
Content-Type: application/json;charset=ISO-8859-1

{
"status": "ERROR_FUNDING_CARD_COUNTRY_RESTRICTED",
"error": {
"message": "Restricted funding card country was used."
}
}
HTTP/1.1 200 OK
Content-Type: application/json;charset=ISO-8859-1

{
"status": "ERROR_PAYMENT_CARD_COUNTRY_RESTRICTED",
"error": {
"message": "Restricted payment card country was used."
}
}
Errors mentioned below may occur if sender firstName and lastName are the same
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "ERROR_VALIDATION",
    "error": {
        "message": "Some information is missing or incorrect.",
        "errors": [
            {
                "field": "sender.firstName",
                "message": [
                    "invalid sender firstName and lastName the same"
                ]
            }
        ]
    }
}
Errors mentioned below may occur if sender firstName or lastName contains all the same characters
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "ERROR_VALIDATION",
    "error": {
        "message": "Some information is missing or incorrect.",
        "errors": [
            {
                "field": "sender.firstName",
                "message": [
                    "invalid sender firstName contains all the same characters"
                ]
            }
        ]
    }
}
{
    "status": "ERROR_VALIDATION",
    "error": {
        "message": "Some information is missing or incorrect.",
        "errors": [
            {
                "field": "sender.lastName",
                "message": [
                    "invalid sender lastName contains all the same characters"
                ]
            }
        ]
    }
}
401 UNAUTHORIZED
HTTP/1.1 401 Unauthorized
Content-Type: application/json

{
      "timestamp": "2021-12-22T12:39:53.168+0000",
      "status": 401,
      "error": "Unauthorized",
      "message": "Username or password is not correct",
      "path": "/client/delayed/send-money"
}
HTTP/1.1 401 Unauthorized
Content-Type: application/json

{
      "timestamp": "2021-12-22T12:39:53.168+0000",
      "status": 401,
      "error": "Unauthorized",
      "message": "ERROR_USER_NOTFOUND",
      "path": "/client/delayed/send-money"
}
Table 26. Response fields
Path Description

timestamp

Time when request was executed

status

Http response code

error

Http status name

message

Message for response code

path

Path to a specific resource

403 FORBIDDEN
HTTP Response - Error
HTTP/1.1 403 Forbidden
Content-Type: application/json

{
    "timestamp": 1610464313387,
    "status": 403,
    "error": "Forbidden",
    "message": "No message available",
    "path": "/client/delayed/send-money"
}

3.5.2. Delayed Payment

POST /client/delayed/payment Content-Type: application/json, Authorization: Basic Auth, API-TOKEN*
The Delayed Payment method is used to send the Receiver's data and finalize the transaction flow. In order to make this Payment, user must do Funding firstly.
In response to Funding, we get an 'orderId' field, which we must use in the Delayed Payment request's body.
If the Funding has not been completed or if the Funding has already been completed (with success or with failure), Payment will not be processed.
Since october '22 it is possible to make delayed payment with cardId so we don't need to know plain card number now and we can user data stored before. Look at MASTERCARD
(cardId) and VISA(cardId) tabs.
The maximum time for the execution of Delayed Payment after earlier calling Delayed Send Money is 12 hours. After 12 hours after Funding without Payment, it will be reversed and sender will get their funds back. Your server will receive Webhook Event after Reversal Funding if webhook is enabled in your merchant configuration.
There is 3 attempts to execute Delayed Payment after earlier call Delayed Send Money.
Delayed Payment Examples
DELAYED_PAYMENT_REMEMBER_RECEIVER
DP PAYMENT DELAYED RECEIVER REMEMBER
DELAYED_PAYMENT_NOT_REMEMBER_RECEIVER
DP PAYMENT DELAYED RECEIVER NOT REMEMBER
Example HTTP Request
VISA(Phone)
POST /client/delayed/payment HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 338
Host: java-staging.fenige.pl:8181

{
  "orderId" : "2b6c9deb-18ab-405c-be77-d0e6d82b4cae",
  "receiver" : {
    "type" : "DELAYED",
    "firstName" : "Rob",
    "lastName" : "Wring",
    "cardNumber" : "4485909148265810",
    "rememberReceiver" : false,
    "phoneNumber" : "48560740349",
    "currency" : "PLN"
  },
  "requestId" : "2b6c9deb-18ab-405c-be77-d0e6d82b4cae"
}
Table 27. Delayed Payment Request Fields
Path Type Validation Rule Description

orderId

String

Required

@NotNull

Unique transaction identifier.

requestId

String

Optional

@Uuid

128 bit number generated by the user, used to identify single transaction. Ensures that the transaction with the given parameter is processed only once.

receiver.type

String

Required

@NotNull

For this configuration the value of this field must be "DELAYED".

receiver.firstName

String

Required

@NotNull

Receiver first name.

receiver.lastName

String

Required

@NotNull

Receiver last name.

receiver.cardNumber

String

Required

@NotNull

Receiver card number.

receiver.currency

String

Required

@NotNull

Currency for transaction. Example: PLN.

receiver.phoneNumber

String

Required

@NotNull

Receiver phone number.

receiver.rememberReceiver

Boolean

Required

@NotNull

By sending this field as 'true' value you can save receiver.

MASTERCARD(Phone)
POST /client/delayed/payment HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 338
Host: java-staging.fenige.pl:8181

{
  "orderId" : "ea8fb71d-20fa-4a6c-9c99-fc3cc8324460",
  "receiver" : {
    "type" : "DELAYED",
    "firstName" : "Rob",
    "lastName" : "Wring",
    "cardNumber" : "5117964247989169",
    "rememberReceiver" : false,
    "phoneNumber" : "48560740349",
    "currency" : "PLN"
  },
  "requestId" : "ea8fb71d-20fa-4a6c-9c99-fc3cc8324460"
}
Table 28. Delayed Payment Request Fields
Path Type Validation Rule Description

orderId

String

Required

@NotNull

Unique transaction identifier.

requestId

String

Optional

@Uuid

128 bit number generated by the user, used to identify single transaction. Ensures that the transaction with the given parameter is processed only once.

receiver.type

String

Required

@NotNull

For this configuration the value of this field must be "DELAYED".

receiver.firstName

String

Required

@NotNull

Receiver first name.

receiver.lastName

String

Required

@NotNull

Receiver last name.

receiver.cardNumber

String

Required

@NotNull

Receiver card number.

receiver.currency

String

Required

@NotNull

Currency for transaction. Example: PLN.

receiver.phoneNumber

String

Required

@NotNull

Receiver phone number.

receiver.rememberReceiver

Boolean

Required

@NotNull

By sending this field as 'true' value you can save receiver.

VISA(Email)
POST /client/delayed/payment HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 340
Host: java-staging.fenige.pl:8181

{
  "orderId" : "3c792568-f122-4015-a0d5-33dc483bfa7f",
  "receiver" : {
    "type" : "DELAYED",
    "firstName" : "Rob",
    "lastName" : "Wring",
    "email" : "rob.wring@fenige.pl",
    "cardNumber" : "4485909148265810",
    "rememberReceiver" : false,
    "currency" : "PLN"
  },
  "requestId" : "3c792568-f122-4015-a0d5-33dc483bfa7f"
}
Table 29. Delayed Payment Request Fields
Path Type Validation Rule Description

orderId

String

Required

@NotNull

Unique transaction identifier.

requestId

String

Optional

@Uuid

128 bit number generated by the user, used to identify single transaction. Ensures that the transaction with the given parameter is processed only once.

receiver.type

String

Required

@NotNull

For this configuration the value of this field must be "DELAYED".

receiver.firstName

String

Required

@NotNull

Receiver first name.

receiver.lastName

String

Required

@NotNull

Receiver last name.

receiver.email

String

Required

@NotNull

Receiver email.

receiver.cardNumber

String

Required

@NotNull

Receiver card number.

receiver.currency

String

Required

@NotNull

Currency for transaction. Example: PLN.

receiver.rememberReceiver

Boolean

Required

@NotNull

By sending this field as 'true' value you can save receiver.

MASTERCARD(Email)
POST /client/delayed/payment HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 340
Host: java-staging.fenige.pl:8181

{
  "orderId" : "71c6d40a-939a-4aed-826e-09e99c8e9ae1",
  "receiver" : {
    "type" : "DELAYED",
    "firstName" : "Rob",
    "lastName" : "Wring",
    "email" : "rob.wring@fenige.pl",
    "cardNumber" : "5117964247989169",
    "rememberReceiver" : false,
    "currency" : "PLN"
  },
  "requestId" : "71c6d40a-939a-4aed-826e-09e99c8e9ae1"
}
Table 30. Delayed Payment Request Fields
Path Type Validation Rule Description

orderId

String

Required

@NotNull

Unique transaction identifier.

requestId

String

Optional

@Uuid

128 bit number generated by the user, used to identify single transaction. Ensures that the transaction with the given parameter is processed only once.

receiver.type

String

Required

@NotNull

For this configuration the value of this field must be "DELAYED".

receiver.firstName

String

Required

@NotNull

Receiver first name.

receiver.lastName

String

Required

@NotNull

Receiver last name.

receiver.email

String

Required

@NotNull

Receiver email.

receiver.cardNumber

String

Required

@NotNull

Receiver card number.

receiver.currency

String

Required

@NotNull

Currency for transaction. Example: PLN.

receiver.rememberReceiver

Boolean

Required

@NotNull

By sending this field as 'true' value you can save receiver.

VISA(cardId)
POST /client/delayed/payment HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 322
Host: java-staging.fenige.pl:8181

{
  "orderId" : "a941af61-2213-4739-920e-3f246f3883b2",
  "receiver" : {
    "type" : "DELAYED",
    "firstName" : "Rob",
    "lastName" : "Wring",
    "email" : "rob.wring@fenige.pl",
    "cardId" : 1234,
    "rememberReceiver" : false,
    "currency" : "PLN"
  },
  "requestId" : "a941af61-2213-4739-920e-3f246f3883b2"
}
Table 31. Delayed Payment Request Fields
Path Type Validation Rule Description

orderId

String

Required

@NotNull

Unique transaction identifier.

requestId

String

Optional

@Uuid

128 bit number generated by the user, used to identify single transaction. Ensures that the transaction with the given parameter is processed only once.

receiver.type

String

Required

@NotNull

For this configuration the value of this field must be DELAYED.

receiver.email

String

Required

@NotNull

Receiver email.

receiver.cardId

Number

Required

@NotNull

Receiver card id.

receiver.currency

String

Required

@NotNull

Currency for transaction. Example: PLN.

receiver.firstName

String

Optional

@NotNull

Receiver first name.

receiver.lastName

String

Optional

@NotNull

Receiver last name.

MASTERCARD(cardId)
POST /client/delayed/payment HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 322
Host: java-staging.fenige.pl:8181

{
  "orderId" : "6a2a857a-116e-4bea-a65f-82583af51ce5",
  "receiver" : {
    "type" : "DELAYED",
    "firstName" : "Rob",
    "lastName" : "Wring",
    "email" : "rob.wring@fenige.pl",
    "cardId" : 1234,
    "rememberReceiver" : false,
    "currency" : "PLN"
  },
  "requestId" : "6a2a857a-116e-4bea-a65f-82583af51ce5"
}
Table 32. Delayed Payment Request Fields
Path Type Validation Rule Description

orderId

String

Required

@NotNull

Unique transaction identifier.

requestId

String

Optional

@Uuid

128 bit number generated by the user, used to identify single transaction. Ensures that the transaction with the given parameter is processed only once.

receiver.type

String

Required

@NotNull

For this configuration the value of this field must be DELAYED.

receiver.email

String

Required

@NotNull

Receiver email.

receiver.cardId

Number

Required

@NotNull

Receiver card id.

receiver.currency

String

Required

@NotNull

Currency for transaction. Example: PLN.

receiver.firstName

String

Optional

@NotNull

Receiver first name.

receiver.lastName

String

Optional

@NotNull

Receiver last name.

Response
Response status

Status

Description

200 OK

Delayed Send Money approved for processing and transaction details returned.

400 Bad Request

Returned when request is incorrect, required fields are missing or the values are not valid.

500 Internal Server Error

Returned when user provides wrong order-id or transaction was failed or was Declined.

Example HTTP Response
200 OK
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1069

{
  "amount" : 2000,
  "amountInUsDollar" : 537,
  "bigDecimalAmount" : 20.0,
  "commission" : 0,
  "bigDecimalCommission" : 0,
  "orderId" : "8977de44-8b84-4216-b2a4-4996935a4f54",
  "fundingRrn" : "031420000725",
  "paymentRrn" : "031420000726",
  "3DS" : true,
  "revaluationResult" : {
    "revaluationFundingAmount" : 2000,
    "bigDecimalRevaluationFundingAmount" : 20.0,
    "fundingCurrency" : "PLN",
    "revaluationPaymentAmount" : 2000,
    "bigDecimalRevaluationPaymentAmount" : 20.0,
    "paymentCurrency" : "PLN",
    "determineCurrencyRate" : {
      "from" : "PLN",
      "to" : "PLN",
      "currencyRate" : "1"
    }
  },
  "receiver" : {
    "firstName" : "Rob",
    "lastName" : "Wring",
    "provider" : "MASTERCARD",
    "hiddenCardNumber" : "511796******9169",
    "bankName" : "Alior Bank SA"
  },
  "sender" : {
    "firstName" : "Mark",
    "lastName" : "Smith",
    "provider" : "MASTERCARD",
    "hiddenCardNumber" : "511796******9169",
    "bankName" : "Alior Bank SA"
  },
  "transactionStatus" : "APPROVED",
  "responseCode" : "CODE_00"
}

Response fields

Path Type Description

orderId

String

Unique transaction identifier.

transactionStatus

String

Transaction status.

responseCode

String

Response code.

amount

Number

Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100]

amountInUsDollar

Number

Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100]

bigDecimalAmount

Number

Field informing about the amount of cash transferred with decimal precision.

commission

Number

This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100]

bigDecimalCommission

Number

This is the amount of commission that was added to the transaction at 0.01 currency.

fundingRrn

String

Funding Retrieval Reference Number.

paymentRrn

String

Payment Retrieval Reference Number.

3DS

Boolean

Value: true/false determines if transaction was processed with 3ds

revaluationResult.revaluationFundingAmount

Number

Amount (in pennies) of funding transaction in fundingCurrency.

revaluationResult.bigDecimalRevaluationFundingAmount

Number

Amount of funding transaction in fundingCurrency.

revaluationResult.fundingCurrency

String

Currency code the same as sender’s card currency

revaluationResult.revaluationPaymentAmount

Number

Amount (in pennies) of payment transaction in paymentCurrency.

revaluationResult.bigDecimalRevaluationPaymentAmount

Number

Amount of payment transaction in paymentCurrency.

revaluationResult.paymentCurrency

String

Currency code the same as receiver’s card currency.

revaluationResult.determineCurrencyRate.from

String

Currency which was conversion from.

revaluationResult.determineCurrencyRate.to

String

Resulted currency.

revaluationResult.determineCurrencyRate.currencyRate

String

Currency rate.

receiver

Object

Personal data of the person to whom the transfer is addressed.

sender

Object

Personal data of the person who performs the transfer of cash.

400 Bad request
HTTP/1.1 400 BAD REQUEST
Content-Type: application/json;charset=ISO-8859-1
Content-Length: 104

{
  "error" : {
    "status" : "ERROR_INVALID_JSON",
    "message" : "Some properties are invalid"
  }
}
Errors mentioned below may occur if receiver firstName and lastName are the same
HTTP/1.1 400 BAD REQUEST
Content-Type: application/json
{
    "status": "ERROR_VALIDATION",
    "error": {
        "message": "Some information is missing or incorrect.",
        "errors": [
            {
                "field": "receiver.firstName",
                "message": [
                    "invalid receiver firstName and lastName the same"
                ]
            }
        ]
    }
}
Errors mentioned below may occur if receiver firstName or lastName contains all the same characters
HTTP/1.1 400 BAD REQUEST
Content-Type: application/json
{
    "status": "ERROR_VALIDATION",
    "error": {
        "message": "Some information is missing or incorrect.",
        "errors": [
            {
                "field": "receiver.firstName",
                "message": [
                    "invalid receiver firstName contains all the same characters"
                ]
            }
        ]
    }
}
HTTP/1.1 400 BAD REQUEST
Content-Type: application/json
{
    "status": "ERROR_VALIDATION",
    "error": {
        "message": "Some information is missing or incorrect.",
        "errors": [
            {
                "field": "receiver.lastName",
                "message": [
                    "invalid receiver lastName contains all the same characters"
                ]
            }
        ]
    }
}
Errors mentioned below may occur if sender email is equal to receiver email, but firstName and lastName data are different
HTTP/1.1 400 BAD REQUEST
Content-Type: application/json
{
    "status": "ERROR_VALIDATION",
    "error": {
        "message": "Some information is missing or incorrect.",
        "errors": [
            {
                "field": "sender.email",
                "message": [
                    "invalid sender and receiver email the same for different person"
                ]
            }
        ]
    }
}
500 Internal Server Error
HTTP/1.1 500 Internal Server Error
Content-Type: text/plain;charset=ISO-8859-1
{
"status" : "PAYMENT_TRANSACTION_DECLINED:CODE_05"
}

After receiving these statuses, the transaction was rejected

Error statuses

Name Description Allow to try again

WAITING_FOR_RECEIVER_TIMEOUT

The time of 12 hours has been exceeded

No

ERROR_DELAYED_PAYMENT_ATTEMPTS_EXCEEDED

The number of 3 payment attempts has been exceeded

No

ERROR_DELAYED_PAYMENT_TRX_NOT_REGISTERED_FOR_DELAYED_PROCESSING

Payment of transaction was not registered for delayed processing. Cannot process payment

No

ERROR_DELAYED_PAYMENT_NOT_FOUND

There is no Delayed Payment with given orderId

No

ERROR_DELAYED_PAYMENT_UNEXPECTED_EXCEPTION_OCCURRED

Critical internal exception occurred in system while trying to make Delayed Payment

Yes

ERROR_DELAYED_PAYMENT_RECEIVER_NOT_PRESENT

There is no receiver with given phone or email.

Yes

PAYMENT_TRANSACTION_DECLINED:CODE_XX

CODE_XX - is MasterCard response code (ISO 8583)

Yes

ISSUER_NOT_SUPPORTED

This card is not supported

Yes

ERROR_CARD_IS_BLOCKED

Card is blocked for 1 hour in Fenige

Yes

ERROR_USER_IS_BLOCKED

User is blocked in Fenige

Yes

ERROR_BIN_IS_BLOCKED

Bin is blocked for 1 hour in Fenige

Yes

ERROR_PAYMENT_BANK_IS_BLOCKED

Payment bank is blocked in Fenige

Yes

PAYMENT_TRANSACTION_DECLINED:ACQ_ERROR

Payment transaction was declined and funding was reversed

Yes

ERROR_ACQ_CONNECTION

A connection error occurred to Acquirer service

Yes

AML_ERROR

User was found on the stop list

Yes

NETWORK_ERROR

Acceptance network is unavailable

Yes

CURRENCY_RATES_NOT_FOUND

No currently effective rates found in the database

Yes

CURRENCY_NOT_SUPPORTED

Currency is not supported

Yes

MERCHANT_CURRENCY_NOT_SUPPORTED

Currency is not supported by Merchant

Yes

ERROR_RECEIVER_CARD_IS_BLOCKED

Receiver’s card is blocked

Yes

ERROR_RECEIVER_USER_IS_BLOCKED

User acting as receiver is blocked

Yes

ERROR_RECEIVER_BIN_IS_BLOCKED

BIN of receiver’s card is blocked

Yes

ERROR_AMOUNT_IS_BLOCKED

Amount is higher than acceptable limit

Yes

ERROR_MONITORING_CONNECTION

Couldn’t established connection to Monitoring service

Yes

ERROR_MONITORING

Some unrecognized error occurred

Yes

ERROR_USER_NOTFOUND

Some problem with user authorization in Datacenter

Yes

ERROR_USER_VERIFICATION

The transaction user’s personal data verified as incorrect on the verification service. Transaction rejected.

No

ERROR_MPI_CONNECTION

Couldn’t established connection to MPI service

Yes

PAYMENT_TRANSACTION_DECLINED:MIP_RESPONSE_TIMEOUT

Payment transaction declined - mip response timeout

Yes

PAYMENT_TRANSACTION_DECLINED:NEED_MANUAL_VERIFICATION

Payment process failed and it is need to manual verification of transaction

Yes

PAYMENT_TRANSACTION_DECLINED:MIP_PROXY_RESPONSE_TIMEOUT

Payment transaction declined - mip_proxy response timeout

Yes

ERROR_TRANSACTION_NOT_FOUND

Error transaction not exists

Yes

ERROR_CARD_NOT_FOUND

Card was not found

No

ERROR_DATACORE_CONNECTION

Problem with DC

Yes

ERROR_VALIDATION

Some validation error occurred

Yes

ERROR_MERCHANT_DELAYED_PAYMENT_CARD_COUNTRY_RESTRICTED

Merchant is marked as high risk and does not allow the execution of transaction with the given card country

Yes

ERROR_DELAYED_PAYMENT_CARD_COUNTRY_RESTRICTED

System does not allow the execution of transaction with the given card country

Yes

ERROR_TRANSACTION_GEOGRAPHIC_SCOPE_BLOCKED

Geographic scope is not permitted for this transaction

Yes

ERROR_SINGLE_TRANSACTION_LIMIT

Transaction limit for single transaction exceeded

Yes

ERROR_DAILY_TRANSACTION_LIMIT

Daily transaction limit for amount per card exceeded

Yes

ERROR_DAILY_COUNT_TRANSACTION_LIMIT

Daily transaction limit for count per card exceeded

Yes

ERROR_MONTHLY_TRANSACTION_LIMIT

Monthly transaction limit for amount per card exceeded

Yes

ERROR_MONTHLY_COUNT_TRANSACTION_LIMIT

Monthly transaction limit for count per card exceeded

Yes

ERROR_DAILY_CUMULATIVE_LIMIT

Daily cumulative limit per card was exceeded

Yes

ERROR_MONTHLY_CUMULATIVE_LIMIT

Monthly cumulative limit per card was exceeded

Yes

ERROR_MERCHANT_MASTERCARD_DAILY_CUMULATIVE_LIMIT

Daily cumulative limit per merchant transactions using mastercard cards was exceeded

Yes

ERROR_MERCHANT_MASTERCARD_MONTHLY_CUMULATIVE_LIMIT

Monthly cumulative limit per merchant transactions using mastercard cards was exceeded

Yes

ERROR_MERCHANT_VISA_DAILY_CUMULATIVE_LIMIT

Daily cumulative limit per merchant transactions using visa cards was exceeded

Yes

ERROR_MERCHANT_VISA_MONTHLY_CUMULATIVE_LIMIT

Monthly cumulative limit per merchant transactions using visa cards was exceeded

Yes

ERROR_MERCHANT_DAILY_CUMULATIVE_LIMIT

Daily cumulative limit per merchant transactions using mastercard and visa cards was exceeded

Yes

ERROR_MERCHANT_MONTHLY_CUMULATIVE_LIMIT

Monthly cumulative limit per merchant transactions using mastercard and visa cards was exceeded

Yes

LIMIT_ERROR

Error during limit checking

Yes

ERROR_SOMETHING_WRONG

An unrecognized error occurred

Yes

500 Internal Server Error (CARD BLOCKED)
HTTP/1.1 500 Internal Server Error
Content-Type: text/plain;charset=ISO-8859-1
{
    "status" : "ERROR_RECEIVER_CARD_IS_BLOCKED"
    "cardBlockData": {
        "blockType": "TEMP",
        "blockedUntil": "2022-09-24T14:03:56.000"
    }
}

After receiving these statuses, the transaction was rejected

Error statuses

Name Description Allow to try again

WAITING_FOR_RECEIVER_TIMEOUT

The time of 12 hours has been exceeded

No

ERROR_DELAYED_PAYMENT_ATTEMPTS_EXCEEDED

The number of 3 payment attempts has been exceeded

No

ERROR_DELAYED_PAYMENT_TRX_NOT_REGISTERED_FOR_DELAYED_PROCESSING

Payment of transaction was not registered for delayed processing. Cannot process payment

No

ERROR_DELAYED_PAYMENT_NOT_FOUND

There is no Delayed Payment with given orderId

No

ERROR_DELAYED_PAYMENT_UNEXPECTED_EXCEPTION_OCCURRED

Critical internal exception occurred in system while trying to make Delayed Payment

Yes

ERROR_DELAYED_PAYMENT_RECEIVER_NOT_PRESENT

There is no receiver with given phone or email.

Yes

PAYMENT_TRANSACTION_DECLINED:CODE_XX

CODE_XX - is MasterCard response code (ISO 8583)

Yes

ISSUER_NOT_SUPPORTED

This card is not supported

Yes

ERROR_CARD_IS_BLOCKED

Card is blocked for 1 hour in Fenige

Yes

ERROR_USER_IS_BLOCKED

User is blocked in Fenige

Yes

ERROR_BIN_IS_BLOCKED

Bin is blocked for 1 hour in Fenige

Yes

ERROR_PAYMENT_BANK_IS_BLOCKED

Payment bank is blocked in Fenige

Yes

PAYMENT_TRANSACTION_DECLINED:ACQ_ERROR

Payment transaction was declined and funding was reversed

Yes

ERROR_ACQ_CONNECTION

A connection error occurred to Acquirer service

Yes

AML_ERROR

User was found on the stop list

Yes

NETWORK_ERROR

Acceptance network is unavailable

Yes

CURRENCY_RATES_NOT_FOUND

No currently effective rates found in the database

Yes

CURRENCY_NOT_SUPPORTED

Currency is not supported

Yes

MERCHANT_CURRENCY_NOT_SUPPORTED

Currency is not supported by Merchant

Yes

ERROR_RECEIVER_CARD_IS_BLOCKED

Receiver’s card is blocked

Yes

ERROR_RECEIVER_USER_IS_BLOCKED

User acting as receiver is blocked

Yes

ERROR_RECEIVER_BIN_IS_BLOCKED

BIN of receiver’s card is blocked

Yes

ERROR_AMOUNT_IS_BLOCKED

Amount is higher than acceptable limit

Yes

ERROR_MONITORING_CONNECTION

Couldn’t established connection to Monitoring service

Yes

ERROR_MONITORING

Some unrecognized error occurred

Yes

ERROR_USER_NOTFOUND

Some problem with authorized the user.

Yes

ERROR_USER_VERIFICATION

The transaction user’s personal data verified as incorrect on the verification service. Transaction rejected.

No

ERROR_MPI_CONNECTION

Couldn’t established connection to MPI service

Yes

PAYMENT_TRANSACTION_DECLINED:MIP_RESPONSE_TIMEOUT

Payment transaction declined - mip response timeout

Yes

PAYMENT_TRANSACTION_DECLINED:NEED_MANUAL_VERIFICATION

Payment process failed and it is need to manual verification of transaction

Yes

PAYMENT_TRANSACTION_DECLINED:MIP_PROXY_RESPONSE_TIMEOUT

Payment transaction declined - mip_proxy response timeout

Yes

ERROR_TRANSACTION_NOT_FOUND

Error transaction not exists

Yes

ERROR_CARD_NOT_FOUND

Card was not found

No

ERROR_DATACORE_CONNECTION

Problem with DC

Yes

ERROR_VALIDATION

Some validation error occurred

Yes

ERROR_SOMETHING_WRONG

An unrecognized error occurred

Yes

ERROR_MERCHANT_DELAYED_PAYMENT_CARD_COUNTRY_RESTRICTED

Merchant is marked as high risk and does not allow the execution of transaction with the given card country

Yes

ERROR_DELAYED_PAYMENT_CARD_COUNTRY_RESTRICTED

System does not allow the execution of transaction with the given card country

Yes

ERROR_TRANSACTION_GEOGRAPHIC_SCOPE_BLOCKED

Geographic scope is not permitted for this transaction

Yes

3.5.3. Transaction history

GET /client/{clientId}/transactions?page=0&size=100 Content Type: application/json, Authorization: Basic Auth
Method return page with list of user transactions. Transactions are filtered by clientId provided in GET parameter.
User can send additional optional parameters (page, size) to obtain given page with defined size.
Request
GET /client/0/transactions?fromDate=2018-03-06&toDate=2018-03-08&page=0&size=100 HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Host: java-staging.fenige.pl:8181
Response
Response status
Status Description

200 OK

Returned list of transactions history.

404 NOT FOUND

Returning the list failed.

Example Response
200 OK - phone receiver
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1073

{
  "content" : [ {
    "correlationId" : "fa8b9049-7c9a-43b9-8be4-4918d61cf247",
    "createdDate" : "2018-03-15T10:24:52.149Z",
    "amount" : 15000,
    "amountInUsDollar" : 4024,
    "textAmount" : "150.00 PLN",
    "currency" : "PLN",
    "cardId" : 3574,
    "receiverFirstName" : "Patrick",
    "receiverLastName" : "Evans",
    "receiverHiddenCardNumber" : "511123******1234",
    "receiverProvider" : "MASTERCARD",
    "receiverBankName" : "Bank Polska Kasa Opieki Spółka Akcyjna",
    "receiverPhone" : "600300200",
    "senderFirstName" : "Rob",
    "senderLastName" : "Wring",
    "senderHiddenCardNumber" : "522212******4321",
    "senderProvider" : "MASTERCARD",
    "senderBankName" : "Alior Bank SA",
    "status" : "approved",
    "transactionDirection" : "OUTGOING",
    "3DS" : true
  } ],
  "pageable" : "INSTANCE",
  "last" : true,
  "totalElements" : 1,
  "totalPages" : 1,
  "size" : 1,
  "number" : 0,
  "sort" : {
    "empty" : true,
    "sorted" : false,
    "unsorted" : true
  },
  "first" : true,
  "numberOfElements" : 1,
  "empty" : false
}

Response fields

Path Type Description

content.[].correlationId

String

Unique UUID describing single transaction in system.

content.[].createdDate

String

Date of transaction processing.

content.[].amount

Number

Transaction amount in pennies.

content.[].amountInUsDollar

Number

Transaction amount in USD currency in pennies.

content.[].textAmount

String

Transaction amount with currency.

content.[].currency

String

Transaction currency.

content.[].cardId

Number

Datacore card id used in transaction (sender card).

content.[].3DS

Boolean

Value: true/false determines if transaction was processed with 3ds

content.[].receiverFirstName

String

Transaction receiver first name.

content.[].receiverLastName

String

Transaction receiver last name.

content.[].receiverHiddenCardNumber

String

Transaction receiver hidden card number.

content.[].receiverProvider

String

VISA or MASTERCARD or MAESTRO

content.[].receiverBankName

String

Transaction receiver card bank name.

content.[].senderFirstName

String

Transaction sender first name.

content.[].senderLastName

String

Transaction sender last name.

content.[].senderHiddenCardNumber

String

Transaction sender hidden card numbe.

content.[].senderProvider

String

VISA or MASTERCARD or MAESTRO

content.[].senderBankName

String

Transaction sender card bank name.

content.[].receiverPhone

String

Transaction receiver phone number.

content.[].status

String

Status of the transaction (approved, reversed, rejected).

content.[].transactionDirection

String

Direction of the transaction (INCOMING, OUTGOING)

content.[].merchantAdviceCode

String

Information about the reasons for declined transactions and actions that merchants can take. Occurs only for mastercard and for rejected transactions if Mastercard returns this information

last

Boolean

Describes whether the page is last (true ot false).

totalPages

Number

Total number of all pages.

totalElements

Number

Total number of all transactions.

numberOfElements

Number

Number of transactions on page.

first

Boolean

Describes whether the page is first (true ot false).

sort

Object

Details of sort.

size

Number

Max number of transactions on page.

number

Number

Page number.

pageable

String

Requested page information.

200 OK - email receiver
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1082

{
  "content" : [ {
    "correlationId" : "6dd92635-a669-4764-9ee2-668cf8d08f5c",
    "createdDate" : "2018-03-15T10:24:52.149Z",
    "amount" : 15000,
    "amountInUsDollar" : 4024,
    "textAmount" : "150.00 PLN",
    "currency" : "PLN",
    "cardId" : 3574,
    "receiverFirstName" : "Patrick",
    "receiverLastName" : "Evans",
    "receiverHiddenCardNumber" : "511123******1234",
    "receiverProvider" : "MASTERCARD",
    "receiverBankName" : "Bank Polska Kasa Opieki Spółka Akcyjna",
    "receiverEmail" : "receiver@fenige.pl",
    "senderFirstName" : "Rob",
    "senderLastName" : "Wring",
    "senderHiddenCardNumber" : "522212******4321",
    "senderProvider" : "MASTERCARD",
    "senderBankName" : "Alior Bank SA",
    "status" : "approved",
    "transactionDirection" : "INCOMING",
    "3DS" : true
  } ],
  "pageable" : "INSTANCE",
  "last" : true,
  "totalElements" : 1,
  "totalPages" : 1,
  "size" : 1,
  "number" : 0,
  "sort" : {
    "empty" : true,
    "sorted" : false,
    "unsorted" : true
  },
  "first" : true,
  "numberOfElements" : 1,
  "empty" : false
}

Response fields

Path Type Description

content.[].correlationId

String

Unique UUID describing single transaction in system.

content.[].createdDate

String

Date of transaction processing.

content.[].amount

Number

Transaction amount in pennies.

content.[].amountInUsDollar

Number

Transaction amount in USD currency in pennies.

content.[].textAmount

String

Transaction amount with currency.

content.[].currency

String

Transaction currency.

content.[].cardId

Number

Datacore card id used in transaction (sender card).

content.[].3DS

Boolean

Value: true/false determines if transaction was processed with 3ds

content.[].receiverFirstName

String

Transaction receiver first name.

content.[].receiverLastName

String

Transaction receiver last name.

content.[].receiverHiddenCardNumber

String

Transaction receiver hidden card number.

content.[].receiverProvider

String

VISA or MASTERCARD or MAESTRO

content.[].receiverBankName

String

Transaction receiver card bank name.

content.[].senderFirstName

String

Transaction sender first name.

content.[].senderLastName

String

Transaction sender last name.

content.[].senderHiddenCardNumber

String

Transaction sender hidden card number.

content.[].senderProvider

String

VISA or MASTERCARD or MAESTRO

content.[].senderBankName

String

Transaction sender card bank name.

content.[].receiverEmail

String

Transaction receiver email.

content.[].status

String

Status of the transaction (approved, reversed, rejected).

content.[].transactionDirection

String

Direction of the transaction (INCOMING, OUTGOING)

content.[].merchantAdviceCode

String

Information about the reasons for declined transactions and actions that merchants can take. Occurs only for mastercard and for rejected transactions if Mastercard returns this information

last

Boolean

Describes whether the page is last (true ot false).

totalPages

Number

Total number of all pages.

totalElements

Number

Total number of all transactions.

numberOfElements

Number

Number of transactions on page.

first

Boolean

Describes whether the page is first (true ot false).

sort

Object

Details of sort.

size

Number

Max number of transactions on page.

number

Number

Page number.

pageable

String

Requested page information.

200 OK - phone receiver (funding only)
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 841

{
  "content" : [ {
    "correlationId" : "f07dcbf9-9f8d-4552-801a-90f29d1dc72f",
    "createdDate" : "2018-03-15T10:24:52.149Z",
    "amount" : 15000,
    "amountInUsDollar" : 4024,
    "textAmount" : "150.00 PLN",
    "currency" : "PLN",
    "cardId" : 3574,
    "receiverPhone" : "600300200",
    "senderFirstName" : "Rob",
    "senderLastName" : "Wring",
    "senderHiddenCardNumber" : "522212******4321",
    "senderProvider" : "MASTERCARD",
    "senderBankName" : "Alior Bank SA",
    "status" : "approved",
    "transactionDirection" : "OUTGOING",
    "3DS" : true
  } ],
  "pageable" : "INSTANCE",
  "last" : true,
  "totalElements" : 1,
  "totalPages" : 1,
  "size" : 1,
  "number" : 0,
  "sort" : {
    "empty" : true,
    "sorted" : false,
    "unsorted" : true
  },
  "first" : true,
  "numberOfElements" : 1,
  "empty" : false
}

Response fields

Path Type Description

content.[].correlationId

String

Unique UUID describing single transaction in system.

content.[].createdDate

String

Date of transaction processing.

content.[].amount

Number

Transaction amount in pennies.

content.[].amountInUsDollar

Number

Transaction amount in USD currency in pennies.

content.[].textAmount

String

Transaction amount with currency.

content.[].currency

String

Transaction currency.

content.[].cardId

Number

Datacore card id used in transaction (sender card).

content.[].3DS

Boolean

Value: true/false determines if transaction was processed with 3ds

content.[].senderFirstName

String

Transaction sender first name.

content.[].senderLastName

String

Transaction sender last name.

content.[].senderHiddenCardNumber

String

Transaction sender hidden card number.

content.[].senderProvider

String

VISA or MASTERCARD or MAESTRO

content.[].senderBankName

String

Transaction sender card bank name.

content.[].receiverPhone

String

Transaction receiver phone number.

content.[].status

String

Status of the transaction (approved, reversed, rejected).

content.[].transactionDirection

String

Direction of the transaction (INCOMING, OUTGOING)

content.[].merchantAdviceCode

String

Information about the reasons for declined transactions and actions that merchants can take. Occurs only for mastercard and for rejected transactions if Mastercard returns this information

last

Boolean

Describes whether the page is last (true ot false).

totalPages

Number

Total number of all pages.

totalElements

Number

Total number of all transactions.

numberOfElements

Number

Number of transactions on page.

first

Boolean

Describes whether the page is first (true ot false).

sort

Object

Details of sort.

size

Number

Max number of transactions on page.

number

Number

Page number.

pageable

String

Requested page information.

200 OK - email receiver (funding only)
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 850

{
  "content" : [ {
    "correlationId" : "b71e930d-38b5-42c9-86ce-cf9ad86366d6",
    "createdDate" : "2018-03-15T10:24:52.149Z",
    "amount" : 15000,
    "amountInUsDollar" : 4024,
    "textAmount" : "150.00 PLN",
    "currency" : "PLN",
    "cardId" : 3574,
    "receiverEmail" : "receiver@fenige.pl",
    "senderFirstName" : "Rob",
    "senderLastName" : "Wring",
    "senderHiddenCardNumber" : "522212******4321",
    "senderProvider" : "MASTERCARD",
    "senderBankName" : "Alior Bank SA",
    "status" : "approved",
    "transactionDirection" : "OUTGOING",
    "3DS" : true
  } ],
  "pageable" : "INSTANCE",
  "last" : true,
  "totalElements" : 1,
  "totalPages" : 1,
  "size" : 1,
  "number" : 0,
  "sort" : {
    "empty" : true,
    "sorted" : false,
    "unsorted" : true
  },
  "first" : true,
  "numberOfElements" : 1,
  "empty" : false
}

Response fields

Path Type Description

content.[].correlationId

String

Unique UUID describing single transaction in system.

content.[].createdDate

String

Date of transaction processing.

content.[].amount

Number

Transaction amount in pennies.

content.[].amountInUsDollar

Number

Transaction amount in USD currency in pennies.

content.[].textAmount

String

Transaction amount with currency.

content.[].currency

String

Transaction currency.

content.[].cardId

Number

Datacore card id used in transaction (sender card).

content.[].3DS

Boolean

Value: true/false determines if transaction was processed with 3ds

content.[].senderFirstName

String

Transaction sender first name.

content.[].senderLastName

String

Transaction sender last name.

content.[].senderHiddenCardNumber

String

Transaction sender hidden card number.

content.[].senderProvider

String

VISA or MASTERCARD or MAESTRO

content.[].senderBankName

String

Transaction sender card bank name.

content.[].receiverEmail

String

Transaction receiver email.

content.[].status

String

Status of the transaction (approved, reversed, rejected).

content.[].transactionDirection

String

Direction of the transaction (INCOMING, OUTGOING)

content.[].merchantAdviceCode

String

Information about the reasons for declined transactions and actions that merchants can take. Occurs only for mastercard and for rejected transactions if Mastercard returns this information

last

Boolean

Describes whether the page is last (true ot false).

totalPages

Number

Total number of all pages.

totalElements

Number

Total number of all transactions.

numberOfElements

Number

Number of transactions on page.

first

Boolean

Describes whether the page is first (true ot false).

sort

Object

Details of sort.

size

Number

Max number of transactions on page.

number

Number

Page number.

pageable

String

Requested page information.

404 NOT FOUND
HTTP/1.1 404 Not Found

3.5.4. Check detailed status

GET /client/send-money/details/{orderId}, Authentication: Basic Auth
    The method allows obtaining a detailed status of multi-currency transaction specified by order-id. Parameter order-id was returned in the previous step (Send money
multicurrency).

From January 2021, there is an internal functionality to restrict access for the Merchant to specific method. The Fenige employee can disable access to a given endpoint, then the HTTP status 403 FORBIDDEN will be returned. The Merchant will be informed about each access restriction action.

Request
Table 33. /client/send-money/details/{orderId}
Parameter Description

orderId

Unique transaction identifier.

GET /client/send-money/details/00549d98-08cb-45d2-8673-4dcafa81f498 HTTP/1.1
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Host: java-staging.fenige.pl:8181
Response
Response status
Status Description

200 OK

Returned if the transaction completes successfully.

203 NON-AUTHORITATIVE INFORMATION

Returned when transaction was registered for processing. Check status in a while.

404 NOT FOUND

Returned when a transaction related to the given orderId doesn’t exist.

422 UNPROCESSABLE ENTITY

Returned when user provides wrong order-id or transaction was failed or was Declined.

500 INTERNAL SERVER ERROR

Returned when an internal error occur.

Example HTTP Response
200 OK
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1159

{
  "transactionId" : "TRX220132AM",
  "amount" : 1000,
  "amountInUsDollar" : 268,
  "bigDecimalAmount" : 10.0,
  "commission" : 200,
  "bigDecimalCommission" : 2.0,
  "orderId" : "00549d98-08cb-45d2-8673-4dcafa81f498",
  "createdDate" : "03-04-2018, 14:01",
  "fundingRrn" : "014011103023",
  "paymentRrn" : "014011103024",
  "arn" : "05411640143500000019325",
  "3DS" : true,
  "revaluationResult" : {
    "revaluationFundingAmount" : 1000,
    "bigDecimalRevaluationFundingAmount" : 10.0,
    "fundingCurrency" : "PLN",
    "revaluationPaymentAmount" : 1000,
    "bigDecimalRevaluationPaymentAmount" : 10.0,
    "paymentCurrency" : "PLN",
    "determineCurrencyRate" : {
      "from" : "PLN",
      "to" : "PLN",
      "currencyRate" : "1"
    }
  },
  "receiver" : {
    "firstName" : "John",
    "lastName" : "Novak",
    "provider" : "MASTERCARD",
    "hiddenCardNumber" : "557455******1623",
    "bankName" : "Alior Bank SA"
  },
  "sender" : {
    "firstName" : "Caroline",
    "lastName" : "Novak",
    "provider" : "MASTERCARD",
    "hiddenCardNumber" : "511796******9169",
    "bankName" : "Alior Bank SA"
  },
  "transactionStatus" : "APPROVED"
}

Response fields

Path Type Description

amount

Number

Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100]

amountInUsDollar

Number

Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100]

bigDecimalAmount

Number

Field informing about the amount of cash transferred with decimal precision.

commission

Number

This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100]

bigDecimalCommission

Number

This is the amount of commission that was added to the transaction at 0.01 currency.

orderId

String

Unique transaction identifier.

transactionId

String

The transactionId field is used for the Merchant to send its own internal transaction identifier. This field is returned in the response from the Check status method and sent by the Webhooks method. @Length(max = 64). Optional

createdDate

String

Date of transaction.

fundingRrn

String

Funding Retrieval Reference Number.

paymentRrn

String

Payment Retrieval Reference Number.

arn

String

Acquirer Reference Number

3DS

Boolean

Value: true/false determines if transaction was processed with 3ds

revaluationResult

Object (RevaluationResult)

Detailed information about revaluation between sender currency and receiver currency.

receiver

Object

Personal data of the person to whom the transfer is addressed.

sender

Object

Personal data of the person who performs the transfer of cash.

transactionStatus

String

Status of the transaction (PENDING, APPROVED, DECLINED, REJECTED, REVERSED)

RevaluationResult

Path Type Description

revaluationFundingAmount

Long

Amount (in pennies) of funding transaction in fundingCurrency

bigDecimalRevaluationFundingAmount

BigDecimal

Amount of funding transaction in fundingCurrency

fundingCurrency

String

Currency code the same as sender’s card currency

revaluationPaymentAmount

Long

Amount (in pennies) of payment transaction in paymentCurrency

bigDecimalRevaluationPaymentAmount

BigDecimal

Amount of payment transaction in paymentCurrency

paymentCurrency

String

Currency code the same as receiver’s card currency

determineCurrencyRate

Object (DetermineCurrencyRate)

Details about conversion

DetermineCurrencyRate

Path Type Description

from

Long

Currency which was conversion from

to

Long

Resulted currency

currencyRate

BigDecimal

Currency rate

203 NON-AUTHORITATIVE INFORMATION
HTTP/1.1 203 Non-Authoritative Information

After you get 203 you need to check status in a while because we processing this transaction and if you don’t get a response (200 - succeeded or 500 - declined) within 60 seconds then please contact us.

404 NOT FOUND
HTTP/1.1 404 Not Found
Content-Type: application/json
Content-Length: 51

{
  "errorStatus" : "ERROR_TRANSACTION_NOT_FOUND"
}

Response fields

Path Type Description

errorStatus

String

Additional data of the error occurred during a processing of the request

422 UNPROCESSABLE ENTITY
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json
Content-Length: 1287

{
  "transactionId" : "TRX220132AM",
  "amount" : 1000,
  "amountInUsDollar" : 268,
  "bigDecimalAmount" : 10.0,
  "commission" : 200,
  "bigDecimalCommission" : 2.0,
  "orderId" : "00549d98-08cb-45d2-8673-4dcafa81f498",
  "createdDate" : "03-04-2018, 14:01",
  "fundingRrn" : "014011103023",
  "paymentRrn" : "014011103024",
  "arn" : "05411640143500000019325",
  "3DS" : true,
  "revaluationResult" : {
    "revaluationFundingAmount" : 1000,
    "bigDecimalRevaluationFundingAmount" : 10.0,
    "fundingCurrency" : "PLN",
    "revaluationPaymentAmount" : 1000,
    "bigDecimalRevaluationPaymentAmount" : 10.0,
    "paymentCurrency" : "PLN",
    "determineCurrencyRate" : {
      "from" : "PLN",
      "to" : "PLN",
      "currencyRate" : "1"
    }
  },
  "receiver" : {
    "firstName" : "John",
    "lastName" : "Novak",
    "provider" : "MASTERCARD",
    "hiddenCardNumber" : "557455******1623",
    "bankName" : "Alior Bank SA"
  },
  "sender" : {
    "firstName" : "Caroline",
    "lastName" : "Novak",
    "provider" : "MASTERCARD",
    "hiddenCardNumber" : "511796******9169",
    "bankName" : "Alior Bank SA"
  },
  "transactionStatus" : "DECLINED",
  "cardBlockType" : "TEMP",
  "cardBlockedUntil" : "2024-03-30T01:03:52.133",
  "errorStatus" : "ERROR_SENDER_CARD_IS_BLOCKED"
}

Response fields

Path Type Description

amount

Number

Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100]

amountInUsDollar

Number

Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100]

bigDecimalAmount

Number

Field informing about the amount of cash transferred with decimal precision.

commission

Number

This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100]

bigDecimalCommission

Number

This is the amount of commission that was added to the transaction at 0.01 currency.

orderId

String

Unique transaction identifier.

transactionId

String

The transactionId field is used for the Merchant to send its own internal transaction identifier. This field is returned in the response from the Check status method and sent by the Webhooks method. @Length(max = 64). Optional

createdDate

String

Date of transaction.

fundingRrn

String

Funding Retrieval Reference Number.

paymentRrn

String

Payment Retrieval Reference Number.

arn

String

Acquirer Reference Number

3DS

Boolean

Value: true/false determines if transaction was processed with 3ds

revaluationResult

Object (RevaluationResult)

Detailed information about revaluation between sender currency and receiver currency.

receiver

Object

Personal data of the person to whom the transfer is addressed.

sender

Object

Personal data of the person who performs the transfer of cash.

transactionStatus

String

Status of the transaction (PENDING, APPROVED, DECLINED, REJECTED, REVERSED)

errorStatus

String

Additional data of the error occurred during a processing of the request

cardBlockType

String

Card lock type

cardBlockedUntil

String

Card’s lock end date

merchantAdviceCode

String

Information about the reasons for declined transactions and actions that merchants can take. Occurs only for mastercard and for rejected transactions if Mastercard returns this information

RevaluationResult

Path Type Description

revaluationFundingAmount

Long

Amount (in pennies) of funding transaction in fundingCurrency

bigDecimalRevaluationFundingAmount

BigDecimal

Amount of funding transaction in fundingCurrency

fundingCurrency

String

Currency code the same as sender’s card currency

revaluationPaymentAmount

Long

Amount (in pennies) of payment transaction in paymentCurrency

bigDecimalRevaluationPaymentAmount

BigDecimal

Amount of payment transaction in paymentCurrency

paymentCurrency

String

Currency code the same as receiver’s card currency

determineCurrencyRate

Object (DetermineCurrencyRate)

Details about conversion

DetermineCurrencyRate

Path Type Description

from

Long

Currency which was conversion from

to

Long

Resulted currency

currencyRate

BigDecimal

Currency rate

422 UNPROCESSABLE ENTITY CASH-CARD
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json
Content-Length: 1358

{
  "transactionId" : "TRX220132AM",
  "amount" : 1000,
  "amountInUsDollar" : 268,
  "bigDecimalAmount" : 10.0,
  "commission" : 200,
  "bigDecimalCommission" : 2.0,
  "orderId" : "00549d98-08cb-45d2-8673-4dcafa81f498",
  "createdDate" : "03-04-2018, 14:01",
  "fundingRrn" : "014011103023",
  "paymentRrn" : "014011103024",
  "arn" : "05411640143500000019325",
  "3DS" : false,
  "revaluationResult" : {
    "revaluationFundingAmount" : 1000,
    "bigDecimalRevaluationFundingAmount" : 10.0,
    "fundingCurrency" : "PLN",
    "revaluationPaymentAmount" : 1000,
    "bigDecimalRevaluationPaymentAmount" : 10.0,
    "paymentCurrency" : "PLN",
    "determineCurrencyRate" : {
      "from" : "PLN",
      "to" : "PLN",
      "currencyRate" : "1"
    }
  },
  "receiver" : {
    "firstName" : "John",
    "lastName" : "Novak",
    "provider" : "MASTERCARD",
    "hiddenCardNumber" : "557455******1623",
    "bankName" : "Alior Bank SA"
  },
  "sender" : {
    "firstName" : "Caroline",
    "lastName" : "Novak",
    "provider" : "CASH"
  },
  "transactionStatus" : "DECLINED",
  "merchantSettlementCurrency" : "USD",
  "fenigeCommissionInMerchantSettlementCurrency" : 0.05,
  "transactionAmountInMerchantSettlementCurrency" : 2.68,
  "cardBlockType" : "TEMP",
  "cardBlockedUntil" : "2024-03-30T01:03:52.560",
  "errorStatus" : "ERROR_SENDER_CARD_IS_BLOCKED"
}

Response fields

Path Type Description

amount

Number

Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100]

amountInUsDollar

Number

Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100]

bigDecimalAmount

Number

Field informing about the amount of cash transferred with decimal precision.

commission

Number

This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100]

bigDecimalCommission

Number

This is the amount of commission that was added to the transaction at 0.01 currency.

orderId

String

Unique transaction identifier.

transactionId

String

The transactionId field is used for the Merchant to send its own internal transaction identifier. This field is returned in the response from the Check status method and sent by the Webhooks method. @Length(max = 64). Optional

createdDate

String

Date of transaction.

fundingRrn

String

Funding Retrieval Reference Number.

paymentRrn

String

Payment Retrieval Reference Number.

arn

String

Acquirer Reference Number

3DS

Boolean

Value: true/false determines if transaction was processed with 3ds

revaluationResult

Object (RevaluationResult)

Detailed information about revaluation between sender currency and receiver currency.

receiver

Object

Personal data of the person to whom the transfer is addressed.

sender

Object

Personal data of the person who performs the transfer of cash.

merchantSettlementCurrency

String

Merchant settlement currency

fenigeCommissionInMerchantSettlementCurrency

Number

Commission Fenige in merchant settlement currency

transactionAmountInMerchantSettlementCurrency

Number

Transaction amount in merchant settlement currency

transactionStatus

String

Status of the transaction (PENDING, APPROVED, DECLINED, REJECTED, REVERSED)

errorStatus

String

The code of the error occurred during a processing of the request

cardBlockType

String

Card lock type

cardBlockedUntil

String

Card’s lock end date

merchantAdviceCode

String

Information about the reasons for declined transactions and actions that merchants can take. Occurs only for mastercard and for declined transactions if Mastercard returns this information

RevaluationResult

Path Type Description

revaluationFundingAmount

Long

Amount (in pennies) of funding transaction in fundingCurrency

bigDecimalRevaluationFundingAmount

BigDecimal

Amount of funding transaction in fundingCurrency

fundingCurrency

String

Currency code the same as sender’s card currency

revaluationPaymentAmount

Long

Amount (in pennies) of payment transaction in paymentCurrency

bigDecimalRevaluationPaymentAmount

BigDecimal

Amount of payment transaction in paymentCurrency

paymentCurrency

String

Currency code the same as receiver’s card currency

determineCurrencyRate

Object (DetermineCurrencyRate)

Details about conversion

DetermineCurrencyRate

Path Type Description

from

Long

Currency which was conversion from

to

Long

Resulted currency

currencyRate

BigDecimal

Currency rate

500 INTERNAL SERVER ERROR
HTTP/1.1 500 Internal Server Error
Content-Type: application/json
Content-Length: 69

{
  "errorStatus" : "ERROR_SOMETHING_WRONG - Something went wrong."
}

Response fields

Path Type Description

errorStatus

String

Additional data of the error occurred during a processing of the request

4. Webhooks

General information
To use the webhooks functionality, you must notify Fenige Sales Department by email. Then an URL address and a secret token will be configured, thanks to which communication between the Fenige side and the client side will be more secure. After configuring the above-mentioned properties, you will receive Secret Token and then you can handle webhooks from the Fenige system. The URL must be specified by the client, requests from the Fenige system will be directed to this address. The Secret Token will be set by the Fenige employee and sent to the client.

4.1. Transaction status

Method: HTTP POST
The client user can be notified immediately as soon as the transaction changes its state. After handling the request from the Fenige system, the client side will be notified of the current status of the transaction. Then you can be sure that the transaction processing was finished and you can get the transaction details if you want to.

webhook
Figure 2. In the picture above you can see basic idea of this webhook/event
Your server after receiving Webhook Event must return HTTP status 200 OK. Otherwise, the Fenige server will retry the request. There is 3 attempts for requesting your API. Repeated requests will be executing in 5 seconds intervals excluding timeout from client server.
In order to protect client API by polling or other undesirable actions, the Fenige system uses headers. If you want to use Transaction status webhook, you need to do the header handling on your side.
To build 'X-MERCHANT-SECRET' header:
1. Concatenate secret token established by you and Fenige’s employee with orderId of transaction
2. Hash with SHA256 function result of above operation
Example of 'X-MERCHANT-SECRET' building
import hashlib

# secret token established by client with fenige employee
secret = 'mNaU9TaK4m9myYYFBJgKu8slNH2fCKutJyzXwI'
# orderId received from webhook's request
order_id = 'c168a885-acfa-4a91-a1ad-ed7a042b7238'

# concatenate strings in correct order
concatenated = secret + order_id

# use SHA256 hashing function
hashed = hashlib.sha256(concatenated.encode('utf-8')).hexdigest()

# then compare 'hashed' variable with content of 'X-MERCHANT-SECRET' header

4.1.1. Transaction status webhook request body

When transaction was approved
Content-Type: application/json
X-MERCHANT-SECRET: 3cbd17f561150a1394cabbe2b6031fd83f3f3081abe28c32b7fed16f32aebc4a
X-MERCHANT-TIMESTAMP: 1614800720
{
    "orderId": "c168a885-acfa-4a91-a1ad-ed7a042b7238",
    "transactionId": "TRX220132AM",
    "status": "APPROVED",
    "responseCode": "CODE_00",
    "amount": 900,
    "amountCurrency": "PLN",
    "amountInUsDollar": 248,
    "revaluationResult": {
      "revaluationFundingAmount": 900,
      "bigDecimalRevaluationFundingAmount": 9,
      "fundingCurrency": "PLN",
      "revaluationPaymentAmount": 900,
      "bigDecimalRevaluationPaymentAmount": 9,
      "paymentCurrency": "PLN",
      "determineCurrencyRate": {
        "from": "PLN",
        "to": "PLN",
        "currencyRate": "1"
      }
    },
    "commissionAmount": 46,
    "commissionCurrency": "PLN"
}
When transaction was declined
Content-Type: application/json
X-MERCHANT-SECRET: 3cbd17f561150a1394cabbe2b6031fd83f3f3081abe28c32b7fed16f32aebc4a
X-MERCHANT-TIMESTAMP: 1614800720

{
    "orderId": "42e8a03a-eb2e-4208-b99b-ac2ad6308498",
    "transactionId": "TRX220132AM",
    "status": "DECLINED",
    "responseCode": "CODE_05",
    "errorMessage": "FUNDING_TRANSACTION_DECLINED:CODE_05",
    "amount": 900,
    "amountCurrency": "PLN",
    "amountInUsDollar": 248,
    "revaluationResult": {
      "revaluationFundingAmount": 900,
      "bigDecimalRevaluationFundingAmount": 9,
      "fundingCurrency": "PLN",
      "revaluationPaymentAmount": 900,
      "bigDecimalRevaluationPaymentAmount": 9,
      "paymentCurrency": "PLN",
      "determineCurrencyRate": {
        "from": "PLN",
        "to": "PLN",
        "currencyRate": "1"
      }
    },
    "commissionAmount": 46,
    "commissionCurrency": "PLN",
    "merchantAdviceCode": "03 - Do not try again"
}
When Delayed Payment was reversed
Content-Type: application/json
X-MERCHANT-SECRET: 3cbd17f561150a1394cabbe2b6031fd83f3f3081abe28c32b7fed16f32aebc4a
X-MERCHANT-TIMESTAMP: 1614800720

{
    "orderId": "1b498361-f8db-406e-943b-ca2b12b7aa38",
    "transactionId": "TRX220132AM",
    "status": "REVERSED",
    "responseCode": "CODE_00",
    "amount": 1000,
    "amountCurrency": "PLN",
    "amountInUsDollar": 273,
    "revaluationResult": {
      "revaluationFundingAmount": 1000,
      "bigDecimalRevaluationFundingAmount": 10,
      "fundingCurrency": "PLN",
      "revaluationPaymentAmount": 262,
      "bigDecimalRevaluationPaymentAmount": 2.62,
      "paymentCurrency": "USD",
      "determineCurrencyRate": {
        "from": "PLN",
        "to": "USD",
        "currencyRate": "0.2616157"
      }
    },
    "commissionAmount": 1,
    "commissionCurrency": "PLN"
}
Table 34. Headers description
Path Type Rule Description

X-MERCHANT-SECRET

String

Always present

SHA256 Hash string composed from secret token and orderId placed in request body of this webhook

X-MERCHANT-TIMESTAMP

Numeric string

Always present

Timestamp of server response in UNIX format for instance: 1614023731

Table 35. Request fields description
Path Type Rule Description

orderId

String/UUID

Always present

Unique identifier of transaction. You can fetch details of transaction by this parameter.

transactionId

String

Optional

The transactionId field is used for the Merchant to send its own internal transaction identifier. This field is returned in the response from the Check status method and sent by the Webhooks method.

status

String

Always present

Internal transaction status in Fenige system.

responseCode

String

Optional

Mastercard/Visa ISO response code.

errorMessage

String

Optional

Optional error message content.

amount

Number

Always present

Amount sent on Fenige api.

amountCurrency

String

Always present

Currency code sent on Fenige api.

amountInUsDollar

Long

Always present

Transaction amount in USD currency in pennies.

revaluationResult.revaluationFundingAmount

Number

Optional

Revaluation funding amount expressed as an Integer / Long.

revaluationResult.bigDecimalRevaluationFundingAmount

Number

Optional

Revaluation funding amount expressed as floating point number.

revaluationResult.fundingCurrency

String

Optional

Funding currency code.

revaluationResult.revaluationPaymentAmount

Number

Optional

Revaluation payment amount expressed as an Integer / Long.

revaluationResult.bigDecimalRevaluationPaymentAmount

Number

Optional

Revaluation payment amount expressed as floating point number.

revaluationResult.paymentCurrency

String

Optional

Payment currency code.

revaluationResult.determineCurrencyRate.from

String

Optional

The source currency of the conversion.

revaluationResult.determineCurrencyRate.to

String

Optional

The destination currency of the conversion.

revaluationResult.determineCurrencyRate.currencyRate

String

Optional

Conversion currency rate.

commissionAmount

Number

Optional

Commission amount expressed as an Integer / Long.

commissionCurrency

String

Optional

Commission currency code.

merchantAdviceCode

String

Optional

Information about the reasons for declined transactions and actions that merchants can take. Occurs only for mastercard and for declined transactions if Mastercard returns this information

5. 3DS 2.X verification methods

The methods described in this section provide the ability to execute 3DS 2.X process. You can use the data received from authentication method to perform transactions with 3DS 2.X.

Mastercard and Visa requires for intra-European Economic Area (EEA), plus United Kingdom, for which EMV 3DS must be used subsequent to a valid authorization soft decline DE39=65 (Mastercard)/1A(Visa).To perform a transaction for which the card has previously received CODE_65(Mastercard)/CODE_1A(Visa), the transaction must be processed with full EMV 3DS (3DS 2.x) and the authentication status must be 'Y'.

Correct flow:

  • 3DS 2.x → Challenge → Authentication status Y → Transaction (Recommended)

  • 3DS 2.x(Authentication status A) → Transaction → CODE_65 → 3DS 2.x → Challenge → Authentication status Y → Transaction (Recommended)

  • non3DS → Transaction → CODE_65 → 3DS 2.x → Challenge → Authentication status Y → Transaction (Available only to selected merchants)

soft decline Code 65 EMV 3DS
3ds 2.X flow

5.1. Pre Authentication

POST /client/3ds/preAuthentication Content Type: application/json, Authorization: Basic Auth, API-TOKEN*
Method to initiate 3ds authentication.
If the card is in 3ds 2.X, you can proceed to the first stage of authentication. If 'threeDSMethodURL' is returned, make a hidden iframe and post form with field name
'threeDSMethodData' on address from 'threeDSMethodURL'. Insert 'threeDSMethodData' from response to form. You should receive a response on your endpoint 'methodNotificationUrl' with 'threeDSMethodData' too. Measure the response time, the time and response are required at the 'Authentication' method, based on the response time, set the field 'methodCompletionIndicator'.

'threeDSMethodData ' is Base64 encoded string json with fields 'threeDSMethodNotificationURL' and 'threeDSServerTransID'.

The range of card BINs that support 3DS 2.X for Mastercard is: 500000-549999. Use the following BINs below to generate cards for testing:
- 5375912476960515
- 5117962099480048
- 5117963095204135
- 5218572540397762
- 5375913862726080

The range of card BINs that support 3DS 2.X for Visa is: 400000-449999. Use the following BINs below to generate cards for testing:
- 4005520000000129
- 4164978855760477
- 4341500505113562
- 4280596505234682
*API-TOKEN is required for method: DATACORE when the cardId field is sent.

5.1.1. Request

PLAIN
POST /client/3ds/preAuthentication HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 96
Host: java-staging.fenige.pl:8181

{
  "cardNumber" : "5117964247989169",
  "methodNotificationUrl" : "methodNotificationUrl.com"
}
Table 36. PRE AUTHENTICATION 3DS 2.X REQUEST FIELDS
Path Type Validation Rule Description

cardNumber

String

Required

@NotNull

Card number to 3DS 2.X pre authentication

methodNotificationUrl

String

Required

@NotNull

This field specifies the URL to which the ACS will post threeDSMethodData when the hidden iframe post form from browse

DATACORE
POST /client/3ds/preAuthentication HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
API-TOKEN: d94NYa+xqRrazUPzSgYeJ6qR/MzIOb3IzePb7t9sWds=
Content-Length: 78
Host: java-staging.fenige.pl:8181

{
  "cardId" : 1732,
  "methodNotificationUrl" : "methodNotificationUrl.com"
}
Table 37. PRE AUTHENTICATION 3DS 2.X REQUEST FIELDS
Path Type Validation Rule Description

cardId

Number

Required

@Must not be null, @Numeric

DataCenter card id. Required to obtain card information data from DataCenter such as (cardNumber, expiryDate)

methodNotificationUrl

String

Required

@NotNull

This field specifies the URL to which the ACS will post threeDSMethodData when the hidden iframe post form from browse

5.1.2. Response

200 OK
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 462

{
  "cardAuthenticationId" : "60d48155-04b8-4683-b1e7-f2af09ae99b1",
  "threeDSMethodData" : "eyJ0aHJlZURTTWV0aG9kTm90aWZpY2F0aW9uVVJMIjoiaHR0cHM6Ly93ZWJob29rLnNpdGUvZDMyZTlkZTgtMGFiOC00ODZjLWJjNzEtMGU2Mzg2MmY4MDNhM2I1YTkzZTUtMjI1Ni00NGQ0LTg2YjItNWFkM2FhMDEyYTJhIiwidGhyZWVEU1NlcnZlclRyYW5zSUQiOiIxNjNiZWMzOC1kOTM1LTQ0MGItYWYwYy01OWM3NDI3OTk2MGMifQ",
  "threeDSMethodURL" : "https:/acs.com",
  "protocolVersionStart" : "2.1.0",
  "protocolVersionEnd" : "2.2.0"
}
Path Type Description

cardAuthenticationId

String

Unique identifier for 3ds verification

threeDSMethodData

String

Encoded data used for request to ACS

threeDSMethodURL

String

ACS endpoint for hidden request. If endpoint is not present then request is not required

protocolVersionStart

String

Protocol version start range

protocolVersionEnd

String

Protocol version end range

200 OK without threeDSMethodURL
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 421

{
  "cardAuthenticationId" : "506ce1fe-0a53-470a-8106-889277db40c0",
  "threeDSMethodData" : "eyJ0aHJlZURTTWV0aG9kTm90aWZpY2F0aW9uVVJMIjoiaHR0cHM6Ly93ZWJob29rLnNpdGUvZDMyZTlkZTgtMGFiOC00ODZjLWJjNzEtMGU2Mzg2MmY4MDNhM2I1YTkzZTUtMjI1Ni00NGQ0LTg2YjItNWFkM2FhMDEyYTJhIiwidGhyZWVEU1NlcnZlclRyYW5zSUQiOiIxNjNiZWMzOC1kOTM1LTQ0MGItYWYwYy01OWM3NDI3OTk2MGMifQ",
  "protocolVersionStart" : "2.1.0",
  "protocolVersionEnd" : "2.2.0"
}
Path Type Description

cardAuthenticationId

String

Unique identifier for 3ds verification

threeDSMethodData

String

Encoded data used for request to ACS

protocolVersionStart

String

Protocol version start range

protocolVersionEnd

String

Protocol version end range

401 UNAUTHORIZED
HTTP/1.1 401 Unauthorized
Content-Type: application/json

{
      "timestamp": "2021-12-22T12:39:53.168+0000",
      "status": 401,
      "error": "Unauthorized",
      "message": "Username or password is not correct",
      "path": "/client/3ds/preAuthentication"
}
Table 38. Response fields
Path Description

timestamp

Time when request was executed

status

Http response code

error

Http status name

message

Message for response code

path

Path to a specific resource

422 UNPROCESSABLE ENTITY Card number not Enrolled in 3DS v2
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json
Content-Length: 130

{
  "status" : "ERROR_3DS_2_X_CARD_NUMBER_NOT_ENROLLED",
  "error" : {
    "message" : "Card number not Enrolled in 3DS v2."
  }
}
Path Type Description

status

String

Api status

error.message

String

Api status description

5.2. Authentication

POST /client/3ds/authentication Content Type: application/json, Authorization: Basic Auth, API-TOKEN*
Method initialize authentication process by sending required transaction data. Method can return final data like cavv, transactionXId, eci or challenge flow (shown in the diagram).
After challenge end your app get notification on 'notificationUrl'. This is a POST request with "cres" and "threeDSSessionData".

"threeDSSessionData" is a encoded in base64 "cardAuthenticationId". You must use it in 'Authentication Details' method to get authentication value cavv, transactionXId and eci.

'cres' is Base64 encoded string json with fields: 'threeDSServerTransID', 'acsTransID', 'challengeCompletionInd', 'messageVersion', 'transStatus'.
'threeDSServerTransID' - is same like in 'threeDSMethodData'.
'transStatus' - is same like 'transactionStatus' in response from 'Authentication' method.
In the test environment, you have the option of calling different transactionStatus, depending on the purchaseAmount field. Eg.
     (1, 1000) - Y,
     (1001, 2000) - A,
     (2001, 3000) - C,
     (3001, 4000) - N,
     (4001, 5000) - U,
     (5001, 6000) - I,
     (6001, 7000) - status: MPI_2_INTERNAL_ERROR
     (7001, 8000) - status: MPI_2_X_PROTOCOL_VERSION_IS_NOT_SUPPORTED
*API-TOKEN is required for method: DATACORE when the cardId field is sent.

5.2.1. Request

PLAIN
POST /client/3ds/authentication HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 1586
Host: java-staging.fenige.pl:8181

{
  "cardAuthenticationId" : "f7258dfb-b609-4592-8af4-98f65a422c88",
  "threeDSMethodData" : "eyJ0aHJlZURTTWV0aG9kTm90aWZpY2F0aW9uVVJMIjoiSFRUUDQwYjgyNDQ3LTE0ODUtNDUwZi04ZGYxLTdhNGQwYmRiMWMzYiIsInRocmVlRFNTZXJ2ZXJUcmFuc0lEIjoiNDE1MDQzY2UtYTNhMC00ODBjLTk0YTYtNzk2NGEzYTcxNWI2In0",
  "methodCompletionIndicator" : "Y",
  "cardNumber" : "5117964247989169",
  "cardExpirationDate" : "12/22",
  "cardholderName" : "John Doe",
  "purchaseAmount" : "123",
  "purchaseCurrency" : "PLN",
  "challengeWindowSize" : "FULL_SCREEN",
  "browserAcceptHeader" : "Accept: application/json",
  "browserLanguage" : "PL",
  "browserScreenHeight" : "1500",
  "browserScreenWidth" : "1500",
  "browserTimeZone" : "60",
  "browserUserAgent" : "Mozilla/5.0",
  "browserScreenColorDepth" : "24",
  "cardholderEmail" : "john.doe@example.com",
  "cardholderHomePhone" : "1-1234567899",
  "cardholderMobilePhone" : "1-1234567899",
  "cardholderWorkPhone" : "1-1234567899",
  "browserIPAddress" : "77.55.135.220",
  "browserJavaEnabledVal" : "ENABLED",
  "browserJavaScriptEnabled" : "ENABLED",
  "notificationUrl" : "notification-url.com",
  "requestorChallengeInd" : "CHALLENGE_REQUESTED_MANDATE",
  "authenticationType" : "PAYMENT",
  "protocolVersion" : "2.2.0",
  "cardholderBillingAddressCountry" : "US",
  "cardholderBillingAddressState" : "CA",
  "cardholderBillingAddressCity" : "Los Angeles",
  "cardholderBillingAddressLine1" : "4101 Supreme ct",
  "cardholderBillingAddressLine2" : "Chestnut Ave",
  "cardholderBillingAddressLine3" : "W 225TH ST",
  "cardholderBillingAddressPostalCode" : "90032-2537"
}
Table 39. AUTHENTICATION 3DS REQUEST FIELDS
Path Type Validation Rule Description

cardAuthenticationId

String

Required

@Must not be empty

Unique identifier for 3ds verification from preAuthentication request.

cardNumber

String

Required

Card number length must be between 12 and 19, @Luhn, @Must not be blank, @Must not be null or card id must be present

Card number.

cardExpirationDate

String

Required

@Length must be 5, @Must not be null or card id must be present

Expiration date of card mm/yy.

cardholderName

String

Required

@Length must be between 2 and 45 inclusive, @Must not be empty

This property contains the name of the cardholder. Name of the Cardholder. Must be ASCII characters. This is required to be set unless market or regional mandates restricts sending this information.

purchaseAmount

String

Required

@Must match the regular expression \d{1,48}, @Must not be null

This field contains the purchase amount to be authorized. The transaction amount is to be presented with an implied decimal point. For example, US $10.00 must be represented as 1000, and $0.10 is likewise simply 10. The allowable number of significant digits as well as the positioning of any implied decimal point is dictated by the designated PurchaseExponent. This field may not contain a negative number.

purchaseCurrency

String

Required

@Must not be null

Currency for transaction (in accordance with 3-digit ISO-4217), example: USD.

threeDSMethodData

String

Required

@Must not be empty

Response data from a hidden form from the Pre Authentication. If threeDSMethodURL is empty set encodedData.

methodCompletionIndicator

String

Required

@Must not be null

Y if response from hidden form from Pre Authentication is under 10s, N if response from hidden form from Pre Authentication is over 10s, U if threeDSMethodURL is empty.

protocolVersion

String

Required

@Must not be null

This field indicates the protocol version. Now there are two versions: 2.1.0 and 2.2.0. It is recommended to use 2.2.0 if the card supports it. You will get it from the Pre Authentication method. Some configurations are only available for 2.2.0.

notificationUrl

String

Required

@Must not be null

This property specifies the URL to which the final challenge response is POSTed.

authenticationType

String

Optional

If null then value equals PAYMENT

Authentication Type configuration prepared for specific type. Possible values are:

Non payment authentication - Identity verification and account confirmation:

ADD_CARD

VERIFY_CARDHOLDER

Payment authentication - Cardholder authentication during an transaction:

PAYMENT

requestorChallengeInd

String

Required

@Must not be null

Indicates whether a challenge is requested for this transaction. Possible values are:

NO_PREFERENCE,

NO_CHALLENGE_REQUESTED,

CHALLENGE_REQUESTED_3DS_REQUESTOR_PREFERENCE,

CHALLENGE_REQUESTED_MANDATE.

challengeWindowSize

String

Optional

Optional

This field indicates the dimensions of the challenge window that has been displayed to the cardholder. The ACS shall reply with content that is formatted to appropriately render in this window to provide the best possible user experience.

Preconfigured sizes are width x height in pixels of the window displayed in the cardholder browser. Possible values are:S_250X400

S_390X400

S_500X600

S_600X400

FULL_SCREEN

This value is included in the Challenge Request Message (CReq)

browserAcceptHeader

String

Required

@Must not be null, Max length: 2048

This field contains the exact content of the HTTP accept header as sent to the merchant from the cardholder’s user agent. This field is required only if the cardholder’s user agent supplied a value. e.g Accept: application/json.

browserLanguage

String

Required

@Must not be null, Min length: 1, Max length: 8

This field contains the cardholder’s browser language as defined in IETF BCP 47.

browserScreenHeight

String

Required

@Must not be null, Regexp: ^[0-9]{1,6}$

This field contains the total height of the cardholder’s screen in pixels.

browserScreenWidth

String

Required

@Must not be null, Regexp: ^[0-9]{1,6}$

This field contains the total width of the cardholder’s screen in pixels.

browserTimeZone

String

Required

@Must not be null, Regexp: ^[+-]?[0-9]{1,4}$

This field contains the difference between UTC time and the cardholder’s browser local time in minutes.

browserUserAgent

String

Required

@Must not be null, Max length: 2048

This field contains the exact content of the HTTP User-Agent header.

browserJavaEnabledVal

String

Required

@Must not be null,

This field contains a value representing the ability of the cardholder’s browser to execute Java. Enumerated values: NOT_PRESENT, ENABLED, DISABLED.

Required if browserJavascriptEnabled is true

cardholderEmail

String

Optional

@Length must be between 0 and 254 inclusive

This field contains the cardholder email address.

cardholderHomePhone

String

Optional

Must match regex \d{1,3}-[1-9]\d{1,14}$

This field contains the home phone number provided by the cardholder. Phone numbers must be specified in the following format: CountryCode-Subscriber (e.g. 1-1234567899)

cardholderMobilePhone

String

Optional

Must match regex \d{1,3}-[1-9]\d{1,14}$

This field contains the mobile phone number provided by the cardholder. Phone numbers must be specified in the following format: CountryCode-Subscriber (e.g. 1-1234567899)

cardholderWorkPhone

String

Optional

Must match regex \d{1,3}-[1-9]\d{1,14}$

This field contains the work phone number provided by the cardholder. Phone numbers must be specified in the following format: CountryCode-Subscriber (e.g. 1-1234567899)

browserIPAddress

String

Required

@Must not be null

This field contains the IP address of the cardholder’s browser as returned by the HTTP headers.

browserJavaScriptEnabled

String

Required

@Must not be null

This field contains a value representing the ability of the cardholder’s browser to execute JavaScript. Enumerated values: ENABLED, DISABLED.

browserScreenColorDepth

String

Required

@Must not be null

This field contains a value representing the bit depth of the color palette, in bits per pixel, for displaying images. Obtained from Cardholder browser using the screen.colorDepth property. Values accepted:

1 = 1 bit,

4 = 4 bits,

8 = 8 bits,

15 = 15 bits,

16 = 16 bits,

24 = 24 bits,

32 = 32 bits,

48 = 48 bits

cardholderBillingAddressCountry

String

Optional

@Max length: 3

Required if Cardholder Billing Address State is present.

The country of the Cardholder billing address associated with the card used for this purchase.

Shall be the ISO 3166-1 numeric three-digit country code, other than exceptions listed in Table A.5.

cardholderBillingAddressState

String

Optional

@Max length: 3

Country subdivision code defined in ISO 3166-2.

For example, using the ISO entry US-CA (California, United States), the correct value for this field = CA. Note that the country and hyphen are not included in this value.

cardholderBillingAddressCity

String

Optional

@Max length: 50

The city of the Cardholder billing address associated with the card used for this purchase.

cardholderBillingAddressLine1

String

Optional

@Max length: 50

First line of the street address or equivalent local portion of the Cardholder billing address associated with the card used for this purchase.

cardholderBillingAddressLine2

String

Optional

@Max length: 50

Second line of the street address or equivalent local portion of the Cardholder billing address associated with the card used for this purchase.

cardholderBillingAddressLine3

String

Optional

@Max length: 50

Third line of the street address or equivalent local portion of the Cardholder billing address associated with the card used for this purchase.

cardholderBillingAddressPostalCode

String

Optional

@Max length: 16

ZIP or other postal code of the Cardholder billing address associated with the card used for this purchase.

DATACORE
POST /client/3ds/authentication HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
API-TOKEN: d94NYa+xqRrazUPzSgYeJ6qR/MzIOb3IzePb7t9sWds=
Content-Length: 1498
Host: java-staging.fenige.pl:8181

{
  "cardAuthenticationId" : "d40d1a9f-0368-4bbc-a5f1-b6c4c31d86aa",
  "threeDSMethodData" : "eyJ0aHJlZURTTWV0aG9kTm90aWZpY2F0aW9uVVJMIjoiSFRUUDQwYjgyNDQ3LTE0ODUtNDUwZi04ZGYxLTdhNGQwYmRiMWMzYiIsInRocmVlRFNTZXJ2ZXJUcmFuc0lEIjoiNDE1MDQzY2UtYTNhMC00ODBjLTk0YTYtNzk2NGEzYTcxNWI2In0",
  "methodCompletionIndicator" : "Y",
  "cardId" : 1732,
  "cardholderName" : "John Doe",
  "purchaseAmount" : "123",
  "purchaseCurrency" : "PLN",
  "challengeWindowSize" : "FULL_SCREEN",
  "browserAcceptHeader" : "Accept: application/json",
  "browserLanguage" : "PL",
  "browserScreenHeight" : "1500",
  "browserScreenWidth" : "1500",
  "browserTimeZone" : "60",
  "browserUserAgent" : "Mozilla/5.0",
  "browserScreenColorDepth" : "24",
  "cardholderEmail" : "john.doe@example.com",
  "cardholderHomePhone" : "1-1234567899",
  "cardholderMobilePhone" : "1-1234567899",
  "cardholderWorkPhone" : "1-1234567899",
  "browserIPAddress" : "77.55.135.220",
  "browserJavaEnabledVal" : "ENABLED",
  "browserJavaScriptEnabled" : "ENABLED",
  "notificationUrl" : "notification-url.com",
  "requestorChallengeInd" : "CHALLENGE_REQUESTED_MANDATE",
  "protocolVersion" : "2.2.0",
  "cardholderBillingAddressCountry" : "US",
  "cardholderBillingAddressState" : "CA",
  "cardholderBillingAddressCity" : "Los Angeles",
  "cardholderBillingAddressLine1" : "4101 Supreme ct",
  "cardholderBillingAddressLine2" : "Chestnut Ave",
  "cardholderBillingAddressLine3" : "W 225TH ST",
  "cardholderBillingAddressPostalCode" : "90032-2537"
}
Table 40. AUTHENTICATION 3DS REQUEST FIELDS
Path Type Validation Rule Description

cardAuthenticationId

String

Required

@Must not be empty

Unique identifier for 3ds verification from preAuthentication request.

cardId

Number

Required

@Must not be null, @Numeric

DataCenter card id. Required to obtain card information data from DataCenter such as (cardNumber, expiryDate)

cardholderName

String

Required

@Length must be between 2 and 45 inclusive, @Must not be empty

This property contains the name of the cardholder. Name of the Cardholder. Must be ASCII characters. This is required to be set unless market or regional mandates restricts sending this information.

purchaseAmount

String

Required

@Must match the regular expression \d{1,48}, @Must not be null

This field contains the purchase amount to be authorized. The transaction amount is to be presented with an implied decimal point. For example, US $10.00 must be represented as 1000, and $0.10 is likewise simply 10. The allowable number of significant digits as well as the positioning of any implied decimal point is dictated by the designated PurchaseExponent. This field may not contain a negative number.

purchaseCurrency

String

Required

@Must not be null

Currency for transaction (in accordance with 3-digit ISO-4217), example: USD.

threeDSMethodData

String

Required

@Must not be empty

Response data from a hidden form from the Pre Authentication. If threeDSMethodURL is empty set encodedData.

methodCompletionIndicator

String

Required

@Must not be null

Y if response from hidden form from Pre Authentication is under 10s, N if response from hidden form from Pre Authentication is over 10s, U if threeDSMethodURL is empty.

protocolVersion

String

Required

@Must not be null

This field indicates the protocol version. Now there are two versions: 2.1.0 and 2.2.0. It is recommended to use 2.2.0 if the card supports it. You will get it from the Pre Authentication method. Some configurations are only available for 2.2.0.

notificationUrl

String

Required

@Must not be null

This property specifies the URL to which the final challenge response is POSTed.

requestorChallengeInd

String

Required

@Must not be null

Indicates whether a challenge is requested for this transaction. Possible values are:

NO_PREFERENCE,

NO_CHALLENGE_REQUESTED,

CHALLENGE_REQUESTED_3DS_REQUESTOR_PREFERENCE,

CHALLENGE_REQUESTED_MANDATE.

challengeWindowSize

String

Optional

Optional

This field indicates the dimensions of the challenge window that has been displayed to the cardholder. The ACS shall reply with content that is formatted to appropriately render in this window to provide the best possible user experience.

Preconfigured sizes are width x height in pixels of the window displayed in the cardholder browser. Possible values are:S_250X400

S_390X400

S_500X600

S_600X400

FULL_SCREEN

This value is included in the Challenge Request Message (CReq)

browserAcceptHeader

String

Required

@Must not be null, Max length: 2048

This field contains the exact content of the HTTP accept header as sent to the merchant from the cardholder’s user agent. This field is required only if the cardholder’s user agent supplied a value. e.g Accept: application/json.

browserLanguage

String

Required

@Must not be null, Min length: 1, Max length: 8

This field contains the cardholder’s browser language as defined in IETF BCP 47.

browserScreenHeight

String

Required

@Must not be null, Regexp: ^[0-9]{1,6}$, Min length: 1, Max length: 6

This field contains the total height of the cardholder’s screen in pixels.

browserScreenWidth

String

Required

@Must not be null, Regexp: ^[0-9]{1,6}$, Min length: 1, Max length: 6

This field contains the total width of the cardholder’s screen in pixels.

browserTimeZone

String

Required

@Must not be null, Regexp: ^[+-]?[0-9]{1,4}$, Min length: 1, Max length: 5

This field contains the difference between UTC time and the cardholder’s browser local time in minutes.

browserUserAgent

String

Required

@Must not be null, Max length: 2048

This field contains the exact content of the HTTP User-Agent header.

browserJavaEnabledVal

String

Required

@Must not be null

This field contains a value representing the ability of the cardholder’s browser to execute Java. Enumerated values: NOT_PRESENT, ENABLED, DISABLED.

Required if browserJavascriptEnabled is true

cardholderEmail

String

Optional, Max length: 256

@Length must be between 0 and 254 inclusive

This field contains the cardholder email address.

cardholderHomePhone

String

Optional

Must match regex \d{1,3}-[1-9]\d{1,14}$

This field contains the home phone number provided by the cardholder. Phone numbers must be specified in the following format: CountryCode-Subscriber (e.g. 1-1234567899)

cardholderMobilePhone

String

Optional

Must match regex \d{1,3}-[1-9]\d{1,14}$

This field contains the mobile phone number provided by the cardholder. Phone numbers must be specified in the following format: CountryCode-Subscriber (e.g. 1-1234567899)

cardholderWorkPhone

String

Optional

Must match regex \d{1,3}-[1-9]\d{1,14}$

This field contains the work phone number provided by the cardholder. Phone numbers must be specified in the following format: CountryCode-Subscriber (e.g. 1-1234567899)

browserIPAddress

String

Required

@Must not be null, Max length: 45

This field contains the IP address of the cardholder’s browser as returned by the HTTP headers.

browserJavaScriptEnabled

String

Required

@Must not be null

This field contains a value representing the ability of the cardholder’s browser to execute JavaScript. Enumerated values: ENABLED, DISABLED.

browserScreenColorDepth

String

Required

@Must not be null

This field contains a value representing the bit depth of the color palette, in bits per pixel, for displaying images. Obtained from Cardholder browser using the screen.colorDepth property. Values accepted:

1 = 1 bit,

4 = 4 bits,

8 = 8 bits,

15 = 15 bits,

16 = 16 bits,

24 = 24 bits,

32 = 32 bits,

48 = 48 bits

cardholderBillingAddressCountry

String

Optional

@Max length: 3

Required if Cardholder Billing Address State is present.

The country of the Cardholder billing address associated with the card used for this purchase.

Shall be the ISO 3166-1 numeric three-digit country code, other than exceptions listed in Table A.5.

cardholderBillingAddressState

String

Optional

@Max length: 3

Country subdivision code defined in ISO 3166-2.

For example, using the ISO entry US-CA (California, United States), the correct value for this field = CA. Note that the country and hyphen are not included in this value.

cardholderBillingAddressCity

String

Optional

@Max length: 50

The city of the Cardholder billing address associated with the card used for this purchase.

cardholderBillingAddressLine1

String

Optional

@Max length: 50

First line of the street address or equivalent local portion of the Cardholder billing address associated with the card used for this purchase.

cardholderBillingAddressLine2

String

Optional

@Max length: 50

Second line of the street address or equivalent local portion of the Cardholder billing address associated with the card used for this purchase.

cardholderBillingAddressLine3

String

Optional

@Max length: 50

Third line of the street address or equivalent local portion of the Cardholder billing address associated with the card used for this purchase.

cardholderBillingAddressPostalCode

String

Optional

@Max length: 16

ZIP or other postal code of the Cardholder billing address associated with the card used for this purchase.

5.2.2. Response

200 OK without challenge
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 151

{
  "transactionStatus" : "A",
  "transactionXId" : "12996767-fb88-4768-a9ee-6f50e7e61eaa",
  "cavv" : "B5gQCElHgQAAAAAKmFNEdQAAAAA=",
  "eci" : "06"
}
Path Type Description

transactionStatus

String

Indicates whether a transaction qualifies as an authenticated transaction or account verification. Possible values are:

Y Authentication/account verification successful. N Not authenticated/account not verified; transaction denied. U Authentication/account verification could not be performed; technical or other problem as indicated in ARes or RReq. A Attempts processing performed; not authenticated/verified, but a proof of attempted authentication/verification is provided. C Challenge required; additional authentication is required using the CReq/CRes. R Authentication/account verification rejected; issuer is rejecting authentication/verification and request that authorization not be attempted. D Challenge required; decoupled authentication confirmed. I Informational only; 3DS Requestor challenge preference acknowledged. Note: The CRes message can contain only a value of Y or N. Values of D and I are only applicable for 3DS version 2.2.0.

transactionXId

String

Server transaction Id generated by DS

cavv

String

This property is determined by the Access Control Server (ACS), and is filled after the call to SendAuthRequest (for a frictionless flow), or when the Results Request Message (RReq) is parsed using CheckResponse (for a challenge flow).

This property will be valid if the TransactionStatus is "Y" or "A". The value may be used to provide proof of authentication.

eci

String

This property is determined by the Access Control Server (ACS), and is filled after the call to SendAuthRequest (for a frictionless flow), or when the Results Request Message (RReq) is parsed using CheckResponse (for a challenge flow).

This property contains the two digit Electronic Commerce Indicator (ECI) value, which is to be submitted in a credit card authorization message. This value indicates to the processor that the customer data in the authorization message has been authenticated. The data contained within this property is only valid if the TransactionStatus is "Y" or "A".

200 OK with challenge
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 648

{
  "transactionStatus" : "C",
  "acsurl" : "acsurl.com",
  "creq" : "c29tZSBjcmVx",
  "challengeHtmlFormBase64" : "PGh0bWw+PFNDUklQVCBMQU5HVUFHRT0iSmF2YXNjcmlwdCI+ZnVuY3Rpb24gT25Mb2FkRXZlbnQoKXsgZG9jdW1lbnQuZG93bmxvYWRGb3JtLnN1Ym1pdCgpOyB9PC9TQ1JJUFQ+PGJvZHkgT25Mb2FkPSJPbkxvYWRFdmVudCgpOyI+PGZvcm0gbmFtZT0iZG93bmxvYWRGb3JtIiBhY3Rpb249Imh0dHBzOi8vYWNzdGVzdC5jb20iIG1ldGhvZD0iUE9TVCI+PElOUFVUIHR5cGU9ImhpZGRlbiIgbmFtZT0iY3JlcSIgdmFsdWU9ImNyZXEiPjxJTlBVVCB0eXBlPSJoaWRkZW4iIG5hbWU9InRocmVlRFNTZXNzaW9uRGF0YSIgdmFsdWU9InNvbWVFbmNvZGVkRGF0ZSI+PC9mb3JtPjwvYm9keT48L2h0bWw+",
  "threeDSSessionData" : "ZGY0NDJhODQtOGJkZS00MmQ3LWExMTUtMzUyNjNlZGY1MGFk"
}
Path Type Description

transactionStatus

String

Indicates whether a transaction qualifies as an authenticated transaction or account verification. Possible values are:

Y Authentication/account verification successful. N Not authenticated/account not verified; transaction denied. U Authentication/account verification could not be performed; technical or other problem as indicated in ARes or RReq. A Attempts processing performed; not authenticated/verified, but a proof of attempted authentication/verification is provided. C Challenge required; additional authentication is required using the CReq/CRes. R Authentication/account verification rejected; issuer is rejecting authentication/verification and request that authorization not be attempted. D Challenge required; decoupled authentication confirmed. I Informational only; 3DS Requestor challenge preference acknowledged. Note: The CRes message can contain only a value of Y or N. Values of D and I are only applicable for 3DS version 2.2.0.

acsurl

String

ACS Url - if challenge is required, data for building a form such as challengeHtmlFormBase64

creq

String

creq - if challenge is required, data for building a form such as challengeHtmlFormBase64

threeDSSessionData

String

creq - if challenge is required, data for building a form such as challengeHtmlFormBase64

challengeHtmlFormBase64

String

This field is a BASE64 encrypted html source file containing the challenge 3-D Secure frame

401 UNAUTHORIZED
HTTP/1.1 401 Unauthorized
Content-Type: application/json

{
      "timestamp": "2021-12-22T12:39:53.168+0000",
      "status": 401,
      "error": "Unauthorized",
      "message": "Username or password is not correct",
      "path": "/client/3ds/authentication"
}
Table 41. Response fields
Path Description

timestamp

Time when request was executed

status

Http response code

error

Http status name

message

Message for response code

path

Path to a specific resource

5.3. Authentication Details

GET /client/3ds/details/{uuid} Content Type: application/json, Authorization: Basic Auth
Method return details for authentication.
Success 3-D Secure Authentication. MPI return status:
Y (Full Authentication) - The customer was successfully authenticated.

Attempt 3-D Secure Authentication. MPI return status:
A (Successful Attempted Authentication) - Authentication was not available, but functionality was available to generate a proof of authentication attempt.

Challenge required
C Cardholder challenge required.
D Challenge required; decoupled authentication confirmed.

Information only
I Informational only; 3DS Requestor challenge preference acknowledged.

Error 3-D Secure Authentication results. MPI return one of statuses:
N (Authentication Failed) - The customer failed authentication, and the transaction is denied. The cardholder’s password (or other authentication information) failed validation, thus, the issuer is not able to authenticate the cardholder.
U (Unable to Complete Authentication) - Authentication could not be performed due to technical or other problems.
R Not authenticated because the issuer is rejecting authentication.

5.3.1. Request

GET /client/3ds/details/063c95ba-c911-478f-a774-eab933dd3fd5 HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Host: java-staging.fenige.pl:8181
Table 42. /client/3ds/details/{cardAuthenticationId}
Parameter Description

cardAuthenticationId

Unique identifier for 3ds verification

5.3.2. Response

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 340

{
  "cardAuthenticationId" : "40e00366-3f2c-4efc-9175-231282bb1357",
  "provider" : "MASTERCARD",
  "transactionStatus" : "Y",
  "cardAuthenticationStatus" : "AUTHENTICATION_FINISHED",
  "transactionXId" : "1496c302-863f-417c-a7da-156f348ce027",
  "cavv" : "jEu04WZns7pbARAApU4qgNdJTag",
  "eci" : "01",
  "transactionStatusReason" : "04"
}
Path Type Description

cardAuthenticationId

String

Unique identifier for 3ds verification

provider

String

Card’s provider

transactionStatus

String

Indicates whether a transaction qualifies as an authenticated transaction or account verification. Possible values are: Y Authentication/account verification successful. N Not authenticated/account not verified; transaction denied. U Authentication/account verification could not be performed; technical or other problem as indicated in ARes or RReq. A Attempts processing performed; not authenticated/verified, but a proof of attempted authentication/verification is provided. C Challenge required; additional authentication is required using the CReq/CRes. R Authentication/account verification rejected; issuer is rejecting authentication/verification and request that authorization not be attempted. D Challenge required; decoupled authentication confirmed. I Informational only; 3DS Requestor challenge preference acknowledged. Note: The CRes message can contain only a value of Y or N. Values of D and I are only applicable for 3DS version 2.2.0.

cardAuthenticationStatus

String

Card authentication status, possible values are: INITIALIZED, PREAUTHENTICATION_INITIATED, PREAUTHENTICATION_CONFIRMED, AUTHENTICATION_REJECTED, AUTHENTICATION, AUTHENTICATION_FINISHED

transactionXId

String

Server transaction Id generated by DS

cavv

String

This property is determined by the Access Control Server. This property will be valid if the TransactionStatus is "Y" or "A". The value may be used to provide proof of authentication.

eci

String

This property is determined by the Access Control Server. This property contains the two digit Electronic Commerce Indicator (ECI) value, which is to be submitted in a credit card authorization message. This value indicates to the processor that the customer data in the authorization message has been authenticated. The data contained within this property is only valid if the TransactionStatus is "Y" or "A".Please notice that ECI must be compatible with card provider.

transactionStatusReason

String

Provides information on why the Transaction Status field has the specified value. For MessageCategory 01 (PA), always included when TransactionStatus = N, U, or R. For MessageCategory 02 (NPA), as defined by the DS.

Possible values are:

01 - Card authentication failed, 02 - Unknown device, 03 - Unsupported device, 04 - Exceeds authentication frequency limit, 05 - Expired card, 06 - Invalid card number, 07 - Invalid transaction, 08 - No Card record, 09 - Security failure, 10 - Stolen card, 11 - Suspected fraud, 12 - Transaction not permitted to cardholder, 13 - Cardholder not enrolled in service, 14 - Transaction timed out at the ACS, 15 - Low confidence, 16 - Medium confidence, 17 - High confidence, 18 - Very high confidence, 19 - Exceeds ACS maximum challenges, 20 - Non-Payment transaction non supported, 21 - 3RI transaction not supported, 22 - ACS technical issue, 23 - Decoupled Authentication required by ACS but not requested by 3DS Requestor, 24 - 3DS Requestor Decoupled Max Expiry Time exceeded, 25 - Decoupled Authentication was provided insufficient time to authenticate cardholder. ACS will not make attempt, 26 - Authentication attempted but not performed by the cardholder, 27-79 - Reserved for future EMVCo use (values invalid until defined by EMVCo), 80-99 - Reserved for DS use

5.4. Status codes for 3DS 2.X verification methods

Code Messages HTTP Code HTTP STATUS

ERROR_3DS_2_X_FAILED

3DS 2.X method failed

500

INTERNAL_SERVER_ERROR

ERROR_MPI2_INTERNAL_ERROR

Some internal error occurred while trying to process 3DS 2.X request in MPI2

500

INTERNAL_SERVER_ERROR

ERROR_3DS_2_X_REQUIRED_DATA_NOT_COMPLETE

Required data for processing 3DS 2.X methods are not complete

422

UNPROCESSABLE_ENTITY

ERROR_3DS_2_X_DATA_MISMATCH

Three DS Method Data mismatch

422

UNPROCESSABLE_ENTITY

ERROR_3DS_2_X_DATA_PARSING

Error on parsing Three DS Method Data

422

UNPROCESSABLE_ENTITY

ERROR_3DS_2_X_CARD_NUMBER_NOT_ENROLLED

Card number not Enrolled in 3DS v2

422

UNPROCESSABLE_ENTITY

ERROR_3DS_2_X_INVALID_CARD_AUTH_ID

Invalid card authentication id

422

UNPROCESSABLE_ENTITY

ERROR_3DS_2_X_ISSUER_CARD_NOT_SUPPORTED

Issuer card is not supported

422

UNPROCESSABLE_ENTITY

ERROR_3DS_2_X_INVALID_CARD_NUMBER

Invalid card number

422

UNPROCESSABLE_ENTITY

ERROR_3DS_2_X_CARD_AUTH_NOT_EXISTS

Card Authentication not exists

404

NOT_FOUND

ERROR_3DS_2_X_PROTOCOL_VERSION_IS_NOT_SUPPORTED

Protocol version is not supported for card

422

UNPROCESSABLE_ENTITY

6. Determine currencies methods

6.1. Determine currency

POST /client/determine-currencies Content Type: application/vnd.determine-currencies.v2+json, Authorization: Basic Auth, API-TOKEN*
Method is used to determine currencies applied for given cards which are supported based on provided currencyType value.
*API-TOKEN is required for methods: DATACORE-PLAIN, PLAIN-DATACORE, DATACORE-DATACORE, DATACORE-PHONE
The API-TOKEN is refreshed each time it is used in the header. The API-TOKEN is refreshed for 30 minutes.

6.1.1. Request

PLAIN-PLAIN
POST /client/determine-currencies HTTP/1.1
Content-Type: application/vnd.determine-currencies.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 195
Host: java-staging.fenige.pl:8181

{
  "currencyType" : "STANDARD",
  "sender" : {
    "type" : "PLAIN",
    "cardNumber" : "5575168861324712"
  },
  "receiver" : {
    "type" : "PLAIN",
    "cardNumber" : "5319838121111668"
  }
}
Table 43. Determine currencies
Path Type Validation Rule Description

currencyType

String

Required

@NotNull

Consist values: STANDARD, DEFAULT, CUSTOM, ALL

sender

Object

Required

@NotNull

Required configuration per request (PLAIN SENDER or DATACORE SENDER)

receiver

Object

Required

@NotNull

Required configuration per request (PLAIN RECEIVER, PHONE RECEIVER, DATACORE RECEIVER)

PLAIN-DATACORE
POST /client/determine-currencies HTTP/1.1
Content-Type: application/vnd.determine-currencies.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
API-TOKEN: d94NYa+xqRrazUPzSgYeJ6qR/MzIOb3IzePb7t9sWds=
Content-Length: 181
Host: java-staging.fenige.pl:8181

{
  "currencyType" : "STANDARD",
  "sender" : {
    "type" : "PLAIN",
    "cardNumber" : "5575168861324712"
  },
  "receiver" : {
    "type" : "DATACORE",
    "cardId" : 88888
  }
}
Table 44. Determine currencies
Path Type Validation Rule Description

currencyType

String

Required

@NotNull

Consist values: STANDARD, DEFAULT, CUSTOM, ALL

sender

Object

Required

@NotNull

Required configuration per request (PLAIN SENDER or DATACORE SENDER)

receiver

Object

Required

@NotNull

Required configuration per request (PLAIN RECEIVER, PHONE RECEIVER, DATACORE RECEIVER)

DATACORE-PLAIN
POST /client/determine-currencies HTTP/1.1
Content-Type: application/vnd.determine-currencies.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
API-TOKEN: d94NYa+xqRrazUPzSgYeJ6qR/MzIOb3IzePb7t9sWds=
Content-Length: 181
Host: java-staging.fenige.pl:8181

{
  "currencyType" : "STANDARD",
  "sender" : {
    "type" : "DATACORE",
    "cardId" : 99999
  },
  "receiver" : {
    "type" : "PLAIN",
    "cardNumber" : "5319838121111668"
  }
}
Table 45. Determine currencies
Path Type Validation Rule Description

currencyType

String

Required

@NotNull

Consist values: STANDARD, DEFAULT, CUSTOM, ALL

sender

Object

Required

@NotNull

Required configuration per request (PLAIN SENDER or DATACORE SENDER)

receiver

Object

Required

@NotNull

Required configuration per request (PLAIN RECEIVER, PHONE RECEIVER, DATACORE RECEIVER)

DATACORE-PHONE
POST /client/determine-currencies HTTP/1.1
Content-Type: application/vnd.determine-currencies.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
API-TOKEN: d94NYa+xqRrazUPzSgYeJ6qR/MzIOb3IzePb7t9sWds=
Content-Length: 177
Host: java-staging.fenige.pl:8181

{
  "currencyType" : "STANDARD",
  "sender" : {
    "type" : "DATACORE",
    "cardId" : 99999
  },
  "receiver" : {
    "type" : "PHONE",
    "phoneNumber" : "48123321123"
  }
}
Table 46. Determine currencies
Path Type Validation Rule Description

currencyType

String

Required

@NotNull

Consist values: STANDARD, DEFAULT, CUSTOM, ALL

sender

Object

Required

@NotNull

Required configuration per request (PLAIN SENDER or DATACORE SENDER)

receiver

Object

Required

@NotNull

Required configuration per request (PLAIN RECEIVER, PHONE RECEIVER, DATACORE RECEIVER)

DATACORE-DATACORE
POST /client/determine-currencies HTTP/1.1
Content-Type: application/vnd.determine-currencies.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
API-TOKEN: d94NYa+xqRrazUPzSgYeJ6qR/MzIOb3IzePb7t9sWds=
Content-Length: 167
Host: java-staging.fenige.pl:8181

{
  "currencyType" : "STANDARD",
  "sender" : {
    "type" : "DATACORE",
    "cardId" : 99999
  },
  "receiver" : {
    "type" : "DATACORE",
    "cardId" : 88888
  }
}
Table 47. Determine currencies
Path Type Validation Rule Description

currencyType

String

Required

@NotNull

Consist values: STANDARD, DEFAULT, CUSTOM, ALL

sender

Object

Required

@NotNull

Required configuration per request (PLAIN SENDER or DATACORE SENDER)

receiver

Object

Required

@NotNull

Required configuration per request (PLAIN RECEIVER, PHONE RECEIVER, DATACORE RECEIVER)

6.1.2. Response

Response status
Status Description

200 OK

Returned list of currency for sender and reciver.

200 OK - Error validation

Returned list of field name which has validation error.

401 UNAUTHORIZED

Returned when API-TOKEN was broken.

Example HTTP Response
200 STANDARD
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 273

{
  "status" : "SUCCESS",
  "success" : {
    "senderDefaultCurrencies" : "PLN",
    "receiverDefaultCurrencies" : "GBP",
    "senderCurrencies" : [ "PLN", "EUR" ],
    "receiverCurrencies" : [ "GBP" ],
    "senderCountryCode" : "PL",
    "receiverCountryCode" : "GB"
  }
}

Response fields

Path Type Description

status

String

Status

success.senderDefaultCurrencies

String

Default currency code for sender card

success.receiverDefaultCurrencies

String

Default currency code for receiver card

success.senderCurrencies

Array

Currencies supported by sender’s card

success.receiverCurrencies

Array

Currencies supported by receiver’s card

success.senderCountryCode

String

Sender card country

success.receiverCountryCode

String

Receiver card country

200 DEFAULT
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 186

{
  "status" : "SUCCESS",
  "success" : {
    "senderCurrencies" : [ "PLN" ],
    "receiverCurrencies" : [ "GBP" ],
    "senderCountryCode" : "PL",
    "receiverCountryCode" : "GB"
  }
}

Response fields

Path Type Description

status

String

Status

success.senderCurrencies

Array

Currencies supported by sender’s card

success.receiverCurrencies

Array

Currencies supported by receiver’s card

success.senderCountryCode

String

Sender card country

success.receiverCountryCode

String

Receiver card country

200 CUSTOM
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 242

{
  "status" : "SUCCESS",
  "success" : {
    "senderCurrencies" : [ "EUR", "PLN", "CZK", "RUB", "UAH" ],
    "receiverCurrencies" : [ "EUR", "PLN", "CZK", "RUB", "UAH" ],
    "senderCountryCode" : "PL",
    "receiverCountryCode" : "GB"
  }
}

Response fields

Path Type Description

status

String

Status

success.senderCurrencies

Array

Currencies supported by sender’s card

success.receiverCurrencies

Array

Currencies supported by receiver’s card

success.senderCountryCode

String

Sender card country

success.receiverCountryCode

String

Receiver card country

200 ALL
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 2524

{
  "status" : "SUCCESS",
  "success" : {
    "senderCurrencies" : [ "AED", "AFN", "ALL", "AMD", "ANG", "AOA", "ARS", "AUD", "AWG", "AZN", "BAM", "BBD", "BDT", "BGN", "BHD", "BIF", "BMD", "BND", "BOB", "BOV", "BRL", "BSD", "BTN", "BWP", "BYN", "BYR", "BZD", "CAD", "CDF", "CHE", "CHF", "CHW", "CLF", "CLP", "CNY", "COP", "COU", "CRC", "CUC", "CUP", "CVE", "CZK", "DJF", "DKK", "DOP", "DZD", "EGP", "ERN", "ETB", "EUR", "FJD", "FKP", "GBP", "GEL", "GHS", "GIP", "GMD", "GNF", "GTQ", "GYD", "HKD", "HNL", "HRK", "HTG", "HUF", "IDR", "ILS", "INR", "IQD", "IRR", "ISK", "JMD", "JOD", "JPY", "KES", "KGS", "KHR", "KMF", "KPW", "KRW", "KWD", "KYD", "KZT", "LAK", "LBP", "LKR", "LRD", "LSL", "LTL", "LYD", "MAD", "MDL", "MGA", "MKD", "MMK", "MNT", "MOP", "MRO", "MRU", "MUR", "MVR", "MWK", "MXN", "MXV", "MYR", "MZN", "NAD", "NGN", "NIO", "NOK", "NPR", "NZD", "OMR", "PAB", "PEN", "PGK", "PHP", "PKR", "PLN", "PYG", "QAR", "RON", "RSD", "RUB", "RUR", "RWF", "SAR", "SBD", "SCR", "SDG", "SEK", "SGD", "SHP", "SLL", "SOS", "SRD", "SSP", "STD", "STN", "SVC", "SYP", "SZL", "THB", "TJS", "TMT", "TND", "TOP", "TRY", "TTD", "TWD", "TZS", "UAH", "UGX", "USD", "USN", "USS", "UYI", "UYU", "UZS", "VEF", "VES", "VND", "VUV", "WST", "YER", "ZAR", "ZMW", "ZWL" ],
    "receiverCurrencies" : [ "AED", "AFN", "ALL", "AMD", "ANG", "AOA", "ARS", "AUD", "AWG", "AZN", "BAM", "BBD", "BDT", "BGN", "BHD", "BIF", "BMD", "BND", "BOB", "BOV", "BRL", "BSD", "BTN", "BWP", "BYN", "BYR", "BZD", "CAD", "CDF", "CHE", "CHF", "CHW", "CLF", "CLP", "CNY", "COP", "COU", "CRC", "CUC", "CUP", "CVE", "CZK", "DJF", "DKK", "DOP", "DZD", "EGP", "ERN", "ETB", "EUR", "FJD", "FKP", "GBP", "GEL", "GHS", "GIP", "GMD", "GNF", "GTQ", "GYD", "HKD", "HNL", "HRK", "HTG", "HUF", "IDR", "ILS", "INR", "IQD", "IRR", "ISK", "JMD", "JOD", "JPY", "KES", "KGS", "KHR", "KMF", "KPW", "KRW", "KWD", "KYD", "KZT", "LAK", "LBP", "LKR", "LRD", "LSL", "LTL", "LYD", "MAD", "MDL", "MGA", "MKD", "MMK", "MNT", "MOP", "MRO", "MRU", "MUR", "MVR", "MWK", "MXN", "MXV", "MYR", "MZN", "NAD", "NGN", "NIO", "NOK", "NPR", "NZD", "OMR", "PAB", "PEN", "PGK", "PHP", "PKR", "PLN", "PYG", "QAR", "RON", "RSD", "RUB", "RUR", "RWF", "SAR", "SBD", "SCR", "SDG", "SEK", "SGD", "SHP", "SLL", "SOS", "SRD", "SSP", "STD", "STN", "SVC", "SYP", "SZL", "THB", "TJS", "TMT", "TND", "TOP", "TRY", "TTD", "TWD", "TZS", "UAH", "UGX", "USD", "USN", "USS", "UYI", "UYU", "UZS", "VEF", "VES", "VND", "VUV", "WST", "YER", "ZAR", "ZMW", "ZWL" ],
    "senderCountryCode" : "PL",
    "receiverCountryCode" : "GB"
  }
}

Response fields

Path Type Description

status

String

Status

success.senderCurrencies

Array

Currencies supported by sender’s card

success.receiverCurrencies

Array

Currencies supported by receiver’s card

success.senderCountryCode

String

Sender card country

success.receiverCountryCode

String

Receiver card country

200 OK - Error validation
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
    "status": "ERROR_VALIDATION",
    "error": {
        "message": "Some information is missing or incorrect.",
        "errors": [
            {
                "field": "sender.cardNumber",
                "message": [
                    "may not be null"
                ]
            },
            {
                 "field": "sender.cardNumber",
                 "message": [
                  "invalid card number"
                 ]
            },
            {
                "field": "receiver.cardNumber",
                "message": [
                    "may not be null"
                ]
            },
            {
                 "field": "sender.cardNumber",
                  "message": [
                  "invalid card number"
                 ]
            }

        ]
    }
}
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
    "status": "ERROR_INVALID_JSON",
    "error": {
        "message": "Some properties are invalid."
    }
}
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
    "status": "SUCCESS",
    "success": {
        "senderCurrencies": [
            "UNDEFINED"
        ],
        "receiverCurrencies": [
            "UNDEFINED"
        ]
    }
}
Returned UNDEFINED when Merchant configuration doesn’t allow sent type or card number isn’t support.
401 UNAUTHORIZED
HTTP/1.1 401 Unauthorized
Content-Type: application/json

{
    "timestamp": "2021-12-22T12:39:53.168+0000",
    "status": 401,
    "error": "Unauthorized",
    "message": "Username or password is not correct",
    "path": "/client/determine-currencies"
}
Table 48. Response fields
Path Description

timestamp

Time when request was executed

status

Http response code

error

Http status name

message

Message for response code

path

Path to a specific resource

6.2. Currency rate by provider

POST /client/currency-rate Content Type: application/json, Authorization: Basic Auth
Method is used for determine currency rate for revaluation from funding to payment (lowerRate) and payment to funding (higherRate).
Notice that `lowerRate` is used to transaction processing.
Api Send-money allows users to select the direction of revaluation by providing specify type value in send-money request.
 1 - User by selecting type = SENDER defines amount of funding in given currency. This amount is collected from sender card in selected currency.
 2 - User by selecting type = RECEIVER defines amount of payment in given currency. This amount is transferred to receiver card in selected currency.
 In case there's need revaluation from one currency to another, system uses lowerRate for situation 1 and higherRate for situation 2.

6.2.1. Request

POST /client/currency-rate HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 108
Host: java-staging.fenige.pl:8181

{
  "provider" : "MASTERCARD",
  "from" : "USD",
  "to" : "PLN",
  "effectiveDate" : "2017-06-05 12:00:00"
}
Table 49. Currency rate
Path Type Validation Rule Description

provider

String

Required

@NotNull

VISA or MASTERCARD or MAESTRO

from

String

Required

@NotNull

Source revaluation currency

to

String

Required

@NotNull

Destination revaluation currency

effectiveDate

String

Optional

Format: yyyy-MM-ddHH:mm:ss

Date from which the currency rate is needed. This is optional field. When there is no effectiveDate field, then currency rate is getting from request date. (Format "yyyy-MM-ddHH:mm:ss")

6.2.2. Response

Response status
Status Description

200 OK

Returned currency rate VISA or MASTERCARD or MAESTRO.

200 OK - Error

200 Currency Invalid - Returned when currency is invalid.

200 Currency Rates Invalid - Returned when can’t calculate the rates to the given currencies.

200 Error something wrong - Returned currency rate error.

Example HTTP Response
200 OK
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 104

{
  "status" : "SUCCESS",
  "success" : {
    "lowerRate" : 3.735908,
    "higherRate" : 3.8522295
  }
}

Response fields

Path Type Description

status

String

Status of the revaluation

success

Object (Success)

Rate for revaluation

Object (Success)

Name Type Description

lowerRate

Decimal

Rate for revaluation from funding to payment

higherRate

Decimal

Rate for revaluation from payment to funding

200 OK - Error
HTTP Response - Currency Invalid
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
    "status": "CURRENCY_INVALID",
    "error": {
        "message": "Invalid currency."
    }
}
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
    "status": "ERROR_VALIDATION",
    "error": {
        "message": "Some information is missing or incorrect.",
        "errors": [
            {
                "field": "sender.currency",
                "message": [
                    "Currency is not supported"
                ]
            },
            {
                "field": "receiver.currency",
                "message": [
                    "Currency is not supported"
                ]
            }
        ]
    }
}
HTTP Response - Currency Rates Invalid
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
    "status": "CURRENCY_RATES_INVALID",
    "error": {
        "message": "Invalid currency rates."
    }
}
HTTP Response - Error something wrong
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
    "status": "ERROR_SOMETHING_WRONG",
    "error": {
        "message": "Something went wrong."
    }
}

6.3. Currency for card

POST /client/currency-for-card Content Type: application/json, Authorization: Basic Auth
Method is used to determine currencies applied for given card which are supported based on provided type value.

6.3.1. Request

STANDARD
Table 50. Determine currency
Path Type Validation Rule Description

type

String

Required

@NotNull

Consist values: STANDARD, DEFAULT, CUSTOM, ALL

cardNumber

String

Required

@NotNull

Card number

POST /client/currency-for-card HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 62
Host: java-staging.fenige.pl:8181

{
  "type" : "STANDARD",
  "cardNumber" : "5575168861324712"
}
DEFAULT
Table 51. Determine currency
Path Type Validation Rule Description

type

String

Required

@NotNull

Consist values: STANDARD, DEFAULT, CUSTOM, ALL

cardNumber

String

Required

@NotNull

Card number

POST /client/currency-for-card HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 61
Host: java-staging.fenige.pl:8181

{
  "type" : "DEFAULT",
  "cardNumber" : "5575168861324712"
}
CUSTOM
Table 52. Determine currency
Path Type Validation Rule Description

type

String

Required

@NotNull

Consist values: STANDARD, DEFAULT, CUSTOM, ALL

cardNumber

String

Required

@NotNull

Card number

POST /client/currency-for-card HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 60
Host: java-staging.fenige.pl:8181

{
  "type" : "CUSTOM",
  "cardNumber" : "5575168861324712"
}
ALL
Table 53. Determine currency
Path Type Validation Rule Description

type

String

Required

@NotNull

Consist values: STANDARD, DEFAULT, CUSTOM, ALL

cardNumber

String

Required

@NotNull

Card number

POST /client/currency-for-card HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 57
Host: java-staging.fenige.pl:8181

{
  "type" : "ALL",
  "cardNumber" : "5575168861324712"
}

6.3.2. Response

Response status
Status Description

200 OK

Returned list of currency for the given card.

200 OK - Error validation

Returned list of field name which has validation error.

Example HTTP Response
200 OK - STANDARD
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 134

{
  "defaultCurrency" : "EUR",
  "currencyCodes" : [ "EUR", "PLN", "CHF", "CZK" ],
  "bankName" : "PEKAO SA",
  "countryCode" : "PL"
}

Response fields

Path Type Description

currencyCodes

Array

Currencies supported by card

defaultCurrency

String

Default currency code for card

bankName

String

Card bank name

countryCode

String

Card country code

200 OK - DEFAULT
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 84

{
  "currencyCodes" : [ "EUR" ],
  "bankName" : "PEKAO SA",
  "countryCode" : "PL"
}

Response fields

Path Type Description

currencyCodes

Array

Currencies supported by card

bankName

String

Card bank name

countryCode

String

Card country code

200 OK - CUSTOM
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 133

{
  "currencyCodes" : [ "EUR", "PLN", "JOD", "CZK", "RUB", "UAH", "CHF", "JMD" ],
  "bankName" : "PEKAO SA",
  "countryCode" : "PL"
}

Response fields

Path Type Description

currencyCodes

Array

Currencies supported by card

bankName

String

Card bank name

countryCode

String

Card country code

200 OK - ALL
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1253

{
  "currencyCodes" : [ "AED", "AFN", "ALL", "AMD", "ANG", "AOA", "ARS", "AUD", "AWG", "AZN", "BAM", "BBD", "BDT", "BGN", "BHD", "BIF", "BMD", "BND", "BOB", "BOV", "BRL", "BSD", "BTN", "BWP", "BYN", "BYR", "BZD", "CAD", "CDF", "CHE", "CHF", "CHW", "CLF", "CLP", "CNY", "COP", "COU", "CRC", "CUC", "CUP", "CVE", "CZK", "DJF", "DKK", "DOP", "DZD", "EGP", "ERN", "ETB", "EUR", "FJD", "FKP", "GBP", "GEL", "GHS", "GIP", "GMD", "GNF", "GTQ", "GYD", "HKD", "HNL", "HRK", "HTG", "HUF", "IDR", "ILS", "INR", "IQD", "IRR", "ISK", "JMD", "JOD", "JPY", "KES", "KGS", "KHR", "KMF", "KPW", "KRW", "KWD", "KYD", "KZT", "LAK", "LBP", "LKR", "LRD", "LSL", "LTL", "LYD", "MAD", "MDL", "MGA", "MKD", "MMK", "MNT", "MOP", "MRO", "MRU", "MUR", "MVR", "MWK", "MXN", "MXV", "MYR", "MZN", "NAD", "NGN", "NIO", "NOK", "NPR", "NZD", "OMR", "PAB", "PEN", "PGK", "PHP", "PKR", "PLN", "PYG", "QAR", "RON", "RSD", "RUB", "RUR", "RWF", "SAR", "SBD", "SCR", "SDG", "SEK", "SGD", "SHP", "SLL", "SOS", "SRD", "SSP", "STD", "STN", "SVC", "SYP", "SZL", "THB", "TJS", "TMT", "TND", "TOP", "TRY", "TTD", "TWD", "TZS", "UAH", "UGX", "USD", "USN", "USS", "UYI", "UYU", "UZS", "VEF", "VES", "VND", "VUV", "WST", "YER", "ZAR", "ZMW", "ZWL" ],
  "bankName" : "PEKAO SA",
  "countryCode" : "PL"
}

Response fields

Path Type Description

currencyCodes

Array

Currencies supported by card

bankName

String

Card bank name

countryCode

String

Card country code

200 OK - Error validation
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
	"status": "ERROR_VALIDATION",
	"error": {
		"message": "Some information is missing or incorrect.",
		"errors": [{
				"field": "type",
				"message": [
					"may not be null"
				]
		    }
		]
	}
}
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
    "status": "ERROR_INVALID_JSON",
    "error": {
        "message": "Some properties are invalid."
    }
}
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
	"status": "INVALID_CARD_NO",
	"error": {
	       "message": "Card number is required."
	}
}
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
    "currencyCodes": [
        "UNDEFINED"
    ]
}
Returned UNDEFINED when Merchant configuration doesn’t allow sent type or card number isn’t support.

6.4. Merchant currency configuration

Merchant can have 4 types of configuration:

  • STANDARD - user can only perform transactions in the currencies assigned to the card and that is currency default and currency primary from 1 to 4. Some cards have more than one currency assigned.

  • DEFAULT - user can only perform transactions in the one single currency assigned to the card and that is default card currency.

  • CUSTOM - user may perform transactions in custom currencies selected by your administrator.

  • ALL - all currencies are allowed for transactions.

7. Calculate commission

POST /client/calculate-commission Content Type: application/vnd.calculate-commission.v2+json, Authentication: Basic Auth, API-TOKEN*
This method is used to receive information about the commission that will be charged for the transaction.
Additional description:
- If value the field: "reconciliationType" is "PLUS", the commission during the transaction will be added to the amount sent (the amount charged from the sender will be increased by a commission).
- If value the field: "reconciliationType" is "MINUS", then the commission during the transaction will be deducted from the amount received (the amount that will be received by the receiver will be reduced by the commission).
- If value the field: "reconciliationType" is "DEPOSITED", the commission during the transaction will neither be subtracted nor added (the amount to be received by the receiver is the same as the amount sent).
In addition, the merchant may specify in the field: type two values (SENDER OR RECEIVER). After selecting the value: "SENDER", the transaction will be sent in the amount indicated in the field: amount. Whereas after choosing the value: "RECEIVER", the transaction will be received in the amount indicated in the field: amount.
The method allows merchant to calculate commissions for the currencies that have been entered.
*API-TOKEN is required for methods: PLAIN-CASH, DATACORE-PLAIN, PLAIN-DATACORE, DATACORE-PHONE, DATACORE-CASH, DATACORE-DATACORE
The API-TOKEN is refreshed each time it is used in the header. The API-TOKEN is refreshed for 30 minutes.

7.1. Request

PLAIN-PLAIN
POST /client/calculate-commission HTTP/1.1
Content-Type: application/vnd.calculate-commission.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 251
Host: java-staging.fenige.pl:8181

{
  "amount" : 100,
  "type" : "SENDER",
  "sender" : {
    "type" : "PLAIN",
    "cardNumber" : "5117964247989169",
    "currency" : "PLN"
  },
  "receiver" : {
    "type" : "PLAIN",
    "cardNumber" : "5575167825713507",
    "currency" : "PLN"
  }
}
Table 54. Calculate commission
Path Type Validation Rule Description

amount

Number

Required

@NotNull, @Min(100)

The total transfer amount (in pennies)

type

String

Required

@NotNull

Value of (SENDER or RECEIVER), for specific transaction type. CARD_CARD: above, BLIK_CARD, CASH_CARD: RECEIVER, CARD_CASH: SENDER

sender

Object

Required

@NotNull

Required configuration per request (PLAIN SENDER, DATACORE SENDER, CASH SENDER, BLIK SENDER)

receiver

Object

Required

@NotNull

Required configuration per request (PLAIN RECEIVER, PHONE RECEIVER, DATACORE RECEIVER, CASH RECEIVER)

BLIK-PLAIN
POST /client/calculate-commission HTTP/1.1
Content-Type: application/vnd.calculate-commission.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 211
Host: java-staging.fenige.pl:8181

{
  "amount" : 100,
  "type" : "SENDER",
  "sender" : {
    "type" : "BLIK",
    "currency" : "PLN"
  },
  "receiver" : {
    "type" : "PLAIN",
    "cardNumber" : "5575167825713507",
    "currency" : "PLN"
  }
}
Table 55. Calculate commission
Path Type Validation Rule Description

amount

Number

Required

@NotNull, @Min(100)

The total transfer amount (in pennies)

type

String

Required

@NotNull

Value of (SENDER or RECEIVER), for specific transaction type. CARD_CARD: above, BLIK_CARD, CASH_CARD: RECEIVER, CARD_CASH: SENDER

sender

Object

Required

@NotNull

Required configuration per request (PLAIN SENDER, DATACORE SENDER, CASH SENDER, BLIK SENDER)

receiver

Object

Required

@NotNull

Required configuration per request (PLAIN RECEIVER, PHONE RECEIVER, DATACORE RECEIVER, CASH RECEIVER)

PLAIN-CASH
POST /client/calculate-commission HTTP/1.1
Content-Type: application/vnd.calculate-commission.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
API-TOKEN: d94NYa+xqRrazUPzSgYeJ6qR/MzIOb3IzePb7t9sWds=
Content-Length: 187
Host: java-staging.fenige.pl:8181

{
  "amount" : 100,
  "type" : "SENDER",
  "sender" : {
    "type" : "PLAIN",
    "cardNumber" : "5117964247989169",
    "currency" : "PLN"
  },
  "receiver" : {
    "type" : "CASH"
  }
}
Table 56. Calculate commission
Path Type Validation Rule Description

amount

Number

Required

@NotNull, @Min(100)

The total transfer amount (in pennies)

type

String

Required

@NotNull

Value of (SENDER or RECEIVER), for specific transaction type. CARD_CARD: above, BLIK_CARD, CASH_CARD: RECEIVER, CARD_CASH: SENDER

sender

Object

Required

@NotNull

Required configuration per request (PLAIN SENDER, DATACORE SENDER, CASH SENDER, BLIK SENDER)

receiver

Object

Required

@NotNull

Required configuration per request (PLAIN RECEIVER, PHONE RECEIVER, DATACORE RECEIVER, CASH RECEIVER)

PLAIN-DATACORE
POST /client/calculate-commission HTTP/1.1
Content-Type: application/vnd.calculate-commission.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
API-TOKEN: d94NYa+xqRrazUPzSgYeJ6qR/MzIOb3IzePb7t9sWds=
Content-Length: 236
Host: java-staging.fenige.pl:8181

{
  "amount" : 100,
  "type" : "SENDER",
  "sender" : {
    "type" : "PLAIN",
    "cardNumber" : "5117964247989169",
    "currency" : "PLN"
  },
  "receiver" : {
    "type" : "DATACORE",
    "cardId" : 9999,
    "currency" : "PLN"
  }
}
Table 57. Calculate commission
Path Type Validation Rule Description

amount

Number

Required

@NotNull, @Min(100)

The total transfer amount (in pennies)

type

String

Required

@NotNull

Value of (SENDER or RECEIVER), for specific transaction type. CARD_CARD: above, BLIK_CARD, CASH_CARD: RECEIVER, CARD_CASH: SENDER

sender

Object

Required

@NotNull

Required configuration per request (PLAIN SENDER, DATACORE SENDER, CASH SENDER, BLIK SENDER)

receiver

Object

Required

@NotNull

Required configuration per request (PLAIN RECEIVER, PHONE RECEIVER, DATACORE RECEIVER, CASH RECEIVER)

DATACORE-PLAIN
POST /client/calculate-commission HTTP/1.1
Content-Type: application/vnd.calculate-commission.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
API-TOKEN: d94NYa+xqRrazUPzSgYeJ6qR/MzIOb3IzePb7t9sWds=
Content-Length: 236
Host: java-staging.fenige.pl:8181

{
  "amount" : 100,
  "type" : "SENDER",
  "sender" : {
    "type" : "DATACORE",
    "cardId" : 8888,
    "currency" : "PLN"
  },
  "receiver" : {
    "type" : "PLAIN",
    "cardNumber" : "5575167825713507",
    "currency" : "PLN"
  }
}
Table 58. Calculate commission
Path Type Validation Rule Description

amount

Number

Required

@NotNull, @Min(100)

The total transfer amount (in pennies)

type

String

Required

@NotNull

Value of (SENDER or RECEIVER), for specific transaction type. CARD_CARD: above, BLIK_CARD, CASH_CARD: RECEIVER, CARD_CASH: SENDER

sender

Object

Required

@NotNull

Required configuration per request (PLAIN SENDER, DATACORE SENDER, CASH SENDER, BLIK SENDER)

receiver

Object

Required

@NotNull

Required configuration per request (PLAIN RECEIVER, PHONE RECEIVER, DATACORE RECEIVER, CASH RECEIVER)

DATACORE-PHONE
POST /client/calculate-commission HTTP/1.1
Content-Type: application/vnd.calculate-commission.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
API-TOKEN: d94NYa+xqRrazUPzSgYeJ6qR/MzIOb3IzePb7t9sWds=
Content-Length: 232
Host: java-staging.fenige.pl:8181

{
  "amount" : 100,
  "type" : "SENDER",
  "sender" : {
    "type" : "DATACORE",
    "cardId" : 8888,
    "currency" : "PLN"
  },
  "receiver" : {
    "type" : "PHONE",
    "phoneNumber" : "48123123123",
    "currency" : "PLN"
  }
}
Table 59. Calculate commission
Path Type Validation Rule Description

amount

Number

Required

@NotNull, @Min(100)

The total transfer amount (in pennies)

type

String

Required

@NotNull

Value of (SENDER or RECEIVER), for specific transaction type. CARD_CARD: above, BLIK_CARD, CASH_CARD: RECEIVER, CARD_CASH: SENDER

sender

Object

Required

@NotNull

Required configuration per request (PLAIN SENDER, DATACORE SENDER, CASH SENDER, BLIK SENDER)

receiver

Object

Required

@NotNull

Required configuration per request (PLAIN RECEIVER, PHONE RECEIVER, DATACORE RECEIVER, CASH RECEIVER)

DATACORE-CASH
POST /client/calculate-commission HTTP/1.1
Content-Type: application/vnd.calculate-commission.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
API-TOKEN: d94NYa+xqRrazUPzSgYeJ6qR/MzIOb3IzePb7t9sWds=
Content-Length: 172
Host: java-staging.fenige.pl:8181

{
  "amount" : 100,
  "type" : "SENDER",
  "sender" : {
    "type" : "DATACORE",
    "cardId" : 8888,
    "currency" : "PLN"
  },
  "receiver" : {
    "type" : "CASH"
  }
}
Table 60. Calculate commission
Path Type Validation Rule Description

amount

Number

Required

@NotNull, @Min(100)

The total transfer amount (in pennies)

type

String

Required

@NotNull

Value of (SENDER or RECEIVER), for specific transaction type. CARD_CARD: above, BLIK_CARD, CASH_CARD: RECEIVER, CARD_CASH: SENDER

sender

Object

Required

@NotNull

Required configuration per request (PLAIN SENDER, DATACORE SENDER, CASH SENDER, BLIK SENDER)

receiver

Object

Required

@NotNull

Required configuration per request (PLAIN RECEIVER, PHONE RECEIVER, DATACORE RECEIVER, CASH RECEIVER)

DATACORE-DATACORE
POST /client/calculate-commission HTTP/1.1
Content-Type: application/vnd.calculate-commission.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
API-TOKEN: d94NYa+xqRrazUPzSgYeJ6qR/MzIOb3IzePb7t9sWds=
Content-Length: 221
Host: java-staging.fenige.pl:8181

{
  "amount" : 100,
  "type" : "SENDER",
  "sender" : {
    "type" : "DATACORE",
    "cardId" : 8888,
    "currency" : "PLN"
  },
  "receiver" : {
    "type" : "DATACORE",
    "cardId" : 9999,
    "currency" : "PLN"
  }
}
Table 61. Calculate commission
Path Type Validation Rule Description

amount

Number

Required

@NotNull, @Min(100)

The total transfer amount (in pennies)

type

String

Required

@NotNull

Value of (SENDER or RECEIVER), for specific transaction type. CARD_CARD: above, BLIK_CARD, CASH_CARD: RECEIVER, CARD_CASH: SENDER

sender

Object

Required

@NotNull

Required configuration per request (PLAIN SENDER, DATACORE SENDER, CASH SENDER, BLIK SENDER)

receiver

Object

Required

@NotNull

Required configuration per request (PLAIN RECEIVER, PHONE RECEIVER, DATACORE RECEIVER, CASH RECEIVER)

CASH-PLAIN
POST /client/calculate-commission HTTP/1.1
Content-Type: application/vnd.calculate-commission.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 189
Host: java-staging.fenige.pl:8181

{
  "amount" : 100,
  "type" : "RECEIVER",
  "sender" : {
    "type" : "CASH"
  },
  "receiver" : {
    "type" : "PLAIN",
    "cardNumber" : "5575167825713507",
    "currency" : "PLN"
  }
}
Table 62. Calculate commission
Path Type Validation Rule Description

amount

Number

Required

@NotNull, @Min(100)

The total transfer amount (in pennies)

type

String

Required

@NotNull

Value of (SENDER or RECEIVER), for specific transaction type. CARD_CARD: above, BLIK_CARD, CASH_CARD: RECEIVER, CARD_CASH: SENDER

sender

Object

Required

@NotNull

Required configuration per request (PLAIN SENDER, DATACORE SENDER, CASH SENDER, BLIK SENDER)

receiver

Object

Required

@NotNull

Required configuration per request (PLAIN RECEIVER, PHONE RECEIVER, DATACORE RECEIVER, CASH RECEIVER)

CASH-PHONE
POST /client/calculate-commission HTTP/1.1
Content-Type: application/vnd.calculate-commission.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 185
Host: java-staging.fenige.pl:8181

{
  "amount" : 100,
  "type" : "RECEIVER",
  "sender" : {
    "type" : "CASH"
  },
  "receiver" : {
    "type" : "PHONE",
    "phoneNumber" : "48123123123",
    "currency" : "PLN"
  }
}
Table 63. Calculate commission
Path Type Validation Rule Description

amount

Number

Required

@NotNull, @Min(100)

The total transfer amount (in pennies)

type

String

Required

@NotNull

Value of (SENDER or RECEIVER), for specific transaction type. CARD_CARD: above, BLIK_CARD, CASH_CARD: RECEIVER, CARD_CASH: SENDER

sender

Object

Required

@NotNull

Required configuration per request (PLAIN SENDER, DATACORE SENDER, CASH SENDER, BLIK SENDER)

receiver

Object

Required

@NotNull

Required configuration per request (PLAIN RECEIVER, PHONE RECEIVER, DATACORE RECEIVER, CASH RECEIVER)

7.2. Response

7.2.1. Response status

Status

Description

200 OK

Returned if the calculate commission completes successfully.

200 OK - Error validation

Returned list of field name which has validation error.

401 UNAUTHORIZED

Returned when API-TOKEN was broken.

7.2.2. Example HTTP Response

200 OK
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 911

{
  "status" : "SUCCESS",
  "success" : {
    "commission" : 5,
    "transactionCommissions" : [ {
      "value" : 50,
      "bigDecimalValue" : 0.5,
      "currencyExponent" : 2,
      "currency" : "PLN",
      "commissionConfiguration" : {
        "currency" : "PLN",
        "commissionType" : "PROVISION",
        "reconciliationType" : "PLUS",
        "geographicScope" : "DOMESTIC",
        "transactionType" : {
          "id" : "funding",
          "name" : "MoneySend Funding"
        }
      }
    } ],
    "revaluationResult" : {
      "revaluationFundingAmount" : 100,
      "bigDecimalRevaluationFundingAmount" : 1,
      "fundingCurrency" : "PLN",
      "revaluationPaymentAmount" : 100,
      "bigDecimalRevaluationPaymentAmount" : 1,
      "paymentCurrency" : "PLN",
      "determineCurrencyRate" : {
        "from" : "PLN",
        "to" : "PLN",
        "currencyRate" : "1"
      }
    }
  }
}

Response fields

Path Type Description

status

String

Status

success.commission

Number

Currencies supported by sender’s card

success.transactionCommissions

Array

Currencies supported by sender’s card

success.revaluationResult

Object

Currencies supported by receiver’s card

TransactionCommissions

Path Type Description

value

Long

Value of calculated commission (in pennies) depends on the above parameters

bigDecimalValue

BigDecimal

Value of calculated commission depends on the above parameters

currencyExponent

Long

Decimal places in currency

currency

String

Commission value currency code the same as sender’s card currency when commission

is for Funding or the same as receiver’s card currency when commission is for Payment

commissionConfiguration

Object (CommissionConfiguration)

Configuration for commission

CommissionConfiguration

Path Type Description

currency

String

Partner/Merchant currency

commissionType

String

Commission type (PARTNER, FENIGE, ACCEPTANCE NETWORK)

reconciliationType

String

PLUS - means that the commission will be added to the amount sent (the amount charged from the sender will be increased by a commission).,

MINUS - means that the commission will be deducted from the amount received (the amount that will be received by the receiver will be reduced by the commission),

DEPOSITED - means that the commission during the transaction will neither be subtracted nor added (the amount to be received by the receiver is the same as the amount sent).

geographicScope

String

Type of transaction scope (DOMESTIC, CROSSBORDER, DOMESTIC_PL, INTRA_EU, INTER)

transactionType

Object (TransactionType)

Transaction type for MoneySend Funding or MoneySend Payment

TransactionType

Path Type Description

id

String

Id of transaction: funding or payment

name

String

Name of transaction’s type: MoneySend Funding or MoneySend Payment

RevaluationResult

Path Type Description

revaluationFundingAmount

Long

Amount (in pennies) of funding transaction in fundingCurrency

bigDecimalRevaluationFundingAmount

BigDecimal

Amount of funding transaction in fundingCurrency

fundingCurrency

String

Currency code the same as sender’s card currency

revaluationPaymentAmount

Long

Amount (in pennies) of payment transaction in paymentCurrency

bigDecimalRevaluationPaymentAmount

BigDecimal

Amount of payment transaction in paymentCurrency

paymentCurrency

String

Currency code the same as receiver’s card currency

determineCurrencyRate

Object (DetermineCurrencyRate)

Details about conversion

DetermineCurrencyRate

Path Type Description

from

Long

Currency which was conversion from

to

Long

Resulted currency

currencyRate

BigDecimal

Currency rate

200 OK - Error validation
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
    "status": "ERROR_VALIDATION",
    "error": {
        "message": "Some information is missing or incorrect.",
        "errors": [
            {
                "field": "amount",
                "message": [
                    "may not be null"
                ]
            },
            {
                "field": "type",
                "message": [
                    "may not be null"
            },
            {
                "field": "receiver.cardNumber",
                "message": [
                    "may not be null"
                ]
            },
            {
                "field": "receiver.currency",
                "message": [
                    "may not be null"
                ]
            },
            {
                "field": "sender.cardNumber",
                "message": [
                    "may not be null"
                ]
            },
            {
                "field": "sender.currency",
                "message": [
                    "may not be null"
                ]
            }
        ]
    }
}
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
    "status": "ERROR_INVALID_JSON",
    "error": {
        "message": "Some properties are invalid."
    }
}
200 OK - Error
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
    "status": "ERROR_WHILE_GETTING_COUNTRY_CODE",
    "error": {
        "message": "Could not get card country code."
    }
}
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
    "status": "ERROR_WHILE_GETTING_SENDER_COUNTRY_CODE",
    "error": {
        "message": "Can not get card for sender."
    }
}
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
    "status": "ERROR_WHILE_GETTING_RECEIVER_COUNTRY_CODE",
    "error": {
        "message": "Can not get card for receiver."
    }
}
401 UNAUTHORIZED
HTTP/1.1 401 Unauthorized
Content-Type: application/json

{
    "timestamp": "2021-12-22T12:39:53.168+0000",
    "status": 401,
    "error": "Unauthorized",
    "message": "Username or password is not correct",
    "path": "/client/calculate-commission"
}
Table 64. Response fields
Path Description

timestamp

Time when request was executed

status

Http response code

error

Http status name

message

Message for response code

path

Path to a specific resource

8. Check card’s provider

POST /client/card/provider Content Type: application/json, Authorization: Basic Auth
This method is used to check the card provider, for example: VISA or MASTERCARD.

8.1. Request

POST /client/card/provider HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 39
Host: java-staging.fenige.pl:8181

{
  "cardNumber" : "5117964247989169"
}

8.2. Response

Response status
Status Description

200 OK

Returned card’s provider.

Example Response
200 OK
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 31

{
  "provider" : "MASTERCARD"
}

Response fields

Path Type Description

provider

String

Card’s provider

9. Check deposit state

9.1. Check deposit state

GET /client/merchant/deposit Content Type: application/json, Authorization: Basic Auth
This method is appropriate only for CASH-CARD transaction model.
By use this endpoint it is possible to retrieve current deposit state in settlement currency.

9.1.1. Request

GET /client/merchant/deposit HTTP/1.1
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Host: java-staging.fenige.pl:8181

9.1.2. Response

Response status
Status Description

200 OK

Returned state of deposit.

Example Response
200 OK
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 33

{
  "remainingDeposit" : 150.99
}

Response fields

Path Type Description

remainingDeposit

Number

The amount remaining on deposit (in settlement currency)

10. User authentication

10.1. Login

POST /client/login Content-Type: application/json, Authorization: Basic Auth
This method can be use to login to Datacenter by user's credentials. The user can be blocked in the system.
Before using the login method, you must call 12.1 Add user which adds user to datacenter database.
Flow Log User

From January 2021, there is an internal functionality to restrict access for the Merchant to specific method. The Fenige employee can disable access to a given endpoint, then the HTTP status 403 FORBIDDEN will be returned. The Merchant will be informed about each access restriction action.

10.1.1. Request

HTTP Request
POST /client/login HTTP/1.1
Authorization: Basic dGVzdF9tZXJjaGFudDpwYXNzd29yZA==
Content-Type: application/json
Content-Length: 62
Host: java-staging.fenige.pl:8181

{
  "id" : "mark.smith@fenige.pl",
  "password" : "9LxbwBI2"
}
Table 65. Login request fields
Path Type Constraints Description

id

String

@Length must be between 1 and 128 inclusive, @Must not be blank, @Must not be null

User id

password

String

@Length must be between 1 and 128 inclusive, @Must not be blank, @Must not be null

User’s password

10.1.2. Response

200 OK
HTTP Response
HTTP/1.1 200 OK
Set-Cookie: JSESSIONID=E8C170ABCB4142149A7A39845A859432; Path=/; HttpOnly
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 28 Sep 2023 22:22:34 GMT
Content-Length: 365

{
  "status" : "SUCCESS",
  "success" : {
    "user" : {
      "id" : 4206,
      "firstName" : "Mark",
      "lastName" : "Smith",
      "phone" : "48570100200",
      "email" : "mark.smith@fenige.pl",
      "personalId" : "ADFR34453",
      "gender" : "M",
      "birthDate" : "1990-11-24"
    },
    "token" : "d94NYa+xqRrazUPzSgYeJ6qR/MzIOb3IzePb7t9sWds="
  }
}
Table 66. Response fields
Path Type Description

success.user.id

Number

Unique user’s id

success.user.firstName

String

User’s first name

success.user.lastName

String

User’s last name

success.user.phone

String

User’s phone number

success.user.email

String

User’s e-mail address

success.user.personalId

String

User personal id (e.g. identity document number)

success.user.gender

String

User gender

success.user.birthDate

String

User birthDate

success.token

String

Unique generated token that allows user to make other requests

status

String

Status from Fenige system

200 OK - Error
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "ERROR_USER_NOTFOUND",
    "error": {
        "message": "Some information is missing or incorrect."
    }
}
HTTP/1.1 200 OK
Set-Cookie: JSESSIONID=8376E49B63507677C77226B980E047F8; Path=/; HttpOnly
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 28 Sep 2023 22:22:35 GMT
Content-Length: 124

{
  "status" : "USER_BLOCKED_IN_DATACENTER",
  "error" : {
    "message" : "Some information is missing or incorrect."
  }
}
200 OK - Error Validation
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "ERROR_VALIDATION",
    "error": {
        "message": "Some information is missing or incorrect.",
        "errors": [
            {
                "field": "userPasswordIn.id",
                "message": [
                    "may not be null",
                    "may not be empty"
                ]
            },
            {
                "field": "userPasswordIn.password",
                "message": [
                    "may not be null",
                    "may not be empty"
                ]
            },
            {
                "field": "userPasswordIn.id",
                "message": [
                    "length must be between 1 and 128"
                ]
            },
            {
                 "field": "userPasswordIn.password",
                 "message": [
                 "length must be between 1 and 128"
                 ]
            }
        ]
    }
}

10.2. Logout

POST /client/logout Content-Type: application/json, Authorization: Basic Auth, API-TOKEN
This method can be use to logout from Datacenter by user's credentials.
This request must have header calling "API-TOKEN" and his value must be the same as token from the Log User method.

10.2.1. Request

HTTP Request
POST /client/logout HTTP/1.1
Authorization: Basic dGVzdF9tZXJjaGFudDpwYXNzd29yZA==
API-TOKEN: d94NYa+xqRrazUPzSgYeJ6qR/MzIOb3IzePb7t9sWds=
Content-Type: application/json
Host: java-staging.fenige.pl:8181
Table 67. Request headers
Name Description

Authorization

Basic auth credentials

API-TOKEN

User’s token to authenticate in service

10.2.2. Response

Response status
Table 68. Response status
Status Description

200 OK

Returned when user successfully logout.

200 OK - Error

Returned when API-TOKEN was missing.

401 - Unauthorized

Returned when API-TOKEN was broken.

200 OK
HTTP Response
HTTP/1.1 200 OK
Set-Cookie: JSESSIONID=E22689D832E3A4CBB3F9C1A424B63AC8; Path=/; HttpOnly
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 28 Sep 2023 22:22:36 GMT
Content-Length: 46

{
  "status" : "SUCCESS",
  "success" : true
}
200 OK - Error
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "ERROR_SOMETHING_WRONG",
    "error": {
        "message": "Something went wrong."
    }
}
401 Unauthorized

HTTP/1.1 401 Unauthorized
Content-Type: application/json

{
    "timestamp": "2021-12-22T12:39:53.168+0000",
    "status": 401,
    "error": "Unauthorized",
    "message": "Username or password is not correct",
    "path": "/client/logout"
}
HTTP/1.1 401 Unauthorized
Content-Type: application/json

{
      "timestamp": "2021-12-22T12:39:53.168+0000",
      "status": 401,
      "error": "Unauthorized",
      "message": "ERROR_USER_NOTFOUND",
      "path": "/client/logout"
}

11. User management

11.1. Add user

POST /client/users Content-Type: application/json, Authorization: Basic Auth
This method can be use to add new user in Datacenter.
Notice that if 'verified' field is set as `true`, KYC_3 level will set for each transaction of this user (only for DATACENTER transactions).
Flow Add User

From January 2021, there is an internal functionality to restrict access for the Merchant to specific method. The Fenige employee can disable access to a given endpoint, then the HTTP status 403 FORBIDDEN will be returned. The Merchant will be informed about each access restriction action.

11.1.1. Request

STANDARD
HTTP Request
POST /client/users HTTP/1.1
Authorization: Basic dGVzdF9tZXJjaGFudDpwYXNzd29yZA==
Content-Type: application/json
Content-Length: 381
Host: java-staging.fenige.pl:8181

{
  "firstName" : "Mark",
  "lastName" : "Smith",
  "phone" : "48500600800",
  "email" : "mark.smith@fenige.pl",
  "password" : "NKX5CbBs",
  "birthDate" : "10021994",
  "gender" : "M",
  "street" : "Olszewskiego",
  "flatNumber" : "93",
  "houseNumber" : "283",
  "postalCode" : "21-023",
  "city" : "Lublin",
  "country" : "PL",
  "personalId" : "AAA00000",
  "verified" : true
}
Table 69. Request headers
Name Description

Authorization

Basic auth credentials

Table 70. Add user request fields
Path Type Constraints Description

firstName

String

Required

User’s first name

lastName

String

Required

User’s last name

phone

String

Required

User’s phone number

email

String

Required

User’s email used to log in system

password

String

Required

User’s password

birthDate

String

Optional

Birth date in format ddmmyyyy

gender

String

Optional

Gender M/F

street

String

Required

User’s street

flatNumber

String

Optional

User’s flat number

houseNumber

String

Required

User’s house number

postalCode

String

Required

User’s postal code

city

String

Required

User’s city

country

String

Required

User country code in accordance with ISO 3166-1 Alpha-2

personalId

String

@Optional

User personal id (e.g. identity document number)

verified

Boolean

@Optional

Is user verified or not. If field is empty or missing 'verified' field is set as 'false'

USA/CAN TRANSACTIONS
HTTP Request
POST /client/users HTTP/1.1
Authorization: Basic dGVzdF9tZXJjaGFudDpwYXNzd29yZA==
Content-Type: application/json
Content-Length: 401
Host: java-staging.fenige.pl:8181

{
  "firstName" : "Mark",
  "lastName" : "Smith",
  "phone" : "48500600800",
  "email" : "mark.smith@fenige.pl",
  "password" : "NKX5CbBs",
  "birthDate" : "10021994",
  "gender" : "M",
  "street" : "Wallstreet",
  "flatNumber" : "93",
  "houseNumber" : "283",
  "postalCode" : "01922",
  "city" : "New York",
  "country" : "US",
  "province" : "NY",
  "personalId" : "AAA00000",
  "verified" : true
}
Table 71. Request headers
Name Description

Authorization

Basic auth credentials

Table 72. Add user request fields
Path Type Constraints Description

firstName

String

User’s first name

lastName

String

User’s last name

phone

String

User’s phone number

email

String

User’s email used to log in system

password

String

User’s password

birthDate

String

Birth date in format ddmmyyyy

gender

String

Gender M/F

street

String

User’s street

flatNumber

String

User’s flat number

houseNumber

String

User’s house number

postalCode

String

User’s postal code

city

String

User’s city

country

String

@Required

User country code in accordance with ISO 3166-1 Alpha-2

province

String

@Optional

User’s province

personalId

String

@Optional

User’s personalId

verified

Boolean

@Optional

Is user verified or not. If field is empty or missing 'verified' field is set as 'false'

11.1.2. Response

200 OK
HTTP Response
HTTP/1.1 200 OK
Set-Cookie: JSESSIONID=0E2CA28372D76FACC714DF828D8924AD; Path=/; HttpOnly
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 28 Sep 2023 22:22:46 GMT
Content-Length: 41

{
  "status" : "SUCCESS",
  "id" : 3603
}
Table 73. Response fields
Path Type Description

status

String

Response status

id

Number

User’s id

200 OK - Errors

HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "USER_ALREADY_EXISTS",
    "id": 2602
}
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "INVALID_FIRST_NAME",
    "id": null
}
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "INVALID_LAST_NAME",
    "id": null
}
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "INVALID_PHONE",
    "id": null
}
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "INVALID_EMAIL",
    "id": null
}
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "INVALID_PASSWORD",
    "id": null
}
HTTP/1.1 200 OK
Content-Type: application/json

{
     "status": "ERROR_INVALID_JSON",
     "error": {
         "message": "Some properties are invalid."
    }
}
HTTP/1.1 200 OK
Content-Type: application/json

{
     "status": "ERROR_USER_VERIFICATION",
     "error": {
        "message": "Some information is missing or incorrect."
    }
}
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "INVALID_COUNTRY",
    "error": {
        "message": "Some information is missing or incorrect."
    }
}
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "ERROR_ENTERED_EXISTING_PERSONAL_ID",
    "error": {
        "message": "Some information is missing or incorrect."
    }
}

200 OK - Validation Errors
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "ERROR_VALIDATION",
    "error": {
        "message": "Some information is missing or incorrect.",
        "errors": [
            {
                "field": "addUserIn.province",
                "message": [
                    "may not be null",
                    "is not correct province code for country code US"
                ]
            },
            {
                "field": "addUserIn.province",
                "message": [
                    "may not be null",
                    "is not correct province code for country code CA"
                ]
            },
            {
                "field": "addUserIn.province",
                "message": [
                    "is not correct country code for province NY"
                ]
            },
            {
                "field": "addUserIn.province",
                "message": [
                    "province is mandatory only if country code is US or CA"
                ]
            },
            {
                "field": "addUserIn.province",
                "message": [
                    "must match ^[A-Z]{2}$",
                    "may not be empty",
                    "is not correct province code for country code US",
                    "length must be 2"
                ]
            },
            {
                "field": "addUserIn.province",
                "message": [
                    "must match ^[A-Z]{2}$",
                    "may not be empty",
                    "is not correct province code for country code CA",
                    "length must be 2"
                ]
            }
        ]
    }
}

11.2. Update user

PUT /client/users Content-Type: application/json, Authorization: Basic Auth, API-TOKEN
Method allow to update user profile data. This request must have header calling "API-TOKEN" and his value must be the same as token from the Log User method.
Notice that if 'verified' field is set as `true`, KYC_3 level will set for each transaction of this user (only for DATACENTER transactions).
*API-TOKEN is required for this method
The API-TOKEN is refreshed each time it is used in the header. The API-TOKEN is refreshed for 30 minutes.

From January 2021, there is an internal functionality to restrict access for the Merchant to specific method. The Fenige employee can disable access to a given endpoint, then the HTTP status 403 FORBIDDEN will be returned. The Merchant will be informed about each access restriction action.

11.2.1. Request

HTTP Request
PUT /client/users HTTP/1.1
Authorization: Basic dGVzdF9tZXJjaGFudDpwYXNzd29yZA==
API-TOKEN: d94NYa+xqRrazUPzSgYeJ6qR/MzIOb3IzePb7t9sWds=
Content-Type: application/json;charset=UTF-8
Content-Length: 602
Host: java-staging.fenige.pl:8181

{
  "id" : "4206",
  "personalData" : {
    "firstName" : "Mark",
    "lastName" : "Smith",
    "email" : "mark.smith@fenige.pl",
    "phone" : "48570100200",
    "birthDate" : "24111990",
    "personalId" : "ADFR34453",
    "verified" : true
  },
  "address" : {
    "id" : "1854",
    "street" : "Olszewskiego",
    "flatNumber" : "17A",
    "houseNumber" : "153",
    "postalCode" : "20-400",
    "city" : "Lublin",
    "countryId" : 616,
    "province" : null
  },
  "password" : {
    "oldPassword" : "9LxbwBI2",
    "newPassword" : "suwakilk1E_TQ",
    "newPasswordRepeat" : "suwakilk1E_TQ"
  }
}
Table 74. Request headers
Name Description

Authorization

Basic auth credentials

API-TOKEN

User’s token to authenticate in service

Table 75. Update user request fields
Path Type Constraints Description

id

String

Required

User identifier, received from addUser

personalData.firstName

String

Required

User first name to update

personalData.lastName

String

Required

User last name to update

personalData.email

String

Required

User email to update

personalData.phone

String

Required

User phone to update

personalData.birthDate

String

Optional

User birth date to update in format ddMMyyyy

personalData.personalId

String

Optional

User personal id

personalData.verified

Boolean

Optional

Is user verified

address.id

String

Required

User address identifier

address.street

String

Optional

User street to update

address.flatNumber

String

Optional

User flat number to update

address.houseNumber

String

Optional

User house number to update

address.postalCode

String

Optional

User postal code to update

address.city

String

Optional

User city to update

address.countryId

Number

Required

User country id to update in accordance with ISO 3166-1 Alpha-2

address.province

Null

Optional

User country province

password.oldPassword

String

Required

User old password

password.newPassword

String

Required

User new password

password.newPasswordRepeat

String

Required

User new password repeated

11.2.2. Response

200 OK
HTTP Response
HTTP/1.1 200 OK
Set-Cookie: JSESSIONID=28EE28D8F2C1A8E1771F0769AB5C4F24; Path=/; HttpOnly
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 28 Sep 2023 22:22:45 GMT
Content-Length: 26

{
  "status" : "SUCCESS"
}
Table 76. Response fields
Path Type Description

status

String

Response status

200 OK - Error
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "ALREADY_UNSET"
}
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "INVALID_COUNTRY_ID",
    "error": {
        "message": "Some information is missing or incorrect."
    }
}
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "ERROR_ENTERED_EXISTING_PERSONAL_ID",
    "error": {
        "message": "Some information is missing or incorrect."
    }
}
200 OK - Error validation
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "ERROR_VALIDATION",
    "error": {
        "message": "Some information is missing or incorrect.",
        "errors": [
            {
                "field": "updateUserIn.password",
                "message": [
                    "newPassword and newPasswordRepeat fields must be the same"
                ]
            },
             {
                 "field": "updateUserIn.password.newPasswordRepeat",
                 "message": [
                     "may not be empty"
                 ]
            },
            {
                  "field": "updateUserIn.personalData.phone",
                  "message": [
                      "may not be null",
                      "may not be empty"
                 ]
            },
            {
                   "field": "updateUserIn.address.id",
                   "message": [
                       "may not be empty",
                        "may not be null"
                 ]
            },
            {
                "field": "updateUserIn.address.province",
                "message": [
                    "is not correct province code for country code CA"
                ]
            },
            {
                "field": "updateUserIn.address.province",
                "message": [
                    "is not correct province code for country code US",
                    "may not be null"
                ]
            },
            {
                "field": "updateUserIn.address.province",
                "message": [
                    "province is mandatory only if country code is US or CA"
                ]
            },
            {
                "field": "updateUserIn.address.province",
                "message": [
                    "length must be 2",
                    "may not be empty",
                    "must match ^[A-Z]{2}$",
                    "is not correct province code for country code US"
                ]
            },
            {
                "field": "updateUserIn.address.province",
                "message": [
                    "length must be 2",
                    "may not be empty",
                    "must match ^[A-Z]{2}$",
                    "is not correct province code for country code CA"
                ]
            }
        ]
    }
}
401 UNAUTHORIZED

HTTP/1.1 401 Unauthorized
Content-Type: application/json

{
    "timestamp": "2021-12-22T12:39:53.168+0000",
    "status": 401,
    "error": "Unauthorized",
    "message": "Username or password is not correct",
    "path": "/client/users"
}
HTTP/1.1 401 Unauthorized
Content-Type: application/json

{
      "timestamp": "2021-12-22T12:39:53.168+0000",
      "status": 401,
      "error": "Unauthorized",
      "message": "ERROR_USER_NOTFOUND",
      "path": "/client/users"
}

Table 77. Response fields
Path Description

timestamp

Time when request was executed

status

Http response code

error

Http status name

message

Message for response code

path

Path to a specific resource

11.3. Delete user

DELETE /client/users Content Type: application/json, Authorization: Basic Auth
This method can be use to delete user from database. In field 'id' you can type user's phone number or email.

From January 2021, there is an internal functionality to restrict access for the Merchant to specific method. The Fenige employee can disable access to a given endpoint, then the HTTP status 403 FORBIDDEN will be returned. The Merchant will be informed about each access restriction action.

11.3.1. Request

HTTP Request
DELETE /client/users HTTP/1.1
Authorization: Basic dGVzdF9tZXJjaGFudDpwYXNzd29yZA==
Content-Type: application/json
Content-Length: 17
Host: java-staging.fenige.pl:8181

{
  "id" : 9340
}
Table 78. Request headers
Name Description

Authorization

Basic auth credentials

Table 79. Delete user request fields
Path Type Constraints Description

id

Number

@Only digits allowed

Unique user id

11.3.2. Response

200 OK
HTTP Response
HTTP/1.1 200 OK
Set-Cookie: JSESSIONID=4B674270F251C3F3A654F7CA93E8CA40; Path=/; HttpOnly
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 28 Sep 2023 22:22:43 GMT
Content-Length: 26

{
  "status" : "SUCCESS"
}
Table 80. Response fields
Path Type Description

status

String

Response status

200 OK - Error

HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "CANT_FIND_USER"
}
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "UNKNOWN_ERROR"
}

11.4. Get user address

POST /client/users/address Content-Type: application/json
This method can be use to receive address details of user.

11.4.1. Request

HTTP Request
POST /client/users/address HTTP/1.1
Authorization: Basic dGVzdF9tZXJjaGFudDpwYXNzd29yZA==
Content-Type: application/json;charset=UTF-8
Content-Length: 19
Host: java-staging.fenige.pl:8181

{
  "id" : "1854"
}
Table 81. Request headers
Name Description

Authorization

Basic auth credentials

Table 82. Get user address request fields
Path Type Constraints Description

id

String

@Only digits allowed

Id number of address

11.4.2. Response

200 OK
HTTP Response
HTTP/1.1 200 OK
Set-Cookie: JSESSIONID=126F8A369AD2A0D66FB04A57C978B84E; Path=/; HttpOnly
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 28 Sep 2023 22:22:42 GMT
Content-Length: 207

{
  "id" : "1854",
  "street" : "Olszewskiego",
  "city" : "Lublin",
  "flatNumber" : "17A",
  "houseNumber" : "153",
  "postalCode" : "20-400",
  "countryId" : 616,
  "country" : "PL",
  "province" : null
}
Table 83. Response fields
Path Type Description

id

String

Address’s id

street

String

User’s street

city

String

User’s city

flatNumber

String

User’s flat number

houseNumber

String

User’s house number

postalCode

String

User’s postal code

countryId

Number

User’s numeric country code

country

String

User country code in accordance with ISO 3166-1 Alpha-2

province

Null

User’s province

200 OK - Error

HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "ERROR_WHILE_GETTING_ADDRESS",
    "error": {
        "message": "Some information is missing or incorrect."
    }
}
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "ERROR_INVALID_JSON",
    "error": {
         "message": "Some properties are invalid."
    }
}
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "ERROR_SOMETHING_WRONG",
    "error": {
        "message": "Something went wrong."
    }
}

11.5. Get countries

GET /client/countries Content Type: application/json, Authorization: Basic Auth
Method returns list of countries with specified country code alphabetic and numeric phone prefix for each country.

11.5.1. Request

GET /client/countries HTTP/1.1
Content-Type: application/json
Authorization: Basic eW91cl9tZXJjaGFudDp5b3VyX3Bhc3N3b3Jk
HOST: java-staging.fenige.pl:8181

11.5.2. Response

Response status
Status Description

200 OK

Returned phone number prefix with country code for countries.

Example HTTP Response
200 OK
HTTP/1.1 200 OK
Content-Type: application/json

[
    {
        "countryCode": "AF",
        "prefix": "93"
    },
    {
        "countryCode": "AL",
        "prefix": "355"
    },
    {
        "countryCode": "AQ",
        "prefix": "672"
    },
    {
        "countryCode": "DZ",
        "prefix": "213"
    },
...
]

Response fields

Name Type Description

countryCode

String

Alphabetic two letters country unique code identifier in accordance with ISO 3166-1 Alpha-2

prefix

String

Prefix phone number for country

11.6. User password reset

    The following API methods resets the password of a user registered in the Fenige system. Resetting the password is done in two steps:
    The first step requires a request to retrieve a one-time sms token for the end user and to do this the merchant performs reset user password get token API method. Next
user receives an sms token, which is required in step two as confirmation that the account belongs to that user. The token is a one-time use for password reset and is valid by
default for up to 2 hours from the time it is generated.
    Step two is the confirmation of password reset. Merchant executes the reset user password PUT API method with providing the sms token, new password and new password repeat for
the end user.
    If all requirements are met, the password has been reset correctly and the merchant gets a confirmation on the API.

11.6.1. Get sms token

POST /client/users/password/token Content-Type: application/json, Authorization: Basic Auth
One time sms token is sent to end user after execution of this method.

From January 2021, there is an internal functionality to restrict access for the Merchant to specific method. The Fenige employee can disable access to a given endpoint, then the HTTP status 403 FORBIDDEN will be returned. The Merchant will be informed about each access restriction action.

Request
HTTP Request
POST /client/users/password/token HTTP/1.1
Authorization: Basic dGVzdF9tZXJjaGFudDpwYXNzd29yZA==
Content-Type: application/json
Content-Length: 32
Host: java-staging.fenige.pl:8181

{
  "email" : "user@email.com"
}
Table 84. Request headers
Name Description

Authorization

Basic auth credentials

Table 85. Password reset get token fields
Path Type Constraints Description

email

String

Required

User’s email address

Response
200 OK
HTTP Response
HTTP/1.1 200 OK
Set-Cookie: JSESSIONID=8B06BCCBACCED5D22A2A463619A60C36; Path=/; HttpOnly
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 28 Sep 2023 22:22:48 GMT
Content-Length: 26

{
  "status" : "SUCCESS"
}
Table 86. Response fields
Path Type Description

status

String

Response status

200 OK - Error
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "ERROR_USER_NOTFOUND"
}

11.6.2. User password reset

PUT /client/users/password Content-Type: application/json, Authorization: Basic Auth
    Once this method has been performed, the user's password will be reset. The method requires
a one-time sms token.
    The new password should meet the requirements for password strength and should contain at least
8 characters, at least 1 capital letter and at least 1 digit. New Password should be repeated.
    The number of possible user password changes within a given API client is limited per day
and is configurable as required.
The smsToken is only required in a production environment for real user data. For testing on test environment, please use the value 'test' for this field.

From January 2021, there is an internal functionality to restrict access for the Merchant to specific method. The Fenige employee can disable access to a given endpoint, then the HTTP status 403 FORBIDDEN will be returned. The Merchant will be informed about each access restriction action.

Request
HTTP Request
PUT /client/users/password HTTP/1.1
Authorization: Basic dGVzdF9tZXJjaGFudDpwYXNzd29yZA==
Content-Type: application/json
Content-Length: 129
Host: java-staging.fenige.pl:8181

{
  "email" : "user@email.com",
  "smsToken" : "test",
  "newPassword" : "New_passw*rd",
  "newPasswordRepeat" : "New_passw*rd"
}
Table 87. Request headers
Name Description

Authorization

Basic auth credentials

Table 88. Password reset fields
Path Type Constraints Description

email

String

Required

User’s email address

smsToken

String

Required

User’s sms verification token to authenticate password reset

newPassword

String

Required

User’s new password

newPasswordRepeat

String

Required

User’s new password repeat

Response
200 OK
HTTP Response
HTTP/1.1 200 OK
Set-Cookie: JSESSIONID=38B17F065EEA8A9BA3F6268A6C33DCB2; Path=/; HttpOnly
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 28 Sep 2023 22:22:43 GMT
Content-Length: 26

{
  "status" : "SUCCESS"
}
Table 89. Response fields
Path Type Description

status

String

API status from Fenige system

200 OK - Error
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "ERROR_USER_NOTFOUND"
}
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "INVALID_PASSWORD"
}
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "PASSWORD_RESET_LIMIT_REACHED"
}
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "INVALID_TOKEN"
}
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "ERROR_PASSWORDS_ARE_NOT_THE_SAME"
}
200 OK - Error validation
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "ERROR_VALIDATION",
    "error": {
        "message": "Some information is missing or incorrect.",
        "errors": [
            {
                "field": "updatePasswordIn.email",
                "message": [
                    "must not be blank",
                    "must not be null"
                ]
            },
            {
                "field": "updatePasswordIn.smsToken",
                "message": [
                    "must not be blank",
                    "must not be null"
                ]
            },
            {
                "field": "updatePasswordIn.newPassword",
                "message": [
                    "must not be blank",
                    "must not be null"
                ]
            },
            {
                "field": "updatePasswordIn.newPasswordRepeat",
                "message": [
                    "must not be blank",
                    "must not be null"
                ]
            }
        ]
    }
}

12. Card management

12.1. Add card

PUT /client/card Content-Type: application/json, Authorization: Basic Auth, API-TOKEN
This method can be use to add new card for existing user. In default limit per user is 5 cards, Fenige can configure it per merchant.
*API-TOKEN is required for this method
In some cases, for some of our clients it is beneficial to combine the sender and receiver database.
Each of our clients can do this, but additional configuration is needed on the Fenige side.
After changing the database configuration, the sender and receiver cards will be in one database with no distinction between Friend Receivers and Senders.
The API-TOKEN is refreshed each time it is used in the header. The API-TOKEN is refreshed for 30 minutes.

From January 2021, there is an internal functionality to restrict access for the Merchant to specific method. The Fenige employee can disable access to a given endpoint, then the HTTP status 403 FORBIDDEN will be returned. The Merchant will be informed about each access restriction action.

Flow Card Add

12.1.1. Request

Add card HTTP Request
PUT /client/card HTTP/1.1
Authorization: Basic dGVzdF9tZXJjaGFudDpwYXNzd29yZA==
API-TOKEN: d94NYa+xqRrazUPzSgYeJ6qR/MzIOb3IzePb7t9sWds=
Content-Type: application/json
Content-Length: 299
Host: java-staging.fenige.pl:8181

{
  "userIdentifier" : "mark.smith@fenige.pl",
  "card" : {
    "expDate" : "10/26",
    "cardNo" : "5442016597039990",
    "defaultValue" : false,
    "description" : "Test card number",
    "phoneNumber" : "48570102956",
    "cardHolderFirstName" : "Mark",
    "cardHolderLastName" : "Smith"
  }
}
Table 90. Request headers
Name Description

Authorization

Basic auth credentials

Table 91. Add card request fields
Path Type Constraints Description

userIdentifier

String

@Own constraint

Sender email address

card

Object

@NotNull

Card detail information

card.expDate

String

@NotNull, @NotEmpty, @ExpDate

Expiration date of card mm/yy

card.cardNo

String

@NotNull, @NotEmpty, @CardNumber, @Length(min=12, max=19), @LuhnCheck

Full sender card number must be between 12-digits and 19-digits

card.description

String

@NotNull, @NotEmpty

Description of the card

card.defaultValue

Boolean

@NotEmpty

Is card default

card.cardHolderFirstName

String

@Optional

Card holder first name

card.cardHolderLastName

String

@Optional

Card holder last name

card.phoneNumber

String

@Optional

Optional phone number. It is useful when Merchant has one database for Senders and Receivers.

12.1.2. Response

200 OK
HTTP Response
HTTP/1.1 200 OK
Set-Cookie: JSESSIONID=B7DEA19F8A81276E0D5582BB835157FC; Path=/; HttpOnly
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 28 Sep 2023 22:22:38 GMT
Content-Length: 45

{
  "status" : "SUCCESS",
  "card_id" : 266
}
Table 92. Response fields
Path Type Description

status

String

Response status

card_id

Number

Unique card identifier

200 OK - Error

HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "CARD_ALREADY_EXISTS",
    "card_id": 4368
}
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "ERROR_CARD_ALREADY_EXISTS_FOR_ANOTHER_USER",
    "card_id": null
}
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "INVALID_CARD_NO",
    "error": {
        "message": "Some information is missing or incorrect."
    }
}
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "CARD_DESC_REQUIRED",
    "error": {
        "message": "Some information is missing or incorrect."
    }
}
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "CARD_DESC_INVALID",
    "error": {
        "message": "Some information is missing or incorrect."
    }
}
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "CARD_LIMIT_REACHED",
    "card_id": null
}
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "CARD_MODIFY_LIMIT_REACHED",
    "card_id": null
}
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "INVALID_CARD_EXP",
    "error": {
        "message": "Some information is missing or incorrect."
    }
}
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "UNKNOWN_ERROR",
    "card_id": null
}
Returned UNKNOWN_ERROR when user email was invalid or missing.

401 UNAUTHORIZED

HTTP/1.1 401 Unauthorized
Content-Type: application/json

{
    "timestamp": "2021-12-22T12:39:53.168+0000",
    "status": 401,
    "error": "Unauthorized",
    "message": "Username or password is not correct",
    "path": "/api/v2/client/send-money"
}
HTTP/1.1 401 Unauthorized
Content-Type: application/json

{
      "timestamp": "2021-12-22T12:39:53.168+0000",
      "status": 401,
      "error": "Unauthorized",
      "message": "ERROR_USER_NOTFOUND",
      "path": "/api/v2/client/send-money"
}

Table 93. Response fields
Path Description

timestamp

Time when request was executed

status

Http response code

error

Http status name

message

Message for response code

path

Path to a specific resource

403 FORBIDDEN
HTTP Response - Error
HTTP/1.1 403 Forbidden
Set-Cookie: JSESSIONID=CDDC8FF73C3600250EF59F3D44777BE0; Path=/; HttpOnly
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 28 Sep 2023 22:22:38 GMT
Content-Length: 141

{
  "timestamp" : 1695939758866,
  "status" : 403,
  "error" : "Forbidden",
  "message" : "No message available",
  "path" : "/client/card"
}

12.2. Update card

PUT /client/cards Content-Type: application/json, Authorization: Basic Auth, API-TOKEN
This method can be used to update card's data for user. This request must have header calling "API-TOKEN" and his value must be the same as token from the Log User method.
*API-TOKEN is required for this method
The API-TOKEN is refreshed each time it is used in the header. The API-TOKEN is refreshed for 30 minutes.

From January 2021, there is an internal functionality to restrict access for the Merchant to specific method. The Fenige employee can disable access to a given endpoint, then the HTTP status 403 FORBIDDEN will be returned. The Merchant will be informed about each access restriction action.

12.2.1. Request

HTTP Request
PUT /client/cards HTTP/1.1
Authorization: Basic dGVzdF9tZXJjaGFudDpwYXNzd29yZA==
API-TOKEN: d94NYa+xqRrazUPzSgYeJ6qR/MzIOb3IzePb7t9sWds=
Content-Type: application/json
Content-Length: 42
Host: java-staging.fenige.pl:8181

{
  "id" : 5688,
  "defaultValue" : true
}
Table 94. Request headers
Name Description

Authorization

Basic auth credentials

API-TOKEN

User’s token to authenticate in service

Table 95. Edit card request fields
Path Type Constraints Description

id

Number

@Not null

Card id

defaultValue

Boolean

@Not Null

Is this card default

12.2.2. Response

200 OK
HTTP Response
HTTP/1.1 200 OK
Set-Cookie: JSESSIONID=24B73148163482848595CFC2CCBB8315; Path=/; HttpOnly
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 28 Sep 2023 22:22:38 GMT
Content-Length: 43

{
  "id" : "5688",
  "status" : "SUCCESS"
}
Table 96. Response fields
Path Type Description

status

String

Response status

id

String

Unique card identifier

200 OK - Error
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json

{
    "id": "43",
    "status": "CANT_FIND_CARD"
}
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "ERROR_INVALID_JSON",
    "error": {
        "message": "Some properties are invalid."
    }
}
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "ERROR_SOMETHING_WRONG",
    "error": {
        "message": "Something went wrong."
    }
}
401 Unauthorized

HTTP/1.1 401 Unauthorized
Content-Type: application/json

{
    "timestamp": "2021-12-22T12:39:53.168+0000",
    "status": 401,
    "error": "Unauthorized",
    "message": "Username or password is not correct",
    "path": "/client/cards"
}
HTTP/1.1 401 Unauthorized
Content-Type: application/json

{
      "timestamp": "2021-12-22T12:39:53.168+0000",
      "status": 401,
      "error": "Unauthorized",
      "message": "ERROR_USER_NOTFOUND",
      "path": "/client/cards"
}

Table 97. Response fields
Path Description

timestamp

Time when request was executed

status

Http response code

error

Http status name

message

Message for response code

path

Path to a specific resource

403 FORBIDDEN
HTTP Response - Error
HTTP/1.1 403 Forbidden
Set-Cookie: JSESSIONID=CDDC8FF73C3600250EF59F3D44777BE0; Path=/; HttpOnly
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 28 Sep 2023 22:22:38 GMT
Content-Length: 141

{
  "timestamp" : 1695939758866,
  "status" : 403,
  "error" : "Forbidden",
  "message" : "No message available",
  "path" : "/client/card"
}

12.3. Get card list

GET /client/cards Content Type: application/json, Authorization: Basic Auth, API-TOKEN
This method can be use to receive list of cards for user. This request must have header calling "API-TOKEN" and his value must be the same as token from the Log User method.
*API-TOKEN is required for this method
The API-TOKEN is refreshed each time it is used in the header. The API-TOKEN is refreshed for 30 minutes.

From January 2021, there is an internal functionality to restrict access for the Merchant to specific method. The Fenige employee can disable access to a given endpoint, then the HTTP status 403 FORBIDDEN will be returned. The Merchant will be informed about each access restriction action.

12.3.1. Request

HTTP Request
GET /client/cards HTTP/1.1
Authorization: Basic dGVzdF9tZXJjaGFudDpwYXNzd29yZA==
API-TOKEN: d94NYa+xqRrazUPzSgYeJ6qR/MzIOb3IzePb7t9sWds=
Host: java-staging.fenige.pl:8181
Table 98. Request headers
Name Description

Authorization

Basic auth credentials

API-TOKEN

User’s token to authenticate in service

12.3.2. Response

200 OK
HTTP Response
HTTP/1.1 200 OK
Set-Cookie: JSESSIONID=43807D1B7411CF24888D02CEE0EF121C; Path=/; HttpOnly
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 28 Sep 2023 22:22:38 GMT
Content-Length: 565

{
  "status" : "SUCCESS",
  "success" : [ {
    "id" : 9480,
    "cardNo" : "0463",
    "bin" : "535167",
    "description" : "Basic debit card",
    "defaultValue" : true,
    "strongVerified" : true,
    "expDate" : "1026",
    "cardHolderFirstName" : "Mark",
    "cardHolderLastName" : "Smith"
  }, {
    "id" : 2537,
    "cardNo" : "9169",
    "bin" : "511796",
    "description" : "Basic debit card",
    "defaultValue" : false,
    "strongVerified" : true,
    "expDate" : "0324",
    "cardHolderFirstName" : "Mark",
    "cardHolderLastName" : "Smith"
  } ]
}
Table 99. Response fields
Path Type Description

status

String

Response status

success[].id

Number

Card id

success[].cardNo

String

Card number

success[].bin

String

Card bin

success[].description

String

Card description

success[].defaultValue

Boolean

Is card default value

success[].strongVerified

Boolean

Is card string verified

success[].cardHolderFirstName

String

Card holder first name

success[].cardHolderLastName

String

Card holder last name

success[].expDate

String

Card expiration date

401 Unauthorized

HTTP/1.1 401 Unauthorized
Content-Type: application/json

{
    "timestamp": "2021-12-22T12:39:53.168+0000",
    "status": 401,
    "error": "Unauthorized",
    "message": "Username or password is not correct",
    "path": "/client/cards"
}
HTTP/1.1 401 Unauthorized
Content-Type: application/json

{
      "timestamp": "2021-12-22T12:39:53.168+0000",
      "status": 401,
      "error": "Unauthorized",
      "message": "ERROR_USER_NOTFOUND",
      "path": "/client/cards"
}

Table 100. Response fields
Path Description

timestamp

Time when request was executed

status

Http response code

error

Http status name

message

Message for response code

path

Path to a specific resource

403 FORBIDDEN
HTTP Response - Error
HTTP/1.1 403 Forbidden
Set-Cookie: JSESSIONID=CDDC8FF73C3600250EF59F3D44777BE0; Path=/; HttpOnly
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 28 Sep 2023 22:22:38 GMT
Content-Length: 141

{
  "timestamp" : 1695939758866,
  "status" : 403,
  "error" : "Forbidden",
  "message" : "No message available",
  "path" : "/client/card"
}

12.4. Delete card

DELETE /client/cards/{cardId} Content Type: application/json, Authorization: Basic Auth, API-TOKEN
This method can be use to delete card of some user.
*API-TOKEN is required for this method
The API-TOKEN is refreshed each time it is used in the header. The API-TOKEN is refreshed for 30 minutes.

From January 2021, there is an internal functionality to restrict access for the Merchant to specific method. The Fenige employee can disable access to a given endpoint, then the HTTP status 403 FORBIDDEN will be returned. The Merchant will be informed about each access restriction action.

12.4.1. Request

HTTP Request
DELETE /client/cards/3086 HTTP/1.1
Authorization: Basic dGVzdF9tZXJjaGFudDpwYXNzd29yZA==
API-TOKEN: d94NYa+xqRrazUPzSgYeJ6qR/MzIOb3IzePb7t9sWds=
Host: java-staging.fenige.pl:8181
Table 101. Request headers
Name Description

Authorization

Basic auth credentials

API-TOKEN

User’s token to authenticate in service

12.4.2. Response

200 OK
HTTP Response
HTTP/1.1 200 OK
Set-Cookie: JSESSIONID=9424A93B1CCF96BB2D13FF7AE52857D2; Path=/; HttpOnly
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 28 Sep 2023 22:22:40 GMT
Content-Length: 26

{
  "status" : "SUCCESS"
}
Table 102. Response fields
Path Type Description

status

String

Response status

200 OK - Error
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "ERROR_CARD_NOT_FOUND",
    "error": {
        "message": "Some information is missing or incorrect."
    }
}
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "CARD_MODIFY_LIMIT_REACHED"
}
401 Unauthorized

HTTP/1.1 401 Unauthorized
Content-Type: application/json

{
    "timestamp": "2021-12-22T12:39:53.168+0000",
    "status": 401,
    "error": "Unauthorized",
    "message": "Username or password is not correct",
    "path": "/client/cards/1234"
}
HTTP/1.1 401 Unauthorized
Content-Type: application/json

{
      "timestamp": "2021-12-22T12:39:53.168+0000",
      "status": 401,
      "error": "Unauthorized",
      "message": "ERROR_USER_NOTFOUND",
      "path": "/client/cards/1234"
}

Table 103. Response fields
Path Description

timestamp

Time when request was executed

status

Http response code

error

Http status name

message

Message for response code

path

Path to a specific resource

403 FORBIDDEN
HTTP Response - Error
HTTP/1.1 403 Forbidden
Set-Cookie: JSESSIONID=CDDC8FF73C3600250EF59F3D44777BE0; Path=/; HttpOnly
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 28 Sep 2023 22:22:38 GMT
Content-Length: 141

{
  "timestamp" : 1695939758866,
  "status" : 403,
  "error" : "Forbidden",
  "message" : "No message available",
  "path" : "/client/card"
}

12.5. Get country for card

POST /client/card/country Content Type: application/json, Authorization: Basic Auth
Method returns country code from which the card is issued.
Received country code is in accordance with ISO 3166-1 Alpha-2

12.5.1. Request

Name Type Validation Description

cardNumber

String

Required

Number of card to verify country

POST /client/card/country HTTP/1.1
Content-Type: application/json
Authorization: Basic eW91cl9tZXJjaGFudDp5b3VyX3Bhc3N3b3Jk
Host: java-staging.fenige.pl:8181

{
  "cardNumber" : "5351672923040463"
}

12.5.2. Response

Response status
Status Description

200 OK

Returned country code from which the card was issued.

200 OK - Error

Returned country code as UNDEFINED when card number is unsupported.

400 - Bad Request

Returned when card number is invalid or missing.

Example HTTP Response
200 OK
HTTP/1.1 200 OK
Content-Type: application/json

{
  "country" : "PL"
}
Name Type Description

country

CountryCode

Code of country from which the card is issued in accordance with ISO 3166-1 Alpha-2

200 OK Error
HTTP/1.1 200 OK
Content-Type: application/json

{
    "country": "UNDEFINED"
}
400 Bad Request
HTTP/1.1 400 Bad Request

{
    "timestamp": 1532339149084,
    "status": 400,
    "error": "Bad Request",
    "exception": "org.springframework.web.bind.MethodArgumentNotValidException",
    "errors": [
        {
            "codes": [
                "NotBlank.cardCountryRequest.cardNumber",
                "NotBlank.cardNumber",
                "NotBlank.java.lang.String",
                "NotBlank"
            ],
            "arguments": [
                {
                    "codes": [
                        "cardCountryRequest.cardNumber",
                        "cardNumber"
                    ],
                    "arguments": null,
                    "defaultMessage": "cardNumber",
                    "code": "cardNumber"
                }
            ],
            "defaultMessage": "may not be empty",
            "objectName": "cardCountryRequest",
            "field": "cardNumber",
            "rejectedValue": "",
            "bindingFailure": false,
            "code": "NotBlank"
        },
        {
            "codes": [
                "NotNull.cardCountryRequest.cardNumber",
                "NotNull.cardNumber",
                "NotNull.java.lang.String",
                "NotNull"
            ],
            "arguments": [
                {
                    "codes": [
                        "cardCountryRequest.cardNumber",
                        "cardNumber"
                    ],
                    "arguments": null,
                    "defaultMessage": "cardNumber",
                    "code": "cardNumber"
                }
            ],
            "defaultMessage": "may not be null",
            "objectName": "cardCountryRequest",
            "field": "cardNumber",
            "rejectedValue": null,
            "bindingFailure": false,
            "code": "NotNull"
        },
        {
            "codes": [
                "LuhnCheck.cardCountryRequest.cardNumber",
                "LuhnCheck.cardNumber",
                "LuhnCheck.java.lang.String",
                "LuhnCheck"
            ],
            "arguments": [
                {
                    "codes": [
                        "cardCountryRequest.cardNumber",
                        "cardNumber"
                    ],
                    "arguments": null,
                    "defaultMessage": "cardNumber",
                    "code": "cardNumber"
                },
                -1,
                2147483647,
                true,
                0
            ],
            "defaultMessage": "invalid card number",
            "objectName": "cardCountryRequest",
            "field": "cardNumber",
            "rejectedValue": "",
            "bindingFailure": false,
            "code": "LuhnCheck"
        },
        {
            "codes": [
                "Size.cardCountryRequest.cardNumber",
                "Size.cardNumber",
                "Size.java.lang.String",
                "Size"
            ],
            "arguments": [
                {
                    "codes": [
                        "cardCountryRequest.cardNumber",
                        "cardNumber"
                    ],
                    "arguments": null,
                    "defaultMessage": "cardNumber",
                    "code": "cardNumber"
                },
                16,
                16
            ],
            "defaultMessage": "card number length must be 16",
            "objectName": "cardCountryRequest",
            "field": "cardNumber",
            "rejectedValue": "",
            "bindingFailure": false,
            "code": "Size"
        }
    ],
    "message": "Validation failed for object='cardCountryRequest'. Error count: 3",
    "path": "/client/card/country"
}

13. Friendly receiver cards

13.1. Add friend card

POST /client/friend-card Content-Type: application/json, Authorization: Basic Auth, API-TOKEN
    Method allows you to register favourite receiver card number and phone number to enable mobile-2-mobile MoneySend transactions. This request must have header calling
"API-TOKEN" and his value must be the same as token from the Log User method. In default limit per user is 5 friend cards, Fenige can configure it per merchant.
*API-TOKEN is required for Friendly receiver cards methods
The API-TOKEN is refreshed each time it is used in the header. The API-TOKEN is refreshed for 30 minutes.

From January 2021, there is an internal functionality to restrict access for the Merchant to specific method. The Fenige employee can disable access to a given endpoint, then the HTTP status 403 FORBIDDEN will be returned. The Merchant will be informed about each access restriction action.

13.1.1. Request

HTTP Request
POST /client/friend-card HTTP/1.1
Authorization: Basic dGVzdF9tZXJjaGFudDpwYXNzd29yZA==
API-TOKEN: d94NYa+xqRrazUPzSgYeJ6qR/MzIOb3IzePb7t9sWds=
Content-Type: application/json
Content-Length: 185
Host: java-staging.fenige.pl:8181

{
  "cardNumber" : "5442013217661428",
  "phoneNumber" : "48570100200",
  "friendData" : {
    "firstName" : "Mark",
    "lastName" : "Smith",
    "email" : "mark.smith@fenige.pl"
  }
}
Table 104. Request headers
Name Description

Authorization

Basic auth credentials

API-TOKEN

User’s token to authenticate in service

Table 105. Add friend card request fields
Path Type Constraints Description

cardNumber

String

@NotNull, @NotEmpty, @CardNumber, @Length(min=12, max=19), @LuhnCheck

Full sender card number must be between 12-digits and 19-digits

phoneNumber

String

Optional

Phone number of friendcard’s holder

friendData.firstName

String

@NotNull, @NotBlank, @Pattern(regexp = "[0-9]+$")

Friendcard’s holder first name

friendData.lastName

String

@NotNull, @NotBlank, @Pattern(regexp = "[0-9]+$")

Friendcard’s holder last name

friendData.email

String

@Email

Sender email address

13.1.2. Response

200 OK
HTTP Response
HTTP/1.1 200 OK
Set-Cookie: JSESSIONID=098EF5937143C90A379E56FA94B81DBC; Path=/; HttpOnly
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 28 Sep 2023 22:22:36 GMT
Content-Length: 63

{
  "status" : "SUCCESS",
  "success" : {
    "id" : 3398
  }
}
Table 106. Response fields
Path Type Description

status

String

Response status from Fenige system

success.id

Number

Friendcard’s id

200 OK - Error validation
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "ERROR_VALIDATION",
    "error": {
        "message": "Some information is missing or incorrect.",
        "errors": [
            {
                "field": "friendCardIn.cardNumber",
                "message": [
                    "may not be empty",
                    "invalid card number",
                    "may not be null"
                ]
            },
            {
                "field": "friendCardIn.friendData",
                "message": [
                    "may not be null"
                ]
            },
            {
                "field": "friendCardIn.cardNumber",
                "message": [
                    "card number length must be 16",
                    "card failed luhn check",
                    "invalid card number"
                ]
            }.
            {
                "field": "friendCardIn.friendData.firstName",
                "message": [
                    "must match \"^[^0-9]+$\""
                ]
            },
            {
                "field": "friendCardIn.friendData.lastName",
                "message": [
                    "must match \"^[^0-9]+$\""
                ]
            },
            {
                "field": "friendCardIn.friendData.firstName",
                "message": [
                    "may not be empty"
                ]
            },
            {
                "field": "friendCardIn.friendData.lastName",
                "message": [
                    "may not be empty"
                ]

        ]
    }
}
200 OK - Error

HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "ERROR_PHONE_ALREADY_EXISTS",
    "card_id": null
}
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "ERROR_WHILE_ADDING_CARD",
    "card_id": null
}
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "ERROR_CARD_ALREADY_EXISTS",
    "card_id": null
}
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "CARD_LIMIT_REACHED",
    "card_id": null
}
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "CARD_MODIFY_LIMIT_REACHED",
    "card_id": null
}
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "ERROR_VALIDATION",
    "card_id": null
}
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "UNKNOWN_ERROR",
    "card_id": null
}

401 UNAUTHORIZED

HTTP/1.1 401 Unauthorized
Content-Type: application/json

{
    "timestamp": "2021-12-22T12:39:53.168+0000",
    "status": 401,
    "error": "Unauthorized",
    "message": "Username or password is not correct",
    "path": "/client/friend-card"
}
HTTP/1.1 401 Unauthorized
Content-Type: application/json

{
      "timestamp": "2021-12-22T12:39:53.168+0000",
      "status": 401,
      "error": "Unauthorized",
      "message": "ERROR_USER_NOTFOUND",
      "path": "/client/friend-card"
}

Table 107. Response fields
Path Description

timestamp

Time when request was executed

status

Http response code

error

Http status name

message

Message for response code

path

Path to a specific resource

13.2. Update friend card

PUT /client/friend-cards/{id} Content Type: application/json, Authorization: Basic Auth, API-TOKEN
This method allows you to edit the friendly receiver phone number and additional card data. This request must have header calling "API-TOKEN" and his value must be the same
as token from the Log User method.

From January 2021, there is an internal functionality to restrict access for the Merchant to specific method. The Fenige employee can disable access to a given endpoint, then the HTTP status 403 FORBIDDEN will be returned. The Merchant will be informed about each access restriction action.

13.2.1. Request

HTTP Request
PUT /client/friend-card/2578 HTTP/1.1
Authorization: Basic dGVzdF9tZXJjaGFudDpwYXNzd29yZA==
API-TOKEN: d94NYa+xqRrazUPzSgYeJ6qR/MzIOb3IzePb7t9sWds=
Content-Type: application/json
Content-Length: 150
Host: java-staging.fenige.pl:8181

{
  "phoneNumber" : "48570100200",
  "friendData" : {
    "firstName" : "Mike",
    "lastName" : "Dawson",
    "email" : "dawson.mike@fenige.pl"
  }
}
Table 108. Request headers
Name Description

Authorization

Basic auth credentials

API-TOKEN

User’s token to authenticate in service

Table 109. Add friend card request fields
Path Type Constraints Description

phoneNumber

String

Optional

Phone number of friendcard’s holder

friendData.firstName

String

@NotNull, @NotBlank, @Pattern(regexp = "[0-9]+$")

Friendcard’s holder first name

friendData.lastName

String

@NotNull, @NotBlank, @Pattern(regexp = "[0-9]+$")

Friendcard’s holder last name

friendData.email

String

@Email

Sender email address

13.2.2. Response

200 OK
HTTP Response
HTTP/1.1 200 OK
Set-Cookie: JSESSIONID=440ACC4347B3E41AEB6C7956B546F882; Path=/; HttpOnly
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 28 Sep 2023 22:22:37 GMT
Content-Length: 63

{
  "status" : "SUCCESS",
  "success" : {
    "id" : 1091
  }
}
Table 110. Response fields
Path Type Description

status

String

Response status from Fenige system

success.id

Number

Friendcard’s id

401 UNAUTHORIZED

HTTP/1.1 401 Unauthorized
Content-Type: application/json

{
    "timestamp": "2021-12-22T12:39:53.168+0000",
    "status": 401,
    "error": "Unauthorized",
    "message": "Username or password is not correct",
    "path": "/client/friend-card/6296"
}
HTTP/1.1 401 Unauthorized
Content-Type: application/json

{
      "timestamp": "2021-12-22T12:39:53.168+0000",
      "status": 401,
      "error": "Unauthorized",
      "message": "ERROR_USER_NOTFOUND",
      "path": "/client/friend-card/6296"
}

Table 111. Response fields
Path Description

timestamp

Time when request was executed

status

Http response code

error

Http status name

message

Message for response code

path

Path to a specific resource

13.3. Delete friend card

DELETE /client/friend-cards/{id} Content Type: application/json, Authorization: Basic Auth, API-TOKEN
This method can be use to delete friend card of some user. This request must have header calling "API-TOKEN" and his value must be the same as token from the Log User method.

From January 2021, there is an internal functionality to restrict access for the Merchant to specific method. The Fenige employee can disable access to a given endpoint, then the HTTP status 403 FORBIDDEN will be returned. The Merchant will be informed about each access restriction action.

13.3.1. Request

HTTP Request
DELETE /client/friend-card/7171 HTTP/1.1
Authorization: Basic dGVzdF9tZXJjaGFudDpwYXNzd29yZA==
API-TOKEN: d94NYa+xqRrazUPzSgYeJ6qR/MzIOb3IzePb7t9sWds=
Host: java-staging.fenige.pl:8181
Table 112. Request headers
Name Description

Authorization

Basic auth credentials

API-TOKEN

User’s token to authenticate in service

13.3.2. Response

200 OK
HTTP Response
HTTP/1.1 200 OK
Set-Cookie: JSESSIONID=6E8F9BF1DC1D7529FC9790CBA0903CD5; Path=/; HttpOnly
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 28 Sep 2023 22:22:37 GMT
Content-Length: 26

{
  "status" : "SUCCESS"
}
Table 113. Response fields
Path Type Description

status

String

Response status

200 OK - Error

HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "CARD_MODIFY_LIMIT_REACHED"
}
HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "ERROR_CARD_NOT_FOUND",
    "error": {
        "message": "Some information is missing or incorrect."
    }
}

401 - Unauthorized

HTTP/1.1 401 Unauthorized
Content-Type: application/json

{
    "timestamp": "2021-12-22T12:39:53.168+0000",
    "status": 401,
    "error": "Unauthorized",
    "message": "Username or password is not correct",
    "path": "/client/friend-card/28"
}
HTTP/1.1 401 Unauthorized
Content-Type: application/json

{
      "timestamp": "2021-12-22T12:39:53.168+0000",
      "status": 401,
      "error": "Unauthorized",
      "message": "ERROR_USER_NOTFOUND",
      "path": "/client/friend-card/28"
}

Table 114. Response fields
Path Description

timestamp

Time when request was executed

status

Http response code

error

Http status name

message

Message for response code

path

Path to a specific resource

13.4. Get friend card list

GET /client/friend-card Content Type: application/json, Authorization: Basic Auth, API-TOKEN
This method can be use to receive list of friend cards for user.

From January 2021, there is an internal functionality to restrict access for the Merchant to specific method. The Fenige employee can disable access to a given endpoint, then the HTTP status 403 FORBIDDEN will be returned. The Merchant will be informed about each access restriction action.

13.4.1. Request

HTTP Request
GET /client/friend-card HTTP/1.1
Authorization: Basic dGVzdF9tZXJjaGFudDpwYXNzd29yZA==
API-TOKEN: d94NYa+xqRrazUPzSgYeJ6qR/MzIOb3IzePb7t9sWds=
Host: java-staging.fenige.pl:8181
Table 115. Request headers
Name Description

Authorization

Basic auth credentials

API-TOKEN

User’s token to authenticate in service

13.4.2. Response

200 OK
HTTP Response
HTTP/1.1 200 OK
Set-Cookie: JSESSIONID=E5C3B14FCC2ABA756EE7E38A86E54E1A; Path=/; HttpOnly
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 28 Sep 2023 22:22:37 GMT
Content-Length: 530

{
  "status" : "SUCCESS",
  "success" : [ {
    "id" : 6038,
    "cardNumber" : "XXXX-XXXX-XXXX-2459",
    "bin" : "733754",
    "phoneNumber" : "48214815045",
    "data" : {
      "firstName" : "Emily",
      "lastName" : "Parker",
      "email" : "emily.parker@fenige.pl"
    }
  }, {
    "id" : 9754,
    "cardNumber" : "XXXX-XXXX-XXXX-3390",
    "bin" : "460710",
    "phoneNumber" : "48039402033",
    "data" : {
      "firstName" : "Emily",
      "lastName" : "Parker",
      "email" : "emily.parker@fenige.pl"
    }
  } ]
}
Table 116. Response fields
Path Type Description

status

String

Response status from Fenige system

success[].id

Number

ID in Fenige system

success[].phoneNumber

String

Friendcard holder’s phone number

success[].data.firstName

String

Friendcard holder’s first name

success[].data.lastName

String

Friendcard holder’s last name

success[].data.email

String

Friendcard holder’s email address

success[].cardNumber

String

Full friendcard’s number must be between 12-digits and 19-digits

success[].bin

String

Six-digits bin of friendcard’s number

401 - Unauthorized
HTTP Response
HTTP/1.1 401 Unauthorized
Content-Type: application/json

{
    "timestamp": 1532606583290,
    "status": 401,
    "error": "Unauthorized",
    "message": "Unable to authorize merchant",
    "path": "/client/friend-card"
}
Table 117. Response fields
Path Description

timestamp

Time when request was executed

status

Http response code

error

Http status name

message

Message for response code

path

Path to a specific resource

14. Global Delayed receivers

14.1. Add Global Delayed Receiver

POST /client/delayed-receiver Content-Type: application/json, Authorization: Basic Auth
Method allows you to store favorite delayed receivers users identified by e-mail address or phone numbers and use them as DATACORE transaction receivers.

14.1.1. Request

Mastercard
POST /client/delayed-receiver HTTP/1.1
Content-Type: application/json
Authorization: Basic dXNlcjpwYXNzd29yZA==
Host: java-staging.fenige.pl:8181

{
    "firstName" : "John",
    "lastName": "Parker",
    "phoneNumber": "48123456788",
    "email": "test@fenige.pl",
    "cardNumber" : "5117964247989167"
}
Table 118. Request fields
Name Type Validation Description

firstName

String

Required
Cannot be the same as lastName
Cannot contains all the same characters

First name of delayed receiver

lastName

String

Required
Cannot be the same as firstName
Cannot contains all the same characters

Last name of delayed receiver

phoneNumber

String

Optional alternately with email

Delayed receiver phone identifier

email

String

Optional alternately with phone

Delayed receiver email identifier

cardNumber

String

Required

Delayed receiver card number

Visa
POST /client/delayed-receiver HTTP/1.1
Content-Type: application/json
Authorization: Basic dXNlcjpwYXNzd29yZA==
Host: java-staging.fenige.pl:8181

{
    "firstName" : "John",
    "lastName": "Parker",
    "phoneNumber": "48123456788",
    "email": "test@fenige.pl",
    "cardNumber" : "4762969630023394"
}
Table 119. Request fields
Name Type Validation Description

firstName

String

Required
Cannot be the same as lastName
Cannot contains all the same characters

First name of delayed receiver

lastName

String

Required
Cannot be the same as firstName
Cannot contains all the same characters

Last name of delayed receiver

phoneNumber

String

Optional alternately with email

Delayed receiver phone identifier

email

String

Optional alternately with phone

Delayed receiver email identifier

cardNumber

String

Required

Delayed receiver card number

14.1.2. Response

Response status
Status Description

200 OK

Returned when delayed receiver was successfully added.

200 OK - Error validation

Returned list of field name which has validation errors.

409 CONFLICT

Returned when delayed receiver already exists.

Example HTTP Response
200 OK
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: Mon, 09 Nov 2020 13:14:29 GMT
Date: Mon, 09 Nov 2020 13:14:29 GMT

{
    "status": "S0000",
    "message": "SUCCESS",
    "httpStatus": "OK",
    "id": 1
}
Table 120. Response fields
Name Type Description

id

Long

Added delayed receiver id

200 OK - Error validation
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: Mon, 09 Nov 2020 13:14:29 GMT
Date: Mon, 09 Nov 2020 13:14:29 GMT

{
    "status": "ERROR_VALIDATION",
    "error": {
        "message": "Some information is missing or incorrect.",
        "errors": [
            {
                "field": "addGlobalDelayedReceiverRequest.email",
                "message": [
                    "length must be between 1 and 128",
                    "must be null",
                    "must be a well-formed email address",
                    "must not be blank"
                ]
            },
             {
                "field": "addGlobalDelayedReceiverRequest.phoneNumber",
                "message": [
                    "must not be null",
                    "must not be empty"
                ]
            },
            {
                "field": "addGlobalDelayedReceiverRequest.cardNumber",
                "message": [
                    "card number must be numeric",
                    "card number length must be between 12 and 19",
                    "must not be blank",
                    "invalid card number"
                ]
            },
            {
                "field": "addGlobalDelayedReceiverRequest.lastName",
                "message": [
                    "length must be between 2 and 20",
                    "must not be blank",
                    "must match \"^[^0-9]+$\"",
                    "invalid lastName contains all the same characters",
                    "invalid firstName and lastName the same"
                ]
            },
            {
                "field": "addGlobalDelayedReceiverRequest.firstName",
                "message": [
                    "must match \"^[^0-9]+$\"",
                    "length must be between 2 and 12",
                    "must not be blank",
                    "invalid firstName contains all the same characters",
                    "invalid firstName and lastName the same"
                ]
            }
        ]
    }
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: Mon, 09 Nov 2020 13:14:29 GMT
Date: Mon, 09 Nov 2020 13:14:29 GMT

{
    "status": "ERROR_VALIDATION",
    "error": {
        "message": "Some information is missing or incorrect.",
        "errors": [
            {
                "field": "addGlobalDelayedReceiverRequest.email",
                "message": [
                    "Phone number or email must be present"
                ]
            },
            {
                "field": "addGlobalDelayedReceiverRequest.phoneNumber",
                "message": [
                    "Phone number or email must be present"
                ]
            }
        ]
    }
}
409 CONFLICT
HTTP Response
HTTP/1.1 E0202
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: Mon, 09 Nov 2020 13:14:29 GMT
Date: Mon, 09 Nov 2020 13:14:29 GMT

{
    "status": "E0202",
    "message": "Delayed receiver already exists",
    "httpStatus": "CONFLICT"
}

14.2. Get Global Delayed receiver

GET /client/delayed-receiver/?phoneNumber=48123456789 or /client/delayed-receiver/?email=email@fenige.pl Content-Type: application/json, Authorization: Basic Auth
Method allows you to get your stored favorite receivers and their cards identified by e-mail address or phone numbers and use them as DELAYED transaction receivers.

14.2.1. Request

/client/delayed-receiver/?phoneNumber=48123456789
GET /client/delayed-receiver/?phoneNumber=48123456789 HTTP/1.1
Content-Type: application/json
Authorization: Basic dXNlcjpwYXNzd29yZA==
Host: java-staging.fenige.pl:8181
Name Type Validation Description

phoneNumber

String

Required when email is empty

Delayed receiver phone identifier

email

String

Required when phoneNumber is empty

Delayed receiver email identifier

14.2.2. Response

Response status
Status Description

200 OK

Returned when delayed receiver was successfully checked out.

404 NOT FOUND

Returned when delayed receiver was not found.

Example HTTP Response
200 OK
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: Mon, 09 Nov 2020 13:14:29 GMT
Date: Mon, 09 Nov 2020 13:14:29 GMT

{
    "status": "S0000",
    "message": "SUCCESS",
    "httpStatus": "OK",
    "firstName": "John",
    "lastName": "Parker",
    "phoneNumber": "48123456788",
    "email": "test@fenige.pl",
    "receiverUuid": "c70d4a62-7e2c-49fb-a856-738207dd7735",
    "delayedReceiverCard": "511796******9167"
}
Table 121. Response fields
Name Type Description

status

String

Response status from Fenige system

message

String

Description of status from Fenige system

httpStatus

String

Http status of response

firstName

String

Delayed receiver first name

lastName

String

Delayed receiver last name

phoneNumber

String

Delayed receiver phone number

email

String

Delayed receiver email

receiverUuid

String

Delayed receiver Uuid

delayedReceiverCard

String

Delayed receiver card

404 NOT FOUND
HTTP Response
HTTP/1.1 E0201
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: Mon, 09 Nov 2020 13:14:29 GMT
Date: Mon, 09 Nov 2020 13:14:29 GMT

{
    "status": "E0201",
    "message": "Can't find delayed receiver",
    "httpStatus": "NOT_FOUND"
}

14.3. Delete Global Delayed receiver

DELETE /client/delayed-receiver/?phoneNumber=48123456789 or /client/delayed-receiver/?email=email@fenige.pl Content-Type: application/json, Authorization: Basic Auth
Method allows you to remove your stored favorite receiver from Global Receivers Database and their cards identified by e-mail address or phone numbers.

14.3.1. Request

/client/delayed-receiver/?phoneNumber=48123456789
DELETE /client/delayed-receiver/?phoneNumber=48123456788 HTTP/1.1
Content-Type: application/json
Authorization: Basic dXNlcjpwYXNzd29yZA==
Host: java-staging.fenige.pl:8181
Name Type Validation Description

phoneNumber

String

Required when email is empty

Delayed receiver phone identifier

email

String

Required when phoneNumber is empty

Delayed receiver email identifier

14.3.2. Response

Response status
Status Description

200 OK

Returned when delayed receiver was successfully removed.

404 NOT FOUND

Returned when delayed receiver was not found.

Example HTTP Response
200 OK
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: Mon, 09 Nov 2020 13:14:29 GMT
Date: Mon, 09 Nov 2020 13:14:29 GMT

{
    "status": "S0000",
    "message": "SUCCESS",
    "httpStatus": "OK"
}
Table 122. Response fields
Name Type Description

status

String

Status of delete operation

message

String

Description of status

404 NOT FOUND
HTTP Response
HTTP/1.1 E0201
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: Mon, 09 Nov 2020 13:14:29 GMT
Date: Mon, 09 Nov 2020 13:14:29 GMT

{
    "status": "E0201",
    "message": "Can't find delayed receiver",
    "httpStatus": "NOT_FOUND"
}

15. Models

15.1. Senders

15.1.1. SENDER PLAIN

Path Type Validation Rule Description

type

String

Required

@NotNull

For this configuration the value of this field must be "PLAIN", otherwise request will be declined

firstName

String

Required

@NotNull
@NotBlank
@Length(min = 2, max = 35)
@Pattern(regexp = "^[^0-9]+$")
FirstName cannot be the same as lastName
FirstName cannot contains all the same characters

Sender first name

lastName

String

Required

@NotNull
@NotBlank
@Length(min = 2, max = 35)
@Pattern(regexp = "^[^0-9]+$")
LastName cannot be the same as firstName
LastName cannot contains all the same characters

Sender last name

street

String

Required

@NotNull
@NotBlank
@Length(min = 1, max = 55)
@Pattern(regexp = "^[^\\s\](\\s[^\\s]+)*$")

Sender street

houseNumber

String

Required

@NotNull
@NotBlank
@Length(min = 1, max = 10)
@Pattern(regexp = "[1-9][0-9]{0,4}(?:[A-z]?[0-9]{0,4})?((?:[-/ ][1-9]?[A-z]?[0-9]{0,4})*[A-z]?)?$")

Sender house number

city

String

Required

@NotNull
@NotBlank
@Length(min = 1, max = 55)

Sender city

postalCode

String

Required

@NotNull
@NotBlank
@Length(min = 1, max = 10)
@Pattern(regexp = "^(?=.*\d)(?=.*[1-9,a-zA-Z]).{1,10}$"

Sender postal code

flatNumber

String

Optional

@Length(min = 1, max = 5) @Pattern(regexp = "^[a-zA-Z0-9 ]*$")

Sender flat number

email

String

Required

@NotNull
@NotBlank
@Length(min = 1, max = 128)
@Pattern(regexp = "^(?:[A-Za-z0-9]{1,}[\\.!#$%&'*/=?`{|}~^\\-_]?){1,}[A-Za-z0-9_-]{1,}@((?:[a-zA-Z0-9](?:-[a-zA-Z0-9]+)*\\.){1,}[a-zA-Z]{2,})$")
Email cannot be the same for 2 different persons sender and receiver

Sender email

personalId

String

Optional

Sender identification number

cardNumber

String

Required

@NotNull
@NotBlank
@Length(min = 12, max = 19)
@LuhnCheck

Sender card number

expirationDate

String

Required

@NotNull
@NotBlank

Sender card expiration date. Example: 11/18

currency

String

Required

@NotNull
@Length(min = 3, max =3)

Currency for transaction (in accordance with ISO-4217). Example: PLN

birthDate

String

Optional

@Pattern("yyyy-MM-dd")

Date of birth sender

country

String

Optional or Required for USA/CAN card

@Length(min = 2, max = 2)

Country code in accordance with ISO 3166-1 Alpha-2. Is required for terminal crypto

province

String

Optional or Required for USA/CAN card

@NotNull
@NotBlank
@Length(min = 2, max = 2)

USA state or CAN province code. Field is required when card country is USA or CAN.

STANDARD
"sender" : {
    "type" : "PLAIN",
    "firstName" : "Mark",
    "lastName" : "Smith",
    "street" : "Olszewskiego",
    "houseNumber" : "17A",
    "city" : "Lublin",
    "postalCode" : "20-400",
    "flatNumber" : "2",
    "email" : "senderEmail@fenige.pl",
    "birthDate" : "2023-10-26",
    "cardNumber" : "5117964247989169",
    "expirationDate" : "03/26",
    "personalId" : "AGC688910",
    "currency" : "PLN"
}
USA/CAN TRANSACTIONS
"sender" : {
    "type" : "PLAIN",
    "firstName" : "Mark",
    "lastName" : "Smith",
    "street" : "Gates Court",
    "houseNumber" : "82",
    "city" : "Brooklyn",
    "postalCode" : "11211",
    "flatNumber" : "2",
    "email" : "senderdocs@fenige.pl",
    "birthDate" : "2023-10-26",
    "cardNumber" : "5448424719416233",
    "expirationDate" : "03/26",
    "personalId" : "AGC688910",
    "country" : "US",
    "province" : "NY",
    "currency" : "USD"
}

15.1.2. SENDER CASH

Path Type Validation Rule Description

type

String

Required

@NotNull
@NotBlank

For this configuration the value of this field must be "CASH", otherwise request will be declined

firstName

String

Required

@NotNull
@NotBlank
@Length(min = 2, max = 35)
@Pattern(regexp = "^[^0-9]+$")
FirstName cannot be the same as lastName
FirstName cannot contains all the same characters

Sender first name

lastName

String

Required

@NotNull
@NotBlank
@Length(min = 2, max = 35)
@Pattern(regexp = "^[^0-9]+$")
LastName cannot be the same as firstName
LastName cannot contains all the same characters

Sender last name

street

String

Required

@NotNull
@NotBlank
@Length(min = 1, max = 55)
@Pattern(regexp = "^[^\\s\](\\s[^\\s]+)*$")

Sender street

houseNumber

String

Required

@NotNull
@NotBlank
@Length(min = 1, max = 10)
@Pattern(regexp = "[1-9][0-9]{0,4}(?:[A-z]?[0-9]{0,4})?((?:[-/ ][1-9]?[A-z]?[0-9]{0,4})*[A-z]?)?$")

Sender house number

city

String

Required

@NotNull
@NotBlank
@Length(min = 1, max = 55)

Sender city

postalCode

String

Required

@NotNull
@NotBlank
@Length(min = 1, max = 10)
@Pattern(regexp = "^(?=.*\d)(?=.*[1-9,a-zA-Z]).{1,10}$")

Sender postal code

country

String

Required

@NotNull
@NotBlank
@Length(min = 2, max = 2)

Sender country code in accordance with ISO 3166-1 Alpha-2

province

String

Optional or Required for USA/CAN card

@NotNull
@NotBlank
@Length(min = 2, max = 2)

USA state or CAN province code. Field is required when card country is USA or CAN.

flatNumber

String

Optional

@Length(min = 1, max = 5)

Sender flat number

email

String

Optional

@Length(min = 1, max = 128)
@Pattern(regexp = "^(?:[A-Za-z0-9]{1,}[\\.!#$%&'*/=?`{|}~^\\-_]?){1,}[A-Za-z0-9_-]{1,}@((?:[a-zA-Z0-9](?:-[a-zA-Z0-9]+)*\\.){1,}[a-zA-Z]{2,})$")
Email cannot be the same for 2 different persons sender and receiver

Sender email

personalId

String

Optional

Sender identification number

STANDARD
"sender" : {
    "type" : "CASH",
    "firstName" : "Mark",
    "lastName" : "Smith",
    "street" : "Olszewskiego",
    "houseNumber" : "17A",
    "city" : "Lublin",
    "postalCode" : "20-400",
    "flatNumber" : "2",
    "email" : "senderEmail@fenige.pl",
    "personalId" : "AGC688910",
    "country" : "PL"
}
USA/CAN TRANSACTIONS
"sender" : {
    "type" : "CASH",
    "firstName" : "Mark",
    "lastName" : "Smith",
    "street" : "Olszewskiego",
    "houseNumber" : "17A",
    "city" : "Lublin",
    "postalCode" : "20-400",
    "flatNumber" : "2",
    "email" : "senderEmail@fenige.pl",
    "personalId" : "AGC688910",
    "country" : "US",
    "province" : "NY"
}

15.1.3. SENDER DATACORE

Path Type Validation Rule Description

type

String

Required

@NotNull
@NotBlank

For this configuration the value of this field must be "DATACORE", otherwise request will be declined

firstName

String

Required

@NotNull
@NotBlank
@Length(min = 2, max = 35)
@Pattern(regexp = "^[^0-9]+$")
FirstName cannot be the same as lastName
FirstName cannot contains all the same characters

Sender first name

lastName

String

Required

@NotNull
@NotBlank
@Length(min = 2, max = 35)
@Pattern(regexp = "^[^0-9]+$")
LastName cannot be the same as firstName
LastName cannot contains all the same characters

Sender last name

street

String

Required

@NotNull
@NotBlank
@Length(min = 1, max = 55)
@Pattern(regexp = "^[^\\s\](\\s[^\\s]+)*$")

Sender street

houseNumber

String

Required

@NotNull
@NotBlank
@Length(min = 1, max = 10)
@Pattern(regexp = "[1-9][0-9]{0,4}(?:[A-z]?[0-9]{0,4})?((?:[-/ ][1-9]?[A-z]?[0-9]{0,4})*[A-z]?)?$")

Sender house number

city

String

Required

@NotNull
@NotBlank
@Length(min = 1, max = 55)

Sender city

postalCode

String

Required

@NotNull
@NotBlank
@Length(min = 1, max = 10)
@Pattern(regexp = "^(?=.*\d)(?=.*[1-9,a-zA-Z]).{1,10}$"

Sender postal code

flatNumber

String

Optional

@Length(min = 1, max = 5)

Sender flat number

cardId

Long

Required

@NotNull

Sender card id

email

String

Optional

@Length(min = 1, max = 128)
@Pattern(regexp = "^(?:[A-Za-z0-9]{1,}[\\.!#$%&'*/=?`{|}~^\\-_]?){1,}[A-Za-z0-9_-]{1,}@((?:[a-zA-Z0-9](?:-[a-zA-Z0-9]+)*\\.){1,}[a-zA-Z]{2,})$")
Email cannot be the same for 2 different persons sender and receiver

Sender email

personalId

String

Optional

Sender identification number

currency

String

Required

@Length(min = 3, max = 3)

Currency for transaction. Example: PLN

"sender" : {
    "type" : "DATACORE",
    "firstName" : "Mark",
    "lastName" : "Smith",
    "street" : "Olszewskiego",
    "houseNumber" : "17A",
    "city" : "Lublin",
    "postalCode" : "20-400",
    "flatNumber" : "2",
    "email" : "senderEmail@fenige.pl",
    "birthDate" : "2023-10-26",
    "cardId" : 3574,
    "currency" : "PLN"
}

15.1.4. SENDER BLIK

Path Type Validation Rule Description

type

String

Required

@NotNull
@NotBlank

For this configuration the value of this field must be "BLIK", otherwise request will be declined

firstName

String

Required

@NotNull
@NotBlank
@Length(min = 2, max = 35)
@Pattern(regexp = "^[^0-9]+$")
FirstName cannot be the same as lastName
FirstName cannot contains all the same characters

Sender first name

lastName

String

Required

@NotNull
@NotBlank
@Length(min = 2, max = 35)
@Pattern(regexp = "^[^0-9]+$")
LastName cannot be the same as firstName
LastName cannot contains all the same characters

Sender last name

street

String

Required

@NotNull
@NotBlank
@Length(min = 1, max = 55)
@Pattern(regexp = "^[^\\s\](\\s[^\\s]+)*$")

Sender street

houseNumber

String

Required

@NotNull
@NotBlank
@Length(min = 1, max = 10)
@Pattern(regexp = "[1-9][0-9]{0,4}(?:[A-z]?[0-9]{0,4})?((?:[-/ ][1-9]?[A-z]?[0-9]{0,4})*[A-z]?)?$")

Sender house number

city

String

Required

@NotNull
@NotBlank
@Length(min = 1, max = 55)

Sender city

postalCode

String

Required

@NotNull
@NotBlank
@Length(min = 1, max = 10)
@Pattern(regexp = "^(?=.*\d)(?=.*[1-9,a-zA-Z]).{1,10}$")

Sender postal code

flatNumber

String

Optional

@Length(min = 1, max = 5)

Sender flat number

country

String

Required

@NotNull
@NotBlank
@Length(min = 2, max = 2)

Sender country code in accordance with ISO 3166-1 Alpha-2

email

String

Optional

@Length(min = 1, max = 128)
@Pattern(regexp = "^(?:[A-Za-z0-9]{1,}[\\.!#$%&'*/=?`{|}~^\\-_]?){1,}[A-Za-z0-9_-]{1,}@((?:[a-zA-Z0-9](?:-[a-zA-Z0-9]+)*\\.){1,}[a-zA-Z]{2,})$")
Email cannot be the same for 2 different persons sender and receiver

Sender email

personalId

String

Optional

Sender identification number

currency

String

Required

@NotNull
@Length(min = 3, max =3)

Currency for transaction, BLIK only sppurt: PLN

redirectUrlAuthorized

String

Required

@Must be a well-formed URL, @Must not be null

User redirect URL after the transaction is authorized.

redirectUrlDenied

String

Required

@Must be a well-formed URL, @Must not be null

User redirect URL after the transaction is denied.

firstDescriptionLine

String

Optional

@Length must be between 1 and 35 inclusive, @Must not be blank

Description for order. It will be displayed on the BLIK website. 4 lines of description can be provided

secondDescriptionLine

String

Optional

@Length must be between 1 and 35 inclusive, @Must not be blank

Second line of description.

thirdDescriptionLine

String

Optional

@Length must be between 1 and 35 inclusive, @Must not be blank

Third line of description.

fourthDescriptionLine

String

Optional

@Length must be between 1 and 35 inclusive, @Must not be blank

Fourth line of description. Should contain shop address.

"sender": {
    "type": "BLIK",
    "firstName": "Mark",
    "lastName": "Smith",
    "street": "Olszewskiego",
    "houseNumber": "10",
    "city": "Lublin",
    "postalCode": "20-481",
    "flatNumber" : "2",
    "country" : "PL",
    "email" : "senderEmail@fenige.pl",
    "personalId" : "AGC688910",
    "currency" : "PLN",
    "firstDescriptionLine" : "Shop description",
    "secondDescriptionLine" : "Second line of description",
    "thirdDescriptionLine" : "Third line of description",
    "fourthDescriptionLine" : "https://ecom-staging.fenige.pl/",
    "redirectUrlAuthorized" : "https://ecom-staging.fenige.pl/",
    "redirectUrlDenied" : "https://ecom-staging.fenige.pl/"
}

15.2. Receivers

15.2.1. RECEIVER PLAIN

Path Type Validation Rule Description

type

String

Required

@NotNull
@NotBlank

For this configuration the value of this field must be "PLAIN", otherwise request will be declined

firstName

String

Required

@NotNull
@NotBlank
@Length(min = 2, max = 35)
@Pattern(regexp = "^[^0-9]+$")
FirstName cannot be the same as lastName
FirstName cannot contains all the same characters

Receiver first name

lastName

String

Required

@NotNull
@NotBlank
@Length(min = 2, max = 35)
@Pattern(regexp = "^[^0-9]+$")
LastName cannot be the same as firstName
LastName cannot contains all the same characters

Receiver last name

cardNumber

String

Required

@NotNull
@NotBlank,
@Length(min = 12, max = 19)
@LuhnCheck

Receiver card number

street

String

Optional

@Length(min = 1, max = 55)
@Pattern(regexp = "^[^\\s\](\\s[^\\s]+)*$")

Receiver street

houseNumber

String

Optional

@Length(min = 1, max = 10)
@Pattern(regexp = "[1-9][0-9]{0,4}(?:[A-z]?[0-9]{0,4})?((?:[-/ ][1-9]?[A-z]?[0-9]{0,4})*[A-z]?)?$")

Receiver house number

city

String

Optional

@Length(min = 1, max = 55)

Receiver city

postalCode

String

Optional

@Length(min = 1, max = 10)
@Pattern(regexp = "^(?=.*\d)(?=.*[1-9,a-zA-Z]).{1,10}$"

Receiver postal code

flatNumber

String

Optional

@Length(min = 1, max = 5)
@Pattern(regexp = "^[a-zA-Z0-9 ]*$")

Receiver flat number

email

String

Optional

@Length(min = 1, max = 128)
@Pattern(regexp = "^(?:[A-Za-z0-9]{1,}[\\.!#$%&'*/=?`{|}~^\\-_]?){1,}[A-Za-z0-9_-]{1,}@((?:[a-zA-Z0-9](?:-[a-zA-Z0-9]+)*\\.){1,}[a-zA-Z]{2,})$")
Email cannot be the same for 2 different persons sender and receiver

Receiver email

currency

String

Required

@Length(min = 3, max = 3)

Currency for transaction. Example: PLN

birthDate

String

Optional

@Pattern("yyyy-MM-dd")

Date of birth sender

countryOfResidence

String

Optional

@Length(min = 2, max = 2)

Country code in accordance with ISO 3166-1 Alpha-2. Is required for terminal crypto

"receiver" : {
    "type" : "PLAIN",
    "firstName" : "Rob",
    "lastName" : "Jackson",
    "cardNumber" : "5117964247989169",
    "currency" : "PLN",
    "birthDate": "1995-03-16",
    "countryOfResidence" : "PL"
}

15.2.2. RECEIVER DATACORE

Path Type Validation Rule Description

type

String

Required

@NotNull
@NotBlank

For this configuration the value of this field must be "DATACORE", otherwise request will be declined

firstName

String

Required

@NotNull
@NotBlank
@Length(min = 2, max = 35)
@Pattern(regexp = "^[^0-9]+$")
FirstName cannot be the same as lastName
FirstName cannot contains all the same characters

Receiver first name

lastName

String

Required

@NotNull
@NotBlank
@Length(min = 2, max = 35)
@Pattern(regexp = "^[^0-9]+$")
LastName cannot be the same as firstName
LastName cannot contains all the same characters

Receiver last name

cardId

Long

Conditional - required when friendCardId is not present

@NotNull

Receiver id

friendCardId

Long

Conditional - required when cardId is not present

@NotNull

Receiver id

email

String

Required

@NotNull
@NotBlank
@Length(min = 1, max = 128)
@Pattern(regexp = "^(?:[A-Za-z0-9]{1,}[\\.!#$%&'*?`{|}~^\\-_]?){1,}[A-Za-z0-9_-]{1,}@((?:[a-zA-Z0-9](?:-[a-zA-Z0-9]+)*\\.){1,}[a-zA-Z]{2,})$")
Email cannot be the same for 2 different persons sender and receiver

Receiver email

currency

String

Required

@Length(min = 3, max = 3)

Currency for transaction. Example: PLN

countryOfResidence

String

Optional

@Length(min = 2, max = 2)

Country code in accordance with ISO 3166-1 Alpha-2. Is required for terminal crypto

"receiver" : {
    "type" : "DATACORE",
    "firstName" : "Rob",
    "lastName" : "Jackson",
    "cardId": 5435,
    "email" : "senderdocs@fenige.pl",
    "currency" : "PLN",
    "countryOfResidence" : "PL"
}

15.2.3. RECEIVER PHONE

Path Type Validation Rule Description

type

String

Required

@NotNull
@NotBlank

For this configuration the value of this field must be "PHONE" otherwise request will be declined

firstName

String

Required

@NotNull
@NotBlank
@Length(min = 2, max = 35)
@Pattern(regexp = "^[^0-9]+$")
FirstName cannot be the same as lastName
FirstName cannot contains all the same characters

Receiver first name

lastName

String

Required

@NotNull
@NotBlank
@Length(min = 2, max = 35)
@Pattern(regexp = "^[^0-9]+$")
LastName cannot be the same as firstName
LastName cannot contains all the same characters

Receiver last name

phoneNumber

String

Required

@NotNull
@NotBlank
must match "[0-9]+"

Receiver phone number

street

String

Optional

@Length(min = 1, max = 55)
@Pattern(regexp = "^[^\\s\](\\s[^\\s]+)*$")

Receiver street

houseNumber

String

Optional

@Length(min = 1, max = 10)
@Pattern(regexp = "[1-9][0-9]{0,4}(?:[A-z]?[0-9]{0,4})?((?:[-/ ][1-9]?[A-z]?[0-9]{0,4})*[A-z]?)?$")

Receiver house number

city

String

Optional

@Length(min = 1, max = 55)

Receiver city

postalCode

String

Optional

@Length(min = 1, max = 10)
@Pattern(regexp = "^(?=.*\d)(?=.*[1-9,a-zA-Z]).{1,10}$"

Receiver postal code

flatNumber

String

Optional

@Length(min = 1, max = 5)
@Pattern(regexp = "^[a-zA-Z0-9 ]*$")

Receiver flat number

email

String

Optional

@Length(min = 1, max = 128)
@Pattern(regexp = "^(?:[A-Za-z0-9]{1,}[\\.!#$%&'*/=?`{|}~^\\-_]?){1,}[A-Za-z0-9_-]{1,}@((?:[a-zA-Z0-9](?:-[a-zA-Z0-9]+)*\\.){1,}[a-zA-Z]{2,})$")
Email cannot be the same for 2 different persons sender and receiver

Receiver email

currency

String

Required

@NotNull @Length(min = 3, max = 3)

Currency for transaction. Example: PLN

birthDate

String

Optional

@Pattern("yyyy-MM-dd")

Date of birth sender

countryOfResidence

String

Optional

@Length(min = 2, max = 2)

Country code in accordance with ISO 3166-1 Alpha-2. Is required for terminal crypto

"receiver" : {
    "type" : "PHONE",
    "firstName" : "Rob",
    "lastName" : "Jackson",
    "phoneNumber": "48123777619",
    "currency" : "PLN",
    "birthDate": "1995-03-16",
    "countryOfResidence" : "PL"
}

15.2.4. RECEIVER CASH

Path Type Validation Rule Description

type

String

Required

@NotNull
@NotBlank

For this configuration the value of this field must be "CASH", otherwise request will be declined

firstName

String

Required

@NotNull
@NotBlank
@Length(min = 2, max = 35)
@Pattern(regexp = "^[^0-9]+$")
FirstName cannot be the same as lastName
FirstName cannot contains all the same characters

Receiver first name

lastName

String

Required

@NotNull
@NotBlank
@Length(min = 2, max = 35)
@Pattern(regexp = "^[^0-9]+$")
LastName cannot be the same as firstName
LastName cannot contains all the same characters

Receiver last name

country

String

Required

@NotNull

Receiver country code in accordance with ISO 3166-1 Alpha-2

street

String

Optional

@Length(min = 1, max = 55)
@Pattern(regexp = "^[^\\s\](\\s[^\\s]+)*$")

Receiver street

houseNumber

String

Optional

@Length(min = 1, max = 10)
@Pattern(regexp = "[1-9][0-9]{0,4}(?:[A-z]?[0-9]{0,4})?((?:[-/ ][1-9]?[A-z]?[0-9]{0,4})*[A-z]?)?$")

Receiver house number

city

String

Optional

@Length(min = 1, max = 55)

Receiver city

postalCode

String

Optional

@Length(min = 1, max = 10)
@Pattern(regexp = "^(?=.*\d)(?=.*[1-9,a-zA-Z]).{1,10}$"

Receiver postal code

flatNumber

String

Optional

@Length(min = 1, max = 5)
@Pattern(regexp = "^[a-zA-Z0-9 ]*$")

Receiver flat number

email

String

Optional

@Length(min = 1, max = 128)
@Pattern(regexp = "^(?:[A-Za-z0-9]{1,}[\\.!#$%&'*/=?`{|}~^\\-_]?){1,}[A-Za-z0-9_-]{1,}@((?:[a-zA-Z0-9](?:-[a-zA-Z0-9]+)*\\.){1,}[a-zA-Z]{2,})$")
Email cannot be the same for 2 different persons sender and receiver

Receiver email

"receiver" : {
    "type" : "CASH",
    "firstName" : "Rob",
    "lastName" : "Jackson",
    "country": "PL"
}

15.2.5. RECEIVER ACCOUNT

Path Type Validation Rule Description

type

String

Required

@NotNull
@NotBlank

For this configuration the value of this field must be "ACCOUNT", otherwise request will be declined

accountType

String

Required

@NotNull
@NotBlank

There are two possible values "I" (stands for Individual) or "C" (stands for Commercial).

firstName

String

Required

@NotNull
@NotBlank
@Length(min = 2, max = 35)
@Pattern(regexp = "^[^0-9]+$")
FirstName cannot be the same as lastName
FirstName cannot contains all the same characters

Receiver first name

lastName

String

Required

@NotNull
@NotBlank
@Length(min = 2, max = 35)
@Pattern(regexp = "^[^0-9]+$")
LastName cannot be the same as firstName
LastName cannot contains all the same characters

Receiver last name

street

String

Optional

@Length(min = 1, max = 55)
@Pattern(regexp = "^[^\\s\](\\s[^\\s]+)*$")

Receiver street

houseNumber

String

Optional

@Length(min = 1, max = 10)
@Pattern(regexp = "[1-9][0-9]{0,4}(?:[A-z]?[0-9]{0,4})?((?:[-/ ][1-9]?[A-z]?[0-9]{0,4})*[A-z]?)?$")

Receiver house number

city

String

Optional

@Length(min = 1, max = 55)

Receiver city

postalCode

String

Optional

@Length(min = 1, max = 10)
@Pattern(regexp = "^(?=.*\d)(?=.*[1-9,a-zA-Z]).{1,10}$"

Receiver postal code

flatNumber

String

Optional

@Length(min = 1, max = 5)
@Pattern(regexp = "^[a-zA-Z0-9 ]*$")

Receiver flat number

email

String

Optional

@Length(min = 1, max = 128)
@Pattern(regexp = "^(?:[A-Za-z0-9]{1,}[\\.!#$%&'*/=?`{|}~^\\-_]?){1,}[A-Za-z0-9_-]{1,}@((?:[a-zA-Z0-9](?:-[a-zA-Z0-9]+)*\\.){1,}[a-zA-Z]{2,})$")
Email cannot be the same for 2 different persons sender and receiver

Receiver email

currency

String

Required

@Length(min = 3, max = 3)

Currency for transaction. Example: PLN

birthDate

String

Optional

@Pattern("yyyy-MM-dd")

Date of birth sender

countryOfResidence

String

Optional, the address will be included in the request if all fields are present: countryOfResidence, street, houseNumber, city, postalCode. Otherwise address will not be sent

@Length(min = 2, max = 2)

Country code in accordance with ISO 3166-1 Alpha-2. Is required for terminal crypto

street

String

Optional, the address will be included in the request if all fields are present: countryOfResidence, street, houseNumber, city, postalCode. Otherwise address will not be sent

@Length(min = 1, max = 55)
@Pattern(regexp = "^[^\\s\](\\s[^\\s]+)*$")

Receiver street

houseNumber

String

Optional, the address will be included in the request if all fields are present: countryOfResidence, street, houseNumber, city, postalCode. Otherwise address will not be sent

@Length(min = 1, max = 10)
@Pattern(regexp = "[1-9][0-9]{0,4}(?:[A-z]?[0-9]{0,4})?((?:[-/ ][1-9]?[A-z]?[0-9]{0,4})*[A-z]?)?$")

Receiver house number

city

String

Optional, the address will be included in the request if all fields are present: countryOfResidence, street, houseNumber, city, postalCode. Otherwise address will not be sent

@Length(min = 1, max = 55)

Receiver city

postalCode

String

Optional, the address will be included in the request if all fields are present: countryOfResidence, street, houseNumber, city, postalCode. Otherwise address will not be sent

@Length(min = 1, max = 10)
@Pattern(regexp = "^(?=.*\d)(?=.*[1-9,a-zA-Z]).{1,10}$"

Receiver postal code

bank.bankCode

String

Conditional

@Length(min = 1, max = 12)

Bank account bank code. Field is mandatory for account in countries: AUS, JPN, BRA, CAN, CHL, CHN, COL, CZE, GHA, KEN, HKG, IND, IDN, NZL, PHL, KOR, LKA, SWE, TZA, TTO, UGA, GBR, USA, URY

bank.bankCodeType

String

Conditional

@Length(min = 3, max = 9)

Possible values: "ABA" "SORT_CODE" "DEFAULT". Field is mandatory for account in countries: AUS, JPN, BRA, CAN, CHL, CHN, COL, CZE, GHA, KEN, HKG, IND, IDN, NZL, PHL, KOR, LKA, SWE, TZA, TTO, UGA, GBR, USA, URY

bank.accountNumberType

String

Required

@Length(min = 4, max = 9)

Account number type, possible values: "IBAN" or "DEFAULT"

bank.accountName

String

Required

@Length(min = 1, max = 70)

Account holder name as recorded on beneficiary bank account

bank.countryCode

String

Required

@Length(min = 2, max = 2)

2-character Alpha-2 country code

bank.bankName

String

Optional

@Length(min = 1, max = 50)

Recipient’s bank name

bank.accountNumber

String

Required

@Length(min = 1, max = 34)

Account number of receiver possible values: Creditor Account Number or IBAN

bank.currencyCode

String

Required

@Length(min = 3, max = 3)

"receiver" : {
    "type" : "ACCOUNT",
    "accountType": "I",
    "firstName" : "Rob",
    "lastName" : "Wring",
    "birthDate" : "2023-12-10",
    "currency" : "PLN",
    "countryOfResidence" : "PL",
    "bank": {
        "bankCode": "800554",
        "bankCodeType": "SORT_CODE",
        "accountNumberType": "IBAN",
        "accountName": "Money Market",
        "countryCode": "BE",
        "bankName": "Barclays",
        "accountNumber": "BE71096123456769",
        "currencyCode": "EUR"
    }
  }

15.2.6. RECEIVER DELAYED

Delayed Send Money method
Path Type Validation Rule Description

type

String

Required

@NotNull
@NotBlank

For this configuration the value of this field must be "DELAYED", otherwise request will be declined

firstName

String

Required

@NotNull
@NotBlank
@Length(min = 2, max = 35)
@Pattern(regexp = "^[^0-9]+$")
FirstName cannot be the same as lastName
FirstName cannot contains all the same characters

Receiver first name

lastName

String

Required

@NotNull
@NotBlank
@Length(min = 2, max = 35)
@Pattern(regexp = "^[^0-9]+$")
LastName cannot be the same as firstName
LastName cannot contains all the same characters

Receiver last name

email

String

Required when phone is not present

@Length(min = 1, max = 128)
@Pattern(regexp = "^(?:[A-Za-z0-9]{1,}[\\.!#$%&'*/=?`{|}~^\\-_]?){1,}[A-Za-z0-9_-]{1,}@((?:[a-zA-Z0-9](?:-[a-zA-Z0-9]+)*\\.){1,}[a-zA-Z]{2,})$")

Receiver email

phoneNumber

String

Required when email is not present

@NotNull
@NotBlank
must match "[0-9]+"

Receiver phone number

currency

String

Required

@Length(min = 3, max = 3)

Currency for transaction. Example: PLN

"receiver" : {
    "firstName" : "John",
    "lastName" : "Doe",
    "type" : "DELAYED",
    "email" : "email@fenige.pl",
    "currency" : "PLN"
}
Delayed Payment method
Path Type Validation Rule Description

type

String

Required

@NotNull
@NotBlank

For this configuration the value of this field must be "DELAYED", otherwise request will be declined

firstName

String

Required

@NotNull
@NotBlank
@Length(min = 2, max = 35)
@Pattern(regexp = "^[^0-9]+$")
FirstName cannot be the same as lastName
FirstName cannot contains all the same characters

Receiver first name

lastName

String

Required

@NotNull
@NotBlank
@Length(min = 2, max = 35)
@Pattern(regexp = "^[^0-9]+$")
LastName cannot be the same as firstName
LastName cannot contains all the same characters

Receiver last name

cardNumber

String

Required

@NotNull @LuhnCheck

Receiver card number

email

String

Required when phone is not present

@Length(min = 1, max = 128)
@Pattern(regexp = "^(?:[A-Za-z0-9]{1,}[\\.!#$%&'*/=?`{|}~^\\-_]?){1,}[A-Za-z0-9_-]{1,}@((?:[a-zA-Z0-9](?:-[a-zA-Z0-9]+)*\\.){1,}[a-zA-Z]{2,})$")

Receiver email

phoneNumber

String

Required when email is not present

@NotNull
@NotBlank
must match "[0-9]+"

Receiver phone number

currency

String

Required

@Length(min = 3, max = 3)

Currency for transaction. Example: PLN

rememberReceiver

Boolean

Optional

true or false

By sending this field as 'true' value you can save receiver

birthDate

String

Optional

@Pattern("yyyy-MM-dd")

Date of birth sender

"receiver" : {
    "type" : "DELAYED",
    "firstName" : "Rob",
    "lastName" : "Wring",
    "email" : "rob.wring@fenige.pl",
    "phoneNumber" : "600300200",
    "cardNumber" : "5117964247989169",
    "currency" : "PLN",
    "rememberReceiver" : true,
    "birthDate": "1995-03-16"
  }

16. FAQ

Here you can find most frequency asked questions about Fenige Moneysend API