1. Changelog
Version | Date | Description |
---|---|---|
10.12 |
2024-10-31 |
Changes in 3.7 Payouts to Account - changes in recipient Currency. Update in Korea B2P corridor. Removed sender.governmentId, source of income. |
10.11 |
2024-10-23 |
Changes in 3.7 Payouts to Account request body fixed, governmentId type change from string to object. |
10.10 |
2024-10-16 |
Added validation for the methodNotificationUrl field in the /client/3ds/preAuthentication method |
10.9 |
2024-10-15 |
New status ERROR_DOMESTIC_TRANSACTION_NOT_PERMITTED_FOR_CARD - for some bin transaction with merchant country code and issuer country code is same is not permitted. New response code CODE_4F. |
10.8 |
2024-10-14 |
Changes in 3.7 Payouts to Account transaction model - new Corridors introduced |
10.7 |
2024-10-01 |
Changes in 3.6 Card to Account and 3.7 Payouts to Account transaction model - Corridors concept and their validation introduced |
10.6 |
2024-09-30 |
Added support for JWE data encryption. More details can be found in JWE Encryption chapter |
10.5 |
2024-09-29 |
Added support for encrypted tokens is send money requests. Check 3DS Pre Authentication 3DS Authentication, Card 2 card methods for examples and more details. |
10.4 |
2024-09-02 |
Added new tab 3.6 Card to Account for CARD_ACCOUNT transaction and tab 3.7 Payouts to Account for CASH_ACCOUNT transaction |
10.3 |
2024-08-29 |
Mock for Mastercard and Visa test cards have been added only for Staging env 2.7. Mock cards for test. |
10.2 |
2024-08-06 |
Change validation for firstName, lastName and cardholderName. Fields cannot start and end with whitespace characters. Full regular expressions may be found in every sendmoney request (e.g. Card 2 card) and 3DS Authentication requests. Requirements will apply from 2024-10-01 in production environment. |
10.1 |
2024-08-01 |
Change validation for 7.2. Authentication method. From August 12th Visa will officially require to provide one of these fields: cardholderEmail, cardholderMobilePhone, cardholderHomePhone or cardholderWorkPhone. Failure to provide this value may result in 3DS authentication rejections. As of September 2 Fenige will require to provide one of these values in every Authentication request for VISA. |
10.0 |
2024-07-20 |
Added tokenize card support in all send-money methods |
9.9 |
2024-07-01 |
New fields 'subMerchantName' and 'subMerchantCountry' in Send Money request added. Both fields are conditional - mandatory only when merchant is configured as marketplace. |
9.8 |
2024-06-25 |
A new field has been added - 'sendMoneyType' in response to request 3.1.6. Transaction details and 3.2.6. Transaction details. |
9.7 |
2024-05-23 |
Added optional "rodo" and "marketing" flags for Add user USA or CAN transactions request 11.1.1. Add user, and Update user request 11.2.1. Update user |
9.6 |
2024-04-16 |
Added new webhook notification occuring during CASH_ACCOUNT transaction processing. |
9.5 |
2024-04-10 |
Added webhook : Acquirer reconciliation date webhook + Acquirer reconciliation date webhook |
9.4 |
2024-04-06 |
New transaction model in Payouts area is released. Now we can process transaction from Card to Account number. New transaction model was added as new tab in Card to Card section: + New CARD-ACCOUNT transaction model + New CARD-ACCOUNT transaction model with 3DS |
9.3 |
2024-04-05 |
New regexp for houseNumber |
9.2 |
2024-04-05 |
Payouts from deposit Possibility to make payouts with tokens. |
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. |
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 |
|
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
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:
Fenige:
High Level Architecture:
Transaction process:
2.1. Endpoints
Environment | Endpoint (base url) |
---|---|
Staging |
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 |
---|---|
|
Used to retrieve a resource |
|
Used to create a new resource |
|
Used to update specific resource |
|
Used to delete a resource |
2.3. User authentication
Authentication in HUB API is done by basic authentication and two token mechanism.
-
API-TOKEN - we can use this authentication method when client is integrated only with HUB application.
-
X-Request-Token, X-Device-ID - this authentication method is using by mobile devices which are in communication with different server.
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 |
---|---|---|---|
|
application/json |
Required |
Used to indicate the media type of the resource |
|
application/vnd.sendmoney.v2+json |
Optional |
Used for send-money with multi-currency purpose |
|
application/vnd.sendmoney3ds.v2+json |
Optional |
Used for send-money-3ds with multi-currency purpose |
|
application/vnd.determine-currencies.v2+json |
Optional |
Used for determine currencies with multi-currency purpose |
|
application/vnd.calculate-commission.v2+json |
Optional |
Used for calculate commission with multi-currency purpose |
|
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 |
|
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 |
---|---|
|
The request completed successfully |
|
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 |
|
The request was malformed. The response body will include an error providing further information |
|
The requested resource did not exist |
|
Message occur when an unexpected condition was encountered |
2.7. Mock cards for test:
Here are test cards with a defined ResponseCode running only on the STAGING environment. Please note that these are just card ranges, you need to generate a valid card number that will be included in this card range (e.g. using any online generator that generates cards based on bin - first 6 digits).
Begin | End | RC | MAC |
---|---|---|---|
5117960000000000 |
5117968999999999 |
CODE_00 |
x |
5486000000000000 |
5486009999999999 |
CODE_05 |
x |
5402060000000000 |
5402069999999999 |
CODE_30 |
x |
5406603500000000 |
5406603599999999 |
CODE_05 |
03 |
Begin | End | RC |
---|---|---|
4400430000000000 |
4400430399999999 |
CODE_00 |
4444184330000000 |
4444184339999999 |
CODE_05 |
4444184320000000 |
4444184329999999 |
CODE_30 |
4444184310000000 |
4444184319999999 |
CODE_N7 |
2.8. Mastercard/VISA response code (ISO 8583):
Status code | Usage |
---|---|
|
Approved or completed successfully |
|
Refer to card issuer |
|
Refer to card issuer’s special conditions |
|
Invalid merchant |
|
Pick up card (no fraud) |
|
Do not honor |
|
General error |
|
Pick up card, special condition (fraud account) |
|
Honor with ID |
|
Request in progress |
|
Approved for partial amount |
|
Approved (V.I.P) |
|
Invalid transaction |
|
Invalid amount |
|
Invalid account number (no such number) |
|
No such issuer |
|
Approved, update track 3 |
|
Customer cancellation |
|
Customer dispute |
|
Re-enter transaction |
|
Invalid response |
|
No action taken |
|
Suspected malfunction |
|
Unacceptable transaction fee |
|
File update not supported by receiver |
|
Unable to locate record in file |
|
Duplicate file update record, old record replaced |
|
File update field edit error |
|
File update file locked out |
|
File update not successful, contact acquirer |
|
Format error |
|
Bank not supported by switch |
|
Completed partially |
|
Expired card |
|
Suspected fraud |
|
Card acceptor contact acquirer |
|
Restricted card |
|
Card acceptor call acquirer security |
|
Allowable PIN tries exceeded |
|
No credit account |
|
Requested function not supported |
|
Lost card, pick up (fraud account) |
|
No universal account |
|
Stolen card, pick up (fraud account) |
|
No investment account |
|
Not sufficient funds |
|
No checking account |
|
No savings account |
|
Expired card or expiration date is missing |
|
Incorrect PIN or PIN missing |
|
No card record |
|
Transaction not permitted to cardholder |
|
Transaction not permitted to acquirer/terminal |
|
Suspected fraud |
|
Card acceptor contact acquirer |
|
Exceeds withdrawal amount limit |
|
Restricted card (card invalid in this region or country) |
|
Security violation (source is not correct issuer) |
|
Original amount incorrect/Transaction does not fulfill AML requirement |
|
Exceeds withdrawal frequency limit |
|
Card acceptor call acquirer’s security department |
|
Hard capture (requires that card be picked up at ATM) |
|
Response received too late |
|
Contact Card Issuer/PIN data required |
|
PIN Not Changed |
|
Different value than that used for PIN encryption errors |
|
Allowable number of PIN tries exceeded |
|
Invalid/nonexistent “To Account” specified/Unsolicited reversal |
|
Invalid/nonexistent “From Account” specified |
|
Invalid/nonexistent account specified (general)/“Blocked, first used”—Transaction from new cardholder, and card not properly unblocked |
|
Life cycle/Already reversed (by Switch) |
|
System not available/No financial impact |
|
Domestic Debit Transaction Not Allowed (Regional use only)/Cryptographic error found in PIN |
|
Policy (Mastercard use only)/Negative CAM, dCVV, iCVV, or CVV results |
|
Fraud/Security (Mastercard use only) |
|
Invalid Authorization Life Cycle |
|
Not declined/No reason to decline a request for address verification, CVV2 verification, or a credit voucher or merchandise return |
|
PIN Validation not possible |
|
Purchase Amount Only, No Cash Back Allowed |
|
Cryptographic failure |
|
Unacceptable PIN—Transaction Declined—Retry/Ineligible to receive financial position information (GIV) |
|
Cutoff is in process (switch ending a day’s business and starting the next. Transaction can be sent again in a few minutes) |
|
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. |
|
Financial institution or intermediate network facility cannot be found for routing |
|
Transaction cannot be completed. Violation of law |
|
Duplicate transmission |
|
Reconcile error |
|
System malfunction or certain field error conditions |
|
Additional customer authentication required |
|
Surcharge amount not permitted on Visa cards (U.S. acquirers only) |
|
Surcharge amount not supported by debit network issuer. |
|
Force STIP |
|
Cash service not available |
|
Cashback request exceeds issuer limit or appoved limit |
|
Ineligible for resubmission |
|
Decline for CVV2 failure |
|
Transaction amount exceeds preauthorized approval amount |
|
Invalid biller information |
|
Denied PIN unblock—PIN change or unblock request declined by issuer |
|
Denied PIN change—requested PIN unsafe |
|
Card Authentication failed |
|
Stop payment order |
|
Revocation of authorization order |
|
Transaction does not qualify for Visa PIN |
|
Revocation of all authorizations order |
|
Forward to issuer |
|
Forward to issuer |
|
Unable to go online |
|
Customer ID verification failed |
|
Additional customer authentication required (Europe Region only) |
|
Verification Failed (Cardholder Identification does not match issuer records) |
|
Merchant country is same as issuer country for a card range defined as cross-border only |
2.9. 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 |
---|---|
|
New account information available |
|
Cannot approve at this time, try again later |
|
Do not try again |
|
Token not supported |
|
Stop recurring payment |
|
Retry after 1 hour |
|
Retry after 24 hours |
|
Retry after 2 days |
|
Retry after 4 days |
|
Retry after 6 days |
|
Retry after 8 days |
|
Retry after 10 days |
|
Consumer non-reloadable prepaid card |
|
Consumer single-use virtual card number |
2.10. 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 |
E0115 |
Cannot unblock user. User is already blocked by Fenige. |
422 |
Unprocessable Entity |
E0122 |
Merchant not exists. |
404 |
Not Found |
E0128 |
Sub merchant does not exists. |
404 |
Not Found |
E0129 |
Sub merchant name is required for payment facilitators and marketplaces. |
422 |
Unprocessable Entity |
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 |
E01586 |
Transaction rejected, data from transaction request does not match to Card Authentication data. |
422 |
Unprocessable Entity |
E01587 |
Transaction rejected, business card not supported |
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 not reached |
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 |
E01637 |
Error sender country is required for account transfers |
422 |
Unprocessable Entity |
E01638 |
Error sender personalId is required for account transfers |
422 |
Unprocessable Entity |
E01639 |
Transaction rejected, terminal blocks transactions with specified country |
422 |
Unprocessable Entity |
E01640 |
Transaction rejected, terminal does not support blik |
422 |
Unprocessable Entity |
E01641 |
Error receiver bank or card country are not permitted |
422 |
Unprocessable Entity |
E01642 |
Error receiver amount is mandatory for terminal |
422 |
Unprocessable Entity |
E01643 |
Error domestic transaction not permitted for card |
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 |
E00182 |
Invalid refund type |
400 |
Bad Request |
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 |
E0311 |
3DS required |
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 |
E10025 |
Transaction rejected, contractor daily transaction limit exceeded for Blik provider |
422 |
Unprocessable Entity |
E10026 |
Transaction rejected, contractor monthly transaction limit exceeded for Blik provider |
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, merchant risk score exceeded |
422 |
Unprocessable Entity |
E13001 |
Transaction rejected, merchant risk status REJECTED |
422 |
Unprocessable Entity |
E13002 |
No requests available for contractor |
422 |
Unprocessable Entity |
E13003 |
Transaction rejected, Fenige risk score exceeded |
422 |
Unprocessable Entity |
E13004 |
Transaction rejected, Fenige risk status REJECTED |
422 |
Unprocessable Entity |
E13005 |
Transaction rejected, merchant risk score exceeded for Payment |
422 |
Unprocessable Entity |
E13006 |
Transaction rejected, merchant risk status REJECTED for Payment |
422 |
Unprocessable Entity |
E13007 |
Transaction rejected, Fenige risk score exceeded for Payment |
422 |
Unprocessable Entity |
E13008 |
Transaction rejected, Fenige risk status REJECTED for Payment |
422 |
Unprocessable Entity |
E13009 |
DmConfiguration does not exist |
404 |
Not Found |
E13010 |
DmConfiguration allows dm validation only first transaction |
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 |
E15000 |
Error card unprovisioned |
422 |
Unprocessable Entity |
E15001 |
Error card not eligible |
422 |
Unprocessable Entity |
E15002 |
Error card not allowed |
422 |
Unprocessable Entity |
E15003 |
Error card declined |
422 |
Unprocessable Entity |
E15004 |
Error card service unavailable |
500 |
Internal Server Error |
E15005 |
Error card system error |
500 |
Internal Server Error |
E15006 |
Error token not found |
404 |
Not Found |
E15007 |
Error occurred during token decryption |
422 |
Unprocessable Entity |
E16000 |
Error cannot process account transfer to specified country code of bank |
422 |
Unprocessable Entity |
E16001 |
Error cannot process account transfer because of internal VISA API error |
500 |
Internal Server Error |
E16002 |
Transaction rejected, account is blocked |
422 |
Unprocessable Entity |
E16003 |
Error cannot get specific Route for provided country and currency pair |
400 |
Bad Request |
E17000 |
Transaction rejected, unsuccessful transactions score exceeded |
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:
|
In the STAGING environment you can use the test cards available here 2.7. Mock cards for test. |
Is apply for: PLAIN-PLAIN, DATACORE-PLAIN, DATACORE-DATACORE, DATACORE-PHONE
Is apply for: CASH-PLAIN, CASH-PHONE
Is apply for: BLIK-PLAIN
Is apply for: CASH-ACCOUNT
Is apply for: PLAIN-ACCOUNT
3.1. Card to Card
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. |
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
Example HTTP Request
POST /api/v2/client/send-money HTTP/1.1
Content-Type: application/vnd.sendmoney.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
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",
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"requestId" : "3b4750fa-8577-4e1d-8d0c-630f8d109743",
"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-11-12",
"cardNumber" : "5117964247989169",
"expirationDate" : "03/26",
"personalId" : "AGC688910",
"currency" : "PLN"
},
"receiver" : {
"type" : "PLAIN",
"firstName" : "Rob",
"lastName" : "Wring",
"birthDate" : "2024-11-12",
"cardNumber" : "5117964247989169",
"currency" : "PLN",
"countryOfResidence" : "PL"
}
}
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 |
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. |
subMerchantName |
String |
Optional |
Identifier assigned by the Marketplace to each sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
subMerchantCountry |
String |
Optional |
The field to distinguish the country location of the sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
sender |
Object |
Required |
@NotNull |
Sender PLAIN Sender TOKEN - PAN_ONLY Sender TOKEN - CRYPTOGRAM_3DS Sender ENCRYPTED_TOKEN Google Sender ENCRYPTED_TOKEN Apple Sender CASH Sender DATACORE |
receiver |
Object |
Required |
@NotNull |
Receiver PLAIN Receiver TOKEN Receiver ENCRYPTED_TOKEN Google Receiver ENCRYPTED_TOKEN Apple Receiver CASH Receiver DATACORE Receiver PHONE |
POST /api/v2/client/send-money HTTP/1.1
Content-Type: application/vnd.sendmoney.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 1085
Host: java-staging.fenige.pl:8181
{
"amount" : 1000,
"merchantUrl" : "https://fenige.pl/payments",
"addressIp" : "192.168.0.1",
"type" : "SENDER",
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"requestId" : "b39af029-34bc-41a4-9d09-aa1cdb332623",
"transactionId" : "TRX220132AM",
"sender" : {
"type" : "TOKEN",
"firstName" : "Mark",
"lastName" : "Smith",
"street" : "Olszewskiego",
"houseNumber" : "17A",
"city" : "Lublin",
"postalCode" : "20-400",
"flatNumber" : "2",
"email" : "senderEmail@fenige.pl",
"tokenType" : "APPLE_PAY",
"expirationDate" : "03/26",
"tokenPan" : "5117964247989169",
"paymentData" : {
"eciIndicator" : "02",
"onlinePaymentCryptogram" : "/0OL1zEABL+gk70RYJ8lMAABAAA="
},
"country" : "PL",
"personalId" : "AGC688910"
},
"receiver" : {
"type" : "TOKEN",
"firstName" : "Rob",
"lastName" : "Wring",
"email" : "receiverEmail@fenige.pl",
"birthDate" : "2024-11-12",
"currency" : "PLN",
"tokenPan" : "5117964247989169",
"countryOfResidence" : "PL"
}
}
Request fields
Path | Type | Validation | Rule | Description |
---|---|---|---|---|
amount |
Number |
Required |
@NotNull, positive |
The total transfer amount (in pennies) |
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. |
subMerchantName |
String |
Optional |
Identifier assigned by the Marketplace to each sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
subMerchantCountry |
String |
Optional |
The field to distinguish the country location of the sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
sender |
Object |
Required |
@NotNull |
Sender PLAIN Sender TOKEN - PAN_ONLY Sender TOKEN - CRYPTOGRAM_3DS Sender ENCRYPTED_TOKEN Google Sender ENCRYPTED_TOKEN Apple Sender CASH Sender DATACORE |
receiver |
Object |
Required |
@NotNull |
Receiver PLAIN Receiver TOKEN Receiver ENCRYPTED_TOKEN Google Receiver ENCRYPTED_TOKEN Apple Receiver CASH Receiver DATACORE Receiver PHONE |
POST /api/v2/client/send-money HTTP/1.1
Content-Type: application/vnd.sendmoney.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 994
Host: java-staging.fenige.pl:8181
{
"amount" : 1000,
"merchantUrl" : "https://fenige.pl/payments",
"addressIp" : "192.168.0.1",
"type" : "SENDER",
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"requestId" : "d1547b33-a3f3-4cca-898e-75dea95a59fb",
"transactionId" : "TRX220132AM",
"sender" : {
"type" : "TOKEN",
"firstName" : "Mark",
"lastName" : "Smith",
"street" : "Olszewskiego",
"houseNumber" : "17A",
"city" : "Lublin",
"postalCode" : "20-400",
"flatNumber" : "2",
"email" : "senderEmail@fenige.pl",
"tokenType" : "GOOGLE_PAY",
"authMethod" : "PAN_ONLY",
"expirationDate" : "03/26",
"tokenPan" : "5117964247989169",
"country" : "PL",
"personalId" : "AGC688910"
},
"receiver" : {
"type" : "TOKEN",
"firstName" : "Rob",
"lastName" : "Wring",
"email" : "receiverEmail@fenige.pl",
"birthDate" : "2024-11-12",
"currency" : "PLN",
"tokenPan" : "5117964247989169",
"countryOfResidence" : "PL"
}
}
Request fields
Path | Type | Validation | Rule | Description |
---|---|---|---|---|
amount |
Number |
Required |
@NotNull, positive |
The total transfer amount (in pennies) |
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. |
subMerchantName |
String |
Optional |
Identifier assigned by the Marketplace to each sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
subMerchantCountry |
String |
Optional |
The field to distinguish the country location of the sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
sender |
Object |
Required |
@NotNull |
Sender PLAIN Sender TOKEN - PAN_ONLY Sender TOKEN - CRYPTOGRAM_3DS Sender ENCRYPTED_TOKEN Google Sender ENCRYPTED_TOKEN Apple Sender CASH Sender DATACORE |
receiver |
Object |
Required |
@NotNull |
Receiver PLAIN Receiver TOKEN Receiver ENCRYPTED_TOKEN Google Receiver ENCRYPTED_TOKEN Apple Receiver CASH Receiver DATACORE Receiver PHONE |
POST /api/v2/client/send-money HTTP/1.1
Content-Type: application/vnd.sendmoney.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 9107
Host: java-staging.fenige.pl:8181
{
"amount" : 1000,
"merchantUrl" : "https://fenige.pl/payments",
"addressIp" : "192.168.0.1",
"type" : "SENDER",
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"requestId" : "92da6cc5-fada-41e4-a1d6-d9bcc4733e55",
"transactionId" : "TRX220132AM",
"sender" : {
"type" : "ENCRYPTED_TOKEN",
"firstName" : "Mark",
"lastName" : "Smith",
"street" : "Olszewskiego",
"houseNumber" : "17A",
"city" : "Lublin",
"postalCode" : "20-400",
"flatNumber" : "2",
"email" : "senderEmail@fenige.pl",
"token" : {
"paymentData" : {
"version" : "EC_v1",
"data" : "KkiE8GswNdN7jLbbMsCheM+gWdd3vcSw/y4meFdAhRPrPAaTj1GBOGVRVVEfO7oTlsRgv9fl/4IwHGjPd7sLHkcxlRkW7amHcXEszbMwvDBE8656Xc0FxGxEvt6+xY17lPwb7/izmAkSXLdk0geqV0mrQXsYR+II+HI/OKkgXl5hIFS4+9/Tw1Yi1uSF/XRfTXVJF4TLaQF9Ydo+gltIHX82eBTLPZLaHWW9JY0UNUoXkIQQKnaRWb0nlEI+H8apL9NpKrWAknJSZFayDGBkUChAqpqOn5tcL+zdkdt5mmpY0qcK+h5vKluaPg5odq+QQUsn+ivFmnktorjzMsSL+NmMXxVNsFagtGVV4ssGEUEfz7wkIZFzfnlhhmQeHTsdHb+tgmOCayMHQrLUG/DEYGt9Y2s56mJrvr61IU7CYg==",
"signature" : "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",
"header" : {
"ephemeralPublicKey" : "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEO+01GJPfNlHcI2UWUlWExM0aFrewDOuCZbVn1JZgkuM3qtWg9STbwzNDsFtt4xy1hNtOGJVfB65cudVcW3KpmA==",
"publicKeyHash" : "vw4LZqhFE7M9d3oqoOAP4O7X8TpEYiEALkRuP/GjBVE=",
"transactionId" : "fbdf0dbd5cfacfdc8ef214340ff69b7f52af24b200bd7873cf9bd8dbe84ab601"
}
},
"paymentMethodApple" : {
"displayName" : "Visa 1141",
"network" : "Visa",
"type" : "debit"
},
"transactionIdentifier" : "fbdf0dbd5cfacfdc8ef214340ff69b7f52af24b200bd7873cf9bd8dbe84ab601"
},
"tokenType" : "APPLE_PAY",
"country" : "PL",
"personalId" : "AGC688910"
},
"receiver" : {
"type" : "ENCRYPTED_TOKEN",
"firstName" : "Rob",
"lastName" : "Wring",
"email" : "receiverEmail@fenige.pl",
"birthDate" : "2024-11-12",
"token" : {
"paymentData" : {
"version" : "EC_v1",
"data" : "KkiE8GswNdN7jLbbMsCheM+gWdd3vcSw/y4meFdAhRPrPAaTj1GBOGVRVVEfO7oTlsRgv9fl/4IwHGjPd7sLHkcxlRkW7amHcXEszbMwvDBE8656Xc0FxGxEvt6+xY17lPwb7/izmAkSXLdk0geqV0mrQXsYR+II+HI/OKkgXl5hIFS4+9/Tw1Yi1uSF/XRfTXVJF4TLaQF9Ydo+gltIHX82eBTLPZLaHWW9JY0UNUoXkIQQKnaRWb0nlEI+H8apL9NpKrWAknJSZFayDGBkUChAqpqOn5tcL+zdkdt5mmpY0qcK+h5vKluaPg5odq+QQUsn+ivFmnktorjzMsSL+NmMXxVNsFagtGVV4ssGEUEfz7wkIZFzfnlhhmQeHTsdHb+tgmOCayMHQrLUG/DEYGt9Y2s56mJrvr61IU7CYg==",
"signature" : "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",
"header" : {
"ephemeralPublicKey" : "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEO+01GJPfNlHcI2UWUlWExM0aFrewDOuCZbVn1JZgkuM3qtWg9STbwzNDsFtt4xy1hNtOGJVfB65cudVcW3KpmA==",
"publicKeyHash" : "vw4LZqhFE7M9d3oqoOAP4O7X8TpEYiEALkRuP/GjBVE=",
"transactionId" : "fbdf0dbd5cfacfdc8ef214340ff69b7f52af24b200bd7873cf9bd8dbe84ab601"
}
},
"paymentMethodApple" : {
"displayName" : "Visa 1141",
"network" : "Visa",
"type" : "debit"
},
"transactionIdentifier" : "fbdf0dbd5cfacfdc8ef214340ff69b7f52af24b200bd7873cf9bd8dbe84ab601"
},
"tokenType" : "APPLE_PAY",
"currency" : "PLN",
"countryOfResidence" : "PL"
}
}
Request fields
Path | Type | Validation | Rule | Description |
---|---|---|---|---|
amount |
Number |
Required |
@NotNull, positive |
The total transfer amount (in pennies) |
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. |
subMerchantName |
String |
Optional |
Identifier assigned by the Marketplace to each sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
subMerchantCountry |
String |
Optional |
The field to distinguish the country location of the sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
sender |
Object |
Required |
@NotNull |
Sender PLAIN Sender TOKEN - PAN_ONLY Sender TOKEN - CRYPTOGRAM_3DS Sender ENCRYPTED_TOKEN Google Sender ENCRYPTED_TOKEN Apple Sender CASH Sender DATACORE Sender BLIK |
receiver |
Object |
Required |
@NotNull |
Receiver PLAIN Receiver TOKEN Receiver ENCRYPTED_TOKEN Google Receiver ENCRYPTED_TOKEN Apple Receiver CASH Receiver DATACORE Receiver PHONE Receiver ACCOUNT |
POST /api/v2/client/send-money HTTP/1.1
Content-Type: application/vnd.sendmoney.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 3639
Host: java-staging.fenige.pl:8181
{
"amount" : 1000,
"merchantUrl" : "https://fenige.pl/payments",
"addressIp" : "192.168.0.1",
"type" : "SENDER",
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"requestId" : "07d53e9a-5d4c-47fd-af84-b66d9b8c5b6e",
"transactionId" : "TRX220132AM",
"sender" : {
"type" : "ENCRYPTED_TOKEN",
"firstName" : "Mark",
"lastName" : "Smith",
"street" : "Olszewskiego",
"houseNumber" : "17A",
"city" : "Lublin",
"postalCode" : "20-400",
"flatNumber" : "2",
"email" : "senderEmail@fenige.pl",
"token" : {
"protocolVersion" : "ECv2",
"signature" : "MEQCIF9nQIYF80Ooh3eQIomENLsNyD59eQOEmaanHhde3clkAiBfLgLvL+LZxg+4uORZ+l3/Fj3BQds2s9AEKDAlLgN5LA==",
"intermediateSigningKey" : {
"signedKey" : "{\"keyValue\":\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEOIBO91xZ1o+EyRzrYMh3arsVSByFJyTsKaxiRIYqNiYUwjM0nYaRG5eRe99uwHVRmwF9NHWd5ko/wM8MtSalVw\\u003d\\u003d\",\"keyExpiration\":\"1726828035723\"}",
"signatures" : [ "MEYCIQCECDF8WtqPyp50IBsCat8KWv/7fTWHObezihFLK47LwgIhAJEf2SST42TNVokNA/HjAVgvi4BAbvNCCPI6IOBEmjwO" ]
},
"signedMessage" : "{\"encryptedMessage\":\"ynYNjwRPt1rzU7TxsthCpOqgk6CI2iLJxfnKjZDPCL6xYxvTyxPC15AQ3+9q7C1T5ogYRMrv9VKUryq9lYIrBuHnLBlxhXU+VXubQG7fEha4PajF+rYVng3o8sNoXak5MaVY+AkAwQLCp1kr9j7w8+O7lPnR3hEJHx1L1nABdJhgzxml97sBu6ayb6et7UgSkyI3aTvTcUO2m445N12qEe5P+ZbH3yRM30D5k7uzkxiNCgcM/urjBp3K8iuoEElytQ65YuKhSi87OaeyRVB+BXmmm2j50nV1MFQKyd34NnKOLCrdbNvRXD0hT4qz3iq9lhTZgWzcOreTpVE3EDZ21nMZKQnj3tt5JphXlE4tsJgbvhGC/ibgH9Momcew8nL0vsQbxvWwfh/l6In2zi0Ud7vUFH4fb6LaT2bAaOh1qFq3ippDgB5riXhLX+t+sQy+RdpBTpCA0cZxUjPkMPPH0NRnnWBbTAC/SKwsSQmjxSJcwc6lIdpj3+K6IM7/4MqInY8N2koKu6iHuLucjPN7fsJd26rUZuuo916QMveDMuA\\u003d\",\"ephemeralPublicKey\":\"BK2eVSFeDxI+kP7d3L6sFmdYupgKkVOVzzj9w0IFdgS6eEo0xwk50gzDExoshL1uqJi2qGEiCubuidoNiFEWCeo\\u003d\",\"tag\":\"/M30LDIIqFQRW8DY1Z7lL6jWSry3vF8WNC9kFVUgHYQ\\u003d\"}"
},
"tokenType" : "GOOGLE_PAY",
"country" : "PL",
"personalId" : "AGC688910"
},
"receiver" : {
"type" : "ENCRYPTED_TOKEN",
"firstName" : "Rob",
"lastName" : "Wring",
"email" : "receiverEmail@fenige.pl",
"birthDate" : "2024-11-12",
"token" : {
"protocolVersion" : "ECv2",
"signature" : "MEQCIF9nQIYF80Ooh3eQIomENLsNyD59eQOEmaanHhde3clkAiBfLgLvL+LZxg+4uORZ+l3/Fj3BQds2s9AEKDAlLgN5LA==",
"intermediateSigningKey" : {
"signedKey" : "{\"keyValue\":\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEOIBO91xZ1o+EyRzrYMh3arsVSByFJyTsKaxiRIYqNiYUwjM0nYaRG5eRe99uwHVRmwF9NHWd5ko/wM8MtSalVw\\u003d\\u003d\",\"keyExpiration\":\"1726828035723\"}",
"signatures" : [ "MEYCIQCECDF8WtqPyp50IBsCat8KWv/7fTWHObezihFLK47LwgIhAJEf2SST42TNVokNA/HjAVgvi4BAbvNCCPI6IOBEmjwO" ]
},
"signedMessage" : "{\"encryptedMessage\":\"ynYNjwRPt1rzU7TxsthCpOqgk6CI2iLJxfnKjZDPCL6xYxvTyxPC15AQ3+9q7C1T5ogYRMrv9VKUryq9lYIrBuHnLBlxhXU+VXubQG7fEha4PajF+rYVng3o8sNoXak5MaVY+AkAwQLCp1kr9j7w8+O7lPnR3hEJHx1L1nABdJhgzxml97sBu6ayb6et7UgSkyI3aTvTcUO2m445N12qEe5P+ZbH3yRM30D5k7uzkxiNCgcM/urjBp3K8iuoEElytQ65YuKhSi87OaeyRVB+BXmmm2j50nV1MFQKyd34NnKOLCrdbNvRXD0hT4qz3iq9lhTZgWzcOreTpVE3EDZ21nMZKQnj3tt5JphXlE4tsJgbvhGC/ibgH9Momcew8nL0vsQbxvWwfh/l6In2zi0Ud7vUFH4fb6LaT2bAaOh1qFq3ippDgB5riXhLX+t+sQy+RdpBTpCA0cZxUjPkMPPH0NRnnWBbTAC/SKwsSQmjxSJcwc6lIdpj3+K6IM7/4MqInY8N2koKu6iHuLucjPN7fsJd26rUZuuo916QMveDMuA\\u003d\",\"ephemeralPublicKey\":\"BK2eVSFeDxI+kP7d3L6sFmdYupgKkVOVzzj9w0IFdgS6eEo0xwk50gzDExoshL1uqJi2qGEiCubuidoNiFEWCeo\\u003d\",\"tag\":\"/M30LDIIqFQRW8DY1Z7lL6jWSry3vF8WNC9kFVUgHYQ\\u003d\"}"
},
"tokenType" : "GOOGLE_PAY",
"currency" : "PLN",
"countryOfResidence" : "PL"
}
}
Request fields
Path | Type | Validation | Rule | Description |
---|---|---|---|---|
amount |
Number |
Required |
@NotNull, positive |
The total transfer amount (in pennies) |
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. |
subMerchantName |
String |
Optional |
Identifier assigned by the Marketplace to each sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
subMerchantCountry |
String |
Optional |
The field to distinguish the country location of the sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
sender |
Object |
Required |
@NotNull |
Sender PLAIN Sender TOKEN - PAN_ONLY Sender TOKEN - CRYPTOGRAM_3DS Sender ENCRYPTED_TOKEN Google Sender ENCRYPTED_TOKEN Apple Sender CASH Sender DATACORE Sender BLIK |
receiver |
Object |
Required |
@NotNull |
Receiver PLAIN Receiver TOKEN Receiver ENCRYPTED_TOKEN Google Receiver ENCRYPTED_TOKEN Apple Receiver CASH Receiver DATACORE Receiver PHONE Receiver ACCOUNT |
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: 972
Host: java-staging.fenige.pl:8181
{
"amount" : 1000,
"cvc2" : "123",
"merchantUrl" : "https://fenige.pl/payments",
"addressIp" : "192.168.0.1",
"type" : "SENDER",
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"requestId" : "485bb7e4-0dbd-4f3a-8aa8-dad77e19d069",
"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-11-12",
"cardNumber" : "5117964247989169",
"expirationDate" : "03/26",
"personalId" : "AGC688910",
"currency" : "PLN"
},
"receiver" : {
"type" : "DATACORE",
"firstName" : "Rob",
"lastName" : "Wring",
"email" : "receiverEmail@fenige.pl",
"birthDate" : "2024-11-12",
"cardId" : 1234,
"currency" : "PLN",
"countryOfResidence" : "PL"
}
}
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 |
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. |
subMerchantName |
String |
Optional |
Identifier assigned by the Marketplace to each sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
subMerchantCountry |
String |
Optional |
The field to distinguish the country location of the sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
sender |
Object |
Required |
@NotNull |
Sender PLAIN Sender TOKEN - PAN_ONLY Sender TOKEN - CRYPTOGRAM_3DS Sender ENCRYPTED_TOKEN Google Sender ENCRYPTED_TOKEN Apple Sender CASH Sender DATACORE |
receiver |
Object |
Required |
@NotNull |
Receiver PLAIN Receiver TOKEN Receiver ENCRYPTED_TOKEN Google Receiver ENCRYPTED_TOKEN Apple Receiver CASH Receiver DATACORE Receiver 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: 867
Host: java-staging.fenige.pl:8181
{
"amount" : 1000,
"cvc2" : "123",
"merchantUrl" : "https://fenige.pl/payments",
"addressIp" : "192.168.0.1",
"type" : "SENDER",
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"requestId" : "e5e7fa8f-4a67-49ac-a412-68fcffcc6e03",
"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-11-12",
"cardId" : 1234,
"currency" : "PLN"
},
"receiver" : {
"type" : "PLAIN",
"firstName" : "Rob",
"lastName" : "Wring",
"birthDate" : "2024-11-12",
"cardNumber" : "5117964247989169",
"currency" : "PLN",
"countryOfResidence" : "PL"
}
}
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 |
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. |
subMerchantName |
String |
Optional |
Identifier assigned by the Marketplace to each sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
subMerchantCountry |
String |
Optional |
The field to distinguish the country location of the sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
sender |
Object |
Required |
@NotNull |
Sender PLAIN Sender TOKEN - PAN_ONLY Sender TOKEN - CRYPTOGRAM_3DS Sender ENCRYPTED_TOKEN Google Sender ENCRYPTED_TOKEN Apple Sender CASH Sender DATACORE |
receiver |
Object |
Required |
@NotNull |
Receiver PLAIN Receiver TOKEN Receiver ENCRYPTED_TOKEN Google Receiver ENCRYPTED_TOKEN Apple Receiver CASH Receiver DATACORE Receiver 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: 893
Host: java-staging.fenige.pl:8181
{
"amount" : 1000,
"cvc2" : "123",
"merchantUrl" : "https://fenige.pl/payments",
"addressIp" : "192.168.0.1",
"type" : "SENDER",
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"requestId" : "4550f370-4a27-44ee-a278-e4e69e676c1f",
"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-11-12",
"cardId" : 1234,
"currency" : "PLN"
},
"receiver" : {
"type" : "DATACORE",
"firstName" : "Rob",
"lastName" : "Wring",
"email" : "receiverEmail@fenige.pl",
"birthDate" : "2024-11-12",
"cardId" : 1234,
"currency" : "PLN",
"countryOfResidence" : "PL"
}
}
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 |
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. |
subMerchantName |
String |
Optional |
Identifier assigned by the Marketplace to each sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
subMerchantCountry |
String |
Optional |
The field to distinguish the country location of the sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
sender |
Object |
Required |
@NotNull |
Sender PLAIN Sender TOKEN - PAN_ONLY Sender TOKEN - CRYPTOGRAM_3DS Sender ENCRYPTED_TOKEN Google Sender ENCRYPTED_TOKEN Apple Sender CASH Sender DATACORE |
receiver |
Object |
Required |
@NotNull |
Receiver PLAIN Receiver TOKEN Receiver ENCRYPTED_TOKEN Google Receiver ENCRYPTED_TOKEN Apple Receiver CASH Receiver DATACORE Receiver 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: 863
Host: java-staging.fenige.pl:8181
{
"amount" : 1000,
"cvc2" : "123",
"merchantUrl" : "https://fenige.pl/payments",
"addressIp" : "192.168.0.1",
"type" : "SENDER",
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"requestId" : "f5be5141-91b7-42df-bb6d-3dda0ba6f5be",
"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-11-12",
"cardId" : 1234,
"currency" : "PLN"
},
"receiver" : {
"type" : "PHONE",
"firstName" : "Rob",
"lastName" : "Wring",
"phoneNumber" : "48123777619",
"birthDate" : "2024-11-12",
"currency" : "PLN",
"countryOfResidence" : "PL"
}
}
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 |
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. |
subMerchantName |
String |
Optional |
Identifier assigned by the Marketplace to each sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
subMerchantCountry |
String |
Optional |
The field to distinguish the country location of the sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
sender |
Object |
Required |
@NotNull |
Sender PLAIN Sender TOKEN - PAN_ONLY Sender TOKEN - CRYPTOGRAM_3DS Sender ENCRYPTED_TOKEN Google Sender ENCRYPTED_TOKEN Apple Sender CASH Sender DATACORE |
receiver |
Object |
Required |
@NotNull |
Receiver PLAIN Receiver TOKEN Receiver ENCRYPTED_TOKEN Google Receiver ENCRYPTED_TOKEN Apple Receiver CASH Receiver DATACORE Receiver PHONE |
3.1.2. Response
Response status
Status | Description |
---|---|
|
Returned list of field name which has validation errors. |
|
- 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 |
|
Returned e.g. when a different transaction with the provided requestId has already been registered in the system. |
|
Returned when API-TOKEN was broken. |
|
Returned when server understood the request but refuses to authorize it. |
Example HTTP Response
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."
}
}
HTTP/1.1 202 Accepted
Content-Type: application/json
Content-Length: 56
{
"orderId" : "ad865ad6-4ceb-444b-b9bb-caa5b8e15b36"
}
Path | Type | Description |
---|---|---|
|
|
Unique transaction identifier |
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."
}
}
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"
}
Path | Description |
---|---|
|
|
|
|
|
|
|
|
|
|
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
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
Parameter | Description |
---|---|
|
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 |
---|---|
|
Returned if the transaction completes successfully. |
|
Returned when transaction was registered for processing. Check status in a while. |
|
Returned when user provides wrong order-id or transaction was failed or was Declined. |
Example HTTP Response
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"
}
}
Path | Type | Description |
---|---|---|
|
|
Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100] |
|
|
Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100] |
|
|
Field informing about the amount of cash transferred with decimal precision. |
|
|
This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100] |
|
|
This is the amount of commission that was added to the transaction at 0.01 currency. |
|
|
Unique transaction identifier. |
|
|
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 |
|
|
Date of transaction. |
|
|
Funding Retrieval Reference Number. |
|
|
Payment Retrieval Reference Number. |
|
|
Acquirer Reference Number |
|
|
Value: true/false determines if transaction was processed with 3ds |
|
|
Detailed information about revaluation between sender currency and receiver currency. |
|
|
Personal data of the person to whom the transfer is addressed. |
|
|
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 |
HTTP/1.1 203 Non-Authoritative Information
After you get 203 you need to check status in a while because we are processing this transaction and if you don’t get a response (200 - succeeded or 500 - declined) within 60 seconds then please contact us. |
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 |
|
REJECTED - Monitoring rule which is designed to prevent the acceptance of names or surnames that do not contain vowels or consonants |
|
CODE_XX - is MasterCard response code (ISO 8583) |
|
This card is not supported |
|
Card is blocked for 1 hour in Fenige |
|
User is blocked in Fenige |
|
Bin is blocked for 1 hour in Fenige |
|
Funding bank is blocked in Fenige |
|
Payment bank is blocked in Fenige |
|
Funding transaction was declined and payment not send |
|
Payment transaction was declined and funding was reversed |
|
A connection error occurred to Acquirer service |
|
User was found on the stop list |
|
Acceptance network is unavailable |
|
No currently effective rates found in the database |
|
Currency is not supported |
|
Currency is not supported by Merchant |
|
Transaction limit for single transaction exceeded |
|
Daily transaction limit for amount per card exceeded |
|
Daily transaction limit for count per card exceeded |
|
Weekly transaction limit for amount per card exceeded |
|
Monthly transaction limit for amount per card exceeded |
|
Monthly transaction limit for count per card exceeded |
|
Daily cumulative limit per card was exceeded |
|
Monthly cumulative limit per card was exceeded |
|
Daily cumulative limit per merchant transactions using mastercard cards was exceeded |
|
Monthly cumulative limit per merchant transactions using mastercard cards was exceeded |
|
Daily cumulative limit per merchant transactions using visa cards was exceeded |
|
Monthly cumulative limit per merchant transactions using visa cards was exceeded |
|
Daily cumulative limit per merchant transactions using mastercard and visa cards was exceeded |
|
Monthly cumulative limit per merchant transactions using mastercard and visa cards was exceeded |
|
Sender’s card is blocked |
|
Receiver’s card is blocked |
|
User acting as sender is blocked |
|
User acting as receiver is blocked |
|
BIN of sender’s card is blocked |
|
BIN of receiver’s card is blocked |
|
Amount is higher than acceptable limit |
|
Couldn’t established connection to Monitoring service |
|
Some unrecognized error occurred |
|
The transaction user’s personal data verified as incorrect on the verification service. Transaction rejected. |
|
Funding transaction declined - mip response timeout |
|
Payment transaction declined - mip response timeout |
|
Funding process failed and it is need to manual verification of transaction |
|
Payment process failed and it is need to manual verification of transaction |
|
Funding transaction declined - mip_proxy response timeout |
|
Payment transaction declined - mip_proxy response timeout |
|
Amount exceeds current merchant deposit limit |
|
Error transaction not exists |
|
Card was not found |
|
Problem with DC |
|
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. |
|
This error may occur if card’s country is other than user’s country for USA or CAN transaction for PLAIN model |
|
This error may occur if card’s country is other than user’s country for USA or CAN transaction |
|
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. |
|
Province code is not valid for USA or CAN transactions. Please update user profile |
|
Some validation error occurred |
|
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. |
|
Card expired |
|
The amount sent is too small. Enter a larger amount. |
|
The amount sent is too high. Enter a lower amount. |
|
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. |
|
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. |
|
Merchant not support the given card provider, please contact support to check merchant configuration |
|
Merchant crypto is not supported outside EEA+UK |
|
System does not allow the execution of transaction with the receiver card country. |
|
System does not allow the execution of transaction with the sender card country. |
|
Geographic scope is not permitted for this transaction |
|
Processing time of transaction was too long, transaction is declined. |
|
Transaction rejected, second transaction with merchant advice code 03 or 21 within 30 days. |
|
Transaction rejected, sender or receiver name contains fraudulent phrase. |
|
Transaction rejected, suspicious sender or receiver name. |
|
Transaction rejected, card country is not supported for merchants crypto. |
|
Transaction card-account rejected, country code in sender object is required for this transactional model |
|
Transaction card-account or cash account rejected, personalId field in sender object is required for this transactional model |
|
Transaction rejected, country of merchant cannot be the same as receiver’s bank code |
|
Error domestic transaction not permitted for card |
3.1.4. Check detailed status
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
Parameter | Description |
---|---|
|
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 |
---|---|
|
Returned if the transaction completes successfully. |
|
Returned when transaction was registered for processing. Check status in a while. |
|
Returned when a transaction related to the given orderId doesn’t exist. |
|
Returned when user provides wrong order-id or transaction was failed or was Declined. |
|
Returned when an internal error occur. |
Example HTTP Response
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"
}
Path | Type | Description |
---|---|---|
|
|
Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100] |
|
|
Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100] |
|
|
Field informing about the amount of cash transferred with decimal precision. |
|
|
This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100] |
|
|
This is the amount of commission that was added to the transaction at 0.01 currency. |
|
|
Unique transaction identifier. |
|
|
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 |
|
|
Date of transaction. |
|
|
Funding Retrieval Reference Number. |
|
|
Payment Retrieval Reference Number. |
|
|
Acquirer Reference Number |
|
|
Value: true/false determines if transaction was processed with 3ds |
|
|
Detailed information about revaluation between sender currency and receiver currency. |
|
|
Personal data of the person to whom the transfer is addressed. |
|
|
Personal data of the person who performs the transfer of cash. |
|
|
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 |
HTTP/1.1 203 Non-Authoritative Information
After you get 203 you need to check status in a while because we are processing this transaction and if you don’t get a response (200 - succeeded or 500 - declined) within 60 seconds then please contact us. |
HTTP/1.1 404 Not Found
Content-Type: application/json
Content-Length: 51
{
"errorStatus" : "ERROR_TRANSACTION_NOT_FOUND"
}
Path | Type | Description |
---|---|---|
|
|
Additional data of the error occurred during a processing of the request |
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-11-09T17:35:52.223",
"errorStatus" : "ERROR_SENDER_CARD_IS_BLOCKED"
}
Path | Type | Description |
---|---|---|
|
|
Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100] |
|
|
Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100] |
|
|
Field informing about the amount of cash transferred with decimal precision. |
|
|
This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100] |
|
|
This is the amount of commission that was added to the transaction at 0.01 currency. |
|
|
Unique transaction identifier. |
|
|
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 |
|
|
Date of transaction. |
|
|
Funding Retrieval Reference Number. |
|
|
Payment Retrieval Reference Number. |
|
|
Acquirer Reference Number |
|
|
Value: true/false determines if transaction was processed with 3ds |
|
|
Detailed information about revaluation between sender currency and receiver currency. |
|
|
Personal data of the person to whom the transfer is addressed. |
|
|
Personal data of the person who performs the transfer of cash. |
|
|
Status of the transaction (PENDING, APPROVED, DECLINED, REJECTED, REVERSED) |
|
|
Additional data of the error occurred during a processing of the request |
|
|
Card lock type |
|
|
Card’s lock end date |
|
|
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 |
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-11-09T17:35:48.842",
"errorStatus" : "ERROR_SENDER_CARD_IS_BLOCKED"
}
Path | Type | Description |
---|---|---|
|
|
Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100] |
|
|
Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100] |
|
|
Field informing about the amount of cash transferred with decimal precision. |
|
|
This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100] |
|
|
This is the amount of commission that was added to the transaction at 0.01 currency. |
|
|
Unique transaction identifier. |
|
|
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 |
|
|
Date of transaction. |
|
|
Funding Retrieval Reference Number. |
|
|
Payment Retrieval Reference Number. |
|
|
Acquirer Reference Number |
|
|
Value: true/false determines if transaction was processed with 3ds |
|
|
Detailed information about revaluation between sender currency and receiver currency. |
|
|
Personal data of the person to whom the transfer is addressed. |
|
|
Personal data of the person who performs the transfer of cash. |
|
|
Merchant settlement currency |
|
|
Commission Fenige in merchant settlement currency |
|
|
Transaction amount in merchant settlement currency |
|
|
Status of the transaction (PENDING, APPROVED, DECLINED, REJECTED, REVERSED) |
|
|
The code of the error occurred during a processing of the request |
|
|
Card lock type |
|
|
Card’s lock end date |
|
|
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 |
HTTP/1.1 500 Internal Server Error
Content-Type: application/json
Content-Length: 69
{
"errorStatus" : "ERROR_SOMETHING_WRONG - Something went wrong."
}
Path | Type | Description |
---|---|---|
|
|
Additional data of the error occurred during a processing of the request |
3.1.5. Transaction history
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 |
---|---|
|
Returned list of transactions history. |
|
Returning the list failed. |
Example Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1118
{
"content" : [ {
"correlationId" : "e45ffe9a-8c33-40f9-8221-aca822112845",
"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,
"first" : true,
"size" : 1,
"number" : 0,
"sort" : {
"empty" : true,
"sorted" : false,
"unsorted" : true
},
"numberOfElements" : 1,
"empty" : false
}
Path | Type | Description |
---|---|---|
|
|
Unique UUID describing single transaction in system |
|
|
Date of transaction processing |
|
|
Transaction amount in pennies |
|
|
Transaction amount in USD currency in pennies. |
|
|
Transaction amount with currency |
|
|
Transaction currency |
|
|
Datacore card id used in transaction (sender card) |
|
|
Value: true/false determines if transaction was processed with 3ds |
|
|
Transaction receiver first name |
|
|
Transaction receiver last name |
|
|
Transaction receiver hidden card number |
|
|
VISA or MASTERCARD or MAESTRO |
|
|
Transaction receiver card bank name. |
|
|
Transaction sender first name. |
|
|
Transaction sender last name. |
|
|
Transaction sender hidden card numbe. |
|
|
VISA or MASTERCARD or MAESTRO |
|
|
Transaction sender card bank name. |
|
|
Transaction receiver phone number |
|
|
Transaction receiver email |
|
|
Status of the transaction (approved, reversed) |
|
|
Direction of the transaction (INCOMING, OUTGOING) |
|
|
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 |
|
|
Describes whether the page is last (true ot false) |
|
|
Total number of all pages |
|
|
Total number of all transactions |
|
|
Number of transactions on page |
|
|
Describes whether the page is first (true ot false) |
|
|
Details of sort |
|
|
Max number of transactions on page |
|
|
Page number |
|
|
Page number |
HTTP/1.1 404 Not Found
3.1.6. Transaction details
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 |
---|---|
|
Returned details of transaction. |
Example Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 327
{
"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",
"sendMoneyType" : "SENDER"
}
Path | Type | Description |
---|---|---|
|
|
Funding amount in transaction currency |
|
|
Charged amount in transaction currency |
|
|
Transaction commission with currency |
|
|
Payment amount in receiver currency |
|
|
Revaluation amount from sender to receiver currency |
|
|
Date of the transaction |
|
|
Card issuer MASTERCARD/VISA |
|
|
Transaction amount in USD currency in pennies |
|
|
Status of transaction approved/reject/decline |
|
|
Specifies the direction of the transaction currency. SENDER - the currency of the sender, RECEIVER - the currency of the receiver. |
3.2. Card to Card 3D Secure
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. |
3.2.1. Request
Example HTTP Request
POST /api/v2/client/send-money-3ds HTTP/1.1
Content-Type: application/vnd.sendmoney3ds.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 1094
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" : "986e54fa-a088-4c7a-b8f7-9e51dfd806bf"
},
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"requestId" : "d9c9aebf-b749-4103-9a1d-88a6e052e766",
"sender" : {
"type" : "PLAIN",
"firstName" : "Mark",
"lastName" : "Smith",
"street" : "Olszewskiego",
"houseNumber" : "17A",
"city" : "Lublin",
"postalCode" : "20-400",
"flatNumber" : "2",
"email" : "senderEmail@fenige.pl",
"birthDate" : "2024-11-12",
"cardNumber" : "5117964247989169",
"expirationDate" : "03/26",
"personalId" : "AGC688910",
"currency" : "PLN"
},
"receiver" : {
"type" : "PLAIN",
"firstName" : "Rob",
"lastName" : "Wring",
"birthDate" : "2024-11-12",
"cardNumber" : "5117964247989169",
"currency" : "PLN",
"countryOfResidence" : "PL"
}
}
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 |
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. |
subMerchantName |
String |
Optional |
Identifier assigned by the Marketplace to each sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
subMerchantCountry |
String |
Optional |
The field to distinguish the country location of the sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
sender |
Object |
Required |
@NotNull |
Sender PLAIN Sender TOKEN - PAN_ONLY Sender TOKEN - CRYPTOGRAM_3DS Sender ENCRYPTED_TOKEN Google Sender ENCRYPTED_TOKEN Apple Sender DATACORE |
receiver |
Object |
Required |
@NotNull |
Receiver PLAIN Receiver TOKEN Receiver ENCRYPTED_TOKEN Google Receiver ENCRYPTED_TOKEN Apple Receiver CASH Receiver DATACORE Receiver PHONE |
outside3ds.cavv |
String |
Required |
@NotNull, @Must be base 64 encoded, @Size must be between 28 and 28 inclusive |
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 |
Required |
@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. |
POST /api/v2/client/send-money-3ds HTTP/1.1
Content-Type: application/vnd.sendmoney3ds.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 1233
Host: java-staging.fenige.pl:8181
{
"amount" : 1000,
"merchantUrl" : "https://fenige.pl/payments",
"addressIp" : "192.168.0.1",
"type" : "SENDER",
"outside3ds" : {
"cavv" : "jEu04WZns7pbARAApU4qgNdJTag=",
"authenticationStatus" : "Y",
"eci" : "01",
"transactionXId" : "2cec5982-b861-4b5d-bd88-ec64643b4857"
},
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"requestId" : "49b05f9e-65d6-4312-bddb-5d16b02ad834",
"sender" : {
"type" : "TOKEN",
"firstName" : "Mark",
"lastName" : "Smith",
"street" : "Olszewskiego",
"houseNumber" : "17A",
"city" : "Lublin",
"postalCode" : "20-400",
"flatNumber" : "2",
"email" : "senderEmail@fenige.pl",
"tokenType" : "APPLE_PAY",
"expirationDate" : "03/26",
"tokenPan" : "5117964247989169",
"paymentData" : {
"eciIndicator" : "02",
"onlinePaymentCryptogram" : "/0OL1zEABL+gk70RYJ8lMAABAAA="
},
"country" : "PL",
"personalId" : "AGC688910"
},
"receiver" : {
"type" : "TOKEN",
"firstName" : "Rob",
"lastName" : "Wring",
"email" : "receiverEmail@fenige.pl",
"birthDate" : "2024-11-12",
"currency" : "PLN",
"tokenPan" : "5117964247989169",
"countryOfResidence" : "PL"
}
}
Request fields
Path | Type | Validation | Rule | Description |
---|---|---|---|---|
amount |
Number |
Required |
@NotNull, positive |
The total transfer amount (in pennies) |
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. |
subMerchantName |
String |
Optional |
Identifier assigned by the Marketplace to each sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
subMerchantCountry |
String |
Optional |
The field to distinguish the country location of the sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
sender |
Object |
Required |
@NotNull |
Sender PLAIN Sender TOKEN - PAN_ONLY Sender TOKEN - CRYPTOGRAM_3DS Sender ENCRYPTED_TOKEN Google Sender ENCRYPTED_TOKEN Apple Sender DATACORE |
receiver |
Object |
Required |
@NotNull |
Receiver PLAIN Receiver TOKEN Receiver ENCRYPTED_TOKEN Google Receiver ENCRYPTED_TOKEN Apple Receiver CASH Receiver DATACORE Receiver PHONE |
outside3ds.cavv |
String |
Required |
@NotNull, @Must be base 64 encoded, @Size must be between 28 and 28 inclusive |
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 |
Required |
@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. |
POST /api/v2/client/send-money-3ds HTTP/1.1
Content-Type: application/vnd.sendmoney3ds.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 1142
Host: java-staging.fenige.pl:8181
{
"amount" : 1000,
"merchantUrl" : "https://fenige.pl/payments",
"addressIp" : "192.168.0.1",
"type" : "SENDER",
"outside3ds" : {
"cavv" : "jEu04WZns7pbARAApU4qgNdJTag=",
"authenticationStatus" : "Y",
"eci" : "01",
"transactionXId" : "9485d59b-f9f4-443e-8aef-39a9db2e8f3f"
},
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"requestId" : "20b6f404-bcf7-48ea-8220-04222b861b7c",
"sender" : {
"type" : "TOKEN",
"firstName" : "Mark",
"lastName" : "Smith",
"street" : "Olszewskiego",
"houseNumber" : "17A",
"city" : "Lublin",
"postalCode" : "20-400",
"flatNumber" : "2",
"email" : "senderEmail@fenige.pl",
"tokenType" : "GOOGLE_PAY",
"authMethod" : "PAN_ONLY",
"expirationDate" : "03/26",
"tokenPan" : "5117964247989169",
"country" : "PL",
"personalId" : "AGC688910"
},
"receiver" : {
"type" : "TOKEN",
"firstName" : "Rob",
"lastName" : "Wring",
"email" : "receiverEmail@fenige.pl",
"birthDate" : "2024-11-12",
"currency" : "PLN",
"tokenPan" : "5117964247989169",
"countryOfResidence" : "PL"
}
}
Request fields
Path | Type | Validation | Rule | Description |
---|---|---|---|---|
amount |
Number |
Required |
@NotNull, positive |
The total transfer amount (in pennies) |
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. |
subMerchantName |
String |
Optional |
Identifier assigned by the Marketplace to each sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
subMerchantCountry |
String |
Optional |
The field to distinguish the country location of the sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
sender |
Object |
Required |
@NotNull |
Sender PLAIN Sender TOKEN - PAN_ONLY Sender TOKEN - CRYPTOGRAM_3DS Sender ENCRYPTED_TOKEN Google Sender ENCRYPTED_TOKEN Apple Sender DATACORE |
receiver |
Object |
Required |
@NotNull |
Receiver PLAIN Receiver TOKEN Receiver ENCRYPTED_TOKEN Google Receiver ENCRYPTED_TOKEN Apple Receiver CASH Receiver DATACORE Receiver PHONE |
outside3ds.cavv |
String |
Required |
@NotNull, @Must be base 64 encoded, @Size must be between 28 and 28 inclusive |
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 |
Required |
@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. |
POST /api/v2/client/send-money-3ds HTTP/1.1
Content-Type: application/vnd.sendmoney3ds.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 9255
Host: java-staging.fenige.pl:8181
{
"amount" : 1000,
"merchantUrl" : "https://fenige.pl/payments",
"addressIp" : "192.168.0.1",
"type" : "SENDER",
"outside3ds" : {
"cavv" : "jEu04WZns7pbARAApU4qgNdJTag=",
"authenticationStatus" : "Y",
"eci" : "01",
"transactionXId" : "4e9be458-b4d1-492d-ac61-96b60088c5c0"
},
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"requestId" : "0ab89875-e762-4af9-a028-4a487a0ff668",
"sender" : {
"type" : "ENCRYPTED_TOKEN",
"firstName" : "Mark",
"lastName" : "Smith",
"street" : "Olszewskiego",
"houseNumber" : "17A",
"city" : "Lublin",
"postalCode" : "20-400",
"flatNumber" : "2",
"email" : "senderEmail@fenige.pl",
"token" : {
"paymentData" : {
"version" : "EC_v1",
"data" : "KkiE8GswNdN7jLbbMsCheM+gWdd3vcSw/y4meFdAhRPrPAaTj1GBOGVRVVEfO7oTlsRgv9fl/4IwHGjPd7sLHkcxlRkW7amHcXEszbMwvDBE8656Xc0FxGxEvt6+xY17lPwb7/izmAkSXLdk0geqV0mrQXsYR+II+HI/OKkgXl5hIFS4+9/Tw1Yi1uSF/XRfTXVJF4TLaQF9Ydo+gltIHX82eBTLPZLaHWW9JY0UNUoXkIQQKnaRWb0nlEI+H8apL9NpKrWAknJSZFayDGBkUChAqpqOn5tcL+zdkdt5mmpY0qcK+h5vKluaPg5odq+QQUsn+ivFmnktorjzMsSL+NmMXxVNsFagtGVV4ssGEUEfz7wkIZFzfnlhhmQeHTsdHb+tgmOCayMHQrLUG/DEYGt9Y2s56mJrvr61IU7CYg==",
"signature" : "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",
"header" : {
"ephemeralPublicKey" : "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEO+01GJPfNlHcI2UWUlWExM0aFrewDOuCZbVn1JZgkuM3qtWg9STbwzNDsFtt4xy1hNtOGJVfB65cudVcW3KpmA==",
"publicKeyHash" : "vw4LZqhFE7M9d3oqoOAP4O7X8TpEYiEALkRuP/GjBVE=",
"transactionId" : "fbdf0dbd5cfacfdc8ef214340ff69b7f52af24b200bd7873cf9bd8dbe84ab601"
}
},
"paymentMethodApple" : {
"displayName" : "Visa 1141",
"network" : "Visa",
"type" : "debit"
},
"transactionIdentifier" : "fbdf0dbd5cfacfdc8ef214340ff69b7f52af24b200bd7873cf9bd8dbe84ab601"
},
"tokenType" : "APPLE_PAY",
"country" : "PL",
"personalId" : "AGC688910"
},
"receiver" : {
"type" : "ENCRYPTED_TOKEN",
"firstName" : "Rob",
"lastName" : "Wring",
"email" : "receiverEmail@fenige.pl",
"birthDate" : "2024-11-12",
"token" : {
"paymentData" : {
"version" : "EC_v1",
"data" : "KkiE8GswNdN7jLbbMsCheM+gWdd3vcSw/y4meFdAhRPrPAaTj1GBOGVRVVEfO7oTlsRgv9fl/4IwHGjPd7sLHkcxlRkW7amHcXEszbMwvDBE8656Xc0FxGxEvt6+xY17lPwb7/izmAkSXLdk0geqV0mrQXsYR+II+HI/OKkgXl5hIFS4+9/Tw1Yi1uSF/XRfTXVJF4TLaQF9Ydo+gltIHX82eBTLPZLaHWW9JY0UNUoXkIQQKnaRWb0nlEI+H8apL9NpKrWAknJSZFayDGBkUChAqpqOn5tcL+zdkdt5mmpY0qcK+h5vKluaPg5odq+QQUsn+ivFmnktorjzMsSL+NmMXxVNsFagtGVV4ssGEUEfz7wkIZFzfnlhhmQeHTsdHb+tgmOCayMHQrLUG/DEYGt9Y2s56mJrvr61IU7CYg==",
"signature" : "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",
"header" : {
"ephemeralPublicKey" : "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEO+01GJPfNlHcI2UWUlWExM0aFrewDOuCZbVn1JZgkuM3qtWg9STbwzNDsFtt4xy1hNtOGJVfB65cudVcW3KpmA==",
"publicKeyHash" : "vw4LZqhFE7M9d3oqoOAP4O7X8TpEYiEALkRuP/GjBVE=",
"transactionId" : "fbdf0dbd5cfacfdc8ef214340ff69b7f52af24b200bd7873cf9bd8dbe84ab601"
}
},
"paymentMethodApple" : {
"displayName" : "Visa 1141",
"network" : "Visa",
"type" : "debit"
},
"transactionIdentifier" : "fbdf0dbd5cfacfdc8ef214340ff69b7f52af24b200bd7873cf9bd8dbe84ab601"
},
"tokenType" : "APPLE_PAY",
"currency" : "PLN",
"countryOfResidence" : "PL"
}
}
Request fields
Path | Type | Validation | Rule | Description |
---|---|---|---|---|
amount |
Number |
Required |
@NotNull, positive |
The total transfer amount (in pennies) |
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. |
subMerchantName |
String |
Optional |
Identifier assigned by the Marketplace to each sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
subMerchantCountry |
String |
Optional |
The field to distinguish the country location of the sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
sender |
Object |
Required |
@NotNull |
Sender PLAIN Sender TOKEN - PAN_ONLY Sender TOKEN - CRYPTOGRAM_3DS Sender ENCRYPTED_TOKEN Google Sender ENCRYPTED_TOKEN Apple Sender CASH Sender DATACORE Sender BLIK |
receiver |
Object |
Required |
@NotNull |
Receiver PLAIN Receiver TOKEN Receiver ENCRYPTED_TOKEN Google Receiver ENCRYPTED_TOKEN Apple Receiver CASH Receiver DATACORE Receiver PHONE Receiver ACCOUNT |
outside3ds.cavv |
String |
Required |
@NotNull, @Must be base 64 encoded, @Size must be between 28 and 28 inclusive |
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 |
Required |
@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. |
POST /api/v2/client/send-money-3ds HTTP/1.1
Content-Type: application/vnd.sendmoney3ds.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 3787
Host: java-staging.fenige.pl:8181
{
"amount" : 1000,
"merchantUrl" : "https://fenige.pl/payments",
"addressIp" : "192.168.0.1",
"type" : "SENDER",
"outside3ds" : {
"cavv" : "jEu04WZns7pbARAApU4qgNdJTag=",
"authenticationStatus" : "Y",
"eci" : "01",
"transactionXId" : "70ea8a62-1ad8-4db3-bd91-9ff7ef57f0bd"
},
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"requestId" : "419c8c81-4f13-4966-8ab1-96bc12a4bd69",
"sender" : {
"type" : "ENCRYPTED_TOKEN",
"firstName" : "Mark",
"lastName" : "Smith",
"street" : "Olszewskiego",
"houseNumber" : "17A",
"city" : "Lublin",
"postalCode" : "20-400",
"flatNumber" : "2",
"email" : "senderEmail@fenige.pl",
"token" : {
"protocolVersion" : "ECv2",
"signature" : "MEQCIF9nQIYF80Ooh3eQIomENLsNyD59eQOEmaanHhde3clkAiBfLgLvL+LZxg+4uORZ+l3/Fj3BQds2s9AEKDAlLgN5LA==",
"intermediateSigningKey" : {
"signedKey" : "{\"keyValue\":\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEOIBO91xZ1o+EyRzrYMh3arsVSByFJyTsKaxiRIYqNiYUwjM0nYaRG5eRe99uwHVRmwF9NHWd5ko/wM8MtSalVw\\u003d\\u003d\",\"keyExpiration\":\"1726828035723\"}",
"signatures" : [ "MEYCIQCECDF8WtqPyp50IBsCat8KWv/7fTWHObezihFLK47LwgIhAJEf2SST42TNVokNA/HjAVgvi4BAbvNCCPI6IOBEmjwO" ]
},
"signedMessage" : "{\"encryptedMessage\":\"ynYNjwRPt1rzU7TxsthCpOqgk6CI2iLJxfnKjZDPCL6xYxvTyxPC15AQ3+9q7C1T5ogYRMrv9VKUryq9lYIrBuHnLBlxhXU+VXubQG7fEha4PajF+rYVng3o8sNoXak5MaVY+AkAwQLCp1kr9j7w8+O7lPnR3hEJHx1L1nABdJhgzxml97sBu6ayb6et7UgSkyI3aTvTcUO2m445N12qEe5P+ZbH3yRM30D5k7uzkxiNCgcM/urjBp3K8iuoEElytQ65YuKhSi87OaeyRVB+BXmmm2j50nV1MFQKyd34NnKOLCrdbNvRXD0hT4qz3iq9lhTZgWzcOreTpVE3EDZ21nMZKQnj3tt5JphXlE4tsJgbvhGC/ibgH9Momcew8nL0vsQbxvWwfh/l6In2zi0Ud7vUFH4fb6LaT2bAaOh1qFq3ippDgB5riXhLX+t+sQy+RdpBTpCA0cZxUjPkMPPH0NRnnWBbTAC/SKwsSQmjxSJcwc6lIdpj3+K6IM7/4MqInY8N2koKu6iHuLucjPN7fsJd26rUZuuo916QMveDMuA\\u003d\",\"ephemeralPublicKey\":\"BK2eVSFeDxI+kP7d3L6sFmdYupgKkVOVzzj9w0IFdgS6eEo0xwk50gzDExoshL1uqJi2qGEiCubuidoNiFEWCeo\\u003d\",\"tag\":\"/M30LDIIqFQRW8DY1Z7lL6jWSry3vF8WNC9kFVUgHYQ\\u003d\"}"
},
"tokenType" : "GOOGLE_PAY",
"country" : "PL",
"personalId" : "AGC688910"
},
"receiver" : {
"type" : "ENCRYPTED_TOKEN",
"firstName" : "Rob",
"lastName" : "Wring",
"email" : "receiverEmail@fenige.pl",
"birthDate" : "2024-11-12",
"token" : {
"protocolVersion" : "ECv2",
"signature" : "MEQCIF9nQIYF80Ooh3eQIomENLsNyD59eQOEmaanHhde3clkAiBfLgLvL+LZxg+4uORZ+l3/Fj3BQds2s9AEKDAlLgN5LA==",
"intermediateSigningKey" : {
"signedKey" : "{\"keyValue\":\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEOIBO91xZ1o+EyRzrYMh3arsVSByFJyTsKaxiRIYqNiYUwjM0nYaRG5eRe99uwHVRmwF9NHWd5ko/wM8MtSalVw\\u003d\\u003d\",\"keyExpiration\":\"1726828035723\"}",
"signatures" : [ "MEYCIQCECDF8WtqPyp50IBsCat8KWv/7fTWHObezihFLK47LwgIhAJEf2SST42TNVokNA/HjAVgvi4BAbvNCCPI6IOBEmjwO" ]
},
"signedMessage" : "{\"encryptedMessage\":\"ynYNjwRPt1rzU7TxsthCpOqgk6CI2iLJxfnKjZDPCL6xYxvTyxPC15AQ3+9q7C1T5ogYRMrv9VKUryq9lYIrBuHnLBlxhXU+VXubQG7fEha4PajF+rYVng3o8sNoXak5MaVY+AkAwQLCp1kr9j7w8+O7lPnR3hEJHx1L1nABdJhgzxml97sBu6ayb6et7UgSkyI3aTvTcUO2m445N12qEe5P+ZbH3yRM30D5k7uzkxiNCgcM/urjBp3K8iuoEElytQ65YuKhSi87OaeyRVB+BXmmm2j50nV1MFQKyd34NnKOLCrdbNvRXD0hT4qz3iq9lhTZgWzcOreTpVE3EDZ21nMZKQnj3tt5JphXlE4tsJgbvhGC/ibgH9Momcew8nL0vsQbxvWwfh/l6In2zi0Ud7vUFH4fb6LaT2bAaOh1qFq3ippDgB5riXhLX+t+sQy+RdpBTpCA0cZxUjPkMPPH0NRnnWBbTAC/SKwsSQmjxSJcwc6lIdpj3+K6IM7/4MqInY8N2koKu6iHuLucjPN7fsJd26rUZuuo916QMveDMuA\\u003d\",\"ephemeralPublicKey\":\"BK2eVSFeDxI+kP7d3L6sFmdYupgKkVOVzzj9w0IFdgS6eEo0xwk50gzDExoshL1uqJi2qGEiCubuidoNiFEWCeo\\u003d\",\"tag\":\"/M30LDIIqFQRW8DY1Z7lL6jWSry3vF8WNC9kFVUgHYQ\\u003d\"}"
},
"tokenType" : "GOOGLE_PAY",
"currency" : "PLN",
"countryOfResidence" : "PL"
}
}
Request fields
Path | Type | Validation | Rule | Description |
---|---|---|---|---|
amount |
Number |
Required |
@NotNull, positive |
The total transfer amount (in pennies) |
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. |
subMerchantName |
String |
Optional |
Identifier assigned by the Marketplace to each sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
subMerchantCountry |
String |
Optional |
The field to distinguish the country location of the sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
sender |
Object |
Required |
@NotNull |
Sender PLAIN Sender TOKEN - PAN_ONLY Sender TOKEN - CRYPTOGRAM_3DS Sender ENCRYPTED_TOKEN Google Sender ENCRYPTED_TOKEN Apple Sender CASH Sender DATACORE Sender BLIK |
receiver |
Object |
Required |
@NotNull |
Receiver PLAIN Receiver TOKEN Receiver ENCRYPTED_TOKEN Google Receiver ENCRYPTED_TOKEN Apple Receiver CASH Receiver DATACORE Receiver PHONE Receiver ACCOUNT |
outside3ds.cavv |
String |
Required |
@NotNull, @Must be base 64 encoded, @Size must be between 28 and 28 inclusive |
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 |
Required |
@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. |
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: 1120
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" : "d302cee1-5853-4c53-aa3c-5c63b63cfbef"
},
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"requestId" : "1cb10cad-43a0-4fd3-bf88-bc72ef760c8a",
"sender" : {
"type" : "PLAIN",
"firstName" : "Mark",
"lastName" : "Smith",
"street" : "Olszewskiego",
"houseNumber" : "17A",
"city" : "Lublin",
"postalCode" : "20-400",
"flatNumber" : "2",
"email" : "senderEmail@fenige.pl",
"birthDate" : "2024-11-12",
"cardNumber" : "5117964247989169",
"expirationDate" : "03/26",
"personalId" : "AGC688910",
"currency" : "PLN"
},
"receiver" : {
"type" : "DATACORE",
"firstName" : "Rob",
"lastName" : "Wring",
"email" : "receiverEmail@fenige.pl",
"birthDate" : "2024-11-12",
"cardId" : 1234,
"currency" : "PLN",
"countryOfResidence" : "PL"
}
}
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 |
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. |
subMerchantName |
String |
Optional |
Identifier assigned by the Marketplace to each sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
subMerchantCountry |
String |
Optional |
The field to distinguish the country location of the sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
sender |
Object |
Required |
@NotNull |
Sender PLAIN Sender TOKEN - PAN_ONLY Sender TOKEN - CRYPTOGRAM_3DS Sender ENCRYPTED_TOKEN Google Sender ENCRYPTED_TOKEN Apple Sender DATACORE |
receiver |
Object |
Required |
@NotNull |
Receiver PLAIN Receiver TOKEN Receiver ENCRYPTED_TOKEN Google Receiver ENCRYPTED_TOKEN Apple Receiver CASH Receiver DATACORE Receiver PHONE |
outside3ds.cavv |
String |
Required |
@NotNull, @Must be base 64 encoded, @Size must be between 28 and 28 inclusive |
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 |
Required |
@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. |
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: 1015
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" : "4072be1f-1ff5-4dcf-96c4-be17843d06ad"
},
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"requestId" : "dd123df0-5a48-49d2-a8b6-6ecdc0e02357",
"sender" : {
"type" : "DATACORE",
"firstName" : "Mark",
"lastName" : "Smith",
"street" : "Olszewskiego",
"houseNumber" : "17A",
"city" : "Lublin",
"postalCode" : "20-400",
"flatNumber" : "2",
"email" : "senderEmail@fenige.pl",
"birthDate" : "2024-11-12",
"cardId" : 1234,
"currency" : "PLN"
},
"receiver" : {
"type" : "PLAIN",
"firstName" : "Rob",
"lastName" : "Wring",
"birthDate" : "2024-11-12",
"cardNumber" : "5117964247989169",
"currency" : "PLN",
"countryOfResidence" : "PL"
}
}
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 |
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. |
subMerchantName |
String |
Optional |
Identifier assigned by the Marketplace to each sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
subMerchantCountry |
String |
Optional |
The field to distinguish the country location of the sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
sender |
Object |
Required |
@NotNull |
Sender PLAIN Sender TOKEN - PAN_ONLY Sender TOKEN - CRYPTOGRAM_3DS Sender ENCRYPTED_TOKEN Google Sender ENCRYPTED_TOKEN Apple Sender DATACORE |
receiver |
Object |
Required |
@NotNull |
Receiver PLAIN Receiver TOKEN Receiver ENCRYPTED_TOKEN Google Receiver ENCRYPTED_TOKEN Apple Receiver CASH Receiver DATACORE Receiver PHONE |
outside3ds.cavv |
String |
Required |
@NotNull, @Must be base 64 encoded, @Size must be between 28 and 28 inclusive |
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 |
Required |
@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. |
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: 1041
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" : "f3b50c20-e661-4d9c-867e-d91245911afb"
},
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"requestId" : "d923edb3-9052-4057-85f9-c1a6bbcb8b98",
"sender" : {
"type" : "DATACORE",
"firstName" : "Mark",
"lastName" : "Smith",
"street" : "Olszewskiego",
"houseNumber" : "17A",
"city" : "Lublin",
"postalCode" : "20-400",
"flatNumber" : "2",
"email" : "senderEmail@fenige.pl",
"birthDate" : "2024-11-12",
"cardId" : 1234,
"currency" : "PLN"
},
"receiver" : {
"type" : "DATACORE",
"firstName" : "Rob",
"lastName" : "Wring",
"email" : "receiverEmail@fenige.pl",
"birthDate" : "2024-11-12",
"cardId" : 1234,
"currency" : "PLN",
"countryOfResidence" : "PL"
}
}
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 |
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. |
subMerchantName |
String |
Optional |
Identifier assigned by the Marketplace to each sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
subMerchantCountry |
String |
Optional |
The field to distinguish the country location of the sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
sender |
Object |
Required |
@NotNull |
Sender PLAIN Sender TOKEN - PAN_ONLY Sender TOKEN - CRYPTOGRAM_3DS Sender ENCRYPTED_TOKEN Google Sender ENCRYPTED_TOKEN Apple Sender DATACORE |
receiver |
Object |
Required |
@NotNull |
Receiver PLAIN Receiver TOKEN Receiver ENCRYPTED_TOKEN Google Receiver ENCRYPTED_TOKEN Apple Receiver CASH Receiver DATACORE Receiver PHONE |
outside3ds.cavv |
String |
Required |
@NotNull, @Must be base 64 encoded, @Size must be between 28 and 28 inclusive |
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 |
Required |
@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. |
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: 1011
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" : "e67e678c-2714-4bc9-812f-0fcfbc612113"
},
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"requestId" : "3b026179-ba45-4cac-b3ec-1abaa2df6c94",
"sender" : {
"type" : "DATACORE",
"firstName" : "Mark",
"lastName" : "Smith",
"street" : "Olszewskiego",
"houseNumber" : "17A",
"city" : "Lublin",
"postalCode" : "20-400",
"flatNumber" : "2",
"email" : "senderEmail@fenige.pl",
"birthDate" : "2024-11-12",
"cardId" : 1234,
"currency" : "PLN"
},
"receiver" : {
"type" : "PHONE",
"firstName" : "Rob",
"lastName" : "Wring",
"phoneNumber" : "48123777619",
"birthDate" : "2024-11-12",
"currency" : "PLN",
"countryOfResidence" : "PL"
}
}
Request fields .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 = 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. |
subMerchantName |
String |
Optional |
Identifier assigned by the Marketplace to each sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
subMerchantCountry |
String |
Optional |
The field to distinguish the country location of the sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
sender |
Object |
Required |
@NotNull |
Sender PLAIN Sender TOKEN - PAN_ONLY Sender TOKEN - CRYPTOGRAM_3DS Sender ENCRYPTED_TOKEN Google Sender ENCRYPTED_TOKEN Apple Sender DATACORE |
receiver |
Object |
Required |
@NotNull |
Receiver PLAIN Receiver TOKEN Receiver ENCRYPTED_TOKEN Google Receiver ENCRYPTED_TOKEN Apple Receiver CASH Receiver DATACORE Receiver PHONE |
outside3ds.cavv |
String |
Required |
@NotNull, @Must be base 64 encoded, @Size must be between 28 and 28 inclusive |
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 |
Required |
@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. |
POST /api/v2/client/send-money-3ds HTTP/1.1
Content-Type: application/vnd.sendmoney3ds.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 1161
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" : "98ff3a0b-9da3-45d9-93de-6b38acbdc55d"
},
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"requestId" : "b67c109e-f4cc-4056-b033-14591f0edc4b",
"sender" : {
"type" : "PLAIN",
"firstName" : "Mark",
"lastName" : "Smith",
"street" : "Olszewskiego",
"houseNumber" : "17A",
"city" : "Lublin",
"postalCode" : "20-400",
"flatNumber" : "2",
"email" : "senderEmail@fenige.pl",
"birthDate" : "2024-11-12",
"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"
}
}
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 |
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. |
subMerchantName |
String |
Optional |
Identifier assigned by the Marketplace to each sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
subMerchantCountry |
String |
Optional |
The field to distinguish the country location of the sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
sender |
Object |
Required |
@NotNull |
Sender PLAIN Sender TOKEN - PAN_ONLY Sender TOKEN - CRYPTOGRAM_3DS Sender ENCRYPTED_TOKEN Google Sender ENCRYPTED_TOKEN Apple Sender DATACORE |
receiver |
Object |
Required |
@NotNull |
Receiver PLAIN Receiver TOKEN Receiver ENCRYPTED_TOKEN Google Receiver ENCRYPTED_TOKEN Apple Receiver CASH Receiver DATACORE Receiver PHONE |
outside3ds.cavv |
String |
Required |
@NotNull, @Must be base 64 encoded, @Size must be between 28 and 28 inclusive |
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 |
Required |
@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. |
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: 1082
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" : "20416a48-72ca-46b9-a9e7-8d06702636b9"
},
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"requestId" : "8ef3e21d-ff41-447f-ad7b-640070a59190",
"sender" : {
"type" : "DATACORE",
"firstName" : "Mark",
"lastName" : "Smith",
"street" : "Olszewskiego",
"houseNumber" : "17A",
"city" : "Lublin",
"postalCode" : "20-400",
"flatNumber" : "2",
"email" : "senderEmail@fenige.pl",
"birthDate" : "2024-11-12",
"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"
}
}
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 |
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. |
subMerchantName |
String |
Optional |
Identifier assigned by the Marketplace to each sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
subMerchantCountry |
String |
Optional |
The field to distinguish the country location of the sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
sender |
Object |
Required |
@NotNull |
Sender PLAIN Sender TOKEN - PAN_ONLY Sender TOKEN - CRYPTOGRAM_3DS Sender ENCRYPTED_TOKEN Google Sender ENCRYPTED_TOKEN Apple Sender DATACORE |
receiver |
Object |
Required |
@NotNull |
Receiver PLAIN Receiver TOKEN Receiver ENCRYPTED_TOKEN Google Receiver ENCRYPTED_TOKEN Apple Receiver CASH Receiver DATACORE Receiver PHONE |
outside3ds.cavv |
String |
Required |
@NotNull, @Must be base 64 encoded, @Size must be between 28 and 28 inclusive |
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 |
Required |
@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. |
3.2.2. Response
Response status
Status | Description |
---|---|
|
Returned if the transaction completes successfully. |
|
Returned list of field name which has validation errors. |
|
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. |
|
Returned e.g. when a different transaction with the provided requestId has already been registered in the system. |
|
Returned when API-TOKEN was broken. |
|
Returned when server understood the request but refuses to authorize it. |
Example HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 54
{
"orderId": "234abf25-c35f-a263-a402-cbaf874f137a"
}
Path | Type | Description |
---|---|---|
|
|
OrderId |
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."
}
}
HTTP/1.1 202 Accepted
Content-Type: application/json
Content-Length: 56
{
"orderId" : "1f1df8f3-b635-491c-8cbd-bd9c15ce869f"
}
Path | Type | Description |
---|---|---|
|
|
Transaction order-id |
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."
}
}
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"
}
Path | Description |
---|---|
|
|
|
|
|
|
|
|
|
|
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
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
Parameter | Description |
---|---|
|
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 |
---|---|
|
Returned if the transaction completes successfully. |
|
Returned when transaction was registered for processing. Check status in a while. |
|
Returned when user provides wrong order-id or transaction was failed or was Declined. |
Example HTTP Response
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"
}
}
Path | Type | Description |
---|---|---|
|
|
Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100] |
|
|
Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100] |
|
|
Field informing about the amount of cash transferred with decimal precision. |
|
|
This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100] |
|
|
This is the amount of commission that was added to the transaction at 0.01 currency. |
|
|
Unique transaction identifier. |
|
|
Date of transaction. |
|
|
Value: true/false determines if transaction was processed with 3ds |
|
|
Detailed information about revaluation between sender and receiver currency. |
|
|
Personal data of the person to whom the transfer is addressed. |
|
|
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 |
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"
}
}
Path | Type | Description |
---|---|---|
|
|
Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100] |
|
|
Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100] |
|
|
Field informing about the amount of cash transferred with decimal precision. |
|
|
This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100] |
|
|
This is the amount of commission that was added to the transaction at 0.01 currency. |
|
|
Unique transaction identifier. |
|
|
Date of transaction. |
|
|
Value: true/false determines if transaction was processed with 3ds |
|
|
Detailed information about revaluation between sender and receiver currency. |
|
|
Personal data of the person to whom the transfer is addressed. |
|
|
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 |
HTTP/1.1 203 Non-Authoritative Information
After you get 203 you need to check status in a while because we are processing this transaction and if you don’t get a response (200 - succeeded or 500 - declined) within 60 seconds then please contact us. |
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 |
|
REJECTED - Monitoring rule which is designed to prevent the acceptance of names or surnames that do not contain vowels or consonants |
|
CODE_XX - is MasterCard response code (ISO 8583) |
|
This card is not supported |
|
Card is blocked for 1 hour in Fenige |
|
User is blocked in Fenige |
|
Bin is blocked for 1 hour in Fenige |
|
Funding bank is blocked in Fenige |
|
Payment bank is blocked in Fenige |
|
Funding transaction was declined and payment not send |
|
Payment transaction was declined and funding was reversed |
|
A connection error occurred to Acquirer service |
|
User was found on the stop list |
|
Acceptance network is unavailable |
|
No currently effective rates found in the database |
|
Currency is not supported |
|
Currency is not supported by Merchant |
|
Transaction limit for single transaction exceeded |
|
Daily transaction limit for amount per card exceeded |
|
Daily transaction limit for count per card exceeded |
|
Weekly transaction limit for amount per card exceeded |
|
Monthly transaction limit for amount per card exceeded |
|
Monthly transaction limit for count per card exceeded |
|
Daily cumulative limit per card was exceeded |
|
Monthly cumulative limit per card was exceeded |
|
Daily cumulative limit per merchant transactions using mastercard cards was exceeded |
|
Monthly cumulative limit per merchant transactions using mastercard cards was exceeded |
|
Daily cumulative limit per merchant transactions using visa cards was exceeded |
|
Monthly cumulative limit per merchant transactions using visa cards was exceeded |
|
Daily cumulative limit per merchant transactions using mastercard and visa cards was exceeded |
|
Monthly cumulative limit per merchant transactions using mastercard and visa cards was exceeded |
|
Sender’s card is blocked |
|
Receiver’s card is blocked |
|
User acting as sender is blocked |
|
User acting as receiver is blocked |
|
BIN of sender’s card is blocked |
|
BIN of receiver’s card is blocked |
|
Amount is higher than acceptable limit |
|
Couldn’t established connection to Monitoring service |
|
Some unrecognized error occurred |
|
The transaction user’s personal data verified as incorrect on the verification service. Transaction rejected. |
|
Funding transaction declined - mip response timeout |
|
Payment transaction declined - mip response timeout |
|
Funding process failed and it is need to manual verification of transaction |
|
Payment process failed and it is need to manual verification of transaction |
|
Funding transaction declined - mip_proxy response timeout |
|
Payment transaction declined - mip_proxy response timeout |
|
Error finalize 3ds not authenticated. MPI return one of statuses: N -The customer failed authentication, and the transaction is denied. |
|
Error no 3ds authorization, when User authenticates successfully but after 15 minutes or User doesn’t authenticate. |
|
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. |
|
An error occurred while processing |
|
An error occurred while processing |
|
An error occurred while processing |
|
Amount exceeds current merchant deposit limit |
|
Merchant has configured a different version of 3DS than specified in the request |
|
Some unrecognized, internal error occurred in MPI2 service |
|
Required configuration data of Merchant are not complete to finish 3DS 2.X process |
|
TransactionXId is invalid for card number specified in the request, 3DS 2.X flow invoked for other card number 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 |
|
Card not found by transactionXId |
|
Card authentication does not match to payment type |
|
Error 3DS 2.X processing failed |
|
Transactions without 3ds above 30 EUR (the blockade applies only to EU countries) |
|
Error transaction not exists |
|
Card was not found |
|
Problem with DC |
|
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. |
|
This error may occur if card’s country is other than user’s country for USA or CAN transaction for PLAIN model |
|
This error may occur if card’s country is other than user’s country for USA or CAN transaction |
|
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. |
|
Province code is not valid for USA or CAN transactions. Please update user profile |
|
Some validation error occurred |
|
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. |
|
Card expired |
|
The amount sent is too small. Enter a larger amount. |
|
The amount sent is too high. Enter a lower amount. |
|
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. |
|
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. |
|
Merchant not support the given card provider, please contact support to check merchant configuration |
|
Merchant crypto is not supported outside EEA+UK |
|
System does not allow the execution of transaction with the receiver card country. |
|
System does not allow the execution of transaction with the sender card country. |
|
Geographic scope is not permitted for this transaction |
|
Processing time of transaction was too long, transaction is declined. |
|
Transaction rejected, second transaction with merchant advice code 03 or 21 within 30 days. |
|
Transaction rejected, sender or receiver name contains fraudulent phrase. |
|
Transaction rejected, suspicious sender or receiver name. |
|
Error domestic transaction not permitted for card |
3.2.4. Check detailed status
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
Parameter | Description |
---|---|
|
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 |
---|---|
|
Returned if the transaction completes successfully. |
|
Returned when transaction was registered for processing. Check status in a while. |
|
Returned when a transaction related to the given orderId doesn’t exist. |
|
Returned when user provides wrong order-id or transaction was failed or was Declined. |
|
Returned when an internal error occur. |
Example HTTP Response
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"
}
Path | Type | Description |
---|---|---|
|
|
Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100] |
|
|
Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100] |
|
|
Field informing about the amount of cash transferred with decimal precision. |
|
|
This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100] |
|
|
This is the amount of commission that was added to the transaction at 0.01 currency. |
|
|
Unique transaction identifier. |
|
|
Date of transaction. |
|
|
Value: true/false determines if transaction was processed with 3ds |
|
|
Detailed information about revaluation between sender and receiver currency. |
|
|
Personal data of the person to whom the transfer is addressed. |
|
|
Personal data of the person who performs the transfer of cash. |
|
|
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 |
HTTP/1.1 203 Non-Authoritative Information
After you get 203 you need to check status in a while because we are processing this transaction and if you don’t get a response (200 - succeeded or 500 - declined) within 60 seconds then please contact us. |
HTTP/1.1 404 Not Found
Content-Type: application/json
Content-Length: 51
{
"errorStatus" : "ERROR_TRANSACTION_NOT_FOUND"
}
Path | Type | Description |
---|---|---|
|
|
Additional data of the error occurred during a processing of the request |
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-11-09T17:35:50.331",
"errorStatus" : "ERROR_SENDER_CARD_IS_BLOCKED"
}
Path | Type | Description |
---|---|---|
|
|
Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100] |
|
|
Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100] |
|
|
Field informing about the amount of cash transferred with decimal precision. |
|
|
This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100] |
|
|
This is the amount of commission that was added to the transaction at 0.01 currency. |
|
|
Unique transaction identifier. |
|
|
Date of transaction. |
|
|
Value: true/false determines if transaction was processed with 3ds |
|
|
Detailed information about revaluation between sender and receiver currency. |
|
|
Personal data of the person to whom the transfer is addressed. |
|
|
Personal data of the person who performs the transfer of cash. |
|
|
Status of the transaction (PENDING, APPROVED, DECLINED, REJECTED, REVERSED) |
|
|
The code of the error occurred during a processing of the request |
|
|
Card lock type |
|
|
Card’s lock end date |
|
|
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 |
HTTP/1.1 500 Internal Server Error
Content-Type: application/json
Content-Length: 69
{
"errorStatus" : "ERROR_SOMETHING_WRONG - Something went wrong."
}
Path | Type | Description |
---|---|---|
|
|
Additional data of the error occurred during a processing of the request |
3.2.5. Transaction history
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 |
---|---|
|
Returned list of transactions history. |
|
Returning the list failed. |
Example Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1118
{
"content" : [ {
"correlationId" : "e45ffe9a-8c33-40f9-8221-aca822112845",
"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,
"first" : true,
"size" : 1,
"number" : 0,
"sort" : {
"empty" : true,
"sorted" : false,
"unsorted" : true
},
"numberOfElements" : 1,
"empty" : false
}
Path | Type | Description |
---|---|---|
|
|
Unique UUID describing single transaction in system |
|
|
Date of transaction processing |
|
|
Transaction amount in pennies |
|
|
Transaction amount in USD currency in pennies. |
|
|
Transaction amount with currency |
|
|
Transaction currency |
|
|
Datacore card id used in transaction (sender card) |
|
|
Value: true/false determines if transaction was processed with 3ds |
|
|
Transaction receiver first name |
|
|
Transaction receiver last name |
|
|
Transaction receiver hidden card number |
|
|
VISA or MASTERCARD or MAESTRO |
|
|
Transaction receiver card bank name. |
|
|
Transaction sender first name. |
|
|
Transaction sender last name. |
|
|
Transaction sender hidden card numbe. |
|
|
VISA or MASTERCARD or MAESTRO |
|
|
Transaction sender card bank name. |
|
|
Transaction receiver phone number |
|
|
Transaction receiver email |
|
|
Status of the transaction (approved, reversed) |
|
|
Direction of the transaction (INCOMING, OUTGOING) |
|
|
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 |
|
|
Describes whether the page is last (true ot false) |
|
|
Total number of all pages |
|
|
Total number of all transactions |
|
|
Number of transactions on page |
|
|
Describes whether the page is first (true ot false) |
|
|
Details of sort |
|
|
Max number of transactions on page |
|
|
Page number |
|
|
Page number |
HTTP/1.1 404 Not Found
3.2.6. Transaction details
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 |
---|---|
|
Returned details of transaction. |
Example Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 327
{
"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",
"sendMoneyType" : "SENDER"
}
Path | Type | Description |
---|---|---|
|
|
Funding amount in transaction currency |
|
|
Charged amount in transaction currency |
|
|
Transaction commission with currency |
|
|
Payment amount in receiver currency |
|
|
Revaluation amount from sender to receiver currency |
|
|
Date of the transaction |
|
|
Card issuer MASTERCARD/VISA |
|
|
Transaction amount in USD currency in pennies |
|
|
Status of transaction approved/reject/decline |
|
|
Specifies the direction of the transaction currency. SENDER - the currency of the sender, RECEIVER - the currency of the receiver. |
3.3. Payouts from deposit
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. |
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.
Now on the 'Payouts from deposit' method it is possible to process transactions with Google Pay, Apple Pay, Visa, Mastercard tokens. All you need to do is enter a token in the receiver.cardNumber field. Only for Payouts API!
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.3.1. Request
Example HTTP Request
POST /api/v2/client/send-money HTTP/1.1
Content-Type: application/vnd.sendmoney.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 777
Host: java-staging.fenige.pl:8181
{
"amount" : 1000,
"type" : "RECEIVER",
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"requestId" : "fed7f679-50a4-4b6f-99d0-f485029c1dce",
"transactionId" : "TRX220132AM",
"sender" : {
"type" : "CASH",
"firstName" : "Mark",
"lastName" : "Smith",
"street" : "Olszewskiego",
"houseNumber" : "17A",
"city" : "Lublin",
"postalCode" : "20-400",
"flatNumber" : "2",
"email" : "senderEmail@fenige.pl",
"birthDate" : "2024-11-12",
"personalId" : "AGC688910",
"country" : "PL"
},
"receiver" : {
"type" : "PLAIN",
"firstName" : "Rob",
"lastName" : "Wring",
"birthDate" : "2024-11-12",
"cardNumber" : "5117964247989169",
"currency" : "PLN",
"countryOfResidence" : "PL"
}
}
Request fields
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. |
subMerchantName |
String |
Optional |
Identifier assigned by the Marketplace to each sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
subMerchantCountry |
String |
Optional |
The field to distinguish the country location of the sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
sender |
Object |
Required |
@NotNull |
|
receiver |
Object |
Required |
@NotNull |
Receiver PLAIN Receiver TOKEN Receiver ENCRYPTED_TOKEN Google Receiver ENCRYPTED_TOKEN Apple Receiver CASH Receiver PHONE |
POST /api/v2/client/send-money HTTP/1.1
Content-Type: application/vnd.sendmoney.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 816
Host: java-staging.fenige.pl:8181
{
"amount" : 1000,
"type" : "RECEIVER",
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"requestId" : "81bb208f-5c96-45c9-85c8-4acee7857dbb",
"transactionId" : "TRX220132AM",
"sender" : {
"type" : "CASH",
"firstName" : "Mark",
"lastName" : "Smith",
"street" : "Olszewskiego",
"houseNumber" : "17A",
"city" : "Lublin",
"postalCode" : "20-400",
"flatNumber" : "2",
"email" : "senderEmail@fenige.pl",
"birthDate" : "2024-11-12",
"personalId" : "AGC688910",
"country" : "PL"
},
"receiver" : {
"type" : "TOKEN",
"firstName" : "Rob",
"lastName" : "Wring",
"email" : "receiverEmail@fenige.pl",
"birthDate" : "2024-11-12",
"currency" : "PLN",
"tokenPan" : "5117964247989169",
"countryOfResidence" : "PL"
}
}
Request fields
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. |
subMerchantName |
String |
Optional |
Identifier assigned by the Marketplace to each sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
subMerchantCountry |
String |
Optional |
The field to distinguish the country location of the sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
sender |
Object |
Required |
@NotNull |
|
receiver |
Object |
Required |
@NotNull |
Receiver PLAIN Receiver TOKEN Receiver ENCRYPTED_TOKEN Google Receiver ENCRYPTED_TOKEN Apple Receiver CASH Receiver PHONE |
POST /api/v2/client/send-money HTTP/1.1
Content-Type: application/vnd.sendmoney.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 847
Host: java-staging.fenige.pl:8181
{
"calculateCommissionUuid" : "9e5ec03b-141d-4c5a-9bbb-bd28f642e2b9",
"amount" : 1000,
"type" : "RECEIVER",
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"requestId" : "361dc2b9-0f96-433c-952d-a662c8aef404",
"transactionId" : "TRX220132AM",
"sender" : {
"type" : "CASH",
"firstName" : "Mark",
"lastName" : "Smith",
"street" : "Olszewskiego",
"houseNumber" : "17A",
"city" : "Lublin",
"postalCode" : "20-400",
"flatNumber" : "2",
"email" : "senderEmail@fenige.pl",
"birthDate" : "2024-11-12",
"personalId" : "AGC688910",
"country" : "PL"
},
"receiver" : {
"type" : "PLAIN",
"firstName" : "Rob",
"lastName" : "Wring",
"birthDate" : "2024-11-12",
"cardNumber" : "5117964247989169",
"currency" : "PLN",
"countryOfResidence" : "PL"
}
}
Request fields
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. |
subMerchantName |
String |
Optional |
Identifier assigned by the Marketplace to each sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
subMerchantCountry |
String |
Optional |
The field to distinguish the country location of the sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
sender |
Object |
Required |
@NotNull |
|
receiver |
Object |
Required |
@NotNull |
Receiver PLAIN Receiver TOKEN Receiver ENCRYPTED_TOKEN Google Receiver ENCRYPTED_TOKEN Apple 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. |
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: 773
Host: java-staging.fenige.pl:8181
{
"amount" : 1000,
"type" : "RECEIVER",
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"requestId" : "e9746f07-a307-4271-98d3-56f0ba69faea",
"transactionId" : "TRX220132AM",
"sender" : {
"type" : "CASH",
"firstName" : "Mark",
"lastName" : "Smith",
"street" : "Olszewskiego",
"houseNumber" : "17A",
"city" : "Lublin",
"postalCode" : "20-400",
"flatNumber" : "2",
"email" : "senderEmail@fenige.pl",
"birthDate" : "2024-11-12",
"personalId" : "AGC688910",
"country" : "PL"
},
"receiver" : {
"type" : "PHONE",
"firstName" : "Rob",
"lastName" : "Wring",
"phoneNumber" : "48123777619",
"birthDate" : "2024-11-12",
"currency" : "PLN",
"countryOfResidence" : "PL"
}
}
Request fields
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. |
subMerchantName |
String |
Optional |
Identifier assigned by the Marketplace to each sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
subMerchantCountry |
String |
Optional |
The field to distinguish the country location of the sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
sender |
Object |
Required |
@NotNull |
|
receiver |
Object |
Required |
@NotNull |
Receiver PLAIN Receiver TOKEN Receiver ENCRYPTED_TOKEN Google Receiver ENCRYPTED_TOKEN Apple Receiver CASH Receiver PHONE |
3.3.2. Response
Response status
Status | Description |
---|---|
|
Returned list of field name which has validation errors. |
|
- 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 |
|
Returned e.g. when a different transaction with the provided requestId has already been registered in the system. |
|
Returned when API-TOKEN was broken. |
|
Returned when server understood the request but refuses to authorize it. |
Example HTTP Response
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."
}
}
HTTP/1.1 202 Accepted
Content-Type: application/json
Content-Length: 56
{
"orderId" : "ad865ad6-4ceb-444b-b9bb-caa5b8e15b36"
}
Path | Type | Description |
---|---|---|
|
|
Unique transaction identifier |
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."
}
}
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"
}
Path | Description |
---|---|
|
|
|
|
|
|
|
|
|
|
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
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
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"
}
}
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
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 186
{
"calculateCommissionUuid" : "c5ff475e-02ec-4fef-b2d5-df1c3c948ba8",
"depositChargeAmount" : 200,
"depositChargeCurrency" : "PLN",
"calculateCommissionExpiration" : 1731083734
}
Response fields
Path | Type | Description |
---|---|---|
|
|
Unique identifier that can be used in authorization to use calculate commission result. |
|
|
Amount that will be charged from deposit in pennies |
|
|
Deposit currency |
|
|
Expiration date of calculate commission result in unix time |
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" : "fe7dc6f0-1c6b-459f-90db-916842e58130"
}
Response fields
Path | Type | Description |
---|---|---|
|
|
Trace identifier |
|
|
Response code from Fenige system |
|
|
Message for response code from Fenige system |
|
|
Response http status |
HTTP/1.1 500 Internal Server Error
Content-Type: application/json
Content-Length: 150
{
"status" : "E9000",
"message" : "Domain error",
"httpStatus" : "INTERNAL_SERVER_ERROR",
"traceId" : "8c421b7b-f461-4c54-89e0-49d3b21242b2"
}
Response fields
Path | Type | Description |
---|---|---|
|
|
Trace identifier |
|
|
Response code from Fenige system |
|
|
Message for response code from Fenige system |
|
|
Response http status |
3.3.4. Check status
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
Parameter | Description |
---|---|
|
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 |
---|---|
|
Returned if the transaction completes successfully. |
|
Returned when transaction was registered for processing. Check status in a while. |
|
Returned when user provides wrong order-id or transaction was failed or was Declined. |
Example HTTP Response
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
}
Path | Type | Description |
---|---|---|
|
|
Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100] |
|
|
Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100] |
|
|
Field informing about the amount of cash transferred with decimal precision. |
|
|
This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100] |
|
|
This is the amount of commission that was added to the transaction at 0.01 currency. |
|
|
Unique transaction identifier. |
|
|
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 |
|
|
Date of transaction. |
|
|
Funding Retrieval Reference Number. |
|
|
Payment Retrieval Reference Number. |
|
|
Acquirer Reference Number |
|
|
Value: true/false determines if transaction was processed with 3ds |
|
|
Detailed information about revaluation between sender currency and receiver currency. |
|
|
Personal data of the person to whom the transfer is addressed. |
|
|
Personal data of the person who performs the transfer of cash. |
|
|
Merchant settlement currency |
|
|
Commission Fenige in merchant settlement currency |
|
|
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 |
HTTP/1.1 203 Non-Authoritative Information
After you get 203 you need to check status in a while because we are processing this transaction and if you don’t get a response (200 - succeeded or 500 - declined) within 60 seconds then please contact us. |
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 |
|
REJECTED - Monitoring rule which is designed to prevent the acceptance of names or surnames that do not contain vowels or consonants |
|
CODE_XX - is MasterCard response code (ISO 8583) |
|
This card is not supported |
|
Card is blocked for 1 hour in Fenige |
|
User is blocked in Fenige |
|
Bin is blocked for 1 hour in Fenige |
|
Funding bank is blocked in Fenige |
|
Payment bank is blocked in Fenige |
|
Funding transaction was declined and payment not send |
|
Payment transaction was declined and funding was reversed |
|
A connection error occurred to Acquirer service |
|
User was found on the stop list |
|
Acceptance network is unavailable |
|
No currently effective rates found in the database |
|
Currency is not supported |
|
Currency is not supported by Merchant |
|
Transaction limit for single transaction exceeded |
|
Daily transaction limit for amount per card exceeded |
|
Daily transaction limit for count per card exceeded |
|
Weekly transaction limit for amount per card exceeded |
|
Monthly transaction limit for amount per card exceeded |
|
Monthly transaction limit for count per card exceeded |
|
Daily cumulative limit per card was exceeded |
|
Monthly cumulative limit per card was exceeded |
|
Daily cumulative limit per merchant transactions using mastercard cards was exceeded |
|
Monthly cumulative limit per merchant transactions using mastercard cards was exceeded |
|
Daily cumulative limit per merchant transactions using visa cards was exceeded |
|
Monthly cumulative limit per merchant transactions using visa cards was exceeded |
|
Daily cumulative limit per merchant transactions using mastercard and visa cards was exceeded |
|
Monthly cumulative limit per merchant transactions using mastercard and visa cards was exceeded |
|
Sender’s card is blocked |
|
Receiver’s card is blocked |
|
User acting as sender is blocked |
|
User acting as receiver is blocked |
|
BIN of sender’s card is blocked |
|
BIN of receiver’s card is blocked |
|
Amount is higher than acceptable limit |
|
Couldn’t established connection to Monitoring service |
|
Some unrecognized error occurred |
|
The transaction user’s personal data verified as incorrect on the verification service. Transaction rejected. |
|
Funding transaction declined - mip response timeout |
|
Payment transaction declined - mip response timeout |
|
Funding process failed and it is need to manual verification of transaction |
|
Payment process failed and it is need to manual verification of transaction |
|
Funding transaction declined - mip_proxy response timeout |
|
Payment transaction declined - mip_proxy response timeout |
|
Amount exceeds current merchant deposit limit |
|
Error transaction not exists |
|
Card was not found |
|
Problem with DC |
|
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. |
|
This error may occur if card’s country is other than user’s country for USA or CAN transaction for PLAIN model |
|
This error may occur if card’s country is other than user’s country for USA or CAN transaction |
|
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. |
|
Province code is not valid for USA or CAN transactions. Please update user profile |
|
Some validation error occurred |
|
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. |
|
Card expired |
|
The amount sent is too small. Enter a larger amount. |
|
The amount sent is too high. Enter a lower amount. |
|
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. |
|
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. |
|
Merchant not support the given card provider, please contact support to check merchant configuration |
|
Merchant crypto is not supported outside EEA+UK |
|
System does not allow the execution of transaction with the receiver card country. |
|
System does not allow the execution of transaction with the sender card country. |
|
Geographic scope is not permitted for this transaction |
|
Processing time of transaction was too long, transaction is declined. |
|
Transaction rejected, second transaction with merchant advice code 03 or 21 within 30 days. |
|
Transaction rejected, sender or receiver name contains fraudulent phrase. |
|
Transaction rejected, suspicious sender or receiver name. |
|
Transaction rejected, card country is not supported for merchants crypto. |
|
Transaction card-account rejected, country code in sender object is required for this transactional model |
|
Transaction card-account or cash account rejected, personalId field in sender object is required for this transactional model |
|
Transaction rejected, country of merchant cannot be the same as receiver’s bank code |
|
Error domestic transaction not permitted for card |
3.3.5. Check detailed status
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
Parameter | Description |
---|---|
|
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 |
---|---|
|
Returned if the transaction completes successfully. |
|
Returned when transaction was registered for processing. Check status in a while. |
|
Returned when a transaction related to the given orderId doesn’t exist. |
|
Returned when user provides wrong order-id or transaction was failed or was Declined. |
|
Returned when an internal error occur. |
Example HTTP Response
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
}
Path | Type | Description |
---|---|---|
|
|
Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100] |
|
|
Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100] |
|
|
Field informing about the amount of cash transferred with decimal precision. |
|
|
This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100] |
|
|
This is the amount of commission that was added to the transaction at 0.01 currency. |
|
|
Unique transaction identifier. |
|
|
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 |
|
|
Date of transaction. |
|
|
Funding Retrieval Reference Number. |
|
|
Payment Retrieval Reference Number. |
|
|
Acquirer Reference Number |
|
|
Value: true/false determines if transaction was processed with 3ds |
|
|
Detailed information about revaluation between sender currency and receiver currency. |
|
|
Personal data of the person to whom the transfer is addressed. |
|
|
Personal data of the person who performs the transfer of cash. |
|
|
Merchant settlement currency |
|
|
Commission Fenige in merchant settlement currency |
|
|
Transaction amount in merchant settlement currency |
|
|
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 |
HTTP/1.1 203 Non-Authoritative Information
After you get 203 you need to check status in a while because we are processing this transaction and if you don’t get a response (200 - succeeded or 500 - declined) within 60 seconds then please contact us. |
HTTP/1.1 404 Not Found
Content-Type: application/json
Content-Length: 51
{
"errorStatus" : "ERROR_TRANSACTION_NOT_FOUND"
}
Path | Type | Description |
---|---|---|
|
|
Additional data of the error occurred during a processing of the request |
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-11-09T17:35:52.223",
"errorStatus" : "ERROR_SENDER_CARD_IS_BLOCKED"
}
Path | Type | Description |
---|---|---|
|
|
Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100] |
|
|
Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100] |
|
|
Field informing about the amount of cash transferred with decimal precision. |
|
|
This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100] |
|
|
This is the amount of commission that was added to the transaction at 0.01 currency. |
|
|
Unique transaction identifier. |
|
|
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 |
|
|
Date of transaction. |
|
|
Funding Retrieval Reference Number. |
|
|
Payment Retrieval Reference Number. |
|
|
Acquirer Reference Number |
|
|
Value: true/false determines if transaction was processed with 3ds |
|
|
Detailed information about revaluation between sender currency and receiver currency. |
|
|
Personal data of the person to whom the transfer is addressed. |
|
|
Personal data of the person who performs the transfer of cash. |
|
|
Status of the transaction (PENDING, APPROVED, DECLINED, REJECTED, REVERSED) |
|
|
Additional data of the error occurred during a processing of the request |
|
|
Card lock type |
|
|
Card’s lock end date |
|
|
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 |
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-11-09T17:35:48.842",
"errorStatus" : "ERROR_SENDER_CARD_IS_BLOCKED"
}
Path | Type | Description |
---|---|---|
|
|
Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100] |
|
|
Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100] |
|
|
Field informing about the amount of cash transferred with decimal precision. |
|
|
This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100] |
|
|
This is the amount of commission that was added to the transaction at 0.01 currency. |
|
|
Unique transaction identifier. |
|
|
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 |
|
|
Date of transaction. |
|
|
Funding Retrieval Reference Number. |
|
|
Payment Retrieval Reference Number. |
|
|
Acquirer Reference Number |
|
|
Value: true/false determines if transaction was processed with 3ds |
|
|
Detailed information about revaluation between sender currency and receiver currency. |
|
|
Personal data of the person to whom the transfer is addressed. |
|
|
Personal data of the person who performs the transfer of cash. |
|
|
Merchant settlement currency |
|
|
Commission Fenige in merchant settlement currency |
|
|
Transaction amount in merchant settlement currency |
|
|
Status of the transaction (PENDING, APPROVED, DECLINED, REJECTED, REVERSED) |
|
|
The code of the error occurred during a processing of the request |
|
|
Card lock type |
|
|
Card’s lock end date |
|
|
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 |
HTTP/1.1 500 Internal Server Error
Content-Type: application/json
Content-Length: 69
{
"errorStatus" : "ERROR_SOMETHING_WRONG - Something went wrong."
}
Path | Type | Description |
---|---|---|
|
|
Additional data of the error occurred during a processing of the request |
3.4. BLIK to Card
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. |
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
Example HTTP Request
POST /api/v2/client/send-money HTTP/1.1
Content-Type: application/vnd.sendmoney.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 1276
Host: java-staging.fenige.pl:8181
{
"amount" : 1000,
"merchantUrl" : "https://fenige.pl/payments",
"addressIp" : "192.168.0.1",
"type" : "SENDER",
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"requestId" : "1d830acf-2408-4622-9d42-bdf249422673",
"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-11-12",
"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-11-12",
"cardNumber" : "5117964247989169",
"currency" : "PLN",
"countryOfResidence" : "PL"
}
}
POST /api/v2/client/send-money HTTP/1.1
Content-Type: application/vnd.sendmoney.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 1315
Host: java-staging.fenige.pl:8181
{
"amount" : 1000,
"merchantUrl" : "https://fenige.pl/payments",
"addressIp" : "192.168.0.1",
"type" : "SENDER",
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"requestId" : "17aeb770-35fc-48e9-90e4-40979815cd12",
"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-11-12",
"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" : "TOKEN",
"firstName" : "Rob",
"lastName" : "Wring",
"email" : "receiverEmail@fenige.pl",
"birthDate" : "2024-11-12",
"currency" : "PLN",
"tokenPan" : "5117964247989169",
"countryOfResidence" : "PL"
}
}
Request fields
Path | Type | Validation | Rule | Description |
---|---|---|---|---|
amount |
Number |
Required |
@NotNull, positive |
The total transfer amount (in pennies) |
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. |
subMerchantName |
String |
Optional |
Identifier assigned by the Marketplace to each sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
subMerchantCountry |
String |
Optional |
The field to distinguish the country location of the sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
sender |
Object |
Required |
@NotNull |
|
receiver |
Object |
Required |
@NotNull |
Receiver PLAIN Receiver TOKEN Receiver ENCRYPTED_TOKEN Google Receiver ENCRYPTED_TOKEN Apple |
3.4.2. Response
Response status
Status | Description |
---|---|
|
Returned list of field name which has validation errors. |
|
- 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 |
|
Returned e.g. when a different transaction with the provided requestId has already been registered in the system. |
|
Returned when API-TOKEN was broken. |
|
Returned when server understood the request but refuses to authorize it. |
Example HTTP Response
HTTP/1.1 202 Accepted
Content-Type: application/json
Content-Length: 1261
{
"orderId" : "175bee88-4532-4e77-8767-069b11a878cf",
"base64Form" : "PGh0bWw+PFNDUklQVCBMQU5HVUFHRT0iSmF2YXNjcmlwdCI+ZnVuY3Rpb24gT25Mb2FkRXZlbnQoKSB7ZG9jdW1lbnQuZG93bmxvYWRGb3JtLnN1Ym1pdCgpO308L1NDUklQVD48Ym9keSBPbkxvYWQ9Ik9uTG9hZEV2ZW50KCk7Ij48Zm9ybSBuYW1lPSJkb3dubG9hZEZvcm0iIGFjY2VwdC1jaGFyc2V0PSJJU08tODg1OS0yIiBhY3Rpb249Imh0dHBzOi8vMTkzLjI3LjYuMjI1L2JsaWt3ZWIvdHJhbnNhY3Rpb24vdHJhbnNhY3Rpb25faW5pdC9zdWJtaXQiIG1ldGhvZD0iUE9TVCI+PElOUFVUIHR5cGU9ImhpZGRlbiIgbmFtZT0iVHlwZSIgdmFsdWU9IklwYXkyIj48SU5QVVQgdHlwZT0iaGlkZGVuIiBuYW1lPSJNZXJjaGFudElEIiB2YWx1ZT0iMTcxOTUiPjxJTlBVVCB0eXBlPSJoaWRkZW4iIG5hbWU9IkN1cnJlbmN5IiB2YWx1ZT0iUExOIj48SU5QVVQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBbW91bnQiIHZhbHVlPSIxMDAwIj48SU5QVVQgdHlwZT0iaGlkZGVuIiBuYW1lPSJDdXN0b21QYXJhbSIgdmFsdWU9Ijg0MGY1ZjYzOGY0OTQwNGZiMGU1OGQwMDU1NTg1NzM4Ij48SU5QVVQgdHlwZT0iaGlkZGVuIiBuYW1lPSJEZXNjcmlwdGlvbiIgdmFsdWU9ImV4YW1wbGV8ZGVzY3JpcHRpb258w7PEhcWbxIfFm8SFfCI+PElOUFVUIHR5cGU9ImhpZGRlbiIgbmFtZT0iVGltZXN0YW1wIiB2YWx1ZT0iMjAyMi0wNi0yOVQxNTo0MDo1OC4zMjIrMDI6MDAiPjxJTlBVVCB0eXBlPSJoaWRkZW4iIG5hbWU9Ik1DQyIgdmFsdWU9IjA3NDIiPjxJTlBVVCB0eXBlPSJoaWRkZW4iIG5hbWU9IkNvbnRyb2xEYXRhIiB2YWx1ZT0iZDkyZjI2MTI1NmQwMWNiNjU4ZWI3MzIwZDczNDE2MjYyOGNhOTViNzRmYWRmY2UxOGFmMDliMDdkOWIwOGNjMCI+PC9mb3JtPjwvYm9keT48L2h0bWw+"
}
Response fields
Path | Type | Description |
---|---|---|
|
|
Unique transaction identifier |
|
|
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. |
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."
}
}
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."
}
}
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"
}
Path | Description |
---|---|
|
|
|
|
|
|
|
|
|
|
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
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
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
Parameter | Description |
---|---|
|
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 |
---|---|
|
Returned if the transaction completes successfully. |
|
Returned when transaction was registered for processing. Check status in a while. |
|
Returned when user provides wrong order-id or transaction was failed or was Declined. |
Example HTTP Response
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"
}
}
Path | Type | Description |
---|---|---|
|
|
Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100] |
|
|
Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100] |
|
|
Field informing about the amount of cash transferred with decimal precision. |
|
|
This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100] |
|
|
This is the amount of commission that was added to the transaction at 0.01 currency. |
|
|
Unique transaction identifier. |
|
|
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 |
|
|
Date of transaction. |
|
|
Funding Retrieval Reference Number. |
|
|
Payment Retrieval Reference Number. |
|
|
Acquirer Reference Number |
|
|
Value: true/false determines if transaction was processed with 3ds |
|
|
Detailed information about revaluation between sender currency and receiver currency. |
|
|
Personal data of the person to whom the transfer is addressed. |
|
|
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 |
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
}
Path | Type | Description |
---|---|---|
|
|
Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100] |
|
|
Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100] |
|
|
Field informing about the amount of cash transferred with decimal precision. |
|
|
This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100] |
|
|
This is the amount of commission that was added to the transaction at 0.01 currency. |
|
|
Unique transaction identifier. |
|
|
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 |
|
|
Date of transaction. |
|
|
Funding Retrieval Reference Number. |
|
|
Payment Retrieval Reference Number. |
|
|
Acquirer Reference Number |
|
|
Value: true/false determines if transaction was processed with 3ds |
|
|
Detailed information about revaluation between sender currency and receiver currency. |
|
|
Personal data of the person to whom the transfer is addressed. |
|
|
Personal data of the person who performs the transfer of cash. |
|
|
Merchant settlement currency |
|
|
Commission Fenige in merchant settlement currency |
|
|
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 |
HTTP/1.1 203 Non-Authoritative Information
After you get 203 you need to check status in a while because we are processing this transaction and if you don’t get a response (200 - succeeded or 500 - declined) within 60 seconds then please contact us. |
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 |
|
REJECTED - Monitoring rule which is designed to prevent the acceptance of names or surnames that do not contain vowels or consonants |
|
CODE_XX - is MasterCard response code (ISO 8583) |
|
This card is not supported |
|
Card is blocked for 1 hour in Fenige |
|
User is blocked in Fenige |
|
Bin is blocked for 1 hour in Fenige |
|
Funding bank is blocked in Fenige |
|
Payment bank is blocked in Fenige |
|
Funding transaction was declined and payment not send |
|
Payment transaction was declined and funding was reversed |
|
A connection error occurred to Acquirer service |
|
User was found on the stop list |
|
Acceptance network is unavailable |
|
No currently effective rates found in the database |
|
Currency is not supported |
|
Currency is not supported by Merchant |
|
Transaction limit for single transaction exceeded |
|
Daily transaction limit for amount per card exceeded |
|
Daily transaction limit for count per card exceeded |
|
Weekly transaction limit for amount per card exceeded |
|
Monthly transaction limit for amount per card exceeded |
|
Monthly transaction limit for count per card exceeded |
|
Daily cumulative limit per card was exceeded |
|
Monthly cumulative limit per card was exceeded |
|
Daily cumulative limit per merchant transactions using mastercard cards was exceeded |
|
Monthly cumulative limit per merchant transactions using mastercard cards was exceeded |
|
Daily cumulative limit per merchant transactions using visa cards was exceeded |
|
Monthly cumulative limit per merchant transactions using visa cards was exceeded |
|
Daily cumulative limit per merchant transactions using mastercard and visa cards was exceeded |
|
Monthly cumulative limit per merchant transactions using mastercard and visa cards was exceeded |
|
Sender’s card is blocked |
|
Receiver’s card is blocked |
|
User acting as sender is blocked |
|
User acting as receiver is blocked |
|
BIN of sender’s card is blocked |
|
BIN of receiver’s card is blocked |
|
Amount is higher than acceptable limit |
|
Couldn’t established connection to Monitoring service |
|
Some unrecognized error occurred |
|
The transaction user’s personal data verified as incorrect on the verification service. Transaction rejected. |
|
Funding transaction declined - mip response timeout |
|
Payment transaction declined - mip response timeout |
|
Funding process failed and it is need to manual verification of transaction |
|
Payment process failed and it is need to manual verification of transaction |
|
Funding transaction declined - mip_proxy response timeout |
|
Payment transaction declined - mip_proxy response timeout |
|
Amount exceeds current merchant deposit limit |
|
Error transaction not exists |
|
Card was not found |
|
Problem with DC |
|
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. |
|
This error may occur if card’s country is other than user’s country for USA or CAN transaction for PLAIN model |
|
This error may occur if card’s country is other than user’s country for USA or CAN transaction |
|
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. |
|
Province code is not valid for USA or CAN transactions. Please update user profile |
|
Some validation error occurred |
|
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. |
|
Card expired |
|
The amount sent is too small. Enter a larger amount. |
|
The amount sent is too high. Enter a lower amount. |
|
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. |
|
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. |
|
Merchant not support the given card provider, please contact support to check merchant configuration |
|
Merchant crypto is not supported outside EEA+UK |
|
System does not allow the execution of transaction with the receiver card country. |
|
System does not allow the execution of transaction with the sender card country. |
|
Geographic scope is not permitted for this transaction |
|
Processing time of transaction was too long, transaction is declined. |
|
Transaction rejected, second transaction with merchant advice code 03 or 21 within 30 days. |
|
Transaction rejected, sender or receiver name contains fraudulent phrase. |
|
Transaction rejected, suspicious sender or receiver name. |
|
Transaction rejected, card country is not supported for merchants crypto. |
|
Transaction card-account rejected, country code in sender object is required for this transactional model |
|
Transaction card-account or cash account rejected, personalId field in sender object is required for this transactional model |
|
Transaction rejected, country of merchant cannot be the same as receiver’s bank code |
|
Error domestic transaction not permitted for card |
3.4.5. Check detailed status
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
Parameter | Description |
---|---|
|
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 |
---|---|
|
Returned if the transaction completes successfully. |
|
Returned when transaction was registered for processing. Check status in a while. |
|
Returned when a transaction related to the given orderId doesn’t exist. |
|
Returned when user provides wrong order-id or transaction was failed or was Declined. |
|
Returned when an internal error occur. |
Example HTTP Response
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"
}
Path | Type | Description |
---|---|---|
|
|
Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100] |
|
|
Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100] |
|
|
Field informing about the amount of cash transferred with decimal precision. |
|
|
This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100] |
|
|
This is the amount of commission that was added to the transaction at 0.01 currency. |
|
|
Unique transaction identifier. |
|
|
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 |
|
|
Date of transaction. |
|
|
Funding Retrieval Reference Number. |
|
|
Payment Retrieval Reference Number. |
|
|
Acquirer Reference Number |
|
|
Value: true/false determines if transaction was processed with 3ds |
|
|
Detailed information about revaluation between sender currency and receiver currency. |
|
|
Personal data of the person to whom the transfer is addressed. |
|
|
Personal data of the person who performs the transfer of cash. |
|
|
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 |
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
}
Path | Type | Description |
---|---|---|
|
|
Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100] |
|
|
Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100] |
|
|
Field informing about the amount of cash transferred with decimal precision. |
|
|
This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100] |
|
|
This is the amount of commission that was added to the transaction at 0.01 currency. |
|
|
Unique transaction identifier. |
|
|
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 |
|
|
Date of transaction. |
|
|
Funding Retrieval Reference Number. |
|
|
Payment Retrieval Reference Number. |
|
|
Acquirer Reference Number |
|
|
Value: true/false determines if transaction was processed with 3ds |
|
|
Detailed information about revaluation between sender currency and receiver currency. |
|
|
Personal data of the person to whom the transfer is addressed. |
|
|
Personal data of the person who performs the transfer of cash. |
|
|
Merchant settlement currency |
|
|
Commission Fenige in merchant settlement currency |
|
|
Transaction amount in merchant settlement currency |
|
|
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 |
HTTP/1.1 203 Non-Authoritative Information
After you get 203 you need to check status in a while because we are processing this transaction and if you don’t get a response (200 - succeeded or 500 - declined) within 60 seconds then please contact us. |
HTTP/1.1 404 Not Found
Content-Type: application/json
Content-Length: 51
{
"errorStatus" : "ERROR_TRANSACTION_NOT_FOUND"
}
Path | Type | Description |
---|---|---|
|
|
Additional data of the error occurred during a processing of the request |
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-11-09T17:35:52.223",
"errorStatus" : "ERROR_SENDER_CARD_IS_BLOCKED"
}
Path | Type | Description |
---|---|---|
|
|
Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100] |
|
|
Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100] |
|
|
Field informing about the amount of cash transferred with decimal precision. |
|
|
This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100] |
|
|
This is the amount of commission that was added to the transaction at 0.01 currency. |
|
|
Unique transaction identifier. |
|
|
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 |
|
|
Date of transaction. |
|
|
Funding Retrieval Reference Number. |
|
|
Payment Retrieval Reference Number. |
|
|
Acquirer Reference Number |
|
|
Value: true/false determines if transaction was processed with 3ds |
|
|
Detailed information about revaluation between sender currency and receiver currency. |
|
|
Personal data of the person to whom the transfer is addressed. |
|
|
Personal data of the person who performs the transfer of cash. |
|
|
Status of the transaction (PENDING, APPROVED, DECLINED, REJECTED, REVERSED) |
|
|
Additional data of the error occurred during a processing of the request |
|
|
Card lock type |
|
|
Card’s lock end date |
|
|
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 |
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-11-09T17:35:48.842",
"errorStatus" : "ERROR_SENDER_CARD_IS_BLOCKED"
}
Path | Type | Description |
---|---|---|
|
|
Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100] |
|
|
Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100] |
|
|
Field informing about the amount of cash transferred with decimal precision. |
|
|
This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100] |
|
|
This is the amount of commission that was added to the transaction at 0.01 currency. |
|
|
Unique transaction identifier. |
|
|
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 |
|
|
Date of transaction. |
|
|
Funding Retrieval Reference Number. |
|
|
Payment Retrieval Reference Number. |
|
|
Acquirer Reference Number |
|
|
Value: true/false determines if transaction was processed with 3ds |
|
|
Detailed information about revaluation between sender currency and receiver currency. |
|
|
Personal data of the person to whom the transfer is addressed. |
|
|
Personal data of the person who performs the transfer of cash. |
|
|
Merchant settlement currency |
|
|
Commission Fenige in merchant settlement currency |
|
|
Transaction amount in merchant settlement currency |
|
|
Status of the transaction (PENDING, APPROVED, DECLINED, REJECTED, REVERSED) |
|
|
The code of the error occurred during a processing of the request |
|
|
Card lock type |
|
|
Card’s lock end date |
|
|
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 |
HTTP/1.1 500 Internal Server Error
Content-Type: application/json
Content-Length: 69
{
"errorStatus" : "ERROR_SOMETHING_WRONG - Something went wrong."
}
Path | Type | Description |
---|---|---|
|
|
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:
|
3.5.1. Delayed Send Money
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
Requests
POST /client/delayed/send-money HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
API-TOKEN: d94NYa+xqRrazUPzSgYeJ6qR/MzIOb3IzePb7t9sWds=
Content-Length: 1008
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" : "994e00a6-5622-43bd-a73b-5b6743647738"
},
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"requestId" : "70c13934-9a56-4d0b-84fb-6a912258956b",
"sender" : {
"type" : "DATACORE",
"firstName" : "Mark",
"lastName" : "Smith",
"street" : "Olszewskiego",
"houseNumber" : "17A",
"city" : "Lublin",
"postalCode" : "20-400",
"flatNumber" : "2",
"email" : "senderEmail@fenige.pl",
"birthDate" : "2024-11-12",
"cardId" : 1234,
"currency" : "PLN"
},
"receiver" : {
"type" : "DELAYED",
"firstName" : "Rob",
"lastName" : "Wring",
"phoneNumber" : "48600300200",
"birthDate" : "2024-11-12",
"currency" : "USD"
}
}
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 |
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. |
subMerchantName |
String |
Optional |
Identifier assigned by the Marketplace to each sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
subMerchantCountry |
String |
Optional |
The field to distinguish the country location of the sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
sender |
Object |
Required |
@NotNull |
Personal data of Sender. |
receiver |
Object |
Required |
@NotNull |
Personal data of Receiver. |
outside3ds.cavv |
String |
Required |
@NotNull, @Must be base 64 encoded, @Size must be between 28 and 28 inclusive |
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 |
Required |
@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. |
POST /client/delayed/send-money HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
API-TOKEN: d94NYa+xqRrazUPzSgYeJ6qR/MzIOb3IzePb7t9sWds=
Content-Length: 1014
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" : "a0b01178-dd52-4d7f-8534-7bd2c02a457e"
},
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"requestId" : "da33df7a-5ae2-44db-8900-6ea3d37eab4c",
"sender" : {
"type" : "DATACORE",
"firstName" : "Mark",
"lastName" : "Smith",
"street" : "Olszewskiego",
"houseNumber" : "17A",
"city" : "Lublin",
"postalCode" : "20-400",
"flatNumber" : "2",
"email" : "senderEmail@fenige.pl",
"birthDate" : "2024-11-12",
"cardId" : 1234,
"currency" : "PLN"
},
"receiver" : {
"type" : "DELAYED",
"firstName" : "Rob",
"lastName" : "Wring",
"email" : "receiverEmail@fenige.pl",
"birthDate" : "2024-11-12",
"currency" : "USD"
}
}
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 |
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. |
subMerchantName |
String |
Optional |
Identifier assigned by the Marketplace to each sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
subMerchantCountry |
String |
Optional |
The field to distinguish the country location of the sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
sender |
Object |
Required |
@NotNull |
Personal data of Sender. |
receiver |
Object |
Required |
@NotNull |
Personal data of Receiver. |
outside3ds.cavv |
String |
Required |
@NotNull, @Must be base 64 encoded, @Size must be between 28 and 28 inclusive |
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 |
Required |
@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. |
POST /client/delayed/send-money HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 1087
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" : "581dd8d6-104d-47e3-b478-eecbbed0d23c"
},
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"requestId" : "9f21a30f-29d0-4b47-a10c-ee7507d4de01",
"sender" : {
"type" : "PLAIN",
"firstName" : "Mark",
"lastName" : "Smith",
"street" : "Olszewskiego",
"houseNumber" : "17A",
"city" : "Lublin",
"postalCode" : "20-400",
"flatNumber" : "2",
"email" : "senderEmail@fenige.pl",
"birthDate" : "2024-11-12",
"cardNumber" : "5117964247989169",
"expirationDate" : "03/26",
"personalId" : "AGC688910",
"currency" : "PLN"
},
"receiver" : {
"type" : "DELAYED",
"firstName" : "Rob",
"lastName" : "Wring",
"phoneNumber" : "48600300200",
"birthDate" : "2024-11-12",
"currency" : "USD"
}
}
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 |
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. |
subMerchantName |
String |
Optional |
Identifier assigned by the Marketplace to each sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
subMerchantCountry |
String |
Optional |
The field to distinguish the country location of the sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
sender |
Object |
Required |
@NotNull |
Personal data of Sender. |
receiver |
Object |
Required |
@NotNull |
Personal data of Receiver. |
outside3ds.cavv |
String |
Required |
@NotNull, @Must be base 64 encoded, @Size must be between 28 and 28 inclusive |
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 |
Required |
@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. |
POST /client/delayed/send-money HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 1093
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" : "ef8bb1b9-8909-4411-9f0a-4d56343f6868"
},
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"requestId" : "078ca91a-a1bd-4d71-9ec3-7b17b8d02976",
"sender" : {
"type" : "PLAIN",
"firstName" : "Mark",
"lastName" : "Smith",
"street" : "Olszewskiego",
"houseNumber" : "17A",
"city" : "Lublin",
"postalCode" : "20-400",
"flatNumber" : "2",
"email" : "senderEmail@fenige.pl",
"birthDate" : "2024-11-12",
"cardNumber" : "5117964247989169",
"expirationDate" : "03/26",
"personalId" : "AGC688910",
"currency" : "PLN"
},
"receiver" : {
"type" : "DELAYED",
"firstName" : "Rob",
"lastName" : "Wring",
"email" : "receiverEmail@fenige.pl",
"birthDate" : "2024-11-12",
"currency" : "USD"
}
}
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 |
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. |
subMerchantName |
String |
Optional |
Identifier assigned by the Marketplace to each sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
subMerchantCountry |
String |
Optional |
The field to distinguish the country location of the sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
sender |
Object |
Required |
@NotNull |
Personal data of Sender. |
receiver |
Object |
Required |
@NotNull |
Personal data of Receiver. |
outside3ds.cavv |
String |
Required |
@NotNull, @Must be base 64 encoded, @Size must be between 28 and 28 inclusive |
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 |
Required |
@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 |
---|---|
|
Delayed Send Money approved for processing and transaction details returned. |
|
Returned list of field name which has validation errors. |
|
- 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 |
|
Returned when request is incorrect, required fields are missing or the values are not valid. |
|
Returned when API-TOKEN was broken. |
|
Returned when server understood the request but refuses to authorize it. |
|
Returned when user provides wrong order-id or transaction was failed or was Declined. |
Example HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1080
{
"amount" : 2000,
"bigDecimalAmount" : 20.0,
"commission" : 0,
"bigDecimalCommission" : 0,
"orderId" : "00fc6d01-1425-4e30-95e0-401f5a146f78",
"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 |
---|---|---|
|
|
Unique transaction identifier. |
|
|
Transaction status. |
|
|
Response code. |
|
|
Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100]. |
|
|
Field informing about the amount of cash transferred with decimal precision. |
|
|
This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100]. |
|
|
This is the amount of commission that was added to the transaction at 0.01 currency. |
|
|
Date of transaction. |
|
|
Funding Retrieval Reference Number. |
|
|
Payment Retrieval Reference Number. |
|
|
Amount (in pennies) of funding transaction in fundingCurrency. |
|
|
Amount of funding transaction in fundingCurrency. |
|
|
Currency code the same as sender’s card currency. |
|
|
Amount (in pennies) of payment transaction in paymentCurrency. |
|
|
Amount of payment transaction in paymentCurrency. |
|
|
Currency code the same as receiver’s card currency. |
|
|
Currency which was conversion from. |
|
|
Resulted currency. |
|
|
Currency rate. |
|
|
Value: true/false determines if transaction was processed with 3ds |
|
|
Personal data of the person to whom the transfer is addressed. |
|
|
Personal data of the person who performs the transfer of cash. |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 943
{
"amount" : 2000,
"bigDecimalAmount" : 20.0,
"commission" : 0,
"bigDecimalCommission" : 0,
"orderId" : "3438f7c7-220d-4a49-a50d-8278e6aa0389",
"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 |
---|---|---|
|
|
Unique transaction identifier. |
|
|
Transaction status. |
|
|
Response code. |
|
|
Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100]. |
|
|
Field informing about the amount of cash transferred with decimal precision. |
|
|
This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100]. |
|
|
This is the amount of commission that was added to the transaction at 0.01 currency. |
|
|
Date of transaction. |
|
|
Funding Retrieval Reference Number. |
|
|
Amount (in pennies) of funding transaction in fundingCurrency. |
|
|
Amount of funding transaction in fundingCurrency. |
|
|
Currency code the same as sender’s card currency. |
|
|
Amount (in pennies) of payment transaction in paymentCurrency. |
|
|
Amount of payment transaction in paymentCurrency. |
|
|
Currency code the same as receiver’s card currency. |
|
|
Currency which was conversion from. |
|
|
Resulted currency. |
|
|
Currency rate. |
|
|
Value: true/false determines if transaction was processed with 3ds |
|
|
Personal data of the person to whom the transfer is addressed. |
|
|
Personal data of the person who performs the transfer of cash. |
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"
]
}
]
}
}
HTTP/1.1 400 Bad Request
Content-Type: application/json
Content-Length: 104
{
"error" : {
"status" : "ERROR_INVALID_JSON",
"message" : "Some properties are invalid"
}
}
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"
}
Path | Description |
---|---|
|
|
|
|
|
|
|
|
|
|
HTTP/1.1 403 Forbidden
Content-Type: application/json
{
"timestamp": 1610464313387,
"status": 403,
"error": "Forbidden",
"message": "No message available",
"path": "/client/delayed/send-money"
}
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 |
---|---|
|
CODE_XX - is MasterCard response code (ISO 8583) |
|
This card is not supported |
|
Card is blocked for 1 hour in Fenige |
|
User is blocked in Fenige |
|
API-TOKEN header not found in request with DATACORE/PHONE model in sender or receiver |
|
Bin is blocked for 1 hour in Fenige |
|
Funding bank is blocked in Fenige |
|
Payment bank is blocked in Fenige |
|
Funding transaction was declined and payment not send |
|
Payment transaction was declined and funding was reversed |
|
A connection error occurred to Acquirer service |
|
User was found on the stop list |
|
Acceptance network is unavailable |
|
No currently effective rates found in the database |
|
Currency is not supported |
|
Currency is not supported by Merchant |
|
Sender’s card is blocked |
|
Receiver’s card is blocked |
|
User acting as sender is blocked |
|
User acting as receiver is blocked |
|
BIN of sender’s card is blocked |
|
BIN of receiver’s card is blocked |
|
Amount is higher than acceptable limit |
|
Couldn’t established connection to Monitoring service |
|
Some unrecognized error occurred |
|
Couldn’t established connection to MPI service |
|
Funding transaction declined - mip response timeout |
|
Payment transaction declined - mip response timeout |
|
Funding process failed and it is need to manual verification of transaction |
|
Payment process failed and it is need to manual verification of transaction |
|
Funding transaction declined - mip_proxy response timeout |
|
Payment transaction declined - mip_proxy response timeout |
|
TransactionXId is invalid for card number specified in the request, 3DS 2.X flow invoked for other card number 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 |
|
Card not found by transactionXId |
|
Card authentication does not match to payment type |
|
Error 3DS 2.X processing failed |
|
Required configuration data of Merchant are not complete to finish 3DS 2.X process |
|
Some unrecognized, internal error occurred in MPI2 service |
|
Merchant has configured a different version of 3DS than specified in the request |
|
Error no 3ds authorization, when User authenticates successfully but after 15 minutes or User doesn’t authenticate. |
|
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 exists |
|
Card was not found |
|
Some validation error occurred |
|
Transaction limit for single transaction exceeded |
|
Daily transaction limit for amount per card exceeded |
|
Daily transaction limit for count per card exceeded |
|
Monthly transaction limit for amount per card exceeded |
|
Monthly transaction limit for count per card exceeded |
|
Daily cumulative limit per card was exceeded |
|
Monthly cumulative limit per card was exceeded |
|
Daily cumulative limit per merchant transactions using mastercard cards was exceeded |
|
Monthly cumulative limit per merchant transactions using mastercard cards was exceeded |
|
Daily cumulative limit per merchant transactions using visa cards was exceeded |
|
Monthly cumulative limit per merchant transactions using visa cards was exceeded |
|
Daily cumulative limit per merchant transactions using mastercard and visa cards was exceeded |
|
Monthly cumulative limit per merchant transactions using mastercard and visa cards was exceeded |
|
Error during limit checking |
|
Transaction rejected, second transaction with merchant advice code 03 or 21 within 30 days. |
|
An unrecognized error occurred |
|
The amount sent is too small. Enter a larger amount |
|
The amount sent is too high. Enter a lower amount |
|
Error domestic transaction not permitted for card |
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 |
---|---|---|
|
|
No |
|
|
No |
|
|
No |
|
There is no Delayed Payment with given orderId |
No |
|
Critical internal exception occurred in system while trying to make Delayed Payment |
Yes |
|
|
Yes |
|
CODE_XX - is MasterCard response code (ISO 8583) |
Yes |
|
This card is not supported |
Yes |
|
Card is blocked for 1 hour in Fenige |
Yes |
|
User is blocked in Fenige |
Yes |
|
Bin is blocked for 1 hour in Fenige |
Yes |
|
Payment bank is blocked in Fenige |
Yes |
|
Payment transaction was declined and funding was reversed |
Yes |
|
A connection error occurred to Acquirer service |
Yes |
|
User was found on the stop list |
Yes |
|
Acceptance network is unavailable |
Yes |
|
No currently effective rates found in the database |
Yes |
|
Currency is not supported |
Yes |
|
Currency is not supported by Merchant |
Yes |
|
Receiver’s card is blocked |
Yes |
|
User acting as receiver is blocked |
Yes |
|
BIN of receiver’s card is blocked |
Yes |
|
Amount is higher than acceptable limit |
Yes |
|
Couldn’t established connection to Monitoring service |
Yes |
|
Error with service authorization occurred |
Yes |
|
Some unrecognized error occurred |
Yes |
|
Some problem with authorized the user. |
Yes |
|
The transaction user’s personal data verified as incorrect on the verification service. Transaction rejected. |
No |
|
Couldn’t established connection to MPI service |
Yes |
|
Payment transaction declined - mip response timeout |
Yes |
|
Payment process failed and it is need to manual verification of transaction |
Yes |
|
Payment transaction declined - mip_proxy response timeout |
Yes |
|
Error transaction not exists |
Yes |
|
Card was not found |
No |
|
Problem with DC |
Yes |
|
Some validation error occurred |
Yes |
|
An unrecognized error occurred |
Yes |
|
Merchant is marked as high risk and does not allow the execution of transaction with the given card country |
Yes |
|
System does not allow the execution of transaction with the given card country |
Yes |
|
Geographic scope is not permitted for this transaction |
Yes |
|
Error domestic transaction not permitted for card |
No |
3.5.2. Delayed Payment
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
Example HTTP Request
POST /client/delayed/payment HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 407
Host: java-staging.fenige.pl:8181
{
"orderId" : "6a54c305-1540-4521-9a32-88e8c76789d1",
"receiver" : {
"type" : "DELAYED",
"firstName" : "Rob",
"lastName" : "Wring",
"cardNumber" : "4485909148265810",
"rememberReceiver" : false,
"phoneNumber" : "48560740349",
"currency" : "PLN"
},
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"requestId" : "6a54c305-1540-4521-9a32-88e8c76789d1"
}
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. |
subMerchantName |
String |
Optional |
Identifier assigned by the Marketplace to each sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
subMerchantCountry |
String |
Optional |
The field to distinguish the country location of the sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
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. |
POST /client/delayed/payment HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 407
Host: java-staging.fenige.pl:8181
{
"orderId" : "24ac8842-cb3f-4763-bf89-d0f2c65094da",
"receiver" : {
"type" : "DELAYED",
"firstName" : "Rob",
"lastName" : "Wring",
"cardNumber" : "5117964247989169",
"rememberReceiver" : false,
"phoneNumber" : "48560740349",
"currency" : "PLN"
},
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"requestId" : "24ac8842-cb3f-4763-bf89-d0f2c65094da"
}
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. |
subMerchantName |
String |
Optional |
Identifier assigned by the Marketplace to each sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
subMerchantCountry |
String |
Optional |
The field to distinguish the country location of the sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
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. |
POST /client/delayed/payment HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 409
Host: java-staging.fenige.pl:8181
{
"orderId" : "0c900212-7743-4bd4-8c82-713fe9d415f5",
"receiver" : {
"type" : "DELAYED",
"firstName" : "Rob",
"lastName" : "Wring",
"email" : "rob.wring@fenige.pl",
"cardNumber" : "4485909148265810",
"rememberReceiver" : false,
"currency" : "PLN"
},
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"requestId" : "0c900212-7743-4bd4-8c82-713fe9d415f5"
}
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. |
subMerchantName |
String |
Optional |
Identifier assigned by the Marketplace to each sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
subMerchantCountry |
String |
Optional |
The field to distinguish the country location of the sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
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. |
POST /client/delayed/payment HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 409
Host: java-staging.fenige.pl:8181
{
"orderId" : "711a0502-5843-4cde-96a6-8cfba67395b3",
"receiver" : {
"type" : "DELAYED",
"firstName" : "Rob",
"lastName" : "Wring",
"email" : "rob.wring@fenige.pl",
"cardNumber" : "5117964247989169",
"rememberReceiver" : false,
"currency" : "PLN"
},
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"requestId" : "711a0502-5843-4cde-96a6-8cfba67395b3"
}
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. |
subMerchantName |
String |
Optional |
Identifier assigned by the Marketplace to each sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
subMerchantCountry |
String |
Optional |
The field to distinguish the country location of the sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
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. |
POST /client/delayed/payment HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 391
Host: java-staging.fenige.pl:8181
{
"orderId" : "ea56c622-b217-49a1-98d7-51f054daa239",
"receiver" : {
"type" : "DELAYED",
"firstName" : "Rob",
"lastName" : "Wring",
"email" : "rob.wring@fenige.pl",
"cardId" : 1234,
"rememberReceiver" : false,
"currency" : "PLN"
},
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"requestId" : "ea56c622-b217-49a1-98d7-51f054daa239"
}
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. |
subMerchantName |
String |
Optional |
Identifier assigned by the Marketplace to each sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
subMerchantCountry |
String |
Optional |
The field to distinguish the country location of the sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
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. |
POST /client/delayed/payment HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 391
Host: java-staging.fenige.pl:8181
{
"orderId" : "12dae23f-88a3-48cf-ba27-84cd82811a76",
"receiver" : {
"type" : "DELAYED",
"firstName" : "Rob",
"lastName" : "Wring",
"email" : "rob.wring@fenige.pl",
"cardId" : 1234,
"rememberReceiver" : false,
"currency" : "PLN"
},
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"requestId" : "12dae23f-88a3-48cf-ba27-84cd82811a76"
}
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. |
subMerchantName |
String |
Optional |
Identifier assigned by the Marketplace to each sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
subMerchantCountry |
String |
Optional |
The field to distinguish the country location of the sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
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 |
|
Delayed Send Money approved for processing and transaction details returned. |
|
Returned when request is incorrect, required fields are missing or the values are not valid. |
|
Returned when user provides wrong order-id or transaction was failed or was Declined. |
Example HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1069
{
"amount" : 2000,
"amountInUsDollar" : 537,
"bigDecimalAmount" : 20.0,
"commission" : 0,
"bigDecimalCommission" : 0,
"orderId" : "87c0d4a6-7872-423d-907a-737c55172856",
"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 |
---|---|---|
|
|
Unique transaction identifier. |
|
|
Transaction status. |
|
|
Response code. |
|
|
Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100] |
|
|
Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100] |
|
|
Field informing about the amount of cash transferred with decimal precision. |
|
|
This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100] |
|
|
This is the amount of commission that was added to the transaction at 0.01 currency. |
|
|
Funding Retrieval Reference Number. |
|
|
Payment Retrieval Reference Number. |
|
|
Value: true/false determines if transaction was processed with 3ds |
|
|
Amount (in pennies) of funding transaction in fundingCurrency. |
|
|
Amount of funding transaction in fundingCurrency. |
|
|
Currency code the same as sender’s card currency |
|
|
Amount (in pennies) of payment transaction in paymentCurrency. |
|
|
Amount of payment transaction in paymentCurrency. |
|
|
Currency code the same as receiver’s card currency. |
|
|
Currency which was conversion from. |
|
|
Resulted currency. |
|
|
Currency rate. |
|
|
Personal data of the person to whom the transfer is addressed. |
|
|
Personal data of the person who performs the transfer of cash. |
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"
]
}
]
}
}
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 |
---|---|---|
|
|
No |
|
|
No |
|
|
No |
|
There is no Delayed Payment with given orderId |
No |
|
Critical internal exception occurred in system while trying to make Delayed Payment |
Yes |
|
|
Yes |
|
CODE_XX - is MasterCard response code (ISO 8583) |
Yes |
|
This card is not supported |
Yes |
|
Card is blocked for 1 hour in Fenige |
Yes |
|
User is blocked in Fenige |
Yes |
|
Bin is blocked for 1 hour in Fenige |
Yes |
|
Payment bank is blocked in Fenige |
Yes |
|
Payment transaction was declined and funding was reversed |
Yes |
|
A connection error occurred to Acquirer service |
Yes |
|
User was found on the stop list |
Yes |
|
Acceptance network is unavailable |
Yes |
|
No currently effective rates found in the database |
Yes |
|
Currency is not supported |
Yes |
|
Currency is not supported by Merchant |
Yes |
|
Receiver’s card is blocked |
Yes |
|
User acting as receiver is blocked |
Yes |
|
BIN of receiver’s card is blocked |
Yes |
|
Amount is higher than acceptable limit |
Yes |
|
Couldn’t established connection to Monitoring service |
Yes |
|
Some unrecognized error occurred |
Yes |
|
Some problem with user authorization in Datacenter |
Yes |
|
The transaction user’s personal data verified as incorrect on the verification service. Transaction rejected. |
No |
|
Couldn’t established connection to MPI service |
Yes |
|
Payment transaction declined - mip response timeout |
Yes |
|
Payment process failed and it is need to manual verification of transaction |
Yes |
|
Payment transaction declined - mip_proxy response timeout |
Yes |
|
Error transaction not exists |
Yes |
|
Card was not found |
No |
|
Problem with DC |
Yes |
|
Some validation error occurred |
Yes |
|
Merchant is marked as high risk and does not allow the execution of transaction with the given card country |
Yes |
|
System does not allow the execution of transaction with the given card country |
Yes |
|
Geographic scope is not permitted for this transaction |
Yes |
|
Transaction limit for single transaction exceeded |
Yes |
|
Daily transaction limit for amount per card exceeded |
Yes |
|
Daily transaction limit for count per card exceeded |
Yes |
|
Monthly transaction limit for amount per card exceeded |
Yes |
|
Monthly transaction limit for count per card exceeded |
Yes |
|
Daily cumulative limit per card was exceeded |
Yes |
|
Monthly cumulative limit per card was exceeded |
Yes |
|
Daily cumulative limit per merchant transactions using mastercard cards was exceeded |
Yes |
|
Monthly cumulative limit per merchant transactions using mastercard cards was exceeded |
Yes |
|
Daily cumulative limit per merchant transactions using visa cards was exceeded |
Yes |
|
Monthly cumulative limit per merchant transactions using visa cards was exceeded |
Yes |
|
Daily cumulative limit per merchant transactions using mastercard and visa cards was exceeded |
Yes |
|
Monthly cumulative limit per merchant transactions using mastercard and visa cards was exceeded |
Yes |
|
Error during limit checking |
Yes |
|
An unrecognized error occurred |
Yes |
|
Error domestic transaction not permitted for card |
No |
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 |
---|---|---|
|
|
No |
|
|
No |
|
|
No |
|
There is no Delayed Payment with given orderId |
No |
|
Critical internal exception occurred in system while trying to make Delayed Payment |
Yes |
|
|
Yes |
|
CODE_XX - is MasterCard response code (ISO 8583) |
Yes |
|
This card is not supported |
Yes |
|
Card is blocked for 1 hour in Fenige |
Yes |
|
User is blocked in Fenige |
Yes |
|
Bin is blocked for 1 hour in Fenige |
Yes |
|
Payment bank is blocked in Fenige |
Yes |
|
Payment transaction was declined and funding was reversed |
Yes |
|
A connection error occurred to Acquirer service |
Yes |
|
User was found on the stop list |
Yes |
|
Acceptance network is unavailable |
Yes |
|
No currently effective rates found in the database |
Yes |
|
Currency is not supported |
Yes |
|
Currency is not supported by Merchant |
Yes |
|
Receiver’s card is blocked |
Yes |
|
User acting as receiver is blocked |
Yes |
|
BIN of receiver’s card is blocked |
Yes |
|
Amount is higher than acceptable limit |
Yes |
|
Couldn’t established connection to Monitoring service |
Yes |
|
Some unrecognized error occurred |
Yes |
|
Some problem with authorized the user. |
Yes |
|
The transaction user’s personal data verified as incorrect on the verification service. Transaction rejected. |
No |
|
Couldn’t established connection to MPI service |
Yes |
|
Payment transaction declined - mip response timeout |
Yes |
|
Payment process failed and it is need to manual verification of transaction |
Yes |
|
Payment transaction declined - mip_proxy response timeout |
Yes |
|
Error transaction not exists |
Yes |
|
Card was not found |
No |
|
Problem with DC |
Yes |
|
Some validation error occurred |
Yes |
|
An unrecognized error occurred |
Yes |
|
Merchant is marked as high risk and does not allow the execution of transaction with the given card country |
Yes |
|
System does not allow the execution of transaction with the given card country |
Yes |
|
Geographic scope is not permitted for this transaction |
Yes |
|
Error domestic transaction not permitted for card |
No |
3.5.3. Transaction history
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 |
---|---|
|
Returned list of transactions history. |
|
Returning the list failed. |
Example Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1073
{
"content" : [ {
"correlationId" : "a7042d8e-3c0b-4711-9204-17043bd7e516",
"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,
"first" : true,
"size" : 1,
"number" : 0,
"sort" : {
"empty" : true,
"sorted" : false,
"unsorted" : true
},
"numberOfElements" : 1,
"empty" : false
}
Response fields
Path | Type | Description |
---|---|---|
|
|
Unique UUID describing single transaction in system. |
|
|
Date of transaction processing. |
|
|
Transaction amount in pennies. |
|
|
Transaction amount in USD currency in pennies. |
|
|
Transaction amount with currency. |
|
|
Transaction currency. |
|
|
Datacore card id used in transaction (sender card). |
|
|
Value: true/false determines if transaction was processed with 3ds |
|
|
Transaction receiver first name. |
|
|
Transaction receiver last name. |
|
|
Transaction receiver hidden card number. |
|
|
VISA or MASTERCARD or MAESTRO |
|
|
Transaction receiver card bank name. |
|
|
Transaction sender first name. |
|
|
Transaction sender last name. |
|
|
Transaction sender hidden card numbe. |
|
|
VISA or MASTERCARD or MAESTRO |
|
|
Transaction sender card bank name. |
|
|
Transaction receiver phone number. |
|
|
Status of the transaction (approved, reversed, rejected). |
|
|
Direction of the transaction (INCOMING, OUTGOING) |
|
|
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 |
|
|
Describes whether the page is last (true ot false). |
|
|
Total number of all pages. |
|
|
Total number of all transactions. |
|
|
Number of transactions on page. |
|
|
Describes whether the page is first (true ot false). |
|
|
Details of sort. |
|
|
Max number of transactions on page. |
|
|
Page number. |
|
|
Requested page information. |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1082
{
"content" : [ {
"correlationId" : "b1326f02-bb6b-4a9e-a946-b3a5ee10db49",
"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,
"first" : true,
"size" : 1,
"number" : 0,
"sort" : {
"empty" : true,
"sorted" : false,
"unsorted" : true
},
"numberOfElements" : 1,
"empty" : false
}
Response fields
Path | Type | Description |
---|---|---|
|
|
Unique UUID describing single transaction in system. |
|
|
Date of transaction processing. |
|
|
Transaction amount in pennies. |
|
|
Transaction amount in USD currency in pennies. |
|
|
Transaction amount with currency. |
|
|
Transaction currency. |
|
|
Datacore card id used in transaction (sender card). |
|
|
Value: true/false determines if transaction was processed with 3ds |
|
|
Transaction receiver first name. |
|
|
Transaction receiver last name. |
|
|
Transaction receiver hidden card number. |
|
|
VISA or MASTERCARD or MAESTRO |
|
|
Transaction receiver card bank name. |
|
|
Transaction sender first name. |
|
|
Transaction sender last name. |
|
|
Transaction sender hidden card number. |
|
|
VISA or MASTERCARD or MAESTRO |
|
|
Transaction sender card bank name. |
|
|
Transaction receiver email. |
|
|
Status of the transaction (approved, reversed, rejected). |
|
|
Direction of the transaction (INCOMING, OUTGOING) |
|
|
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 |
|
|
Describes whether the page is last (true ot false). |
|
|
Total number of all pages. |
|
|
Total number of all transactions. |
|
|
Number of transactions on page. |
|
|
Describes whether the page is first (true ot false). |
|
|
Details of sort. |
|
|
Max number of transactions on page. |
|
|
Page number. |
|
|
Requested page information. |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 841
{
"content" : [ {
"correlationId" : "5ea466dc-46d0-4161-8240-1d292c5a3821",
"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,
"first" : true,
"size" : 1,
"number" : 0,
"sort" : {
"empty" : true,
"sorted" : false,
"unsorted" : true
},
"numberOfElements" : 1,
"empty" : false
}
Response fields
Path | Type | Description |
---|---|---|
|
|
Unique UUID describing single transaction in system. |
|
|
Date of transaction processing. |
|
|
Transaction amount in pennies. |
|
|
Transaction amount in USD currency in pennies. |
|
|
Transaction amount with currency. |
|
|
Transaction currency. |
|
|
Datacore card id used in transaction (sender card). |
|
|
Value: true/false determines if transaction was processed with 3ds |
|
|
Transaction sender first name. |
|
|
Transaction sender last name. |
|
|
Transaction sender hidden card number. |
|
|
VISA or MASTERCARD or MAESTRO |
|
|
Transaction sender card bank name. |
|
|
Transaction receiver phone number. |
|
|
Status of the transaction (approved, reversed, rejected). |
|
|
Direction of the transaction (INCOMING, OUTGOING) |
|
|
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 |
|
|
Describes whether the page is last (true ot false). |
|
|
Total number of all pages. |
|
|
Total number of all transactions. |
|
|
Number of transactions on page. |
|
|
Describes whether the page is first (true ot false). |
|
|
Details of sort. |
|
|
Max number of transactions on page. |
|
|
Page number. |
|
|
Requested page information. |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 850
{
"content" : [ {
"correlationId" : "67404135-555d-4fca-b5a5-0a5e0333d923",
"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,
"first" : true,
"size" : 1,
"number" : 0,
"sort" : {
"empty" : true,
"sorted" : false,
"unsorted" : true
},
"numberOfElements" : 1,
"empty" : false
}
Response fields
Path | Type | Description |
---|---|---|
|
|
Unique UUID describing single transaction in system. |
|
|
Date of transaction processing. |
|
|
Transaction amount in pennies. |
|
|
Transaction amount in USD currency in pennies. |
|
|
Transaction amount with currency. |
|
|
Transaction currency. |
|
|
Datacore card id used in transaction (sender card). |
|
|
Value: true/false determines if transaction was processed with 3ds |
|
|
Transaction sender first name. |
|
|
Transaction sender last name. |
|
|
Transaction sender hidden card number. |
|
|
VISA or MASTERCARD or MAESTRO |
|
|
Transaction sender card bank name. |
|
|
Transaction receiver email. |
|
|
Status of the transaction (approved, reversed, rejected). |
|
|
Direction of the transaction (INCOMING, OUTGOING) |
|
|
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 |
|
|
Describes whether the page is last (true ot false). |
|
|
Total number of all pages. |
|
|
Total number of all transactions. |
|
|
Number of transactions on page. |
|
|
Describes whether the page is first (true ot false). |
|
|
Details of sort. |
|
|
Max number of transactions on page. |
|
|
Page number. |
|
|
Requested page information. |
HTTP/1.1 404 Not Found
3.5.4. Check detailed status
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
Parameter | Description |
---|---|
|
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 |
---|---|
|
Returned if the transaction completes successfully. |
|
Returned when transaction was registered for processing. Check status in a while. |
|
Returned when a transaction related to the given orderId doesn’t exist. |
|
Returned when user provides wrong order-id or transaction was failed or was Declined. |
|
Returned when an internal error occur. |
Example HTTP Response
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"
}
Path | Type | Description |
---|---|---|
|
|
Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100] |
|
|
Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100] |
|
|
Field informing about the amount of cash transferred with decimal precision. |
|
|
This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100] |
|
|
This is the amount of commission that was added to the transaction at 0.01 currency. |
|
|
Unique transaction identifier. |
|
|
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 |
|
|
Date of transaction. |
|
|
Funding Retrieval Reference Number. |
|
|
Payment Retrieval Reference Number. |
|
|
Acquirer Reference Number |
|
|
Value: true/false determines if transaction was processed with 3ds |
|
|
Detailed information about revaluation between sender currency and receiver currency. |
|
|
Personal data of the person to whom the transfer is addressed. |
|
|
Personal data of the person who performs the transfer of cash. |
|
|
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 |
HTTP/1.1 203 Non-Authoritative Information
After you get 203 you need to check status in a while because we are processing this transaction and if you don’t get a response (200 - succeeded or 500 - declined) within 60 seconds then please contact us. |
HTTP/1.1 404 Not Found
Content-Type: application/json
Content-Length: 51
{
"errorStatus" : "ERROR_TRANSACTION_NOT_FOUND"
}
Path | Type | Description |
---|---|---|
|
|
Additional data of the error occurred during a processing of the request |
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-11-09T17:35:52.223",
"errorStatus" : "ERROR_SENDER_CARD_IS_BLOCKED"
}
Path | Type | Description |
---|---|---|
|
|
Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100] |
|
|
Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100] |
|
|
Field informing about the amount of cash transferred with decimal precision. |
|
|
This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100] |
|
|
This is the amount of commission that was added to the transaction at 0.01 currency. |
|
|
Unique transaction identifier. |
|
|
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 |
|
|
Date of transaction. |
|
|
Funding Retrieval Reference Number. |
|
|
Payment Retrieval Reference Number. |
|
|
Acquirer Reference Number |
|
|
Value: true/false determines if transaction was processed with 3ds |
|
|
Detailed information about revaluation between sender currency and receiver currency. |
|
|
Personal data of the person to whom the transfer is addressed. |
|
|
Personal data of the person who performs the transfer of cash. |
|
|
Status of the transaction (PENDING, APPROVED, DECLINED, REJECTED, REVERSED) |
|
|
Additional data of the error occurred during a processing of the request |
|
|
Card lock type |
|
|
Card’s lock end date |
|
|
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 |
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-11-09T17:35:48.842",
"errorStatus" : "ERROR_SENDER_CARD_IS_BLOCKED"
}
Path | Type | Description |
---|---|---|
|
|
Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100] |
|
|
Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100] |
|
|
Field informing about the amount of cash transferred with decimal precision. |
|
|
This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100] |
|
|
This is the amount of commission that was added to the transaction at 0.01 currency. |
|
|
Unique transaction identifier. |
|
|
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 |
|
|
Date of transaction. |
|
|
Funding Retrieval Reference Number. |
|
|
Payment Retrieval Reference Number. |
|
|
Acquirer Reference Number |
|
|
Value: true/false determines if transaction was processed with 3ds |
|
|
Detailed information about revaluation between sender currency and receiver currency. |
|
|
Personal data of the person to whom the transfer is addressed. |
|
|
Personal data of the person who performs the transfer of cash. |
|
|
Merchant settlement currency |
|
|
Commission Fenige in merchant settlement currency |
|
|
Transaction amount in merchant settlement currency |
|
|
Status of the transaction (PENDING, APPROVED, DECLINED, REJECTED, REVERSED) |
|
|
The code of the error occurred during a processing of the request |
|
|
Card lock type |
|
|
Card’s lock end date |
|
|
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 |
HTTP/1.1 500 Internal Server Error
Content-Type: application/json
Content-Length: 69
{
"errorStatus" : "ERROR_SOMETHING_WRONG - Something went wrong."
}
Path | Type | Description |
---|---|---|
|
|
Additional data of the error occurred during a processing of the request |
3.6. Card to Account
Money transfer from card to account number is possible from Q1 2024
Using this method, we can quickly make a transfer from a card to an account number. An important piece of information to ensure high transaction compliance is the ability to execute the /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-3ds method.
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 account 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.
In the Payouts to Account model, we introduce the concept of a Corridor. This refers to a combination of the recipient’s country, the currency of the payout, and the transaction model (the transaction model should be transparent for the end user). For example, a Corridor would be USA, USD. Below, you will find the complete list of supported Corridors. The key point is that different Corridors require different sets of fields to be sent via the API. To ensure dynamic validation, we have introduced the /client/send-money/validate endpoint, which guarantees consistency—allowing us to be confident that a given request will be processed correctly by Visa or Mastercard (provided there are no other technical issues). The validate endpoint plays the role of dynamic validation, making it easier to integrate with the payment service without having to go through extensive tables that specify which fields are required under which conditions. With this method, you can be assured that your request is valid, as indicated by the isPayoutRequestValid field. Please be informed that if you send a request that is not validated but the system accepts it, there is a high probability that the transaction will be rejected. The error in the Admin Panel or Check Status will be displayed as ERROR_VALIDATION. |
TIP: 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. |
3.6.1. Available Corridors
No. | Country | Currency | Available Merchant Models |
---|---|---|---|
1 |
AD, AT, AU, BA, BE, BG, CH, CL, CO, CR, CY, CZ, DE, DK, EE, ES, FI, FR, GB, GR, HR, HU, ID, IE, IL, IN, IT, IS, LT, LU, LV, MX, MT, MC, MY, NL, NO, NZ, PH, PK, PT, RO, SE, SM, SG, SI, SK, TH, TR, VA |
EUR |
CARD_ACCOUNT (P2P, Person to Person) |
3.6.2. Request
Example HTTP Request
POST /api/v2/client/send-money-3ds HTTP/1.1
Content-Type: application/vnd.sendmoney3ds.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 1397
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" : "2764d5a7-8c08-4f69-bdfc-e9a5cc937199"
},
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"requestId" : "d6c3422d-5bc7-4889-a2d4-836322141a44",
"sender" : {
"type" : "PLAIN",
"firstName" : "Mark",
"lastName" : "Smith",
"street" : "Olszewskiego",
"houseNumber" : "17A",
"city" : "Lublin",
"postalCode" : "20-400",
"flatNumber" : "2",
"email" : "senderEmail@fenige.pl",
"birthDate" : "2024-11-12",
"cardNumber" : "5117964247989169",
"expirationDate" : "03/26",
"personalId" : "AGC688910",
"country" : "PL",
"currency" : "PLN"
},
"receiver" : {
"type" : "ACCOUNT",
"firstName" : "Rob",
"lastName" : "Wring",
"birthDate" : "2024-11-12",
"currency" : "EUR",
"bank" : {
"bankCode" : "800554",
"bankCodeType" : "SORT_CODE",
"bankName" : "Barclays",
"accountName" : "Money Market",
"accountNumber" : "BE71096123456769",
"accountNumberType" : "IBAN",
"countryCode" : "BE",
"currencyCode" : "EUR"
},
"accountType" : "I",
"countryOfResidence" : "PL"
}
}
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 |
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_ACCOUNT: above |
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. |
subMerchantName |
String |
Optional |
Identifier assigned by the Marketplace to each sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
subMerchantCountry |
String |
Optional |
The field to distinguish the country location of the sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
sender |
Object |
Required |
@NotNull |
|
receiver |
Object |
Required |
@NotNull |
|
outside3ds.cavv |
String |
Required |
@NotNull, @Must be base 64 encoded, @Size must be between 28 and 28 inclusive |
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 |
Required |
@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. |
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" : "SENDER",
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"sender" : {
"type" : "PLAIN",
"firstName": "Mark",
"lastName": "Smith",
"street": "Olszewskiego",
"houseNumber": "17A",
"city": "Lublin",
"postalCode": "20-400",
"flatNumber": "2",
"email": "senderEmail@fenige.pl",
"birthDate": "1993-01-16",
"cardNumber": "5117964247989169",
"expirationDate": "03/26",
"personalId": "AGC688910",
"currency": "PLN",
"country": "PL"
},
"receiver" : {
"type" : "ACCOUNT",
"firstName" : "Rob",
"lastName" : "Wring",
"birthDate" : "2023-12-13",
"currency" : "EUR",
"bank" : {
"bankCode" : "800554",
"bankCodeType" : "SORT_CODE",
"bankName" : "Barclays",
"accountName" : "Money Market",
"accountNumber" : "BE71096123456769",
"accountNumberType" : "IBAN",
"countryCode" : "BE",
"currencyCode" : "EUR"
},
"accountType" : "I",
"countryOfResidence" : "PL"
}
}
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 |
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_ACCOUNT: above |
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. |
subMerchantName |
String |
Optional |
Identifier assigned by the Marketplace to each sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
subMerchantCountry |
String |
Optional |
The field to distinguish the country location of the sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
sender |
Object |
Required |
@NotNull |
|
receiver |
Object |
Required |
@NotNull |
|
outside3ds.cavv |
String |
Required |
@NotNull, @Must be base 64 encoded, @Size must be between 28 and 28 inclusive |
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 |
Required |
@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. |
3.6.3. Response
Response status
Status | Description |
---|---|
|
Returned if the transaction completes successfully. |
|
Returned list of field name which has validation errors. |
|
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. |
|
Returned e.g. when a different transaction with the provided requestId has already been registered in the system. |
|
Returned when username or password is not correct. |
|
Returned when server understood the request but refuses to authorize it. |
Example HTTP Response
HTTP/1.1 202 Accepted
Content-Type: application/json
Content-Length: 56
{
"orderId" : "86359d89-2026-415c-b6dd-1a85bc9d19e7"
}
Path | Type | Description |
---|---|---|
|
|
Transaction order-id |
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.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.province",
"message": [
"is not correct province code for country code US",
"may not be null"
]
},
{
"field": "sender.city",
"message": [
"may not be empty",
"may not be null",
"length must be between 1 and 25"
]
},
{
"field": "sender.currency",
"message": [
"Currency is not supported"
]
}
{
"field": "sender.houseNumber",
"message": [
"may not be null",
"may not be empty",
"length must be between 1 and 10"
]
},
{
"field": "sender.flatNumber",
"message": [
"must be null",
"length must be between 0 and 5"
]
},
{
"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.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.accountType",
"message": [
"must 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",
"Currency is not supported"
]
},
{
"field": "receiver.bank.accountNumber",
"message": [
"must not be blank"
]
},
{
"field": "receiver.bank.accountName",
"message": [
"must not be blank"
]
},
{
"field": "receiver.bank.countryCode",
"message": [
"must not be null"
]
}
]
}
}
HTTP/1.1 202 Accepted
Content-Type: application/json
Content-Length: 56
{
"orderId" : "86359d89-2026-415c-b6dd-1a85bc9d19e7"
}
Path | Type | Description |
---|---|---|
|
|
Transaction order-id |
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."
}
}
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"
}
Path | Description |
---|---|
|
|
|
|
|
|
|
|
|
|
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.6.4. Check status
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
Parameter | Description |
---|---|
|
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 |
---|---|
|
Returned if the transaction completes successfully. |
|
Returned when transaction was registered for processing. Check status in a while. |
|
Returned when user provides wrong order-id or transaction was failed or was Declined. |
Example HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 960
{
"amount" : 1000,
"amountInUsDollar" : 268,
"bigDecimalAmount" : 10.0,
"commission" : 200,
"bigDecimalCommission" : 2.0,
"orderId" : "00549d98-08cb-45d2-8673-4dcafa81f498",
"createdDate" : "03-04-2024, 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" : "Jan",
"lastName" : "Nowak",
"provider" : "ACCOUNT",
"accountNumber" : "PL42117730161111101800000000"
},
"sender" : {
"firstName" : "Karolina",
"lastName" : "Kowalska",
"provider" : "MASTERCARD",
"hiddenCardNumber" : "511796******9169",
"bankName" : "Alior Bank SA"
}
}
Path | Type | Description |
---|---|---|
|
|
Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100] |
|
|
Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100] |
|
|
Field informing about the amount of cash transferred with decimal precision. |
|
|
This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100] |
|
|
This is the amount of commission that was added to the transaction at 0.01 currency. |
|
|
Unique transaction identifier. |
|
|
Date of transaction. |
|
|
Value: true/false determines if transaction was processed with 3ds |
|
|
Detailed information about revaluation between sender and receiver currency. |
|
|
Personal data of the person to whom the transfer is addressed. |
|
|
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 |
HTTP/1.1 203 Non-Authoritative Information
After you get 203 you need to check status in a while because we are processing this transaction and if you don’t get a response (200 - succeeded or 500 - declined) within 60 seconds then please contact us. |
HTTP/1.1 500 Internal Server Error
Content-Type: text/plain;charset=ISO-8859-1
FUNDING_TRANSACTION_DECLINED:CODE_05
After receiving these statuses, the transaction was rejected |
Error statuses
Name |
Description |
|
REJECTED - Monitoring rule which is designed to prevent the acceptance of names or surnames that do not contain vowels or consonants |
|
CODE_XX - is MasterCard response code (ISO 8583) |
|
This card is not supported |
|
Card is blocked for 1 hour in Fenige |
|
User is blocked in Fenige |
|
Bin is blocked for 1 hour in Fenige |
|
Funding bank is blocked in Fenige |
|
Payment bank is blocked in Fenige |
|
A connection error occurred to Acquirer service |
|
User was found on the stop list |
|
Acceptance network is unavailable |
|
No currently effective rates found in the database |
|
Currency is not supported |
|
Currency is not supported by Merchant |
|
Transaction limit for single transaction exceeded |
|
Daily transaction limit for amount per card exceeded |
|
Daily transaction limit for count per card exceeded |
|
Weekly transaction limit for amount per card exceeded |
|
Monthly transaction limit for amount per card exceeded |
|
Monthly transaction limit for count per card exceeded |
|
Daily cumulative limit per card was exceeded |
|
Monthly cumulative limit per card was exceeded |
|
Daily cumulative limit per merchant transactions using mastercard cards was exceeded |
|
Monthly cumulative limit per merchant transactions using mastercard cards was exceeded |
|
Daily cumulative limit per merchant transactions using visa cards was exceeded |
|
Monthly cumulative limit per merchant transactions using visa cards was exceeded |
|
Daily cumulative limit per merchant transactions using mastercard and visa cards was exceeded |
|
Monthly cumulative limit per merchant transactions using mastercard and visa cards was exceeded |
|
Amount is higher than acceptable limit |
|
Couldn’t established connection to Monitoring service |
|
Some unrecognized error occurred |
|
The transaction user’s personal data verified as incorrect on the verification service. Transaction rejected. |
|
Funding transaction declined - mip_proxy response timeout |
|
Error finalize 3ds not authenticated. MPI return one of statuses: N -The customer failed authentication, and the transaction is denied. |
|
Error no 3ds authorization, when User authenticates successfully but after 15 minutes or User doesn’t authenticate. |
|
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. |
|
An error occurred while processing |
|
An error occurred while processing |
|
An error occurred while processing |
|
Merchant has configured a different version of 3DS than specified in the request |
|
Some unrecognized, internal error occurred in MPI2 service |
|
Required configuration data of Merchant are not complete to finish 3DS 2.X process |
|
TransactionXId is invalid for card number specified in the request, 3DS 2.X flow invoked for other card number 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 |
|
Card not found by transactionXId |
|
Card authentication does not match to payment type |
|
Error 3DS 2.X processing failed |
|
Transactions without 3ds above 30 EUR (the blockade applies only to EU countries) |
|
Error transaction not exists |
|
Card was not found |
|
Problem with DC |
|
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. |
|
This error may occur if card’s country is other than user’s country for USA or CAN transaction for PLAIN model |
|
This error may occur if card’s country is other than user’s country for USA or CAN transaction |
|
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. |
|
Province code is not valid for USA or CAN transactions. Please update user profile |
|
Some validation error occurred |
|
Card expired |
|
The amount sent is too small. Enter a larger amount. |
|
The amount sent is too high. Enter a lower amount. |
|
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. |
|
Merchant not support the given card provider, please contact support to check merchant configuration |
|
Merchant crypto is not supported outside EEA+UK |
|
System does not allow the execution of transaction with the sender card country. |
|
Geographic scope is not permitted for this transaction |
|
Processing time of transaction was too long, transaction is declined. |
|
Transaction rejected, second transaction with merchant advice code 03 or 21 within 30 days. |
|
Transaction rejected, sender or receiver name contains fraudulent phrase. |
|
Transaction rejected, suspicious sender or receiver name. |
|
Error domestic transaction not permitted for card |
3.6.5. Check detailed status
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
Parameter | Description |
---|---|
|
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 |
---|---|
|
Returned if the transaction completes successfully. |
|
Returned when transaction was registered for processing. Check status in a while. |
|
Returned when a transaction related to the given orderId doesn’t exist. |
|
Returned when user provides wrong order-id or transaction was failed or was Declined. |
|
Returned when an internal error occur. |
Example HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1565
{
"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" : "Jan",
"lastName" : "Nowak",
"provider" : "ACCOUNT"
},
"sender" : {
"firstName" : "Karolina",
"lastName" : "Kowalska",
"provider" : "MASTERCARD",
"hiddenCardNumber" : "511796******9169",
"bankName" : "Alior Bank SA"
},
"transactionStatus" : "APPROVED",
"accountTransferDetails" : {
"clientReferenceId" : "00549d98-08cb-45d2-8673-4dcafa81f498",
"payoutId" : "281474988908972",
"transactionDateTime" : "2018-04-03 14:01:50",
"transactionAmount" : 10.0,
"settlementAmount" : 10.0,
"destinationAmount" : 10.0,
"transactionCurrencyCode" : "PLN",
"settlementCurrencyCode" : "PLN",
"destinationCurrencyCode" : "PLN",
"payoutSpeed" : "STANDARD",
"payoutMethod" : "B",
"expectedPostingDate" : "2018-04-03",
"initiatingPartyId" : 10078719100,
"status" : "PAYMENT_SENT",
"accountNumber" : "PL42117730161111101800000000"
}
}
Path | Type | Description |
---|---|---|
|
|
Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100] |
|
|
Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100] |
|
|
Field informing about the amount of cash transferred with decimal precision. |
|
|
This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100] |
|
|
This is the amount of commission that was added to the transaction at 0.01 currency. |
|
|
Unique transaction identifier. |
|
|
Date of transaction. |
|
|
Value: true/false determines if transaction was processed with 3ds |
|
|
Detailed information about revaluation between sender and receiver currency. |
|
|
Personal data of the person to whom the transfer is addressed. |
|
|
Personal data of the person who performs the transfer of cash. |
|
|
Status of the transaction (PENDING, APPROVED, DECLINED, REJECTED, REVERSED) |
|
|
Details of the transfer to the account |
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 account currency code |
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 |
HTTP/1.1 203 Non-Authoritative Information
After you get 203 you need to check status in a while because we are processing this transaction and if you don’t get a response (200 - succeeded or 500 - declined) within 60 seconds then please contact us. |
HTTP/1.1 404 Not Found
Content-Type: application/json
Content-Length: 51
{
"errorStatus" : "ERROR_TRANSACTION_NOT_FOUND"
}
Path | Type | Description |
---|---|---|
|
|
Additional data of the error occurred during a processing of the request |
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json
Content-Length: 1070
{
"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" : "Jan",
"lastName" : "Nowak",
"provider" : "ACCOUNT"
},
"sender" : {
"firstName" : "Karolina",
"lastName" : "Kowalska",
"provider" : "MASTERCARD",
"hiddenCardNumber" : "511796******9169",
"bankName" : "Alior Bank SA"
},
"transactionStatus" : "DECLINED",
"cardBlockType" : "TEMP",
"cardBlockedUntil" : "2024-11-09T17:35:47.414",
"errorStatus" : "ERROR_SENDER_CARD_IS_BLOCKED"
}
Path | Type | Description |
---|---|---|
|
|
Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100] |
|
|
Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100] |
|
|
Field informing about the amount of cash transferred with decimal precision. |
|
|
This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100] |
|
|
This is the amount of commission that was added to the transaction at 0.01 currency. |
|
|
Unique transaction identifier. |
|
|
Date of transaction. |
|
|
Value: true/false determines if transaction was processed with 3ds |
|
|
Detailed information about revaluation between sender and receiver currency. |
|
|
Personal data of the person to whom the transfer is addressed. |
|
|
Personal data of the person who performs the transfer of cash. |
|
|
Status of the transaction (PENDING, APPROVED, DECLINED, REJECTED, REVERSED) |
|
|
The code of the error occurred during a processing of the request |
|
|
Card lock type |
|
|
Card’s lock end date |
|
|
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 |
HTTP/1.1 500 Internal Server Error
Content-Type: application/json
Content-Length: 69
{
"errorStatus" : "ERROR_SOMETHING_WRONG - Something went wrong."
}
Path | Type | Description |
---|---|---|
|
|
Additional data of the error occurred during a processing of the request |
3.6.6. Transaction history
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 |
---|---|
|
Returned list of transactions history. |
|
Returning the list failed. |
Example Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1045
{
"content" : [ {
"correlationId" : "c7d8d211-0b74-4779-8e5a-3a1d555d2a67",
"createdDate" : "2018-03-15T10:24:52.149Z",
"amount" : 15000,
"amountInUsDollar" : 4024,
"textAmount" : "150.00 PLN",
"currency" : "PLN",
"cardId" : 3574,
"receiverFirstName" : "Patrick",
"receiverLastName" : "Evans",
"receiverHiddenCardNumber" : "****************",
"receiverProvider" : "ACCOUNT",
"receiverEmail" : "receiver@fenige.pl",
"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,
"first" : true,
"size" : 1,
"number" : 0,
"sort" : {
"empty" : true,
"sorted" : false,
"unsorted" : true
},
"numberOfElements" : 1,
"empty" : false
}
Path | Type | Description |
---|---|---|
|
|
Unique UUID describing single transaction in system |
|
|
Date of transaction processing |
|
|
Transaction amount in pennies |
|
|
Transaction amount in USD currency in pennies. |
|
|
Transaction amount with currency |
|
|
Transaction currency |
|
|
Datacore card id used in transaction (sender card) |
|
|
Value: true/false determines if transaction was processed with 3ds |
|
|
Transaction receiver first name |
|
|
Transaction receiver last name |
|
|
Transaction receiver hidden card number |
|
|
ACCOUNT |
|
|
Transaction receiver bank name. Occurs only for card |
|
|
Transaction sender first name. |
|
|
Transaction sender last name. |
|
|
Transaction sender hidden card number. |
|
|
VISA or MASTERCARD or MAESTRO |
|
|
Transaction sender card bank name. |
|
|
Transaction receiver phone number |
|
|
Transaction receiver email |
|
|
Status of the transaction (approved, reversed) |
|
|
Direction of the transaction (INCOMING, OUTGOING) |
|
|
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 |
|
|
Describes whether the page is last (true ot false) |
|
|
Total number of all pages |
|
|
Total number of all transactions |
|
|
Number of transactions on page |
|
|
Describes whether the page is first (true ot false) |
|
|
Details of sort |
|
|
Max number of transactions on page |
|
|
Page number |
|
|
Page number |
HTTP/1.1 404 Not Found
3.6.7. Transaction details
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 |
---|---|
|
Returned details of transaction. |
Example Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 327
{
"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",
"sendMoneyType" : "SENDER"
}
Path | Type | Description |
---|---|---|
|
|
Funding amount in transaction currency |
|
|
Charged amount in transaction currency |
|
|
Transaction commission with currency |
|
|
Payment amount in receiver currency |
|
|
Revaluation amount from sender to receiver currency |
|
|
Date of the transaction |
|
|
Card issuer MASTERCARD/VISA |
|
|
Transaction amount in USD currency in pennies |
|
|
Status of transaction approved/reject/decline |
|
|
Specifies the direction of the transaction currency. SENDER - the currency of the sender, RECEIVER - the currency of the receiver. |
3.7. Payouts to Account
Money transfer from Fenige funds deposit to account number is possible from Q1 2024
Using this method, we can quickly make a transfer from a Fenige cash deposit to an account number. An important piece of information to ensure high transaction compliance is the ability to execute the /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.
1 - User by selecting type = RECEIVER defines amount of payment in given currency. This amount is transferred to receiver account 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.
Please read this whole section before using this payout method. In the Payouts to Account model, we introduce the concept of a Corridor. This refers to a combination of the recipient’s country, the currency of the payout, and the transaction model (the transaction model should be transparent for the end user). For example, a Corridor would be USA, USD. Below, you will find the complete list of supported Corridors. The key point is that different Corridors require different sets of fields to be sent via the API. To ensure dynamic validation, we have introduced the /client/send-money/validate endpoint, which guarantees consistency—allowing us to be confident that a given request will be processed correctly by Visa or Mastercard (provided there are no other technical issues). The validate endpoint plays the role of dynamic validation, making it easier to integrate with the payment service without having to go through extensive tables that specify which fields are required under which conditions. With this method, you can be assured that your request is valid, as indicated by the isPayoutRequestValid field. Please be informed that if you send a request that is not validated but the system accepts it, there is a high probability that the transaction will be rejected. The error in the Admin Panel or Check Status will be displayed as ERROR_VALIDATION. One important note is not to use real data for testing in the Staging Environment. To successfully complete transactions, please use the data provided in the request body examples. |
TIP: Please notice that you can choose language of email confirmation of this transaction. It is able by attach proper header to request. |
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, 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.7.1. Available Corridors
No. | Country | Currency | Available Merchant Models |
---|---|---|---|
1 |
US |
USD |
CASH_ACCOUNT (B2P, Bussiness to Person) |
2 |
CA |
CAD |
CASH_ACCOUNT (B2P, Bussiness to Person) |
3 |
HK |
USD |
CASH_ACCOUNT (B2P, Bussiness to Person) |
4 |
HK |
HKD |
CASH_ACCOUNT (B2P, Bussiness to Person) |
5 |
BR |
BRL |
CASH_ACCOUNT (B2P, Bussiness to Person) |
6 |
JP |
JPY |
CASH_ACCOUNT (B2P, Bussiness to Person) |
7 |
KR |
KRW |
CASH_ACCOUNT (B2P, Bussiness to Person) |
3.7.2. Request
Example HTTP Request
POST /api/v2/client/send-money HTTP/1.1
Content-Type: application/vnd.sendmoney.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 1307
Host: java-staging.fenige.pl:8181
{
"amount" : 1000,
"type" : "RECEIVER",
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"requestId" : "c335c416-ad78-4ebe-9271-07ae65d1d2d8",
"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",
"birthDate" : "2024-11-12",
"personalId" : "AGC688910",
"country" : "US",
"province" : "NY",
"phoneNumber" : "48501923945",
"organizationName" : "Fantastic Company S.A."
},
"receiver" : {
"type" : "ACCOUNT",
"firstName" : "Rob",
"lastName" : "Wring",
"street" : "14st Avenue",
"houseNumber" : "4",
"city" : "New York",
"postalCode" : "4334-12",
"flatNumber" : "243",
"birthDate" : "2024-11-12",
"currency" : "USD",
"bank" : {
"bankName" : "HSBC",
"accountName" : "John Doe",
"accountNumber" : "111111111",
"accountNumberType" : "BAN",
"countryCode" : "US",
"currencyCode" : "USD",
"bic" : "021000089"
},
"accountType" : "I",
"country" : "US",
"province" : "NY"
}
}
Request fields
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. CASH_ACCOUNT: RECEIVER |
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. |
subMerchantName |
String |
Optional |
Identifier assigned by the Marketplace to each sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
subMerchantCountry |
String |
Optional |
The field to distinguish the country location of the sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
description |
String |
Optional if transaction is in CASH_ACCOUNT or CARD_ACCOUNT model |
@Length(max = 130) |
The field is used as description or statement narrative that helps the receiver identify the sender and reason for the payment |
sender |
Object |
Required |
@NotNull |
|
receiver |
Object |
Required |
@NotNull |
POST /api/v2/client/send-money HTTP/1.1
Content-Type: application/vnd.sendmoney.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 1386
Host: java-staging.fenige.pl:8181
{
"amount" : 1000,
"type" : "RECEIVER",
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"requestId" : "99c0e62f-2944-4e47-8e64-1c59d75a54b6",
"transactionId" : "TRX220132AM",
"description" : "Test Account transaction",
"purposeOfPayment" : "WEDDING_EXPENSES",
"sender" : {
"type" : "CASH",
"firstName" : "Mark",
"lastName" : "Smith",
"street" : "Olszewskiego",
"houseNumber" : "17A",
"city" : "Lublin",
"postalCode" : "20-400",
"flatNumber" : "2",
"email" : "senderEmail@fenige.pl",
"birthDate" : "2024-11-12",
"personalId" : "AGC688910",
"country" : "CA",
"province" : "QC",
"phoneNumber" : "48501923945",
"organizationName" : "Fantastic Company S.A."
},
"receiver" : {
"type" : "ACCOUNT",
"firstName" : "Rob",
"lastName" : "Wring",
"street" : "14st Avenue",
"houseNumber" : "4",
"city" : "Quebec City",
"postalCode" : "4334-12",
"flatNumber" : "243",
"birthDate" : "2024-11-12",
"currency" : "CAD",
"bank" : {
"bankCode" : "123456789",
"bankName" : "HSBC",
"accountName" : "John Doe",
"accountNumber" : "65935322",
"accountNumberType" : "BAN",
"countryCode" : "CA",
"currencyCode" : "CAD",
"bic" : "NOSCCATTCGY"
},
"accountType" : "I",
"country" : "US",
"province" : "QC"
}
}
Request fields
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. CASH_ACCOUNT: RECEIVER |
purposeOfPayment |
String |
Required |
@NotNull |
This type of transaction in CA-CAD Corridor you need to use one of values: FAMILY_MAINTENANCE, HOUSEHOLD_MAINTENANCE, DONATION_OR_GIFTS, PAYMENT_OF_LOAN, PURCHASE_OF_PROPERTY, FUNERAL_EXPENSES, MEDICAL_EXPENSES, WEDDING_EXPENSES, PAYMENT_OF_BILLS, EDUCATION, SAVINGS, EMPLOYEE_COLLEAGUE, BUSINESS_INVESTMENT, SALARY, PAYMENT_OF_GOODS_AND_SERVICES |
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. |
subMerchantName |
String |
Optional |
Identifier assigned by the Marketplace to each sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
subMerchantCountry |
String |
Optional |
The field to distinguish the country location of the sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
description |
String |
Optional if transaction is in CASH_ACCOUNT or CARD_ACCOUNT model |
@Length(max = 130) |
The field is used as description or statement narrative that helps the receiver identify the sender and reason for the payment |
sender |
Object |
Required |
@NotNull |
|
receiver |
Object |
Required |
@NotNull |
POST /api/v2/client/send-money HTTP/1.1
Content-Type: application/vnd.sendmoney.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 1466
Host: java-staging.fenige.pl:8181
{
"amount" : 1000,
"type" : "RECEIVER",
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"requestId" : "31dade81-4649-41d3-993f-e764b6caba9c",
"transactionId" : "TRX220132AM",
"description" : "Test Account transaction",
"purposeOfPayment" : "DELIVERY_OF_GOODS",
"sender" : {
"type" : "CASH",
"firstName" : "Mark",
"lastName" : "Smith",
"street" : "Olszewskiego",
"houseNumber" : "17A",
"city" : "Lublin",
"postalCode" : "20-400",
"flatNumber" : "2",
"email" : "senderEmail@fenige.pl",
"birthDate" : "2024-11-12",
"personalId" : "AGC688910",
"country" : "PL",
"phoneNumber" : "48501923945",
"governmentId" : {
"type" : "TIN",
"id" : "12345678911",
"issueDate" : "2021-06-01",
"expirationDate" : "2031-09-11",
"issuingCountry" : "HK"
}
},
"receiver" : {
"type" : "ACCOUNT",
"firstName" : "Rob",
"lastName" : "Wring",
"street" : "14st Avenue",
"houseNumber" : "4",
"city" : "Quebec City",
"postalCode" : "4334-12",
"flatNumber" : "243",
"birthDate" : "2024-11-12",
"currency" : "USD",
"bank" : {
"bankName" : "HSBC",
"accountName" : "John Doe",
"accountNumber" : "13560260497",
"accountNumberType" : "BAN",
"countryCode" : "HK",
"currencyCode" : "USD",
"bic" : "BNORHKXXXX"
},
"accountType" : "I",
"country" : "HK",
"province" : "QC"
}
}
Request fields
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. CASH_ACCOUNT: RECEIVER |
purposeOfPayment |
String |
Required |
@NotNull |
This type of transaction in HK-USD Corridor you need to use one of values: ADVERTISING, CONSTRUCTION, COPY_RIGHT_FEE, DELIVERY_OF_GOODS, EDUCATION_EXPENSES, HOTEL, INSURANCE_PREMIUM, LOAN_REPAYMENT, MEDICAL, OFFICE_EXPENSES, RENTAL_PROPERTY, SHARE_INVESTMENT, TRADE, TRAVEL, UTILITY_BILL |
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. |
subMerchantName |
String |
Optional |
Identifier assigned by the Marketplace to each sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
subMerchantCountry |
String |
Optional |
The field to distinguish the country location of the sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
description |
String |
Optional if transaction is in CASH_ACCOUNT or CARD_ACCOUNT model |
@Length(max = 130) |
The field is used as description or statement narrative that helps the receiver identify the sender and reason for the payment |
sender |
Object |
Required |
@NotNull |
|
receiver |
Object |
Required |
@NotNull |
POST /api/v2/client/send-money HTTP/1.1
Content-Type: application/vnd.sendmoney.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 1284
Host: java-staging.fenige.pl:8181
{
"amount" : 1000,
"type" : "RECEIVER",
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"requestId" : "639f43a3-859d-4f28-bedc-08b7fc3d123c",
"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",
"birthDate" : "2024-11-12",
"personalId" : "AGC688910",
"country" : "PL",
"phoneNumber" : "48501923945",
"organizationName" : "Fantastic Company S.A."
},
"receiver" : {
"type" : "ACCOUNT",
"firstName" : "Rob",
"lastName" : "Wring",
"street" : "14st Avenue",
"houseNumber" : "4",
"city" : "Quebec City",
"postalCode" : "4334-12",
"flatNumber" : "243",
"birthDate" : "2024-11-12",
"currency" : "HKD",
"bank" : {
"bankName" : "HSBC",
"accountName" : "John Doe",
"accountNumber" : "786005728668",
"accountNumberType" : "BAN",
"countryCode" : "HK",
"currencyCode" : "HKD",
"bic" : "024"
},
"accountType" : "I",
"country" : "HK",
"province" : "QC"
}
}
Request fields
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. CASH_ACCOUNT: RECEIVER |
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. |
subMerchantName |
String |
Optional |
Identifier assigned by the Marketplace to each sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
subMerchantCountry |
String |
Optional |
The field to distinguish the country location of the sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
description |
String |
Optional if transaction is in CASH_ACCOUNT or CARD_ACCOUNT model |
@Length(max = 130) |
The field is used as description or statement narrative that helps the receiver identify the sender and reason for the payment |
sender |
Object |
Required |
@NotNull |
|
receiver |
Object |
Required |
@NotNull |
POST /api/v2/client/send-money HTTP/1.1
Content-Type: application/vnd.sendmoney.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 1542
Host: java-staging.fenige.pl:8181
{
"amount" : 1000,
"type" : "RECEIVER",
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"requestId" : "2b174f6a-2637-446b-853f-95f34e68dc45",
"transactionId" : "TRX220132AM",
"description" : "Test Account transaction",
"purposeOfPayment" : "BUSINESS_INVESTMENT",
"sender" : {
"type" : "CASH",
"firstName" : "Mark",
"lastName" : "Smith",
"street" : "Olszewskiego",
"houseNumber" : "17A",
"city" : "Lublin",
"postalCode" : "20-400",
"flatNumber" : "2",
"email" : "senderEmail@fenige.pl",
"birthDate" : "2024-11-12",
"personalId" : "AGC688910",
"country" : "PL",
"phoneNumber" : "48501923945",
"organizationName" : "Fantastic Company S.A."
},
"receiver" : {
"type" : "ACCOUNT",
"firstName" : "Rob",
"lastName" : "Wring",
"street" : "St. Antoine",
"houseNumber" : "4",
"city" : "Rio de Janeiro",
"postalCode" : "4334-12",
"flatNumber" : "243",
"birthDate" : "2024-11-12",
"currency" : "BRL",
"bank" : {
"bankCode" : "632",
"bankName" : "HSBC",
"accountType" : "C",
"accountName" : "John Doe",
"accountNumber" : "77925568",
"accountNumberType" : "BAN",
"countryCode" : "BR",
"currencyCode" : "BRL",
"bic" : "117"
},
"accountType" : "I",
"country" : "BR",
"governmentId" : {
"type" : "TIN",
"id" : "12345678911",
"issueDate" : "2021-06-01",
"expirationDate" : "2031-09-11",
"issuingCountry" : "BR"
}
}
}
Request fields
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. CASH_ACCOUNT: RECEIVER |
purposeOfPayment |
String |
Required |
@NotNull |
This type of transaction in BR-BRL Corridor you need to use one of values: BUSINESS_INVESTMENT, DONATION_OR_GIFTS, EDUCATION, PAYMENT_OF_GOODS_AND_SERVICES, REPRESENTATIVE_OFFICE_EXPENSES, SALARY |
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. |
subMerchantName |
String |
Optional |
Identifier assigned by the Marketplace to each sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
subMerchantCountry |
String |
Optional |
The field to distinguish the country location of the sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
description |
String |
Optional if transaction is in CASH_ACCOUNT or CARD_ACCOUNT model |
@Length(max = 130) |
The field is used as description or statement narrative that helps the receiver identify the sender and reason for the payment |
sender |
Object |
Required |
@NotNull |
|
receiver |
Object |
Required |
@NotNull |
POST /api/v2/client/send-money HTTP/1.1
Content-Type: application/vnd.sendmoney.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 1390
Host: java-staging.fenige.pl:8181
{
"amount" : 1000,
"type" : "RECEIVER",
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"requestId" : "fabe7e7b-2b8d-4074-a56d-02921e3a50f1",
"transactionId" : "TRX220132AM",
"description" : "Test Account transaction",
"purposeOfPayment" : "BUSINESS_INVESTMENT",
"sourceOfIncome" : "INVESTMENTS",
"sender" : {
"type" : "CASH",
"firstName" : "Mark",
"lastName" : "Smith",
"street" : "Olszewskiego",
"houseNumber" : "17A",
"city" : "Lublin",
"postalCode" : "20-400",
"flatNumber" : "2",
"email" : "senderEmail@fenige.pl",
"birthDate" : "2024-11-12",
"personalId" : "AGC688910",
"country" : "PL",
"phoneNumber" : "48501923945",
"organizationName" : "Fantastic Company S.A."
},
"receiver" : {
"type" : "ACCOUNT",
"firstName" : "Rob",
"lastName" : "Wring",
"street" : "Min Jao",
"houseNumber" : "4",
"city" : "Tokyo",
"postalCode" : "4334-12",
"flatNumber" : "243",
"birthDate" : "2024-11-12",
"currency" : "JPY",
"bank" : {
"bankCode" : "632",
"bankName" : "HSBC",
"accountType" : "CAK",
"accountName" : "John Doe",
"accountNumber" : "247249",
"accountNumberType" : "BAN",
"countryCode" : "JP",
"currencyCode" : "JPY",
"bic" : "RYUBJPJZXXX"
},
"accountType" : "I",
"country" : "JP"
}
}
Request fields
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. CASH_ACCOUNT: RECEIVER |
purposeOfPayment |
String |
Required |
@NotNull |
This type of transaction in JP-JPN Corridor you need to use one of values: FAMILY_MAINTENANCE, HOUSEHOLD_MAINTENANCE, DONATION_OR_GIFTS, PAYMENT_OF_LOAN, PURCHASE_OF_PROPERTY, FUNERAL_EXPENSES, MEDICAL_EXPENSES, WEDDING_EXPENSES, PAYMENT_OF_BILLS, EDUCATION, SAVINGS, EMPLOYEE_COLLEAGUE, BUSINESS_INVESTMENT, SALARY, PAYMENT_OF_GOODS_AND_SERVICES |
sourceOfIncome |
String |
Required |
@NotNull |
This type of transaction in JP-JPN Corridor you need to use one of values: SALARY, BUSSINESS, SAVINGS, INVESTMENTS, GOVERNMENT_FUNDING |
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. |
subMerchantName |
String |
Optional |
Identifier assigned by the Marketplace to each sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
subMerchantCountry |
String |
Optional |
The field to distinguish the country location of the sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
description |
String |
Optional if transaction is in CASH_ACCOUNT or CARD_ACCOUNT model |
@Length(max = 130) |
The field is used as description or statement narrative that helps the receiver identify the sender and reason for the payment |
sender |
Object |
Required |
@NotNull |
|
receiver |
Object |
Required |
@NotNull |
POST /api/v2/client/send-money HTTP/1.1
Content-Type: application/vnd.sendmoney.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 1356
Host: java-staging.fenige.pl:8181
{
"amount" : 1000,
"type" : "RECEIVER",
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"requestId" : "77629d21-571a-4e4c-9895-95cb8be29068",
"transactionId" : "TRX220132AM",
"description" : "Test Account transaction",
"purposeOfPayment" : "BUSINESS_INVESTMENT",
"sender" : {
"type" : "CASH",
"firstName" : "Mark",
"lastName" : "Smith",
"street" : "Olszewskiego",
"houseNumber" : "17A",
"city" : "Lublin",
"postalCode" : "20-400",
"flatNumber" : "2",
"email" : "senderEmail@fenige.pl",
"birthDate" : "2024-11-12",
"personalId" : "AGC688910",
"country" : "PL",
"phoneNumber" : "48501923945",
"organizationName" : "Fantastic Company S.A."
},
"receiver" : {
"type" : "ACCOUNT",
"firstName" : "Rob",
"lastName" : "Wring",
"street" : "Min Jao",
"houseNumber" : "4",
"city" : "Seul",
"postalCode" : "4334-12",
"flatNumber" : "243",
"phoneNumber" : "48548748523",
"birthDate" : "2024-11-12",
"currency" : "KRW",
"bank" : {
"bankCode" : "632",
"bankName" : "HSBC",
"accountName" : "John Doe",
"accountNumber" : "43718026203",
"accountNumberType" : "BAN",
"countryCode" : "KR",
"currencyCode" : "KRW",
"bic" : "039"
},
"accountType" : "I",
"country" : "KR"
}
}
Request fields
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. CASH_ACCOUNT: RECEIVER |
purposeOfPayment |
String |
Required |
@NotNull |
This type of transaction in KR-KRW Corridor you need to use one of values: FAMILY_MAINTENANCE, HOUSEHOLD_MAINTENANCE, LOAN_REPAYMENT, PROPERTY_PURCHASE, FUNERAL_EXPENSES, MEDICAL_EXPENSES, WEDDING_EXPENSES, BILL_PAYMENT, EDUCATION_EXPENSES, SAVINGS, EMPLOYEE_COLLEAGUE |
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. |
subMerchantName |
String |
Optional |
Identifier assigned by the Marketplace to each sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
subMerchantCountry |
String |
Optional |
The field to distinguish the country location of the sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
description |
String |
Optional if transaction is in CASH_ACCOUNT or CARD_ACCOUNT model |
@Length(max = 130) |
The field is used as description or statement narrative that helps the receiver identify the sender and reason for the payment |
sender |
Object |
Required |
@NotNull |
|
receiver |
Object |
Required |
@NotNull |
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",
"subMerchantName" : "Sub_Merchant",
"subMerchantCountry" : "PL",
"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" : "EUR",
"bank" : {
"bankCode" : "800554",
"bankCodeType" : "SORT_CODE",
"bankName" : "Barclays",
"accountName" : "Money Market",
"accountNumber" : "BE71096123456769",
"accountNumberType" : "IBAN",
"countryCode" : "BE",
"currencyCode" : "EUR"
},
"accountType" : "I",
"countryOfResidence" : "PL"
}
}
Request fields
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. CASH_ACCOUNT: RECEIVER |
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. |
subMerchantName |
String |
Optional |
Identifier assigned by the Marketplace to each sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
subMerchantCountry |
String |
Optional |
The field to distinguish the country location of the sub-merchant. Conditional - mandatory only when merchant is configured as marketplace. |
|
description |
String |
Optional if transaction is in CASH_ACCOUNT or CARD_ACCOUNT model |
@Length(max = 130) |
The field is used as description or statement narrative that helps the receiver identify the sender and reason for the payment |
sender |
Object |
Required |
@NotNull |
|
receiver |
Object |
Required |
@NotNull |
3.7.3. Response
Response status
Status | Description |
---|---|
|
Returned list of field name which has validation errors. |
|
- 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 |
|
Returned e.g. when a different transaction with the provided requestId has already been registered in the system. |
|
Returned when username or password is not correct. |
|
Returned when server understood the request but refuses to authorize it. |
Example HTTP Response
HTTP/1.1 202 Accepted
Content-Type: application/json
Content-Length: 56
{
"orderId" : "1b522573-30c4-4b09-9517-03e406d817d5"
}
Path | Type | Description |
---|---|---|
|
|
OrderId |
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": "amount",
"message": [
"may not be null"
]
},
{
"field": "type",
"message": [
"may not be null"
]
},
{
"field": "sender",
"message": [
"may not be null"
]
},
{
"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.province",
"message": [
"is not correct province code for country code US",
"may not be null"
]
},
{
"field": "sender.city",
"message": [
"may not be empty",
"may not be null",
"length must be between 1 and 25"
]
},
{
"field": "sender.currency",
"message": [
"Currency is not supported"
]
}
{
"field": "sender.houseNumber",
"message": [
"may not be null",
"may not be empty",
"length must be between 1 and 10"
]
},
{
"field": "sender.flatNumber",
"message": [
"must be null",
"length must be between 0 and 5"
]
},
{
"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.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.accountType",
"message": [
"must 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",
"Currency is not supported"
]
},
{
"field": "receiver.bank.accountNumber",
"message": [
"must not be blank"
]
},
{
"field": "receiver.bank.accountName",
"message": [
"must not be blank"
]
},
{
"field": "receiver.bank.countryCode",
"message": [
"must not be null"
]
}
]
}
}
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."
}
}
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"
}
Path | Description |
---|---|
|
|
|
|
|
|
|
|
|
|
HTTP/1.1 403 Forbidden
Content-Type: application/json
{
"timestamp": 1610464313387,
"status": 403,
"error": "Forbidden",
"message": "No message available",
"path": "/api/v2/client/send-money"
}
3.7.4. Check status
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
Parameter | Description |
---|---|
|
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 |
---|---|
|
Returned if the transaction completes successfully. |
|
Returned when transaction was registered for processing. Check status in a while. |
|
Returned when user provides wrong order-id or transaction was failed or was Declined. |
Example HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 919
{
"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",
"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" : "Jan",
"lastName" : "Nowak",
"provider" : "ACCOUNT"
},
"sender" : {
"firstName" : "Caroline",
"lastName" : "Novak",
"provider" : "CASH",
"hiddenCardNumber" : "****************",
"bankName" : ""
}
}
Path | Type | Description |
---|---|---|
|
|
Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100] |
|
|
Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100] |
|
|
Field informing about the amount of cash transferred with decimal precision. |
|
|
This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100] |
|
|
This is the amount of commission that was added to the transaction at 0.01 currency. |
|
|
Unique transaction identifier. |
|
|
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 |
|
|
Date of transaction. |
|
|
Value: true/false determines if transaction was processed with 3ds |
|
|
Detailed information about revaluation between sender currency and receiver currency. |
|
|
Personal data of the person to whom the transfer is addressed. |
|
|
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 |
HTTP/1.1 203 Non-Authoritative Information
After you get 203 you need to check status in a while because we are processing this transaction and if you don’t get a response (200 - succeeded or 500 - declined) within 60 seconds then please contact us. |
HTTP/1.1 500 Internal Server Error
Content-Type: text/plain;charset=ISO-8859-1
ERROR_SENDER_PERSONAL_ID_IS_REQUIRED
After receiving these statuses, the transaction was rejected |
Error statuses
Name |
Description |
|
REJECTED - Monitoring rule which is designed to prevent the acceptance of names or surnames that do not contain vowels or consonants |
|
User is blocked in Fenige |
|
Bin is blocked for 1 hour in Fenige |
|
Payment bank is blocked in Fenige |
|
User was found on the stop list |
|
Acceptance network is unavailable |
|
No currently effective rates found in the database |
|
Currency is not supported |
|
Currency is not supported by Merchant |
|
Transaction limit for single transaction exceeded |
|
Amount is higher than acceptable limit |
|
Couldn’t established connection to Monitoring service |
|
Some unrecognized error occurred |
|
The transaction user’s personal data verified as incorrect on the verification service. Transaction rejected. |
|
Error transaction not exists |
|
Problem with DC |
|
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. |
|
Province code is not valid for USA or CAN transactions. Please update user profile |
|
Some validation error occurred |
|
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. |
|
The amount sent is too small. Enter a larger amount. |
|
The amount sent is too high. Enter a lower amount. |
|
Geographic scope is not permitted for this transaction |
|
Processing time of transaction was too long, transaction is declined. |
|
Transaction rejected, second transaction with merchant advice code 03 or 21 within 30 days. |
|
Transaction rejected, sender or receiver name contains fraudulent phrase. |
|
Transaction rejected, suspicious sender or receiver name. |
|
Transaction cash account rejected, personalId field in sender object is required for this transactional model |
|
Transaction rejected, country of merchant cannot be the same as receiver’s bank code |
3.7.5. Check detailed status
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
Parameter | Description |
---|---|
|
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 |
---|---|
|
Returned if the transaction completes successfully. |
|
Returned when transaction was registered for processing. Check status in a while. |
|
Returned when a transaction related to the given orderId doesn’t exist. |
|
Returned when user provides wrong order-id or transaction was failed or was Declined. |
|
Returned when an internal error occur. |
Example HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1458
{
"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",
"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" : "Jan",
"lastName" : "Nowak",
"provider" : "ACCOUNT"
},
"sender" : {
"firstName" : "Caroline",
"lastName" : "Novak",
"provider" : "CASH"
},
"transactionStatus" : "APPROVED",
"accountTransferDetails" : {
"clientReferenceId" : "4e7daa80-b2e8-4985-a289-7a1be9077045",
"payoutId" : "281474988908972",
"transactionDateTime" : "2018-04-03 14:01:50",
"transactionAmount" : 10.0,
"settlementAmount" : 10.0,
"destinationAmount" : 10.0,
"transactionCurrencyCode" : "PLN",
"settlementCurrencyCode" : "PLN",
"destinationCurrencyCode" : "PLN",
"payoutSpeed" : "STANDARD",
"payoutMethod" : "B",
"status" : "SUCCESS",
"fxConversionRate" : 19.12,
"accountNumber" : "PL42117730161111101800000000"
}
}
Path | Type | Description |
---|---|---|
|
|
Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100] |
|
|
Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100] |
|
|
Field informing about the amount of cash transferred with decimal precision. |
|
|
This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100] |
|
|
This is the amount of commission that was added to the transaction at 0.01 currency. |
|
|
Unique transaction identifier. |
|
|
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 |
|
|
Date of transaction. |
|
|
Value: true/false determines if transaction was processed with 3ds |
|
|
Detailed information about revaluation between sender currency and receiver currency. |
|
|
Personal data of the person to whom the transfer is addressed. |
|
|
Personal data of the person who performs the transfer of cash. |
|
|
Details of the transfer to the account |
|
|
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 |
HTTP/1.1 203 Non-Authoritative Information
After you get 203 you need to check status in a while because we are processing this transaction and if you don’t get a response (200 - succeeded or 500 - declined) within 60 seconds then please contact us. |
HTTP/1.1 404 Not Found
Content-Type: application/json
Content-Length: 51
{
"errorStatus" : "ERROR_TRANSACTION_NOT_FOUND"
}
Path | Type | Description |
---|---|---|
|
|
Additional data of the error occurred during a processing of the request |
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json
Content-Length: 932
{
"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",
"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" : "Jan",
"lastName" : "Nowak",
"provider" : "ACCOUNT"
},
"sender" : {
"firstName" : "Caroline",
"lastName" : "Novak",
"provider" : "CASH"
},
"transactionStatus" : "DECLINED",
"errorStatus" : "ERROR_BANK_IS_BLOCKED"
}
Path | Type | Description |
---|---|---|
|
|
Field informing about the amount of cash transferred in one hundredth of the currency. [1PLN = 100] |
|
|
Field informing about the amount of cash transferred in one hundredth of the USD currency. [1USD = 100] |
|
|
Field informing about the amount of cash transferred with decimal precision. |
|
|
This is the amount of commission that has been added to the transaction in hundredths. [1 PLN = 100] |
|
|
This is the amount of commission that was added to the transaction at 0.01 currency. |
|
|
Unique transaction identifier. |
|
|
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 |
|
|
Date of transaction. |
|
|
Value: true/false determines if transaction was processed with 3ds |
|
|
Detailed information about revaluation between sender currency and receiver currency. |
|
|
Personal data of the person to whom the transfer is addressed. |
|
|
Personal data of the person who performs the transfer of cash. |
|
|
Status of the transaction (PENDING, APPROVED, DECLINED, REJECTED, REVERSED) |
|
|
The code of the error occurred during a processing of the request |
|
|
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 |
HTTP/1.1 500 Internal Server Error
Content-Type: text/plain;charset=ISO-8859-1
ERROR_SENDER_PERSONAL_ID_IS_REQUIRED
After receiving these statuses, the transaction was rejected |
Error statuses
Name |
Description |
|
REJECTED - Monitoring rule which is designed to prevent the acceptance of names or surnames that do not contain vowels or consonants |
|
User is blocked in Fenige |
|
Bin is blocked for 1 hour in Fenige |
|
Payment bank is blocked in Fenige |
|
User was found on the stop list |
|
Acceptance network is unavailable |
|
No currently effective rates found in the database |
|
Currency is not supported |
|
Currency is not supported by Merchant |
|
Transaction limit for single transaction exceeded |
|
Amount is higher than acceptable limit |
|
Couldn’t established connection to Monitoring service |
|
Some unrecognized error occurred |
|
The transaction user’s personal data verified as incorrect on the verification service. Transaction rejected. |
|
Error transaction not exists |
|
Problem with DC |
|
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. |
|
Province code is not valid for USA or CAN transactions. Please update user profile |
|
Some validation error occurred |
|
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. |
|
The amount sent is too small. Enter a larger amount. |
|
The amount sent is too high. Enter a lower amount. |
|
Geographic scope is not permitted for this transaction |
|
Processing time of transaction was too long, transaction is declined. |
|
Transaction rejected, second transaction with merchant advice code 03 or 21 within 30 days. |
|
Transaction rejected, sender or receiver name contains fraudulent phrase. |
|
Transaction rejected, suspicious sender or receiver name. |
|
Transaction cash account rejected, personalId field in sender object is required for this transactional model |
|
Transaction rejected, country of merchant cannot be the same as receiver’s bank code |
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.
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 |
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
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"
}
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",
"accountTransferStatus": "PAYMENT_SENT",
"expectedPostingDate": "2024-03-27"
}
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"
}
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"
}
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 |
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 |
accountTransferStatus |
String |
Optional |
Information about AccountTransfer external status during processing by partner. |
expectedPostingDate |
String |
Optional |
Information about AccountTransfer estimated expected date when funds will came receivers bank account. |
4.2. Acquirer reconciliation date
Method: HTTP POST
If you decide to handle this event, your endpoint will be notified when the acquirer reconciliation date will be set.
In some cases, Fenige settles transactions with the payment organisation on a different day to the day of authorisation. With this functionality, you can find out on which day a transaction will be included in the settlement report with the merchant.
4.2.1. Acquirer reconciliation date webhook request body
Content-Type: application/json
X-MERCHANT-SECRET: 3cbd17f561150a1394cabbe2b6031fd83f3f3081abe28c32b7fed16f32aebc4a
X-MERCHANT-TIMESTAMP: 1614800720
{
"orderId": "e28f7423-ae21-44bb-b27e-a2038cb29181",
"acquirerReconciliationDate": "2024-03-08T15:07:38.442897668",
"operationType": TRANSACTION,
"merchantName": Merchant
}
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 |
Path | Type | Rule | Description |
---|---|---|---|
orderId |
String/UUID |
Always present |
Unique identifier of transaction. You can fetch details of transaction by this parameter. |
acquirerReconciliationDate |
LocalDateTime |
Always present |
Acquirer Reconciliation Date from Fenige system. |
operationType |
String |
Always present |
Operation type. Possible values: TRANSACTION, REFUND |
merchantName |
String |
Always present |
Merchant’s name in Fenige system. |
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:
|
5.1. Pre Authentication
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
POST /client/3ds/preAuthentication HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 108
Host: java-staging.fenige.pl:8181
{
"cardNumber" : "5117964247989169",
"methodNotificationUrl" : "https://www.methodNotificationUrl.com"
}
Path | Type | Validation | Rule | Description |
---|---|---|---|---|
cardNumber |
String |
Required |
@NotNull |
Card number to 3DS 2.X pre authentication |
methodNotificationUrl |
String |
Required |
@Must match the regular expression ^https?://.*$, @Must not be empty |
This field specifies the URL to which the ACS will post threeDSMethodData when the hidden iframe post form from browse |
POST /client/3ds/preAuthentication HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 1448
Host: java-staging.fenige.pl:8181
{
"tokenType" : "GOOGLE_PAY",
"token" : {
"protocolVersion" : "ECv2",
"signature" : "MEQCIF9nQIYF80Ooh3eQIomENLsNyD59eQOEmaanHhde3clkAiBfLgLvL+LZxg+4uORZ+l3/Fj3BQds2s9AEKDAlLgN5LA==",
"intermediateSigningKey" : {
"signedKey" : "{\"keyValue\":\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEOIBO91xZ1o+EyRzrYMh3arsVSByFJyTsKaxiRIYqNiYUwjM0nYaRG5eRe99uwHVRmwF9NHWd5ko/wM8MtSalVw\\u003d\\u003d\",\"keyExpiration\":\"1726828035723\"}",
"signatures" : [ "MEYCIQCECDF8WtqPyp50IBsCat8KWv/7fTWHObezihFLK47LwgIhAJEf2SST42TNVokNA/HjAVgvi4BAbvNCCPI6IOBEmjwO" ]
},
"signedMessage" : "{\"encryptedMessage\":\"ynYNjwRPt1rzU7TxsthCpOqgk6CI2iLJxfnKjZDPCL6xYxvTyxPC15AQ3+9q7C1T5ogYRMrv9VKUryq9lYIrBuHnLBlxhXU+VXubQG7fEha4PajF+rYVng3o8sNoXak5MaVY+AkAwQLCp1kr9j7w8+O7lPnR3hEJHx1L1nABdJhgzxml97sBu6ayb6et7UgSkyI3aTvTcUO2m445N12qEe5P+ZbH3yRM30D5k7uzkxiNCgcM/urjBp3K8iuoEElytQ65YuKhSi87OaeyRVB+BXmmm2j50nV1MFQKyd34NnKOLCrdbNvRXD0hT4qz3iq9lhTZgWzcOreTpVE3EDZ21nMZKQnj3tt5JphXlE4tsJgbvhGC/ibgH9Momcew8nL0vsQbxvWwfh/l6In2zi0Ud7vUFH4fb6LaT2bAaOh1qFq3ippDgB5riXhLX+t+sQy+RdpBTpCA0cZxUjPkMPPH0NRnnWBbTAC/SKwsSQmjxSJcwc6lIdpj3+K6IM7/4MqInY8N2koKu6iHuLucjPN7fsJd26rUZuuo916QMveDMuA\\u003d\",\"ephemeralPublicKey\":\"BK2eVSFeDxI+kP7d3L6sFmdYupgKkVOVzzj9w0IFdgS6eEo0xwk50gzDExoshL1uqJi2qGEiCubuidoNiFEWCeo\\u003d\",\"tag\":\"/M30LDIIqFQRW8DY1Z7lL6jWSry3vF8WNC9kFVUgHYQ\\u003d\"}"
},
"methodNotificationUrl" : "https://www.methodNotificationUrl.com"
}
Path | Type | Validation | Rule | Description |
---|---|---|---|---|
tokenType |
String |
Optional |
@Optional |
Token type. Possible values: - APPLE_PAY - GOOGLE_PAY |
token |
Object |
Optional |
@Optional |
Encrypted token data. Mandatory when tokenType field is present |
methodNotificationUrl |
String |
Required |
@Must match the regular expression ^https?://.*$, @Must not be empty |
This field specifies the URL to which the ACS will post threeDSMethodData when the hidden iframe post form from browse |
POST /client/3ds/preAuthentication HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 4164
Host: java-staging.fenige.pl:8181
{
"tokenType" : "APPLE_PAY",
"token" : {
"paymentData" : {
"version" : "EC_v1",
"data" : "KkiE8GswNdN7jLbbMsCheM+gWdd3vcSw/y4meFdAhRPrPAaTj1GBOGVRVVEfO7oTlsRgv9fl/4IwHGjPd7sLHkcxlRkW7amHcXEszbMwvDBE8656Xc0FxGxEvt6+xY17lPwb7/izmAkSXLdk0geqV0mrQXsYR+II+HI/OKkgXl5hIFS4+9/Tw1Yi1uSF/XRfTXVJF4TLaQF9Ydo+gltIHX82eBTLPZLaHWW9JY0UNUoXkIQQKnaRWb0nlEI+H8apL9NpKrWAknJSZFayDGBkUChAqpqOn5tcL+zdkdt5mmpY0qcK+h5vKluaPg5odq+QQUsn+ivFmnktorjzMsSL+NmMXxVNsFagtGVV4ssGEUEfz7wkIZFzfnlhhmQeHTsdHb+tgmOCayMHQrLUG/DEYGt9Y2s56mJrvr61IU7CYg==",
"signature" : "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",
"header" : {
"ephemeralPublicKey" : "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEO+01GJPfNlHcI2UWUlWExM0aFrewDOuCZbVn1JZgkuM3qtWg9STbwzNDsFtt4xy1hNtOGJVfB65cudVcW3KpmA==",
"publicKeyHash" : "vw4LZqhFE7M9d3oqoOAP4O7X8TpEYiEALkRuP/GjBVE=",
"transactionId" : "fbdf0dbd5cfacfdc8ef214340ff69b7f52af24b200bd7873cf9bd8dbe84ab601"
}
},
"paymentMethodApple" : {
"displayName" : "Visa 1141",
"network" : "Visa",
"type" : "debit"
},
"transactionIdentifier" : "fbdf0dbd5cfacfdc8ef214340ff69b7f52af24b200bd7873cf9bd8dbe84ab601"
},
"methodNotificationUrl" : "https://www.methodNotificationUrl.com"
}
Path | Type | Validation | Rule | Description |
---|---|---|---|---|
tokenType |
String |
Optional |
@Optional |
Token type. Possible values: - APPLE_PAY - GOOGLE_PAY |
token |
Object |
Optional |
@Optional |
Encrypted token data. Mandatory when tokenType field is present |
methodNotificationUrl |
String |
Required |
@Must match the regular expression ^https?://.*$, @Must not be empty |
This field specifies the URL to which the ACS will post threeDSMethodData when the hidden iframe post form from browse |
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: 90
Host: java-staging.fenige.pl:8181
{
"cardId" : 1732,
"methodNotificationUrl" : "https://www.methodNotificationUrl.com"
}
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 |
@Must match the regular expression ^https?://.*$, @Must not be empty |
This field specifies the URL to which the ACS will post threeDSMethodData when the hidden iframe post form from browse |
5.1.2. Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 462
{
"cardAuthenticationId" : "293369a3-7b83-4f0c-b397-c6e4b92d6d0c",
"threeDSMethodData" : "eyJ0aHJlZURTTWV0aG9kTm90aWZpY2F0aW9uVVJMIjoiaHR0cHM6Ly93ZWJob29rLnNpdGUvZDMyZTlkZTgtMGFiOC00ODZjLWJjNzEtMGU2Mzg2MmY4MDNhM2I1YTkzZTUtMjI1Ni00NGQ0LTg2YjItNWFkM2FhMDEyYTJhIiwidGhyZWVEU1NlcnZlclRyYW5zSUQiOiIxNjNiZWMzOC1kOTM1LTQ0MGItYWYwYy01OWM3NDI3OTk2MGMifQ",
"threeDSMethodURL" : "https:/acs.com",
"protocolVersionStart" : "2.2.0",
"protocolVersionEnd" : "2.2.0"
}
Path | Type | Description |
---|---|---|
|
|
Unique identifier for 3ds verification |
|
|
Encoded data used for request to ACS |
|
|
ACS endpoint for hidden request. If endpoint is not present then request is not required |
|
|
Protocol version start range |
|
|
Protocol version end range |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 421
{
"cardAuthenticationId" : "35ea91f1-7772-4628-b976-d7b574907500",
"threeDSMethodData" : "eyJ0aHJlZURTTWV0aG9kTm90aWZpY2F0aW9uVVJMIjoiaHR0cHM6Ly93ZWJob29rLnNpdGUvZDMyZTlkZTgtMGFiOC00ODZjLWJjNzEtMGU2Mzg2MmY4MDNhM2I1YTkzZTUtMjI1Ni00NGQ0LTg2YjItNWFkM2FhMDEyYTJhIiwidGhyZWVEU1NlcnZlclRyYW5zSUQiOiIxNjNiZWMzOC1kOTM1LTQ0MGItYWYwYy01OWM3NDI3OTk2MGMifQ",
"protocolVersionStart" : "2.2.0",
"protocolVersionEnd" : "2.2.0"
}
Path | Type | Description |
---|---|---|
|
|
Unique identifier for 3ds verification |
|
|
Encoded data used for request to ACS |
|
|
Protocol version start range |
|
|
Protocol version end range |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 496
{
"cardAuthenticationId" : "f8c13ee2-44ba-4f98-bed6-b69e46e3c81b",
"threeDSMethodData" : "eyJ0aHJlZURTTWV0aG9kTm90aWZpY2F0aW9uVVJMIjoiaHR0cHM6Ly93ZWJob29rLnNpdGUvZDMyZTlkZTgtMGFiOC00ODZjLWJjNzEtMGU2Mzg2MmY4MDNhM2I1YTkzZTUtMjI1Ni00NGQ0LTg2YjItNWFkM2FhMDEyYTJhIiwidGhyZWVEU1NlcnZlclRyYW5zSUQiOiIxNjNiZWMzOC1kOTM1LTQ0MGItYWYwYy01OWM3NDI3OTk2MGMifQ",
"threeDSMethodURL" : "https:/acs.com",
"protocolVersionStart" : "2.2.0",
"protocolVersionEnd" : "2.2.0",
"authTokenMethod" : "PAN_ONLY"
}
Path | Type | Description |
---|---|---|
|
|
Unique identifier for 3ds verification |
|
|
Encoded data used for request to ACS |
|
|
ACS endpoint for hidden request. If endpoint is not present then request is not required |
|
|
Protocol version start range |
|
|
Protocol version end range |
|
|
Auth token method. Field is present in response only for Google Pay. Field may contain values: PAN_ONLY - there is no cryptogram 3DS and the token is treated like a regular card (3DS may be required) CRYPTOGRAM_3DS - Token payment data includes an EMV® 3-D Secure (EMV 3DS) cryptogram generated on the device. 3DS authentication is optional |
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"
}
Path | Description |
---|---|
|
|
|
|
|
|
|
|
|
|
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 |
---|---|---|
|
|
Api status |
|
|
Api status description |
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json;charset=UTF-8
Content-Length: 134
{
"status" : "ERROR_OCCURRED_DURING_TOKEN_DECRYPTION",
"error" : {
"message" : "Error occurred during token decryption."
}
}
Path | Type | Description |
---|---|---|
|
|
Api status |
|
|
Api status description |
5.2. Authentication
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
POST /client/3ds/authentication HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 1586
Host: java-staging.fenige.pl:8181
{
"cardAuthenticationId" : "544e6a3d-d35d-4af5-bdb1-4c5fb35153ab",
"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"
}
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 |
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. It is recommended to use 2.2.0 if the card supports it. You will get it from the Pre Authentication method. |
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: 35 |
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, must not be null if cardholderMobilePhone or cardholderHomePhone or cardholderMobilePhone is null only form VISA |
This field contains the cardholder email address. |
cardholderHomePhone |
String |
Optional |
Must match regex \d{1,3}-[1-9]\d{1,14}$, must not be null if cardholderEmail or cardholderMobilePhone or cardholderMobilePhone is null only for VISA |
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}$, must not be null if cardholderEmail or cardholderHomePhone or cardholderWorkPhone is null only for VISA |
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}$, must not be null if cardholderEmail or cardholderHomePhone or cardholderMobilePhone is null only for VISA |
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 alfa-2 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. |
POST /client/3ds/authentication HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 2892
Host: java-staging.fenige.pl:8181
{
"tokenType" : "GOOGLE_PAY",
"token" : {
"protocolVersion" : "ECv2",
"signature" : "MEQCIF9nQIYF80Ooh3eQIomENLsNyD59eQOEmaanHhde3clkAiBfLgLvL+LZxg+4uORZ+l3/Fj3BQds2s9AEKDAlLgN5LA==",
"intermediateSigningKey" : {
"signedKey" : "{\"keyValue\":\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEOIBO91xZ1o+EyRzrYMh3arsVSByFJyTsKaxiRIYqNiYUwjM0nYaRG5eRe99uwHVRmwF9NHWd5ko/wM8MtSalVw\\u003d\\u003d\",\"keyExpiration\":\"1726828035723\"}",
"signatures" : [ "MEYCIQCECDF8WtqPyp50IBsCat8KWv/7fTWHObezihFLK47LwgIhAJEf2SST42TNVokNA/HjAVgvi4BAbvNCCPI6IOBEmjwO" ]
},
"signedMessage" : "{\"encryptedMessage\":\"ynYNjwRPt1rzU7TxsthCpOqgk6CI2iLJxfnKjZDPCL6xYxvTyxPC15AQ3+9q7C1T5ogYRMrv9VKUryq9lYIrBuHnLBlxhXU+VXubQG7fEha4PajF+rYVng3o8sNoXak5MaVY+AkAwQLCp1kr9j7w8+O7lPnR3hEJHx1L1nABdJhgzxml97sBu6ayb6et7UgSkyI3aTvTcUO2m445N12qEe5P+ZbH3yRM30D5k7uzkxiNCgcM/urjBp3K8iuoEElytQ65YuKhSi87OaeyRVB+BXmmm2j50nV1MFQKyd34NnKOLCrdbNvRXD0hT4qz3iq9lhTZgWzcOreTpVE3EDZ21nMZKQnj3tt5JphXlE4tsJgbvhGC/ibgH9Momcew8nL0vsQbxvWwfh/l6In2zi0Ud7vUFH4fb6LaT2bAaOh1qFq3ippDgB5riXhLX+t+sQy+RdpBTpCA0cZxUjPkMPPH0NRnnWBbTAC/SKwsSQmjxSJcwc6lIdpj3+K6IM7/4MqInY8N2koKu6iHuLucjPN7fsJd26rUZuuo916QMveDMuA\\u003d\",\"ephemeralPublicKey\":\"BK2eVSFeDxI+kP7d3L6sFmdYupgKkVOVzzj9w0IFdgS6eEo0xwk50gzDExoshL1uqJi2qGEiCubuidoNiFEWCeo\\u003d\",\"tag\":\"/M30LDIIqFQRW8DY1Z7lL6jWSry3vF8WNC9kFVUgHYQ\\u003d\"}"
},
"cardAuthenticationId" : "e04562d8-cd38-4ad7-b092-d615457250ff",
"threeDSMethodData" : "eyJ0aHJlZURTTWV0aG9kTm90aWZpY2F0aW9uVVJMIjoiSFRUUDQwYjgyNDQ3LTE0ODUtNDUwZi04ZGYxLTdhNGQwYmRiMWMzYiIsInRocmVlRFNTZXJ2ZXJUcmFuc0lEIjoiNDE1MDQzY2UtYTNhMC00ODBjLTk0YTYtNzk2NGEzYTcxNWI2In0",
"methodCompletionIndicator" : "Y",
"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"
}
Path | Type | Validation | Rule | Description |
---|---|---|---|---|
cardAuthenticationId |
String |
Required |
@Must not be empty |
Unique identifier for 3ds verification from preAuthentication request. |
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 |
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. It is recommended to use 2.2.0 if the card supports it. You will get it from the Pre Authentication method. |
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: 35 |
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, must not be null if cardholderMobilePhone or cardholderHomePhone or cardholderMobilePhone is null only form VISA |
This field contains the cardholder email address. |
cardholderHomePhone |
String |
Optional |
Must match regex \d{1,3}-[1-9]\d{1,14}$, must not be null if cardholderEmail or cardholderMobilePhone or cardholderMobilePhone is null only for VISA |
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}$, must not be null if cardholderEmail or cardholderHomePhone or cardholderWorkPhone is null only for VISA |
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}$, must not be null if cardholderEmail or cardholderHomePhone or cardholderMobilePhone is null only for VISA |
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 alfa-2 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. |
token |
Object |
Optional |
@Optional |
Encrypted token data. Mandatory when tokenType field is present |
tokenType |
String |
Optional |
@Optional |
Token type. Possible values: - APPLE_PAY - GOOGLE_PAY |
POST /client/3ds/authentication HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 5608
Host: java-staging.fenige.pl:8181
{
"tokenType" : "APPLE_PAY",
"token" : {
"paymentData" : {
"version" : "EC_v1",
"data" : "KkiE8GswNdN7jLbbMsCheM+gWdd3vcSw/y4meFdAhRPrPAaTj1GBOGVRVVEfO7oTlsRgv9fl/4IwHGjPd7sLHkcxlRkW7amHcXEszbMwvDBE8656Xc0FxGxEvt6+xY17lPwb7/izmAkSXLdk0geqV0mrQXsYR+II+HI/OKkgXl5hIFS4+9/Tw1Yi1uSF/XRfTXVJF4TLaQF9Ydo+gltIHX82eBTLPZLaHWW9JY0UNUoXkIQQKnaRWb0nlEI+H8apL9NpKrWAknJSZFayDGBkUChAqpqOn5tcL+zdkdt5mmpY0qcK+h5vKluaPg5odq+QQUsn+ivFmnktorjzMsSL+NmMXxVNsFagtGVV4ssGEUEfz7wkIZFzfnlhhmQeHTsdHb+tgmOCayMHQrLUG/DEYGt9Y2s56mJrvr61IU7CYg==",
"signature" : "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",
"header" : {
"ephemeralPublicKey" : "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEO+01GJPfNlHcI2UWUlWExM0aFrewDOuCZbVn1JZgkuM3qtWg9STbwzNDsFtt4xy1hNtOGJVfB65cudVcW3KpmA==",
"publicKeyHash" : "vw4LZqhFE7M9d3oqoOAP4O7X8TpEYiEALkRuP/GjBVE=",
"transactionId" : "fbdf0dbd5cfacfdc8ef214340ff69b7f52af24b200bd7873cf9bd8dbe84ab601"
}
},
"paymentMethodApple" : {
"displayName" : "Visa 1141",
"network" : "Visa",
"type" : "debit"
},
"transactionIdentifier" : "fbdf0dbd5cfacfdc8ef214340ff69b7f52af24b200bd7873cf9bd8dbe84ab601"
},
"cardAuthenticationId" : "765e7733-8da6-48f7-9b30-ef4b31ce2b5f",
"threeDSMethodData" : "eyJ0aHJlZURTTWV0aG9kTm90aWZpY2F0aW9uVVJMIjoiSFRUUDQwYjgyNDQ3LTE0ODUtNDUwZi04ZGYxLTdhNGQwYmRiMWMzYiIsInRocmVlRFNTZXJ2ZXJUcmFuc0lEIjoiNDE1MDQzY2UtYTNhMC00ODBjLTk0YTYtNzk2NGEzYTcxNWI2In0",
"methodCompletionIndicator" : "Y",
"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"
}
Path | Type | Validation | Rule | Description |
---|---|---|---|---|
cardAuthenticationId |
String |
Required |
@Must not be empty |
Unique identifier for 3ds verification from preAuthentication request. |
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 |
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. It is recommended to use 2.2.0 if the card supports it. You will get it from the Pre Authentication method. |
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: 35 |
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, must not be null if cardholderMobilePhone or cardholderHomePhone or cardholderMobilePhone is null only form VISA |
This field contains the cardholder email address. |
cardholderHomePhone |
String |
Optional |
Must match regex \d{1,3}-[1-9]\d{1,14}$, must not be null if cardholderEmail or cardholderMobilePhone or cardholderMobilePhone is null only for VISA |
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}$, must not be null if cardholderEmail or cardholderHomePhone or cardholderWorkPhone is null only for VISA |
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}$, must not be null if cardholderEmail or cardholderHomePhone or cardholderMobilePhone is null only for VISA |
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 alfa-2 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. |
token |
Object |
Optional |
@Optional |
Encrypted token data. Mandatory when tokenType field is present |
tokenType |
String |
Optional |
@Optional |
Token type. Possible values: - APPLE_PAY - GOOGLE_PAY |
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" : "586c8436-6e70-4812-8922-63b2e3813e00",
"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"
}
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 |
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. It is recommended to use 2.2.0 if the card supports it. You will get it from the Pre Authentication method. |
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: 35 |
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 |
@Length must be between 0 and 254 inclusive, must not be null if cardholderMobilePhone or cardholderHomePhone or cardholderMobilePhone is null only form VISA |
This field contains the cardholder email address. |
cardholderHomePhone |
String |
Optional |
Must match regex \d{1,3}-[1-9]\d{1,14}$, must not be null if cardholderEmail or cardholderMobilePhone or cardholderMobilePhone is null only for VISA |
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}$, must not be null if cardholderEmail or cardholderHomePhone or cardholderWorkPhone is null only for VISA |
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}$, must not be null if cardholderEmail or cardholderHomePhone or cardholderMobilePhone is null only for VISA |
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 alfa-2 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
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 151
{
"transactionStatus" : "A",
"transactionXId" : "cfccb38d-b5c6-468e-831a-f838ac49adc0",
"cavv" : "B5gQCElHgQAAAAAKmFNEdQAAAAA=",
"eci" : "06"
}
Path | Type | Description |
---|---|---|
|
|
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. |
|
|
Server transaction Id generated by DS |
|
|
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. |
|
|
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". |
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 |
---|---|---|
|
|
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. |
|
|
ACS Url - if challenge is required, data for building a form such as challengeHtmlFormBase64 |
|
|
creq - if challenge is required, data for building a form such as challengeHtmlFormBase64 |
|
|
creq - if challenge is required, data for building a form such as challengeHtmlFormBase64 |
|
|
This field is a BASE64 encrypted html source file containing the challenge 3-D Secure frame |
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"
}
Path | Description |
---|---|
|
|
|
|
|
|
|
|
|
|
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json;charset=UTF-8
Content-Length: 134
{
"status" : "ERROR_OCCURRED_DURING_TOKEN_DECRYPTION",
"error" : {
"message" : "Error occurred during token decryption."
}
}
Path | Type | Description |
---|---|---|
|
|
Api status |
|
|
Api status description |
5.3. Authentication Details
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/3836ed03-63c6-4fb8-83f3-8aa9281c3e43 HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Host: java-staging.fenige.pl:8181
Parameter | Description |
---|---|
|
Unique identifier for 3ds verification |
5.3.2. Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 340
{
"cardAuthenticationId" : "90dad58f-4a70-46f0-8180-2cfac9e358cb",
"provider" : "MASTERCARD",
"transactionStatus" : "Y",
"cardAuthenticationStatus" : "AUTHENTICATION_FINISHED",
"transactionXId" : "b5d38fe9-cb22-4dda-b8f2-25851dbeb2cf",
"cavv" : "jEu04WZns7pbARAApU4qgNdJTag",
"eci" : "01",
"transactionStatusReason" : "04"
}
Path | Type | Description |
---|---|---|
|
|
Unique identifier for 3ds verification |
|
|
Card’s provider |
|
|
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. |
|
|
Card authentication status, possible values are: INITIALIZED, PREAUTHENTICATION_INITIATED, PREAUTHENTICATION_CONFIRMED, AUTHENTICATION_REJECTED, AUTHENTICATION, AUTHENTICATION_FINISHED |
|
|
Server transaction Id generated by DS |
|
|
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. |
|
|
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". |
|
|
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 Field may be null |
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
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
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"
}
}
Path | Type | Validation | Rule | Description |
---|---|---|---|---|
currencyType |
String |
Required |
@NotNull |
Consist values: STANDARD, CUSTOM |
sender |
Object |
Required |
@NotNull |
Required configuration per request (PLAIN SENDER, DATACORE SENDER, BLIK SENDER) |
receiver |
Object |
Required |
@NotNull |
Required configuration per request (PLAIN RECEIVER, PHONE RECEIVER, DATACORE RECEIVER) |
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
}
}
Path | Type | Validation | Rule | Description |
---|---|---|---|---|
currencyType |
String |
Required |
@NotNull |
Consist values: STANDARD, CUSTOM |
sender |
Object |
Required |
@NotNull |
Required configuration per request (PLAIN SENDER, DATACORE SENDER, BLIK SENDER) |
receiver |
Object |
Required |
@NotNull |
Required configuration per request (PLAIN RECEIVER, PHONE RECEIVER, DATACORE RECEIVER) |
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"
}
}
Path | Type | Validation | Rule | Description |
---|---|---|---|---|
currencyType |
String |
Required |
@NotNull |
Consist values: STANDARD, CUSTOM |
sender |
Object |
Required |
@NotNull |
Required configuration per request (PLAIN SENDER, DATACORE SENDER, BLIK SENDER) |
receiver |
Object |
Required |
@NotNull |
Required configuration per request (PLAIN RECEIVER, PHONE RECEIVER, DATACORE RECEIVER) |
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"
}
}
Path | Type | Validation | Rule | Description |
---|---|---|---|---|
currencyType |
String |
Required |
@NotNull |
Consist values: STANDARD, CUSTOM |
sender |
Object |
Required |
@NotNull |
Required configuration per request (PLAIN SENDER, DATACORE SENDER, BLIK SENDER) |
receiver |
Object |
Required |
@NotNull |
Required configuration per request (PLAIN RECEIVER, PHONE RECEIVER, DATACORE RECEIVER) |
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
}
}
Path | Type | Validation | Rule | Description |
---|---|---|---|---|
currencyType |
String |
Required |
@NotNull |
Consist values: STANDARD, CUSTOM |
sender |
Object |
Required |
@NotNull |
Required configuration per request (PLAIN SENDER, DATACORE SENDER, BLIK SENDER) |
receiver |
Object |
Required |
@NotNull |
Required configuration per request (PLAIN RECEIVER, PHONE RECEIVER, DATACORE RECEIVER) |
POST /client/determine-currencies HTTP/1.1
Content-Type: application/vnd.determine-currencies.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 155
Host: java-staging.fenige.pl:8181
{
"currencyType" : "STANDARD",
"sender" : {
"type" : "BLIK"
},
"receiver" : {
"type" : "PLAIN",
"cardNumber" : "5319838121111668"
}
}
Path | Type | Validation | Rule | Description |
---|---|---|---|---|
currencyType |
String |
Required |
@NotNull |
Consist values: STANDARD, CUSTOM |
sender |
Object |
Required |
@NotNull |
Required configuration per request (PLAIN SENDER, DATACORE SENDER, BLIK SENDER) |
receiver |
Object |
Required |
@NotNull |
Required configuration per request (PLAIN RECEIVER, PHONE RECEIVER, DATACORE RECEIVER) |
6.1.2. Response
Response status
Status | Description |
---|---|
|
Returned list of currency for sender and reciver. |
|
Returned list of field name which has validation error. |
|
Returned when API-TOKEN was broken. |
Example HTTP Response
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 |
|
|
Default currency code for sender card |
|
|
Default currency code for receiver card |
|
|
Currencies supported by sender’s card |
|
|
Currencies supported by receiver’s card |
|
|
Sender card country |
|
|
Receiver card country |
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 |
|
|
Currencies supported by sender’s card |
|
|
Currencies supported by receiver’s card |
|
|
Sender card country |
|
|
Receiver card country |
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. |
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"
}
Path | Description |
---|---|
|
|
|
|
|
|
|
|
|
|
6.2. Currency rate by provider
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-04-02 12:22:00"
}
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 |
---|---|
|
Returned currency rate VISA or MASTERCARD or MAESTRO. |
|
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
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 of the revaluation |
|
|
Rate for revaluation |
Object (Success)
Name | Type | Description |
---|---|---|
|
Decimal |
Rate for revaluation from funding to payment |
|
Decimal |
Rate for revaluation from payment to funding |
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/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
"status": "CURRENCY_RATES_INVALID",
"error": {
"message": "Invalid currency rates."
}
}
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
Method is used to determine currencies applied for given card which are supported based on provided type value.
6.3.1. Request
Path | Type | Validation | Rule | Description |
---|---|---|---|---|
type |
String |
Required |
@NotNull |
Consist values: STANDARD, CUSTOM |
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"
}
Path | Type | Validation | Rule | Description |
---|---|---|---|---|
type |
String |
Required |
@NotNull |
Consist values: STANDARD, CUSTOM |
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"
}
6.3.2. Response
Response status
Status | Description |
---|---|
|
Returned list of currency for the given card. |
|
Returned list of field name which has validation error. |
Example HTTP Response
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 |
---|---|---|
|
|
Currencies supported by card |
|
|
Default currency code for card |
|
|
Card bank name |
|
|
Card country code |
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 |
---|---|---|
|
|
Currencies supported by card |
|
|
Card bank name |
|
|
Card country code |
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 2 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.
-
CUSTOM - user may perform transactions in custom currencies selected by your administrator.
7. Calculate commission
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
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"
}
}
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, PAYOUTS: RECEIVER, CARD_CASH: SENDER |
sender |
Object |
Required |
@NotNull |
Required configuration per request (PLAIN SENDER, DATACORE SENDER, CASH SENDER, BLIK SENDER, ENCRYPTED TOKEN) |
receiver |
Object |
Required |
@NotNull |
Required configuration per request (PLAIN RECEIVER, PHONE RECEIVER, DATACORE RECEIVER, CASH RECEIVER, ENCRYPTED TOKEN) |
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"
}
}
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, PAYOUTS: RECEIVER, CARD_CASH: SENDER |
sender |
Object |
Required |
@NotNull |
Required configuration per request (PLAIN SENDER, DATACORE SENDER, CASH SENDER, BLIK SENDER, ENCRYPTED TOKEN) |
receiver |
Object |
Required |
@NotNull |
Required configuration per request (PLAIN RECEIVER, PHONE RECEIVER, DATACORE RECEIVER, CASH RECEIVER, ENCRYPTED TOKEN) |
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"
}
}
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, PAYOUTS: RECEIVER, CARD_CASH: SENDER |
sender |
Object |
Required |
@NotNull |
Required configuration per request (PLAIN SENDER, DATACORE SENDER, CASH SENDER, BLIK SENDER, ENCRYPTED TOKEN) |
receiver |
Object |
Required |
@NotNull |
Required configuration per request (PLAIN RECEIVER, PHONE RECEIVER, DATACORE RECEIVER, CASH RECEIVER, ENCRYPTED TOKEN) |
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"
}
}
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, PAYOUTS: RECEIVER, CARD_CASH: SENDER |
sender |
Object |
Required |
@NotNull |
Required configuration per request (PLAIN SENDER, DATACORE SENDER, CASH SENDER, BLIK SENDER, ENCRYPTED TOKEN) |
receiver |
Object |
Required |
@NotNull |
Required configuration per request (PLAIN RECEIVER, PHONE RECEIVER, DATACORE RECEIVER, CASH RECEIVER, ENCRYPTED TOKEN) |
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"
}
}
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, PAYOUTS: RECEIVER, CARD_CASH: SENDER |
sender |
Object |
Required |
@NotNull |
Required configuration per request (PLAIN SENDER, DATACORE SENDER, CASH SENDER, BLIK SENDER, ENCRYPTED TOKEN) |
receiver |
Object |
Required |
@NotNull |
Required configuration per request (PLAIN RECEIVER, PHONE RECEIVER, DATACORE RECEIVER, CASH RECEIVER, ENCRYPTED TOKEN) |
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"
}
}
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, PAYOUTS: RECEIVER, CARD_CASH: SENDER |
sender |
Object |
Required |
@NotNull |
Required configuration per request (PLAIN SENDER, DATACORE SENDER, CASH SENDER, BLIK SENDER, ENCRYPTED TOKEN) |
receiver |
Object |
Required |
@NotNull |
Required configuration per request (PLAIN RECEIVER, PHONE RECEIVER, DATACORE RECEIVER, CASH RECEIVER, ENCRYPTED TOKEN) |
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"
}
}
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, PAYOUTS: RECEIVER, CARD_CASH: SENDER |
sender |
Object |
Required |
@NotNull |
Required configuration per request (PLAIN SENDER, DATACORE SENDER, CASH SENDER, BLIK SENDER, ENCRYPTED TOKEN) |
receiver |
Object |
Required |
@NotNull |
Required configuration per request (PLAIN RECEIVER, PHONE RECEIVER, DATACORE RECEIVER, CASH RECEIVER, ENCRYPTED TOKEN) |
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"
}
}
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, PAYOUTS: RECEIVER, CARD_CASH: SENDER |
sender |
Object |
Required |
@NotNull |
Required configuration per request (PLAIN SENDER, DATACORE SENDER, CASH SENDER, BLIK SENDER, ENCRYPTED TOKEN) |
receiver |
Object |
Required |
@NotNull |
Required configuration per request (PLAIN RECEIVER, PHONE RECEIVER, DATACORE RECEIVER, CASH RECEIVER, ENCRYPTED TOKEN) |
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"
}
}
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, PAYOUTS: RECEIVER, CARD_CASH: SENDER |
sender |
Object |
Required |
@NotNull |
Required configuration per request (PLAIN SENDER, DATACORE SENDER, CASH SENDER, BLIK SENDER, ENCRYPTED TOKEN) |
receiver |
Object |
Required |
@NotNull |
Required configuration per request (PLAIN RECEIVER, PHONE RECEIVER, DATACORE RECEIVER, CASH RECEIVER, ENCRYPTED TOKEN) |
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"
}
}
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, PAYOUTS: RECEIVER, CARD_CASH: SENDER |
sender |
Object |
Required |
@NotNull |
Required configuration per request (PLAIN SENDER, DATACORE SENDER, CASH SENDER, BLIK SENDER, ENCRYPTED TOKEN) |
receiver |
Object |
Required |
@NotNull |
Required configuration per request (PLAIN RECEIVER, PHONE RECEIVER, DATACORE RECEIVER, CASH RECEIVER, ENCRYPTED TOKEN) |
POST /client/calculate-commission HTTP/1.1
Content-Type: application/vnd.calculate-commission.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 2989
Host: java-staging.fenige.pl:8181
{
"amount" : 100,
"type" : "RECEIVER",
"sender" : {
"type" : "ENCRYPTED_TOKEN",
"tokenType" : "GOOGLE_PAY",
"token" : {
"protocolVersion" : "ECv2",
"signature" : "MEQCIF9nQIYF80Ooh3eQIomENLsNyD59eQOEmaanHhde3clkAiBfLgLvL+LZxg+4uORZ+l3/Fj3BQds2s9AEKDAlLgN5LA==",
"intermediateSigningKey" : {
"signedKey" : "{\"keyValue\":\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEOIBO91xZ1o+EyRzrYMh3arsVSByFJyTsKaxiRIYqNiYUwjM0nYaRG5eRe99uwHVRmwF9NHWd5ko/wM8MtSalVw\\u003d\\u003d\",\"keyExpiration\":\"1726828035723\"}",
"signatures" : [ "MEYCIQCECDF8WtqPyp50IBsCat8KWv/7fTWHObezihFLK47LwgIhAJEf2SST42TNVokNA/HjAVgvi4BAbvNCCPI6IOBEmjwO" ]
},
"signedMessage" : "{\"encryptedMessage\":\"ynYNjwRPt1rzU7TxsthCpOqgk6CI2iLJxfnKjZDPCL6xYxvTyxPC15AQ3+9q7C1T5ogYRMrv9VKUryq9lYIrBuHnLBlxhXU+VXubQG7fEha4PajF+rYVng3o8sNoXak5MaVY+AkAwQLCp1kr9j7w8+O7lPnR3hEJHx1L1nABdJhgzxml97sBu6ayb6et7UgSkyI3aTvTcUO2m445N12qEe5P+ZbH3yRM30D5k7uzkxiNCgcM/urjBp3K8iuoEElytQ65YuKhSi87OaeyRVB+BXmmm2j50nV1MFQKyd34NnKOLCrdbNvRXD0hT4qz3iq9lhTZgWzcOreTpVE3EDZ21nMZKQnj3tt5JphXlE4tsJgbvhGC/ibgH9Momcew8nL0vsQbxvWwfh/l6In2zi0Ud7vUFH4fb6LaT2bAaOh1qFq3ippDgB5riXhLX+t+sQy+RdpBTpCA0cZxUjPkMPPH0NRnnWBbTAC/SKwsSQmjxSJcwc6lIdpj3+K6IM7/4MqInY8N2koKu6iHuLucjPN7fsJd26rUZuuo916QMveDMuA\\u003d\",\"ephemeralPublicKey\":\"BK2eVSFeDxI+kP7d3L6sFmdYupgKkVOVzzj9w0IFdgS6eEo0xwk50gzDExoshL1uqJi2qGEiCubuidoNiFEWCeo\\u003d\",\"tag\":\"/M30LDIIqFQRW8DY1Z7lL6jWSry3vF8WNC9kFVUgHYQ\\u003d\"}"
},
"currency" : "EUR"
},
"receiver" : {
"type" : "ENCRYPTED_TOKEN",
"tokenType" : "GOOGLE_PAY",
"token" : {
"protocolVersion" : "ECv2",
"signature" : "MEQCIF9nQIYF80Ooh3eQIomENLsNyD59eQOEmaanHhde3clkAiBfLgLvL+LZxg+4uORZ+l3/Fj3BQds2s9AEKDAlLgN5LA==",
"intermediateSigningKey" : {
"signedKey" : "{\"keyValue\":\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEOIBO91xZ1o+EyRzrYMh3arsVSByFJyTsKaxiRIYqNiYUwjM0nYaRG5eRe99uwHVRmwF9NHWd5ko/wM8MtSalVw\\u003d\\u003d\",\"keyExpiration\":\"1726828035723\"}",
"signatures" : [ "MEYCIQCECDF8WtqPyp50IBsCat8KWv/7fTWHObezihFLK47LwgIhAJEf2SST42TNVokNA/HjAVgvi4BAbvNCCPI6IOBEmjwO" ]
},
"signedMessage" : "{\"encryptedMessage\":\"ynYNjwRPt1rzU7TxsthCpOqgk6CI2iLJxfnKjZDPCL6xYxvTyxPC15AQ3+9q7C1T5ogYRMrv9VKUryq9lYIrBuHnLBlxhXU+VXubQG7fEha4PajF+rYVng3o8sNoXak5MaVY+AkAwQLCp1kr9j7w8+O7lPnR3hEJHx1L1nABdJhgzxml97sBu6ayb6et7UgSkyI3aTvTcUO2m445N12qEe5P+ZbH3yRM30D5k7uzkxiNCgcM/urjBp3K8iuoEElytQ65YuKhSi87OaeyRVB+BXmmm2j50nV1MFQKyd34NnKOLCrdbNvRXD0hT4qz3iq9lhTZgWzcOreTpVE3EDZ21nMZKQnj3tt5JphXlE4tsJgbvhGC/ibgH9Momcew8nL0vsQbxvWwfh/l6In2zi0Ud7vUFH4fb6LaT2bAaOh1qFq3ippDgB5riXhLX+t+sQy+RdpBTpCA0cZxUjPkMPPH0NRnnWBbTAC/SKwsSQmjxSJcwc6lIdpj3+K6IM7/4MqInY8N2koKu6iHuLucjPN7fsJd26rUZuuo916QMveDMuA\\u003d\",\"ephemeralPublicKey\":\"BK2eVSFeDxI+kP7d3L6sFmdYupgKkVOVzzj9w0IFdgS6eEo0xwk50gzDExoshL1uqJi2qGEiCubuidoNiFEWCeo\\u003d\",\"tag\":\"/M30LDIIqFQRW8DY1Z7lL6jWSry3vF8WNC9kFVUgHYQ\\u003d\"}"
},
"currency" : "EUR"
}
}
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, PAYOUTS: RECEIVER, CARD_CASH: SENDER |
sender |
Object |
Required |
@NotNull |
Required configuration per request (PLAIN SENDER, DATACORE SENDER, CASH SENDER, BLIK SENDER, ENCRYPTED TOKEN) |
receiver |
Object |
Required |
@NotNull |
Required configuration per request (PLAIN RECEIVER, PHONE RECEIVER, DATACORE RECEIVER, CASH RECEIVER, ENCRYPTED TOKEN) |
POST /client/calculate-commission HTTP/1.1
Content-Type: application/vnd.calculate-commission.v2+json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 8457
Host: java-staging.fenige.pl:8181
{
"amount" : 100,
"type" : "RECEIVER",
"sender" : {
"type" : "ENCRYPTED_TOKEN",
"tokenType" : "APPLE_PAY",
"token" : {
"paymentData" : {
"version" : "EC_v1",
"data" : "KkiE8GswNdN7jLbbMsCheM+gWdd3vcSw/y4meFdAhRPrPAaTj1GBOGVRVVEfO7oTlsRgv9fl/4IwHGjPd7sLHkcxlRkW7amHcXEszbMwvDBE8656Xc0FxGxEvt6+xY17lPwb7/izmAkSXLdk0geqV0mrQXsYR+II+HI/OKkgXl5hIFS4+9/Tw1Yi1uSF/XRfTXVJF4TLaQF9Ydo+gltIHX82eBTLPZLaHWW9JY0UNUoXkIQQKnaRWb0nlEI+H8apL9NpKrWAknJSZFayDGBkUChAqpqOn5tcL+zdkdt5mmpY0qcK+h5vKluaPg5odq+QQUsn+ivFmnktorjzMsSL+NmMXxVNsFagtGVV4ssGEUEfz7wkIZFzfnlhhmQeHTsdHb+tgmOCayMHQrLUG/DEYGt9Y2s56mJrvr61IU7CYg==",
"signature" : "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",
"header" : {
"ephemeralPublicKey" : "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEO+01GJPfNlHcI2UWUlWExM0aFrewDOuCZbVn1JZgkuM3qtWg9STbwzNDsFtt4xy1hNtOGJVfB65cudVcW3KpmA==",
"publicKeyHash" : "vw4LZqhFE7M9d3oqoOAP4O7X8TpEYiEALkRuP/GjBVE=",
"transactionId" : "fbdf0dbd5cfacfdc8ef214340ff69b7f52af24b200bd7873cf9bd8dbe84ab601"
}
},
"paymentMethodApple" : {
"displayName" : "Visa 1141",
"network" : "Visa",
"type" : "debit"
},
"transactionIdentifier" : "fbdf0dbd5cfacfdc8ef214340ff69b7f52af24b200bd7873cf9bd8dbe84ab601"
},
"currency" : "EUR"
},
"receiver" : {
"type" : "ENCRYPTED_TOKEN",
"tokenType" : "APPLE_PAY",
"token" : {
"paymentData" : {
"version" : "EC_v1",
"data" : "KkiE8GswNdN7jLbbMsCheM+gWdd3vcSw/y4meFdAhRPrPAaTj1GBOGVRVVEfO7oTlsRgv9fl/4IwHGjPd7sLHkcxlRkW7amHcXEszbMwvDBE8656Xc0FxGxEvt6+xY17lPwb7/izmAkSXLdk0geqV0mrQXsYR+II+HI/OKkgXl5hIFS4+9/Tw1Yi1uSF/XRfTXVJF4TLaQF9Ydo+gltIHX82eBTLPZLaHWW9JY0UNUoXkIQQKnaRWb0nlEI+H8apL9NpKrWAknJSZFayDGBkUChAqpqOn5tcL+zdkdt5mmpY0qcK+h5vKluaPg5odq+QQUsn+ivFmnktorjzMsSL+NmMXxVNsFagtGVV4ssGEUEfz7wkIZFzfnlhhmQeHTsdHb+tgmOCayMHQrLUG/DEYGt9Y2s56mJrvr61IU7CYg==",
"signature" : "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",
"header" : {
"ephemeralPublicKey" : "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEO+01GJPfNlHcI2UWUlWExM0aFrewDOuCZbVn1JZgkuM3qtWg9STbwzNDsFtt4xy1hNtOGJVfB65cudVcW3KpmA==",
"publicKeyHash" : "vw4LZqhFE7M9d3oqoOAP4O7X8TpEYiEALkRuP/GjBVE=",
"transactionId" : "fbdf0dbd5cfacfdc8ef214340ff69b7f52af24b200bd7873cf9bd8dbe84ab601"
}
},
"paymentMethodApple" : {
"displayName" : "Visa 1141",
"network" : "Visa",
"type" : "debit"
},
"transactionIdentifier" : "fbdf0dbd5cfacfdc8ef214340ff69b7f52af24b200bd7873cf9bd8dbe84ab601"
},
"currency" : "EUR"
}
}
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, PAYOUTS: RECEIVER, CARD_CASH: SENDER |
sender |
Object |
Required |
@NotNull |
Required configuration per request (PLAIN SENDER, DATACORE SENDER, CASH SENDER, BLIK SENDER, ENCRYPTED TOKEN) |
receiver |
Object |
Required |
@NotNull |
Required configuration per request (PLAIN RECEIVER, PHONE RECEIVER, DATACORE RECEIVER, CASH RECEIVER, ENCRYPTED TOKEN) |
encrypted_token-encrypted_token-apple
7.2. Response
7.2.1. Response status
Status |
Description |
|
Returned if the calculate commission completes successfully. |
|
Returned list of field name which has validation error. |
|
Returned when API-TOKEN was broken. |
|
Returned when cannot process commission calculation |
7.2.2. Example HTTP Response
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 |
|
|
Currencies supported by sender’s card |
|
|
Currencies supported by sender’s card |
|
|
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 |
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."
}
}
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."
}
}
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"
}
Path | Description |
---|---|
|
|
|
|
|
|
|
|
|
|
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json;charset=UTF-8
Content-Length: 134
{
"status" : "ERROR_OCCURRED_DURING_TOKEN_DECRYPTION",
"error" : {
"message" : "Error occurred during token decryption."
}
}
Path | Type | Description |
---|---|---|
|
|
Api status |
|
|
Api status description |
8. Check card’s provider
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 |
---|---|
|
Returned card’s provider. |
Example Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 31
{
"provider" : "MASTERCARD"
}
Response fields
Path | Type | Description |
---|---|---|
|
|
Card’s provider |
9. Check deposit state
9.1. Check deposit state
This method is appropriate only for PAYOUTS and PAYOUTS-ON-ACCOUNT 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 |
---|---|
|
Returned state of deposit. |
Example Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 33
{
"remainingDeposit" : 150.99
}
Response fields
Path | Type | Description |
---|---|---|
|
|
The amount remaining on deposit (in settlement currency) |
10. User authentication
10.1. Login
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. |
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
POST /client/login HTTP/1.1
accept-encoding: gzip
user-agent: ReactorNetty/1.0.39
accept: */*
Authorization: Basic dGVzdF9tZXJjaGFudDpwYXNzd29yZA==
Content-Type: application/json
Content-Length: 62
Host: java-staging.fenige.pl:8181
{
"id" : "mark.smith@fenige.pl",
"password" : "yPH7OxrK"
}
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
HTTP/1.1 200 OK
Content-Type: application/json
Transfer-Encoding: chunked
Date: Tue, 05 Nov 2024 11:42:32 GMT
Content-Length: 459
{
"status" : "SUCCESS",
"success" : {
"user" : {
"id" : 1342,
"firstName" : "Mark",
"lastName" : "Smith",
"phone" : "48570100200",
"email" : "mark.smith@fenige.pl",
"personalId" : "ADFR34453",
"gender" : "M",
"birthDate" : "1990-11-24",
"tcChangesAccepted" : false,
"pesel" : "02070803628",
"citizenship" : "PL"
},
"token" : "d94NYa+xqRrazUPzSgYeJ6qR/MzIOb3IzePb7t9sWds="
}
}
Path | Type | Description |
---|---|---|
|
|
Unique user’s id |
|
|
User’s first name |
|
|
User’s last name |
|
|
User’s phone number |
|
|
User’s e-mail address |
|
|
User personal id (e.g. identity document number) |
|
|
User accepted Terms and Condition or not |
|
|
User gender |
|
|
User birthDate |
|
|
User’s PESEL |
|
|
User citizenship |
|
|
Unique generated token that allows user to make other requests |
|
|
Status from Fenige system |
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
Content-Type: application/json
Transfer-Encoding: chunked
Date: Tue, 05 Nov 2024 11:42:32 GMT
Content-Length: 124
{
"status" : "USER_BLOCKED_IN_DATACENTER",
"error" : {
"message" : "Some information is missing or incorrect."
}
}
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
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
POST /client/logout HTTP/1.1
accept-encoding: gzip
user-agent: ReactorNetty/1.0.39
accept: */*
transfer-encoding: chunked
Authorization: Basic dGVzdF9tZXJjaGFudDpwYXNzd29yZA==
API-TOKEN: d94NYa+xqRrazUPzSgYeJ6qR/MzIOb3IzePb7t9sWds=
Content-Type: application/json
Host: java-staging.fenige.pl:8181
Name | Description |
---|---|
|
Basic auth credentials |
|
User’s token to authenticate in service |
10.2.2. Response
Response status
Status | Description |
---|---|
|
Returned when user successfully logout. |
|
Returned when API-TOKEN was missing. |
|
Returned when API-TOKEN was broken. |
HTTP/1.1 200 OK
Content-Type: application/json
Transfer-Encoding: chunked
Date: Tue, 05 Nov 2024 11:42:32 GMT
Content-Length: 46
{
"status" : "SUCCESS",
"success" : true
}
HTTP/1.1 200 OK
Content-Type: application/json
{
"status": "ERROR_SOMETHING_WRONG",
"error": {
"message": "Something went wrong."
}
}
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
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).
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
POST /client/users HTTP/1.1
accept-encoding: gzip
user-agent: ReactorNetty/1.0.39
accept: */*
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" : "WFXKaibx",
"birthDate" : "10021994",
"gender" : "M",
"street" : "Olszewskiego",
"flatNumber" : "93",
"houseNumber" : "283",
"postalCode" : "21-023",
"city" : "Lublin",
"country" : "PL",
"personalId" : "AAA00000",
"verified" : true
}
Name | Description |
---|---|
|
Basic auth credentials |
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 |
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' |
POST /client/users HTTP/1.1
accept-encoding: gzip
user-agent: ReactorNetty/1.0.39
accept: */*
Authorization: Basic dGVzdF9tZXJjaGFudDpwYXNzd29yZA==
Content-Type: application/json
Content-Length: 491
Host: java-staging.fenige.pl:8181
{
"firstName" : "Mark",
"lastName" : "Smith",
"phone" : "48500600800",
"email" : "mark.smith@fenige.pl",
"password" : "WFXKaibx",
"birthDate" : "10021994",
"gender" : "M",
"street" : "Wallstreet",
"flatNumber" : "93",
"houseNumber" : "283",
"postalCode" : "01922",
"city" : "New York",
"country" : "US",
"province" : "NY",
"personalId" : "AAA00000",
"verified" : true,
"marketing" : true,
"rodo" : true,
"pesel" : "02070803628",
"citizenship" : "PL"
}
Name | Description |
---|---|
|
Basic auth credentials |
Path | Type | Constraints | Description |
---|---|---|---|
firstName |
String |
User’s first name |
|
lastName |
String |
User’s last name |
|
phone |
String |
User’s phone number |
|
String |
User’s email used to log in system |
||
password |
String |
User’s password |
|
birthDate |
String |
Birth date in format ddmmyyyy |
|
pesel |
String |
@Optional |
User’s PESEL, required if polish citizenship |
citizenship |
String |
@Optional |
User citizenship country code in accordance with ISO 3166-1 Alpha-2 |
gender |
String |
Gender M/F |
|
rodo |
Boolean |
@Optional |
Consent to the processing of user personal data for marketing purposes |
marketing |
Boolean |
@Optional |
Consent to the sending of commercial information to the telephone number and e-mail address provided by the user |
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
HTTP/1.1 200 OK
Content-Type: application/json
Transfer-Encoding: chunked
Date: Tue, 05 Nov 2024 11:42:31 GMT
Content-Length: 41
{
"status" : "SUCCESS",
"id" : 2462
}
Path | Type | Description |
---|---|---|
|
|
Response status |
|
|
User’s id |
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."
}
}
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
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
PUT /client/users HTTP/1.1
accept-encoding: gzip
user-agent: ReactorNetty/1.0.39
accept: */*
Authorization: Basic dGVzdF9tZXJjaGFudDpwYXNzd29yZA==
API-TOKEN: d94NYa+xqRrazUPzSgYeJ6qR/MzIOb3IzePb7t9sWds=
Content-Type: application/json
Content-Length: 678
Host: java-staging.fenige.pl:8181
{
"id" : "1342",
"personalData" : {
"firstName" : "Mark",
"lastName" : "Smith",
"email" : "mark.smith@fenige.pl",
"phone" : "48570100200",
"birthDate" : "24111990",
"personalId" : "ADFR34453",
"verified" : true,
"rodo" : true,
"marketing" : true,
"tcChangesAccepted" : false
},
"address" : {
"id" : "1493",
"street" : "Olszewskiego",
"flatNumber" : "17A",
"houseNumber" : "153",
"postalCode" : "20-400",
"city" : "Lublin",
"countryId" : 616,
"province" : null
},
"password" : {
"oldPassword" : "yPH7OxrK",
"newPassword" : "mNLWTAaI8u_05",
"newPasswordRepeat" : "mNLWTAaI8u_05"
}
}
Name | Description |
---|---|
|
Basic auth credentials |
|
User’s token to authenticate in service |
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 |
personalData.rodo |
Boolean |
Optional |
Consent to the processing of user personal data for marketing purposes |
personalData.marketing |
Boolean |
Optional |
Consent to the sending of commercial information to the telephone number and e-mail address provided by the user |
personalData.tcChangesAccepted |
Boolean |
Optional |
Terms and conditions are accepted or not |
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
HTTP/1.1 200 OK
Content-Type: application/json
Transfer-Encoding: chunked
Date: Tue, 05 Nov 2024 11:42:30 GMT
Content-Length: 26
{
"status" : "SUCCESS"
}
Path | Type | Description |
---|---|---|
|
|
Response status |
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."
}
}
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"
]
}
]
}
}
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"
}
Path | Description |
---|---|
|
|
|
|
|
|
|
|
|
|
11.3. Delete user
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
DELETE /client/users HTTP/1.1
accept-encoding: gzip
user-agent: ReactorNetty/1.0.39
accept: */*
Authorization: Basic dGVzdF9tZXJjaGFudDpwYXNzd29yZA==
Content-Type: application/json
Content-Length: 17
Host: java-staging.fenige.pl:8181
{
"id" : 4685
}
Name | Description |
---|---|
|
Basic auth credentials |
Path | Type | Constraints | Description |
---|---|---|---|
id |
Number |
@Only digits allowed |
Unique user id |
11.3.2. Response
HTTP/1.1 200 OK
Content-Type: application/json
Transfer-Encoding: chunked
Date: Tue, 05 Nov 2024 11:42:31 GMT
Content-Length: 26
{
"status" : "SUCCESS"
}
Path | Type | Description |
---|---|---|
|
|
Response status |
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
This method can be use to receive address details of user.
11.4.1. Request
POST /client/users/address HTTP/1.1
accept-encoding: gzip
user-agent: ReactorNetty/1.0.39
accept: */*
Authorization: Basic dGVzdF9tZXJjaGFudDpwYXNzd29yZA==
Content-Type: application/json
Content-Length: 19
Host: java-staging.fenige.pl:8181
{
"id" : "1493"
}
Name | Description |
---|---|
|
Basic auth credentials |
Path | Type | Constraints | Description |
---|---|---|---|
id |
String |
@Only digits allowed |
Id number of address |
11.4.2. Response
HTTP/1.1 200 OK
Content-Type: application/json
Transfer-Encoding: chunked
Date: Tue, 05 Nov 2024 11:42:31 GMT
Content-Length: 207
{
"id" : "1493",
"street" : "Olszewskiego",
"city" : "Lublin",
"flatNumber" : "17A",
"houseNumber" : "153",
"postalCode" : "20-400",
"countryId" : 616,
"country" : "PL",
"province" : null
}
Path | Type | Description |
---|---|---|
|
|
Address’s id |
|
|
User’s street |
|
|
User’s city |
|
|
User’s flat number |
|
|
User’s house number |
|
|
User’s postal code |
|
|
User’s numeric country code |
|
|
User country code in accordance with ISO 3166-1 Alpha-2 |
|
|
User’s province |
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
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 |
---|---|
|
Returned phone number prefix with country code for countries. |
Example HTTP Response
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 |
---|---|---|
|
|
|
|
|
|
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
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
POST /client/users/password/token HTTP/1.1
accept-encoding: gzip
user-agent: ReactorNetty/1.0.39
accept: */*
Authorization: Basic dGVzdF9tZXJjaGFudDpwYXNzd29yZA==
Content-Type: application/json
Content-Length: 32
Host: java-staging.fenige.pl:8181
{
"email" : "user@email.com"
}
Name | Description |
---|---|
|
Basic auth credentials |
Path | Type | Constraints | Description |
---|---|---|---|
String |
Required |
User’s email address |
Response
HTTP/1.1 200 OK
Content-Type: application/json
Transfer-Encoding: chunked
Date: Tue, 05 Nov 2024 11:42:31 GMT
Content-Length: 26
{
"status" : "SUCCESS"
}
Path | Type | Description |
---|---|---|
|
|
Response status |
HTTP/1.1 200 OK
Content-Type: application/json
{
"status": "ERROR_USER_NOTFOUND"
}
11.6.2. User password reset
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
PUT /client/users/password HTTP/1.1
accept-encoding: gzip
user-agent: ReactorNetty/1.0.39
accept: */*
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"
}
Name | Description |
---|---|
|
Basic auth credentials |
Path | Type | Constraints | Description |
---|---|---|---|
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
HTTP/1.1 200 OK
Content-Type: application/json
Transfer-Encoding: chunked
Date: Tue, 05 Nov 2024 11:42:31 GMT
Content-Length: 26
{
"status" : "SUCCESS"
}
Path | Type | Description |
---|---|---|
|
|
API status from Fenige system |
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"
}
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
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. |
12.1.1. Request
PUT /client/card HTTP/1.1
accept-encoding: gzip
user-agent: ReactorNetty/1.0.39
accept: */*
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"
}
}
Name | Description |
---|---|
|
Basic auth credentials |
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
HTTP/1.1 200 OK
Content-Type: application/json
Transfer-Encoding: chunked
Date: Tue, 05 Nov 2024 11:42:30 GMT
Content-Length: 46
{
"status" : "SUCCESS",
"card_id" : 7431
}
Path | Type | Description |
---|---|---|
|
|
Response status |
|
|
Unique card identifier |
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. |
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"
}
Path | Description |
---|---|
|
|
|
|
|
|
|
|
|
|
HTTP/1.1 403 Forbidden
Content-Type: application/json
Transfer-Encoding: chunked
Date: Tue, 05 Nov 2024 11:42:30 GMT
Content-Length: 103
{
"timestamp" : 1730806950900,
"status" : 403,
"error" : "Forbidden",
"path" : "/client/card"
}
12.2. Update card
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
PUT /client/cards HTTP/1.1
accept-encoding: gzip
user-agent: ReactorNetty/1.0.39
accept: */*
Authorization: Basic dGVzdF9tZXJjaGFudDpwYXNzd29yZA==
API-TOKEN: d94NYa+xqRrazUPzSgYeJ6qR/MzIOb3IzePb7t9sWds=
Content-Type: application/json
Content-Length: 42
Host: java-staging.fenige.pl:8181
{
"id" : 1664,
"defaultValue" : true
}
Name | Description |
---|---|
|
Basic auth credentials |
|
User’s token to authenticate in service |
Path | Type | Constraints | Description |
---|---|---|---|
id |
Number |
@Not null |
Card id |
defaultValue |
Boolean |
@Not Null |
Is this card default |
12.2.2. Response
HTTP/1.1 200 OK
Content-Type: application/json
Transfer-Encoding: chunked
Date: Tue, 05 Nov 2024 11:42:30 GMT
Content-Length: 43
{
"id" : "1664",
"status" : "SUCCESS"
}
Path | Type | Description |
---|---|---|
|
|
Response status |
|
|
Unique card identifier |
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."
}
}
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"
}
Path | Description |
---|---|
|
|
|
|
|
|
|
|
|
|
HTTP/1.1 403 Forbidden
Content-Type: application/json
Transfer-Encoding: chunked
Date: Tue, 05 Nov 2024 11:42:30 GMT
Content-Length: 103
{
"timestamp" : 1730806950900,
"status" : 403,
"error" : "Forbidden",
"path" : "/client/card"
}
12.3. Get card list
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
GET /client/cards HTTP/1.1
accept-encoding: gzip
user-agent: ReactorNetty/1.0.39
accept: */*
Authorization: Basic dGVzdF9tZXJjaGFudDpwYXNzd29yZA==
API-TOKEN: d94NYa+xqRrazUPzSgYeJ6qR/MzIOb3IzePb7t9sWds=
Host: java-staging.fenige.pl:8181
Name | Description |
---|---|
|
Basic auth credentials |
|
User’s token to authenticate in service |
12.3.2. Response
HTTP/1.1 200 OK
Content-Type: application/json
Transfer-Encoding: chunked
Date: Tue, 05 Nov 2024 11:42:30 GMT
Content-Length: 565
{
"status" : "SUCCESS",
"success" : [ {
"id" : 9735,
"cardNo" : "0463",
"bin" : "535167",
"description" : "Basic debit card",
"defaultValue" : true,
"strongVerified" : true,
"expDate" : "1026",
"cardHolderFirstName" : "Mark",
"cardHolderLastName" : "Smith"
}, {
"id" : 6587,
"cardNo" : "9169",
"bin" : "511796",
"description" : "Basic debit card",
"defaultValue" : false,
"strongVerified" : true,
"expDate" : "0324",
"cardHolderFirstName" : "Mark",
"cardHolderLastName" : "Smith"
} ]
}
Path | Type | Description |
---|---|---|
|
|
Response status |
|
|
Card id |
|
|
Card number |
|
|
Card bin |
|
|
Card description |
|
|
Is card default value |
|
|
Is card string verified |
|
|
Card holder first name |
|
|
Card holder last name |
|
|
Card expiration date |
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"
}
Path | Description |
---|---|
|
|
|
|
|
|
|
|
|
|
HTTP/1.1 403 Forbidden
Content-Type: application/json
Transfer-Encoding: chunked
Date: Tue, 05 Nov 2024 11:42:30 GMT
Content-Length: 103
{
"timestamp" : 1730806950900,
"status" : 403,
"error" : "Forbidden",
"path" : "/client/card"
}
12.4. Delete card
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
DELETE /client/cards/2900 HTTP/1.1
accept-encoding: gzip
user-agent: ReactorNetty/1.0.39
accept: */*
Authorization: Basic dGVzdF9tZXJjaGFudDpwYXNzd29yZA==
API-TOKEN: d94NYa+xqRrazUPzSgYeJ6qR/MzIOb3IzePb7t9sWds=
Host: java-staging.fenige.pl:8181
Name | Description |
---|---|
|
Basic auth credentials |
|
User’s token to authenticate in service |
12.4.2. Response
HTTP/1.1 200 OK
Content-Type: application/json
Transfer-Encoding: chunked
Date: Tue, 05 Nov 2024 11:42:30 GMT
Content-Length: 26
{
"status" : "SUCCESS"
}
Path | Type | Description |
---|---|---|
|
|
Response status |
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"
}
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"
}
Path | Description |
---|---|
|
|
|
|
|
|
|
|
|
|
HTTP/1.1 403 Forbidden
Content-Type: application/json
Transfer-Encoding: chunked
Date: Tue, 05 Nov 2024 11:42:30 GMT
Content-Length: 103
{
"timestamp" : 1730806950900,
"status" : 403,
"error" : "Forbidden",
"path" : "/client/card"
}
12.5. Get country for card
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 |
---|---|---|---|
|
|
|
|
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 |
---|---|
|
Returned country code from which the card was issued. |
|
Returned country code as UNDEFINED when card number is unsupported. |
|
Returned when card number is invalid or missing. |
Example HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
{
"country" : "PL"
}
Name | Type | Description |
---|---|---|
|
|
|
HTTP/1.1 200 OK
Content-Type: application/json
{
"country": "UNDEFINED"
}
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
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
POST /client/friend-card HTTP/1.1
accept-encoding: gzip
user-agent: ReactorNetty/1.0.39
accept: */*
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"
}
}
Name | Description |
---|---|
|
Basic auth credentials |
|
User’s token to authenticate in service |
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 |
Optional |
Receiver email address |
13.1.2. Response
HTTP/1.1 200 OK
Content-Type: application/json
Transfer-Encoding: chunked
Date: Tue, 05 Nov 2024 11:42:32 GMT
Content-Length: 63
{
"status" : "SUCCESS",
"success" : {
"id" : 2656
}
}
Path | Type | Description |
---|---|---|
|
|
Response status from Fenige system |
|
|
Friendcard’s id |
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"
]
]
}
}
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
}
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"
}
Path | Description |
---|---|
|
|
|
|
|
|
|
|
|
|
13.2. Update friend card
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
PUT /client/friend-card/9334 HTTP/1.1
accept-encoding: gzip
user-agent: ReactorNetty/1.0.39
accept: */*
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"
}
}
Name | Description |
---|---|
|
Basic auth credentials |
|
User’s token to authenticate in service |
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 |
Receiver email address |
13.2.2. Response
HTTP/1.1 200 OK
Content-Type: application/json
Transfer-Encoding: chunked
Date: Tue, 05 Nov 2024 11:42:32 GMT
Content-Length: 62
{
"status" : "SUCCESS",
"success" : {
"id" : 236
}
}
Path | Type | Description |
---|---|---|
|
|
Response status from Fenige system |
|
|
Friendcard’s id |
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"
}
Path | Description |
---|---|
|
|
|
|
|
|
|
|
|
|
13.3. Delete friend card
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
DELETE /client/friend-card/6739 HTTP/1.1
accept-encoding: gzip
user-agent: ReactorNetty/1.0.39
accept: */*
Authorization: Basic dGVzdF9tZXJjaGFudDpwYXNzd29yZA==
API-TOKEN: d94NYa+xqRrazUPzSgYeJ6qR/MzIOb3IzePb7t9sWds=
Host: java-staging.fenige.pl:8181
Name | Description |
---|---|
|
Basic auth credentials |
|
User’s token to authenticate in service |
13.3.2. Response
HTTP/1.1 200 OK
Content-Type: application/json
Transfer-Encoding: chunked
Date: Tue, 05 Nov 2024 11:42:32 GMT
Content-Length: 26
{
"status" : "SUCCESS"
}
Path | Type | Description |
---|---|---|
|
|
Response status |
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."
}
}
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"
}
Path | Description |
---|---|
|
|
|
|
|
|
|
|
|
|
13.4. Get friend card list
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
GET /client/friend-card HTTP/1.1
accept-encoding: gzip
user-agent: ReactorNetty/1.0.39
accept: */*
Authorization: Basic dGVzdF9tZXJjaGFudDpwYXNzd29yZA==
API-TOKEN: d94NYa+xqRrazUPzSgYeJ6qR/MzIOb3IzePb7t9sWds=
Host: java-staging.fenige.pl:8181
Name | Description |
---|---|
|
Basic auth credentials |
|
User’s token to authenticate in service |
13.4.2. Response
HTTP/1.1 200 OK
Content-Type: application/json
Transfer-Encoding: chunked
Date: Tue, 05 Nov 2024 11:42:32 GMT
Content-Length: 530
{
"status" : "SUCCESS",
"success" : [ {
"id" : 7044,
"cardNumber" : "XXXX-XXXX-XXXX-8261",
"bin" : "154737",
"phoneNumber" : "48588194836",
"data" : {
"firstName" : "Emily",
"lastName" : "Parker",
"email" : "emily.parker@fenige.pl"
}
}, {
"id" : 9710,
"cardNumber" : "XXXX-XXXX-XXXX-9292",
"bin" : "590243",
"phoneNumber" : "48241091094",
"data" : {
"firstName" : "Emily",
"lastName" : "Parker",
"email" : "emily.parker@fenige.pl"
}
} ]
}
Path | Type | Description |
---|---|---|
|
|
Response status from Fenige system |
|
|
ID in Fenige system |
|
|
Friendcard holder’s phone number |
|
|
Friendcard holder’s first name |
|
|
Friendcard holder’s last name |
|
|
Friendcard holder’s email address |
|
|
Full friendcard’s number must be between 12-digits and 19-digits |
|
|
Six-digits bin of friendcard’s number |
HTTP/1.1 401 Unauthorized
Content-Type: application/json
{
"timestamp": 1532606583290,
"status": 401,
"error": "Unauthorized",
"message": "Unable to authorize merchant",
"path": "/client/friend-card"
}
Path | Description |
---|---|
|
|
|
|
|
|
|
|
|
|
14. Global Delayed receivers
14.1. Add Global Delayed Receiver
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
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"
}
Name | Type | Validation | Description |
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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"
}
Name | Type | Validation | Description |
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
14.1.2. Response
Response status
Status | Description |
---|---|
|
Returned when delayed receiver was successfully added. |
|
Returned list of field name which has validation errors. |
|
Returned when delayed receiver already exists. |
Example 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
}
Name | Type | Description |
---|---|---|
|
|
|
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/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"
]
}
]
}
}
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
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
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 |
---|---|---|---|
|
|
|
|
|
|
|
|
14.2.2. Response
Response status
Status | Description |
---|---|
|
Returned when delayed receiver was successfully checked out. |
|
Returned when delayed receiver was not found. |
Example 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"
}
Name | Type | Description |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
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
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 |
---|---|---|---|
|
|
|
|
|
|
|
|
14.3.2. Response
Response status
Status | Description |
---|---|
|
Returned when delayed receiver was successfully removed. |
|
Returned when delayed receiver was not found. |
Example 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"
}
Name | Type | Description |
---|---|---|
|
|
|
|
|
|
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. Apple Pay
15.1. Open session
Obtaining encrypted Apple token flow
Opening of the session in apple is necessary to complete get apple pay token.
15.1.1. Request
POST /client/apple-pay/open-session HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 90
Host: java-staging.fenige.pl:8181
{
"validationUrl" : "https://apple-pay-gateway.apple.com/paymentservices/startSession"
}
Request fields
Path | Type | Validation | Rule | Description |
---|---|---|---|---|
validationUrl |
String |
Required |
@NotNull @Must match |
Validation url obtained from Apple |
Example Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 5032
{
"epochTimestamp" : 1726647258281,
"expiresAt" : 1726650858281,
"merchantSessionIdentifier" : "SSHD8CDE5D3F3714064959704E12956C87D_A0E617ED4A56A343E07C6E1255BD4098423B3A8E1243236462D07B14B4A0F7C3",
"nonce" : "eb0056b5",
"merchantIdentifier" : "0C2CFE3E7F26E630F7144D3A40B3C91E1E481905942B6290D0F5AD0C756F9E96",
"domainName" : "domain.fenige.pl",
"displayName" : "fenige",
"signature" : "308006092a864886f70d010702a0803080020101310d300b0609608648016503040201308006092a864886f70d0107010000a080308203e330820388a003020102020816634c8b0e305717300a06082a8648ce3d040302307a312e302c06035504030c254170706c65204170706c69636174696f6e20496e746567726174696f6e204341202d20473331263024060355040b0c1d4170706c652043657274696669636174696f6e20417574686f7269747931133011060355040a0c0a4170706c6520496e632e310b3009060355040613025553301e170d3234303432393137343732375a170d3239303432383137343732365a305f3125302306035504030c1c6563632d736d702d62726f6b65722d7369676e5f5543342d50524f4431143012060355040b0c0b694f532053797374656d7331133011060355040a0c0a4170706c6520496e632e310b30090603550406130255533059301306072a8648ce3d020106082a8648ce3d03010703420004c21577edebd6c7b2218f68dd7090a1218dc7b0bd6f2c283d846095d94af4a5411b83420ed811f3407e83331f1c54c3f7eb3220d6bad5d4eff49289893e7c0f13a38202113082020d300c0603551d130101ff04023000301f0603551d2304183016801423f249c44f93e4ef27e6c4f6286c3fa2bbfd2e4b304506082b0601050507010104393037303506082b060105050730018629687474703a2f2f6f6373702e6170706c652e636f6d2f6f63737030342d6170706c65616963613330323082011d0603551d2004820114308201103082010c06092a864886f7636405013081fe3081c306082b060105050702023081b60c81b352656c69616e6365206f6e207468697320636572746966696361746520627920616e7920706172747920617373756d657320616363657074616e6365206f6620746865207468656e206170706c696361626c65207374616e64617264207465726d7320616e6420636f6e646974696f6e73206f66207573652c20636572746966696361746520706f6c69637920616e642063657274696669636174696f6e2070726163746963652073746174656d656e74732e303606082b06010505070201162a687474703a2f2f7777772e6170706c652e636f6d2f6365727469666963617465617574686f726974792f30340603551d1f042d302b3029a027a0258623687474703a2f2f63726c2e6170706c652e636f6d2f6170706c6561696361332e63726c301d0603551d0e041604149457db6fd57481868989762f7e578507e79b5824300e0603551d0f0101ff040403020780300f06092a864886f76364061d04020500300a06082a8648ce3d0403020349003046022100c6f023cb2614bb303888a162983e1a93f1056f50fa78cdb9ba4ca241cc14e25e022100be3cd0dfd16247f6494475380e9d44c228a10890a3a1dc724b8b4cb8889818bc308202ee30820275a0030201020208496d2fbf3a98da97300a06082a8648ce3d0403023067311b301906035504030c124170706c6520526f6f74204341202d20473331263024060355040b0c1d4170706c652043657274696669636174696f6e20417574686f7269747931133011060355040a0c0a4170706c6520496e632e310b3009060355040613025553301e170d3134303530363233343633305a170d3239303530363233343633305a307a312e302c06035504030c254170706c65204170706c69636174696f6e20496e746567726174696f6e204341202d20473331263024060355040b0c1d4170706c652043657274696669636174696f6e20417574686f7269747931133011060355040a0c0a4170706c6520496e632e310b30090603550406130255533059301306072a8648ce3d020106082a8648ce3d03010703420004f017118419d76485d51a5e25810776e880a2efde7bae4de08dfc4b93e13356d5665b35ae22d097760d224e7bba08fd7617ce88cb76bb6670bec8e82984ff5445a381f73081f4304606082b06010505070101043a3038303606082b06010505073001862a687474703a2f2f6f6373702e6170706c652e636f6d2f6f63737030342d6170706c65726f6f7463616733301d0603551d0e0416041423f249c44f93e4ef27e6c4f6286c3fa2bbfd2e4b300f0603551d130101ff040530030101ff301f0603551d23041830168014bbb0dea15833889aa48a99debebdebafdacb24ab30370603551d1f0430302e302ca02aa0288626687474703a2f2f63726c2e6170706c652e636f6d2f6170706c65726f6f74636167332e63726c300e0603551d0f0101ff0404030201063010060a2a864886f7636406020e04020500300a06082a8648ce3d040302036700306402303acf7283511699b186fb35c356ca62bff417edd90f754da28ebef19c815e42b789f898f79b599f98d5410d8f9de9c2fe0230322dd54421b0a305776c5df3383b9067fd177c2c216d964fc6726982126f54f87a7d1b99cb9b0989216106990f09921d00003182018730820183020101308186307a312e302c06035504030c254170706c65204170706c69636174696f6e20496e746567726174696f6e204341202d20473331263024060355040b0c1d4170706c652043657274696669636174696f6e20417574686f7269747931133011060355040a0c0a4170706c6520496e632e310b3009060355040613025553020816634c8b0e305717300b0609608648016503040201a08193301806092a864886f70d010903310b06092a864886f70d010701301c06092a864886f70d010905310f170d3234303931383038313431385a302806092a864886f70d010934311b3019300b0609608648016503040201a10a06082a8648ce3d040302302f06092a864886f70d01090431220420616431fe69a203c4e9fcccca01dc806a1676519e0cee7f9e37d74b54c5505515300a06082a8648ce3d0403020446304402203a108e1f0305c5d6739024a5ff3127d7e9a6d0cd0849a40339f7bd848414355d02203205c4ec93c898877c3ee32e3afefff9270279e3117741cdc7a2f3e5e8dfae37000000000000",
"operationalAnalyticsIdentifier" : "fenige:0C2CFE3E7F26E630F7144D3A40B3C91E1E481905942B6290D0F5AD0C756F9E96",
"retries" : 0,
"pspId" : "0C2CFE3E7F26E630F7144D3A40B3C91E1E481905942B6290D0F5AD0C756F9E96"
}
Response fields
Path | Type | Description |
---|---|---|
|
|
The timestamp (in milliseconds since the epoch) when the session was created. |
|
|
The timestamp (in milliseconds since the epoch) when the session expires. |
|
|
A unique identifier for the merchant session. |
|
|
A unique, random string generated for this session. |
|
|
The identifier for the merchant. |
|
|
The domain name of the website where Apple Pay is being used. |
|
|
The display name of the merchant. |
|
|
A cryptographic signature of the session data. |
|
|
An identifier used for operational analytics. |
|
|
The number of retries that have been attempted for this session. |
|
|
The Payment Service Provider Identifier. |
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json
Content-Length: 164
{
"status" : "E01621",
"message" : "Required data not complete",
"httpStatus" : "UNPROCESSABLE_ENTITY",
"traceId" : "a284d478-b6e1-40ec-9271-9840ef9e6870"
}
Response fields
Path | Type | Description |
---|---|---|
|
|
Trace identifier |
|
|
Response code from Fenige system |
|
|
Message for response code from Fenige system |
|
|
Response http status |
HTTP/1.1 500 Internal Server Error
Content-Type: application/json
Content-Length: 150
{
"status" : "E9000",
"message" : "Domain error",
"httpStatus" : "INTERNAL_SERVER_ERROR",
"traceId" : "604b0667-387a-4656-a996-bc62abc67215"
}
Response fields
Path | Type | Description |
---|---|---|
|
|
Trace identifier |
|
|
Response code from Fenige system |
|
|
Message for response code from Fenige system |
|
|
Response http status |
16. JWE Encryption
General information
JWE encryption methods allows to encrypt sensitive data using Fenige public key.
To use this functionality you have to notify your account manager to generate keys.
Private key will be store securely on the Fenige side and the Public one will be exposed to API fenige.
See https://tools.ietf.org/html/rfc7516 for detailed information about JWE.
Versioning
The system provides a list of supported public keys.
Each of them has a certain expiration date.
In each API call that uses JWE encrypted data the merchant has to provide that keyAlias that was used to encrypt the request
16.1. Encryption
The algorithm used for encryption:
JWE header |
Name |
Description |
alg |
RSA-OAEP-256 |
Cryptographic algorithm used to encrypt CEK |
enc |
A256GCM |
Identifies the content encryption algorithm used to perform authenticated encryption |
X-JWE-KEY-VERSION |
e61b9358-a4fc-4d17-a7a8-380ad04c6c7f |
Identifies a key used to payload encryption |
How to provide encrypted data
Each request with encrypted data must have values such as:
Name |
Type |
Description |
X-JWE-KEY-VERSION |
HTTP header |
Key alias that was used during sensitive data encryption |
encryptedData |
Request body field - String value |
JWE cryptogram containing object with sensitive data |
Encrypted data must have exact same structure like original object. For e.g. if request contains field sender.cardNumber and you want to provide it securely you have to prepare structure like: sender.cardNumber and then encrypt this and provide it in "encryptedData" field.
Supported field references to encrypt per API method
Method |
Supported field references to modify |
Send money |
cvc2 receiver.cardNumber sender.cardNumber sender.expirationDate sender.tokenPan receiver.tokenPan |
Pre authentication |
cardNumber |
Authentication |
cardNumber cardExpirationDate |
Calculate commission |
sender.cardNumber receiver.cardNumber |
Data to encrypt samples:
{
"cvc2": "846",
"sender": {
"cardNumber": "5117964247989169",
"expirationDate": "09/24"
},
"receiver": {
"cardNumber": "5117964247989169"
}
}
{
"sender": {
"cardNumber": "5117964247989169"
},
"receiver": {
"cardNumber": "5117964247989169"
}
}
{
"cardNumber": "5117964247989169"
}
{
"cardNumber": "5117964247989169",
"cardExpirationDate": "12/24"
}
After the data is encrypted is should looks something like:
eyJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.eq_WIe19KVto2SR0Tc6i70_owQzXpIq4UX_7b_iFMzTRG7Esfk2D_LQ1mIDCQ5PNteMoLU8PxUVB_cPQ89R_CUvMrO09QVFnV9l-eWtkbxF854RG2fiYgHM_3a_Ni69qYJmPMLVlJH2z_h52g6wnhZV0bXs6dtkJV3XtoBln-zXwiHdlAjXhZZB98FWqFHoj1UZoJs4vgFISMAzN5dpZ3cI3W28aLUbQ6GmpLVlzOBHfgANZ90Ew7dC1k7Lxv6KhLmZm5uJnH6YAbsA9lvw22faqFb6ZmAqDl5Whq5HBZpf7wLW_0bdr5oOEIzeYtS_fSaKzWD6kusod6J96tMNyf-5ZFkMfhCEILLInRTaZ70YhlHpv0lDplPAKtFwavQ8nMdMdG4f47LSAnChZ56ACeq2uqWEJTy36j9y5_bIaHkLVzTVGmS_g_xh2aiyVU8x_p3sekp0eRtPbWm1v0UVl1LqIn7m_aatlqIn-Pxwe2k8IkN54ke4cvaVfFdcM4mnnTWw_ap4cIKWYXdohyl3gWEx0wqcGkmadh9DP8zXniSq2S3-4VOmwqpOu-zMnBdnIeqq4h6RtKsLqMzgNdnuotv-yR3it2v6HnwzUUjhoDy1tW5LCeKLVKp8zwIvvT-C5QDk7QEQSUaYQgoBW52aZwGbijoVSx50OhTA4nKDoCJg.iAqQXauOmB_lB4d_.rWvz98SNaoQve-wpLvt8W_VbjrLb.4YMQBMJP0eaEleDr_XkARQ
If you want to use it, you have to provide this in HTTP request in "encryptedData" request field along with X-JWE-KEY-VERSION.
For e.g. Pre Authentication request with JWE encryptedData:
POST /client/3ds/preAuthentication HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 1093
Host: java-staging.fenige.pl:8181
X-JWE-KEY-VERSION: 3a336eaa-f979-4fd7-b85d-fd042e980709
{
"methodNotificationUrl" : "methodNotificationUrl.com",
"encryptedData": "eyJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.eq_WIe19KVto2SR0Tc6i70_owQzXpIq4UX_7b_iFMzTRG7Esfk2D_LQ1mIDCQ5PNteMoLU8PxUVB_cPQ89R_CUvMrO09QVFnV9l-eWtkbxF854RG2fiYgHM_3a_Ni69qYJmPMLVlJH2z_h52g6wnhZV0bXs6dtkJV3XtoBln-zXwiHdlAjXhZZB98FWqFHoj1UZoJs4vgFISMAzN5dpZ3cI3W28aLUbQ6GmpLVlzOBHfgANZ90Ew7dC1k7Lxv6KhLmZm5uJnH6YAbsA9lvw22faqFb6ZmAqDl5Whq5HBZpf7wLW_0bdr5oOEIzeYtS_fSaKzWD6kusod6J96tMNyf-5ZFkMfhCEILLInRTaZ70YhlHpv0lDplPAKtFwavQ8nMdMdG4f47LSAnChZ56ACeq2uqWEJTy36j9y5_bIaHkLVzTVGmS_g_xh2aiyVU8x_p3sekp0eRtPbWm1v0UVl1LqIn7m_aatlqIn-Pxwe2k8IkN54ke4cvaVfFdcM4mnnTWw_ap4cIKWYXdohyl3gWEx0wqcGkmadh9DP8zXniSq2S3-4VOmwqpOu-zMnBdnIeqq4h6RtKsLqMzgNdnuotv-yR3it2v6HnwzUUjhoDy1tW5LCeKLVKp8zwIvvT-C5QDk7QEQSUaYQgoBW52aZwGbijoVSx50OhTA4nKDoCJg.iAqQXauOmB_lB4d_.rWvz98SNaoQve-wpLvt8W_VbjrLb.4YMQBMJP0eaEleDr_XkARQ"
}
POST /client/3ds/preAuthentication HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Content-Length: 1093
Host: java-staging.fenige.pl:8181
X-JWE-KEY-VERSION: 3a336eaa-f979-4fd7-b85d-fd042e980709
{
"methodNotificationUrl" : "methodNotificationUrl.com",
"encryptedData": {
"cardNumber": "5117964247989169"
}
}
JWE Encryption implementation examples
import com.nimbusds.jose.*;
import com.nimbusds.jose.crypto.RSAEncrypter;
import java.security.KeyFactory;
import java.security.NoSuchAlgorithmException;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;
public class JweService {
public String encrypt(String message, FenigeGetPublicKeyResponse response) throws NoSuchAlgorithmException, InvalidKeySpecException, JOSEException {
// Preparation of public key
RSAPublicKey publicKey = prepareRsaPublicKey(response);
// Encrypter preparation
RSAEncrypter rsaEncrypter = new RSAEncrypter(publicKey);
// JWE object preparation
JWEHeader jweHeader = new JWEHeader(JWEAlgorithm.RSA_OAEP_256, EncryptionMethod.A256GCM); // JWE header
Payload payload = new Payload(message); // JWE payload
JWEObject jweObject = new JWEObject(jweHeader, payload);
// JWE object encryption
jweObject.encrypt(rsaEncrypter);
// JWE object serialization
return jweObject.serialize();
}
private RSAPublicKey prepareRsaPublicKey(FenigeGetPublicKeyResponse response) throws NoSuchAlgorithmException, InvalidKeySpecException {
// Public key base64 decode
byte[] keyBytes = Base64.getDecoder()
.decode(response.getPublicKey());
// RSA public key object generation
X509EncodedKeySpec spec = new X509EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
return (RSAPublicKey) keyFactory.generatePublic(spec);
}
}
16.2. Check public keys
Using this method, client can check his public keys with basic details. Remember to do not use this method before every payment.
16.2.1. Request
GET /client/jwe/keys/all HTTP/1.1
Content-Type: application/json
Authorization: Basic bWVyY2hhbnQ6cGFzc3dvcmQ=
Host: java-staging.fenige.pl:8181
16.2.2. Example Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1730
[ {
"keyAlias" : "f84deaa4-f3b0-4df4-981f-ed7f5d7a697d",
"expirationDate" : "2024-11-08T16:35:53.864Z",
"publicKey" : "MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAr2I3T7pH/5k1vQD7y6/pb72pvb+lIHO5DP8lWttFQui8YWN8fFs60fUfiWrGzEYLDZ1uDbGcBGz50BweBDZzrXUYzF/mTn4lgb/TPlEkXvqbHEH5IyaYNQDPB2TuYp6Jm9JQ8bm041h2vqksi4/kDoD28k+E4xJey8KerjxOSWeXmtQisboGK/YjdZjKoZZAZ3SI8yoydJpgxfE3+MeTJw6w+wj4v9L2+nIssfuJWaQT8FXMIL0kRAw8UnOG9ytGihJar8TK09iQg1QHyix/J8kpm/n6OyKewpJkSrz7jJzUyDxZSi2sw3AzL9FiwPM1PQDu3nS0ZfkU1IgtYRKxj9Wp8pjJmatlC8ZpLy982mWeaMe0C6q9vr6qvDFwakBt0KEGRPqNiGKZ8gaonN/xP3XDVCv25ac9sa5wb8p07xEgO1WA8vXqZvKKrK5todhTG/5tsVyF/cWHsxGA8Yvf3A1dg0274dYOdqrFLcGdvJIZE2DFOTFRoTz9Piverf7qAXu9lan+YG/IC8G93KVja5NCYdoyN2kqogL+0yZFroxR/6C1oglBkqLJd4sOJnd1t2beEWBKHG4hxQMjWXFtYmvz7aNaPXxNs+SD3pjEuW4o8RqjXwS4P1kPcS9GiB62kmZEZTi/tQHh2aD7EVRnkrlFH4tOUqwfgAg4FjlHYKcCAwEAAQ=="
}, {
"keyAlias" : "3df2eb4d-e4d3-4bb9-961c-7e117bb37001",
"expirationDate" : "2026-11-08T16:35:53.865Z",
"publicKey" : "MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuNWZSpCZeyS/S2AWEzkwgeBEidwO6Rys3hd0zEWyXUd9DJ/OhuEVFwDad69XRYkITcPTaynxd+4/wWxLjt07a2Gd+1u16M2pxgHuYQJVvXAV0tlcVDt66H/f0+X3dL2iR5TmZXcZd64CpxQq81BoUsLvKqI7jMK1AX8tbQzV49bcdrDqomLjoe9l5Cii6sI/aGk3MLDlleIa8vtpVVHV2rvkb3x4NCFp//cUNSDiPP1mSp7nUPgaEpMS6KbU77TS04tENQtBX648ykXmXqOvuaYx5DKYX8lJevCs/D5r0lZ3GKfO2jzwxeGqO9gzvO3zlHM4UK9e0oGVG6s1loYMVxKTh3XgO2nJ4sdzurJCQ0lji7FQAf0RHf/AyMhuaJ+TcOaxuT/6hTbCzPHSBbQgHmjod7o3wPU0C3D3qWT2bkr8nU4SiSygqEKRXUPp5Rtz53yPZGc4ipdTeGMp5pMtf5X79cB9Ik4D4yZijMeSLeg/FqBobO2tBY9N3lherpKbYSCu/C24wcrOfXZav++O8kyFVLGVRrUdqytVa2og5oU4EAOt7f8CcG7JjUvYhjO+0eVQG4vMsEDxS4/1UyawIU9ByGAVruazDy6NFvZ3w0iUHUW+SRABCC+GNCWpzNz6KJwsGQqbiFc6IIV7QFx2X0fzcO8KDbVNSUrFlKFO4nMCAwEAAQ=="
} ]
Response fields
Path | Type | Description |
---|---|---|
|
|
Alias of the key pair |
|
|
Expiration date of the key pair |
|
|
Public key that may be used for JWE encryption |
HTTP/1.1 500 Internal Server Error
Content-Type: application/json
Content-Length: 150
{
"status" : "E9000",
"message" : "Domain error",
"httpStatus" : "INTERNAL_SERVER_ERROR",
"traceId" : "2b2ac8e9-9348-48cc-ad2c-e7d135bba729"
}
Response fields
Path | Type | Description |
---|---|---|
|
|
Trace identifier |
|
|
Response code from Fenige system |
|
|
Message for response code from Fenige system |
|
|
Response http status |
17. Models
17.1. Senders
17.1.1. Sender Plain
"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"
}
"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"
}
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 |
Sender first name |
lastName |
String |
Required |
@NotNull |
Sender last name |
street |
String |
Required |
@NotNull |
Sender street |
houseNumber |
String |
Required |
@NotNull |
Sender house number |
city |
String |
Required |
@NotNull |
Sender city |
postalCode |
String |
Required |
@NotNull |
Sender postal code |
flatNumber |
String |
Optional |
@Length(min = 1, max = 5) @Pattern(regexp = "^[a-zA-Z0-9 ]*$") |
Sender flat number |
String |
Required |
@NotNull |
Sender email |
|
personalId |
String |
Optional |
Sender identification number |
|
cardNumber |
String |
Required |
@NotNull |
Sender card number |
expirationDate |
String |
Required |
@NotNull |
Sender card expiration date. Example: 11/18 |
currency |
String |
Required |
@NotNull |
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. Required for card to account transactions |
@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 |
USA state or CAN province code. Field is required when card country is USA or CAN. |
17.1.2. Sender Token Cryptogram 3DS
"sender" : {
"type" : "TOKEN",
"firstName" : "Mark",
"lastName" : "Smith",
"street" : "Olszewskiego",
"houseNumber" : "17A",
"city" : "Lublin",
"postalCode" : "20-400",
"flatNumber" : "2",
"email" : "senderEmail@fenige.pl",
"tokenType" : "GOOGLE_PAY",
"authMethod" : "CRYPTOGRAM_3DS",
"tokenPan" : "5117964247989169",
"currency" : "PLN",
"country" : "PL",
"expirationDate" : "03/26",
"paymentData" : {
"eciIndicator" : "02",
"onlinePaymentCryptogram" : "/0OL1zEABL+gk70RYJ8lMAABAAA="
}
}
Path | Type | Validation | Rule | Description |
---|---|---|---|---|
type |
String |
Required |
@NotNull |
For this configuration the value of this field must be "TOKEN", otherwise request will be declined |
firstName |
String |
Required |
@NotNull |
Sender first name |
lastName |
String |
Required |
@NotNull |
Sender last name |
street |
String |
Required |
@NotNull |
Sender street |
houseNumber |
String |
Required |
@NotNull |
Sender house number |
city |
String |
Required |
@NotNull |
Sender city |
postalCode |
String |
Required |
@NotNull |
Sender postal code |
flatNumber |
String |
Optional |
@Length(min = 1, max = 5) @Pattern(regexp = "^[a-zA-Z0-9 ]*$") |
Sender flat number |
String |
Required |
@NotNull |
Sender email |
|
personalId |
String |
Optional |
Sender identification number |
|
expirationDate |
String |
Required |
@NotNull |
Sender card expiration date. Example: 11/18 |
currency |
String |
Required |
@NotNull |
Currency for transaction (in accordance with ISO-4217). Example: PLN |
birthDate |
String |
Optional |
@Pattern("yyyy-MM-dd") |
Date of birth sender |
country |
String |
Required |
@NotNull @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 |
USA state or CAN province code. Field is required when card country is USA or CAN. |
tokenType |
String |
Required |
@NotNull |
Indicates the token type. Must be one of the following: GOOGLE_PAY, APPLE_PAY, OTHER |
authMethod |
String |
Conditional - required only for tokenType GOOGLE_PAY |
Authentication method of token payment transaction made with Google Pay token. Must be one of the following: - CRYPTOGRAM_3DS - standard token payment transaction flow with onlinePaymentCryptogram (tavv) - PAN_ONLY - supported only for tokenType GOOGLE_PAY, transaction will be processed without |
|
tokenPan |
String |
Required |
@NotNull |
Tokenized primary account number |
expirationDate |
String |
Required |
@NotNull |
Token expiration date |
paymentData |
Object |
Conditional - not required only for authMethod: PAN_ONLY |
PaymentData data |
|
paymentData.eciIndicator |
String |
Required |
@NotNull @Length must be between 1 and 2 inclusive, @Must match 01 or 02 or 05 or 06 |
Electronic Commerce Indicator value (NN) returned from token provider. |
paymentData.onlinePaymentCryptogram |
String |
Required |
@NotNull @Size must be between 0 and 28 inclusive, @Valid Base64 value |
TAVV cryptogram obtained during authentication in token app system. |
17.1.3. Sender Token Pan Only
"sender" : {
"type" : "TOKEN",
"firstName" : "Mark",
"lastName" : "Smith",
"street" : "Olszewskiego",
"houseNumber" : "17A",
"city" : "Lublin",
"postalCode" : "20-400",
"flatNumber" : "2",
"email" : "senderEmail@fenige.pl",
"tokenType" : "GOOGLE_PAY",
"authMethod" : "PAN_ONLY",
"tokenPan" : "5117964247989169",
"currency" : "PLN",
"country" : "PL",
"expirationDate" : "03/26"
}
Path | Type | Validation | Rule | Description |
---|---|---|---|---|
type |
String |
Required |
@NotNull |
For this configuration the value of this field must be "TOKEN", otherwise request will be declined |
firstName |
String |
Required |
@NotNull |
Sender first name |
lastName |
String |
Required |
@NotNull |
Sender last name |
street |
String |
Required |
@NotNull |
Sender street |
houseNumber |
String |
Required |
@NotNull |
Sender house number |
city |
String |
Required |
@NotNull |
Sender city |
postalCode |
String |
Required |
@NotNull |
Sender postal code |
flatNumber |
String |
Optional |
@Length(min = 1, max = 5) @Pattern(regexp = "^[a-zA-Z0-9 ]*$") |
Sender flat number |
String |
Required |
@NotNull |
Sender email |
|
personalId |
String |
Optional |
Sender identification number |
|
expirationDate |
String |
Required |
@NotNull |
Sender card expiration date. Example: 11/18 |
currency |
String |
Required |
@NotNull |
Currency for transaction (in accordance with ISO-4217). Example: PLN |
birthDate |
String |
Optional |
@Pattern("yyyy-MM-dd") |
Date of birth sender |
country |
String |
Required |
@NotNull @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 |
USA state or CAN province code. Field is required when card country is USA or CAN. |
tokenType |
String |
Required |
@NotNull |
Indicates the token type. Must be one of the following: GOOGLE_PAY, APPLE_PAY, OTHER |
authMethod |
String |
Conditional - required only for tokenType GOOGLE_PAY |
Authentication method of token payment transaction made with Google Pay token. Must be one of the following: - CRYPTOGRAM_3DS - standard token payment transaction flow with onlinePaymentCryptogram (tavv) - PAN_ONLY - supported only for tokenType GOOGLE_PAY, transaction will be processed without |
|
tokenPan |
String |
Required |
@NotNull |
Tokenized primary account number |
expirationDate |
String |
Required |
@NotNull |
Token expiration date |
17.1.4. Sender Encrypted Token Google Pay
"sender" : {
"type" : "ENCRYPTED_TOKEN",
"firstName" : "Mark",
"lastName" : "Smith",
"street" : "Olszewskiego",
"houseNumber" : "17A",
"city" : "Lublin",
"postalCode" : "20-400",
"flatNumber" : "2",
"email" : "senderEmail@fenige.pl",
"birthDate" : "2023-10-26",
"personalId" : "AGC688910",
"currency" : "PLN",
"country" : "PL",
"tokenType": "GOOGLE_PAY",
"token": {
"signature": "MEQCIF9nQIYF80Ooh3eQIomENLsNyD59eQOEmaanHhde3clkAiBfLgLvL+LZxg+4uORZ+l3/Fj3BQds2s9AEKDAlLgN5LA==",
"intermediateSigningKey": {
"signedKey": "{\"keyValue\":\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEOIBO91xZ1o+EyRzrYMh3arsVSByFJyTsKaxiRIYqNiYUwjM0nYaRG5eRe99uwHVRmwF9NHWd5ko/wM8MtSalVw\\u003d\\u003d\",\"keyExpiration\":\"1726828035723\"}",
"signatures": [
"MEYCIQCECDF8WtqPyp50IBsCat8KWv/7fTWHObezihFLK47LwgIhAJEf2SST42TNVokNA/HjAVgvi4BAbvNCCPI6IOBEmjwO"
]
},
"protocolVersion": "ECv2",
"signedMessage": "{\"encryptedMessage\":\"ynYNjwRPt1rzU7TxsthCpOqgk6CI2iLJxfnKjZDPCL6xYxvTyxPC15AQ3+9q7C1T5ogYRMrv9VKUryq9lYIrBuHnLBlxhXU+VXubQG7fEha4PajF+rYVng3o8sNoXak5MaVY+AkAwQLCp1kr9j7w8+O7lPnR3hEJHx1L1nABdJhgzxml97sBu6ayb6et7UgSkyI3aTvTcUO2m445N12qEe5P+ZbH3yRM30D5k7uzkxiNCgcM/urjBp3K8iuoEElytQ65YuKhSi87OaeyRVB+BXmmm2j50nV1MFQKyd34NnKOLCrdbNvRXD0hT4qz3iq9lhTZgWzcOreTpVE3EDZ21nMZKQnj3tt5JphXlE4tsJgbvhGC/ibgH9Momcew8nL0vsQbxvWwfh/l6In2zi0Ud7vUFH4fb6LaT2bAaOh1qFq3ippDgB5riXhLX+t+sQy+RdpBTpCA0cZxUjPkMPPH0NRnnWBbTAC/SKwsSQmjxSJcwc6lIdpj3+K6IM7/4MqInY8N2koKu6iHuLucjPN7fsJd26rUZuuo916QMveDMuA\\u003d\",\"ephemeralPublicKey\":\"BK2eVSFeDxI+kP7d3L6sFmdYupgKkVOVzzj9w0IFdgS6eEo0xwk50gzDExoshL1uqJi2qGEiCubuidoNiFEWCeo\\u003d\",\"tag\":\"/M30LDIIqFQRW8DY1Z7lL6jWSry3vF8WNC9kFVUgHYQ\\u003d\"}"
}
}
Path | Type | Validation | Rule | Description |
---|---|---|---|---|
type |
String |
Required |
@NotNull |
For this configuration the value of this field must be "ENCRYPTED_TOKEN", otherwise request will be declined |
firstName |
String |
Required |
@NotNull |
Sender first name |
lastName |
String |
Required |
@NotNull |
Sender last name |
street |
String |
Required |
@NotNull |
Sender street |
houseNumber |
String |
Required |
@NotNull |
Sender house number |
city |
String |
Required |
@NotNull |
Sender city |
postalCode |
String |
Required |
@NotNull |
Sender postal code |
flatNumber |
String |
Optional |
@Length(min = 1, max = 5) @Pattern(regexp = "^[a-zA-Z0-9 ]*$") |
Sender flat number |
String |
Required |
@NotNull |
Sender email |
|
personalId |
String |
Optional |
Sender identification number |
|
tokenType |
String |
Required |
@NotNull |
Indicates the token type. Must be one of the following: GOOGLE_PAY, APPLE_PAY |
token |
Object |
Required |
@NotNull |
Encrypted token data. |
token.signature |
String |
Required |
@Not null |
Token signature |
token.intermediateSigningKey |
Object |
Required |
@Not null |
Token intermediate signing key |
token.intermediateSigningKey.signedKey |
String |
Required |
@Not null |
Signed key |
token.intermediateSigningKey.signatures[] |
Array |
Required |
@Not null |
Token signatures |
token.protocolVersion |
String |
Required |
@Not null |
Protocol version |
token.signedMessage |
String |
Required |
@Not null |
Signed message |
currency |
String |
Required |
@NotNull |
Currency for transaction (in accordance with ISO-4217). Example: PLN |
birthDate |
String |
Optional |
@Pattern("yyyy-MM-dd") |
Date of birth sender |
country |
String |
Required |
@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 |
USA state or CAN province code. Field is required when card country is USA or CAN. |
17.1.5. Sender Encrypted Token Apple Pay
"sender" : {
"type" : "ENCRYPTED_TOKEN",
"firstName" : "Mark",
"lastName" : "Smith",
"street" : "Olszewskiego",
"houseNumber" : "17A",
"city" : "Lublin",
"postalCode" : "20-400",
"flatNumber" : "2",
"email" : "senderEmail@fenige.pl",
"birthDate" : "2023-10-26",
"personalId" : "AGC688910",
"currency" : "PLN",
"country" : "PL",
"tokenType": "APPLE_PAY",
"token": {
"paymentData": {
"version": "EC_v1",
"data": "KkiE8GswNdN7jLbbMsCheM+gWdd3vcSw/y4meFdAhRPrPAaTj1GBOGVRVVEfO7oTlsRgv9fl/4IwHGjPd7sLHkcxlRkW7amHcXEszbMwvDBE8656Xc0FxGxEvt6+xY17lPwb7/izmAkSXLdk0geqV0mrQXsYR+II+HI/OKkgXl5hIFS4+9/Tw1Yi1uSF/XRfTXVJF4TLaQF9Ydo+gltIHX82eBTLPZLaHWW9JY0UNUoXkIQQKnaRWb0nlEI+H8apL9NpKrWAknJSZFayDGBkUChAqpqOn5tcL+zdkdt5mmpY0qcK+h5vKluaPg5odq+QQUsn+ivFmnktorjzMsSL+NmMXxVNsFagtGVV4ssGEUEfz7wkIZFzfnlhhmQeHTsdHb+tgmOCayMHQrLUG/DEYGt9Y2s56mJrvr61IU7CYg==",
"signature": "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",
"header": {
"ephemeralPublicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEO+01GJPfNlHcI2UWUlWExM0aFrewDOuCZbVn1JZgkuM3qtWg9STbwzNDsFtt4xy1hNtOGJVfB65cudVcW3KpmA==",
"publicKeyHash": "vw4LZqhFE7M9d3oqoOAP4O7X8TpEYiEALkRuP/GjBVE=",
"transactionId": "fbdf0dbd5cfacfdc8ef214340ff69b7f52af24b200bd7873cf9bd8dbe84ab601"
}
},
"paymentMethodApple": {
"displayName": "Visa 1141",
"network": "Visa",
"type": "debit"
},
"transactionIdentifier": "fbdf0dbd5cfacfdc8ef214340ff69b7f52af24b200bd7873cf9bd8dbe84ab601"
}
}
Path | Type | Validation | Rule | Description |
---|---|---|---|---|
type |
String |
Required |
@NotNull |
For this configuration the value of this field must be "ENCRYPTED_TOKEN", otherwise request will be declined |
firstName |
String |
Required |
@NotNull |
Sender first name |
lastName |
String |
Required |
@NotNull |
Sender last name |
street |
String |
Required |
@NotNull |
Sender street |
houseNumber |
String |
Required |
@NotNull |
Sender house number |
city |
String |
Required |
@NotNull |
Sender city |
postalCode |
String |
Required |
@NotNull |
Sender postal code |
flatNumber |
String |
Optional |
@Length(min = 1, max = 5) @Pattern(regexp = "^[a-zA-Z0-9 ]*$") |
Sender flat number |
String |
Required |
@NotNull |
Sender email |
|
personalId |
String |
Optional |
Sender identification number |
|
tokenType |
String |
Required |
@NotNull |
Indicates the token type. Must be one of the following: GOOGLE_PAY, APPLE_PAY |
token |
Object |
Required |
@NotNull |
Encrypted token data. |
token.paymentData.version |
String |
Required |
@Not null |
The version of the Apple Pay data format being used. |
token.paymentData.version |
String |
Required |
@Not null |
The version of the Apple Pay data format being used. |
token.paymentData.data |
String |
Required |
@Not null |
An encrypted string containing the payment information. |
token.paymentData.signature |
String |
Required |
@Not null |
A cryptographic signature used to verify the authenticity of the payment data. |
token.paymentData.header.ephemeralPublicKey |
String |
Required |
@Not empty |
The public key used to encrypt the payment data. This key is specific to the current session and is ephemeral (temporary). |
token.paymentData.header.publicKeyHash |
String |
Required |
@Not empty |
A hash of the public key used for encryption. |
token.paymentData.header.transactionId |
String |
Required |
@Not empty |
A unique identifier for the payment transaction. |
token.paymentMethod.displayName |
String |
Required |
@Not empty |
The name of the payment method as displayed to the user. |
token.paymentMethod.network |
String |
Required |
@Not empty |
The payment network associated with the card used (e.g., "visa"). |
token.paymentMethod.type |
String |
Required |
@Not empty |
The type of payment card (e.g., "credit"). |
token.transactionIdentifier |
String |
Required |
@Not empty |
A unique identifier for the payment transaction. |
currency |
String |
Required |
@NotNull |
Currency for transaction (in accordance with ISO-4217). Example: PLN |
birthDate |
String |
Optional |
@Pattern("yyyy-MM-dd") |
Date of birth sender |
country |
String |
Required |
@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 |
USA state or CAN province code. Field is required when card country is USA or CAN. |
17.1.6. Sender Cash
"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",
"phoneNumber": "48584834372",
"birthDate": "2024-10-10"
}
"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"
}
"sender" : {
"type" : "CASH",
"firstName" : "Mark",
"lastName" : "Smith",
"organizationName": "Fantastic Company S.A.",
"street" : "Olszewskiego",
"houseNumber" : "17A",
"city" : "Lublin",
"postalCode" : "20-400",
"flatNumber" : "2",
"email" : "senderEmail@fenige.pl",
"personalId" : "AGC688910",
"country" : "PL",
"phoneNumber": "48584834372",
"birthDate": "2024-10-10",
"governmentId": {
"type": "TIN",
"id": "12345678911",
"issueDate": "2021-09-23",
"expirationDate": "2029-09-23",
"issuingCountry": "BR"
}
}
Path | Type | Validation | Rule | Description |
---|---|---|---|---|
type |
String |
Required |
@NotNull |
For this configuration the value of this field must be "CASH", otherwise request will be declined |
firstName |
String |
Required |
@NotNull |
Sender first name |
lastName |
String |
Required |
@NotNull |
Sender last name |
organizationName |
String |
Required for Payouts on Account for B2P transactional type |
@Length(min = 1, max = 50) |
Name of the organization if it is a bussiness to person transfer. |
street |
String |
Required |
@NotNull |
Sender street |
houseNumber |
String |
Required |
@NotNull |
Sender house number |
city |
String |
Required |
@NotNull |
Sender city |
postalCode |
String |
Required |
@NotNull |
Sender postal code |
country |
String |
Required |
@NotNull |
Sender country code in accordance with ISO 3166-1 Alpha-2 |
province |
String |
Optional or Required for USA/CAN card |
@NotNull |
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 |
String |
Optional |
@Length(min = 1, max = 128) |
Sender email |
|
personalId |
String |
Optional, required only for Payouts on Account |
Sender identification number |
|
phoneNumber |
String |
Required only for Payouts on Account |
@NotNull |
Receiver phone number |
birthDate |
String |
Required for Payouts on Account in KR-KRW Corridor |
@Pattern("yyyy-MM-dd") |
Date of birth sender |
governmentId |
Object |
Required for Payouts on Account in HK-USD, KR-KRW Corridors |
Constraint and possible values depends on Corridor. Make /client/send-money/validate to be sure what value should you use |
A government ID is an official identification document issued by a government authority, such as a passport, driver’s license, or national ID, used to verify an individual’s identity. |
governmentId.type |
String |
Required for Payouts on Account in HK-USD, KR-KRW Corridors |
Possible values: |
A governmentId.type is an official identification document type issued by a government authority |
governmentId.id |
String |
Required for Payouts on Account in HK-USD, KR-KRW Corridors |
Possible values: |
A governmentId.type is an official identification document type issued by a government authority |
governmentId.issueDate |
String |
Required for Payouts on Account in HK-USD, KR-KRW Corridors |
@Pattern("yyyy-MM-dd") |
The date the governmentId was issued |
governmentId.expirationDate |
String |
Required for Payouts on Account in HK-USD, KR-KRW Corridors |
@Pattern("yyyy-MM-dd") |
The date the governmentId expires |
governmentId.issuingCountry |
String |
Required for Payouts on Account in HK-USD, KR-KRW Corridors |
@NotNull |
The country that issued the governmentId |
17.1.7. Sender Datacore
"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"
}
Path | Type | Validation | Rule | Description |
---|---|---|---|---|
type |
String |
Required |
@NotNull |
For this configuration the value of this field must be "DATACORE", otherwise request will be declined |
firstName |
String |
Required |
@NotNull |
Sender first name |
lastName |
String |
Required |
@NotNull |
Sender last name |
street |
String |
Required |
@NotNull |
Sender street |
houseNumber |
String |
Required |
@NotNull |
Sender house number |
city |
String |
Required |
@NotNull |
Sender city |
postalCode |
String |
Required |
@NotNull |
Sender postal code |
flatNumber |
String |
Optional |
@Length(min = 1, max = 5) |
Sender flat number |
cardId |
Long |
Required |
@NotNull |
Sender card id |
String |
Optional |
@Length(min = 1, max = 128) |
Sender email |
|
personalId |
String |
Optional |
Sender identification number |
|
currency |
String |
Required |
@Length(min = 3, max = 3) |
Currency for transaction. Example: PLN |
17.1.8. Sender Blik
"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/"
}
Path | Type | Validation | Rule | Description |
---|---|---|---|---|
type |
String |
Required |
@NotNull |
For this configuration the value of this field must be "BLIK", otherwise request will be declined |
firstName |
String |
Required |
@NotNull |
Sender first name |
lastName |
String |
Required |
@NotNull |
Sender last name |
street |
String |
Required |
@NotNull |
Sender street |
houseNumber |
String |
Required |
@NotNull |
Sender house number |
city |
String |
Required |
@NotNull |
Sender city |
postalCode |
String |
Required |
@NotNull |
Sender postal code |
flatNumber |
String |
Optional |
@Length(min = 1, max = 5) |
Sender flat number |
country |
String |
Required |
@NotNull |
Sender country code in accordance with ISO 3166-1 Alpha-2 |
String |
Optional |
@Length(min = 1, max = 128) |
Sender email |
|
personalId |
String |
Optional |
Sender identification number |
|
currency |
String |
Required |
@NotNull |
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 |
Required |
@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 |
Required |
@Length must be between 1 and 35 inclusive, @Must not be blank |
Second line of description. |
thirdDescriptionLine |
String |
Required |
@Length must be between 1 and 35 inclusive, @Must not be blank |
Third line of description. |
fourthDescriptionLine |
String |
Required |
@Length must be between 1 and 35 inclusive, @Must not be blank |
Fourth line of description. Should contain shop address. |
17.2. Receivers
17.2.1. Receiver Plain
"receiver" : {
"type" : "PLAIN",
"firstName" : "Rob",
"lastName" : "Jackson",
"cardNumber" : "5117964247989169",
"currency" : "PLN",
"birthDate": "1995-03-16",
"countryOfResidence" : "PL"
}
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 |
Receiver first name |
lastName |
String |
Required |
@NotNull |
Receiver last name |
cardNumber |
String |
Required |
@NotNull |
Receiver card number |
street |
String |
Optional |
@Length(min = 1, max = 55) |
Receiver street |
houseNumber |
String |
Optional |
@Length(min = 1, max = 10) |
Receiver house number |
city |
String |
Optional |
@Length(min = 1, max = 55) |
Receiver city |
postalCode |
String |
Optional |
@Length(min = 1, max = 10) |
Receiver postal code |
flatNumber |
String |
Optional |
@Length(min = 1, max = 5) |
Receiver flat number |
String |
Optional |
@Length(min = 1, max = 128) |
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 |
17.2.2. Receiver Token
"receiver" : {
"type" : "TOKEN",
"firstName" : "Rob",
"lastName" : "Jackson",
"tokenPan" : "5117964247989169",
"currency" : "PLN",
"birthDate": "1995-03-16",
"countryOfResidence" : "PL"
}
Path | Type | Validation | Rule | Description |
---|---|---|---|---|
type |
String |
Required |
@NotNull |
For this configuration the value of this field must be "TOKEN", otherwise request will be declined |
firstName |
String |
Required |
@NotNull |
Receiver first name |
lastName |
String |
Required |
@NotNull |
Receiver last name |
tokenPan |
String |
Required |
@NotNull |
Receiver token |
street |
String |
Optional |
@Length(min = 1, max = 55) |
Receiver street |
houseNumber |
String |
Optional |
@Length(min = 1, max = 10) |
Receiver house number |
city |
String |
Optional |
@Length(min = 1, max = 55) |
Receiver city |
postalCode |
String |
Optional |
@Length(min = 1, max = 10) |
Receiver postal code |
flatNumber |
String |
Optional |
@Length(min = 1, max = 5) |
Receiver flat number |
String |
Optional |
@Length(min = 1, max = 128) |
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 |
17.2.3. Receiver Encrypted Token Google Pay
"receiver" : {
"type" : "ENCRYPTED_TOKEN",
"firstName" : "Rob",
"lastName" : "Jackson",
"tokenType": "GOOGLE_PAY",
"token": {
"signature": "MEQCIF9nQIYF80Ooh3eQIomENLsNyD59eQOEmaanHhde3clkAiBfLgLvL+LZxg+4uORZ+l3/Fj3BQds2s9AEKDAlLgN5LA==",
"intermediateSigningKey": {
"signedKey": "{\"keyValue\":\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEOIBO91xZ1o+EyRzrYMh3arsVSByFJyTsKaxiRIYqNiYUwjM0nYaRG5eRe99uwHVRmwF9NHWd5ko/wM8MtSalVw\\u003d\\u003d\",\"keyExpiration\":\"1726828035723\"}",
"signatures": [
"MEYCIQCECDF8WtqPyp50IBsCat8KWv/7fTWHObezihFLK47LwgIhAJEf2SST42TNVokNA/HjAVgvi4BAbvNCCPI6IOBEmjwO"
]
},
"protocolVersion": "ECv2",
"signedMessage": "{\"encryptedMessage\":\"ynYNjwRPt1rzU7TxsthCpOqgk6CI2iLJxfnKjZDPCL6xYxvTyxPC15AQ3+9q7C1T5ogYRMrv9VKUryq9lYIrBuHnLBlxhXU+VXubQG7fEha4PajF+rYVng3o8sNoXak5MaVY+AkAwQLCp1kr9j7w8+O7lPnR3hEJHx1L1nABdJhgzxml97sBu6ayb6et7UgSkyI3aTvTcUO2m445N12qEe5P+ZbH3yRM30D5k7uzkxiNCgcM/urjBp3K8iuoEElytQ65YuKhSi87OaeyRVB+BXmmm2j50nV1MFQKyd34NnKOLCrdbNvRXD0hT4qz3iq9lhTZgWzcOreTpVE3EDZ21nMZKQnj3tt5JphXlE4tsJgbvhGC/ibgH9Momcew8nL0vsQbxvWwfh/l6In2zi0Ud7vUFH4fb6LaT2bAaOh1qFq3ippDgB5riXhLX+t+sQy+RdpBTpCA0cZxUjPkMPPH0NRnnWBbTAC/SKwsSQmjxSJcwc6lIdpj3+K6IM7/4MqInY8N2koKu6iHuLucjPN7fsJd26rUZuuo916QMveDMuA\\u003d\",\"ephemeralPublicKey\":\"BK2eVSFeDxI+kP7d3L6sFmdYupgKkVOVzzj9w0IFdgS6eEo0xwk50gzDExoshL1uqJi2qGEiCubuidoNiFEWCeo\\u003d\",\"tag\":\"/M30LDIIqFQRW8DY1Z7lL6jWSry3vF8WNC9kFVUgHYQ\\u003d\"}"
}
"currency" : "PLN",
"birthDate": "1995-03-16",
"countryOfResidence" : "PL"
}
Path | Type | Validation | Rule | Description |
---|---|---|---|---|
type |
String |
Required |
@NotNull |
For this configuration the value of this field must be "ENCRYPTED_TOKEN", otherwise request will be declined |
firstName |
String |
Required |
@NotNull |
Receiver first name |
lastName |
String |
Required |
@NotNull |
Receiver last name |
tokenType |
String |
Required |
@NotNull |
Indicates the token type. Must be one of the following: GOOGLE_PAY, APPLE_PAY |
token |
Object |
Required |
@NotNull |
Encrypted token data. |
token.signature |
String |
Required |
@Not null |
Token signature |
token.intermediateSigningKey |
Object |
Required |
@Not null |
Token intermediate signing key |
token.intermediateSigningKey.signedKey |
String |
Required |
@Not null |
Signed key |
token.intermediateSigningKey.signatures[] |
Array |
Required |
@Not null |
Token signatures |
token.protocolVersion |
String |
Required |
@Not null |
Protocol version |
token.signedMessage |
String |
Required |
@Not null |
Signed message |
street |
String |
Optional |
@Length(min = 1, max = 55) |
Receiver street |
houseNumber |
String |
Optional |
@Length(min = 1, max = 10) |
Receiver house number |
city |
String |
Optional |
@Length(min = 1, max = 55) |
Receiver city |
postalCode |
String |
Optional |
@Length(min = 1, max = 10) |
Receiver postal code |
flatNumber |
String |
Optional |
@Length(min = 1, max = 5) |
Receiver flat number |
String |
Optional |
@Length(min = 1, max = 128) |
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 |
17.2.4. Receiver Encrypted Token Apple Pay
"receiver" : {
"type" : "ENCRYPTED_TOKEN",
"firstName" : "Rob",
"lastName" : "Jackson",
"tokenType": "APPLE_PAY",
"token": {
"paymentData": {
"version": "EC_v1",
"data": "KkiE8GswNdN7jLbbMsCheM+gWdd3vcSw/y4meFdAhRPrPAaTj1GBOGVRVVEfO7oTlsRgv9fl/4IwHGjPd7sLHkcxlRkW7amHcXEszbMwvDBE8656Xc0FxGxEvt6+xY17lPwb7/izmAkSXLdk0geqV0mrQXsYR+II+HI/OKkgXl5hIFS4+9/Tw1Yi1uSF/XRfTXVJF4TLaQF9Ydo+gltIHX82eBTLPZLaHWW9JY0UNUoXkIQQKnaRWb0nlEI+H8apL9NpKrWAknJSZFayDGBkUChAqpqOn5tcL+zdkdt5mmpY0qcK+h5vKluaPg5odq+QQUsn+ivFmnktorjzMsSL+NmMXxVNsFagtGVV4ssGEUEfz7wkIZFzfnlhhmQeHTsdHb+tgmOCayMHQrLUG/DEYGt9Y2s56mJrvr61IU7CYg==",
"signature": "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",
"header": {
"ephemeralPublicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEO+01GJPfNlHcI2UWUlWExM0aFrewDOuCZbVn1JZgkuM3qtWg9STbwzNDsFtt4xy1hNtOGJVfB65cudVcW3KpmA==",
"publicKeyHash": "vw4LZqhFE7M9d3oqoOAP4O7X8TpEYiEALkRuP/GjBVE=",
"transactionId": "fbdf0dbd5cfacfdc8ef214340ff69b7f52af24b200bd7873cf9bd8dbe84ab601"
}
},
"paymentMethodApple": {
"displayName": "Visa 1141",
"network": "Visa",
"type": "debit"
},
"transactionIdentifier": "fbdf0dbd5cfacfdc8ef214340ff69b7f52af24b200bd7873cf9bd8dbe84ab601"
},
"currency" : "PLN",
"birthDate": "1995-03-16",
"countryOfResidence" : "PL"
}
Path | Type | Validation | Rule | Description |
---|---|---|---|---|
type |
String |
Required |
@NotNull |
For this configuration the value of this field must be "ENCRYPTED_TOKEN", otherwise request will be declined |
firstName |
String |
Required |
@NotNull |
Receiver first name |
lastName |
String |
Required |
@NotNull |
Receiver last name |
tokenType |
String |
Required |
@NotNull |
Indicates the token type. Must be one of the following: GOOGLE_PAY, APPLE_PAY |
token |
Object |
Required |
@NotNull |
Encrypted token data. |
token.paymentData.version |
String |
Required |
@Not null |
The version of the Apple Pay data format being used. |
token.paymentData.version |
String |
Required |
@Not null |
The version of the Apple Pay data format being used. |
token.paymentData.data |
String |
Required |
@Not null |
An encrypted string containing the payment information. |
token.paymentData.signature |
String |
Required |
@Not null |
A cryptographic signature used to verify the authenticity of the payment data. |
token.paymentData.header.ephemeralPublicKey |
String |
Required |
@Not empty |
The public key used to encrypt the payment data. This key is specific to the current session and is ephemeral (temporary). |
token.paymentData.header.publicKeyHash |
String |
Required |
@Not empty |
A hash of the public key used for encryption. |
token.paymentData.header.transactionId |
String |
Required |
@Not empty |
A unique identifier for the payment transaction. |
token.paymentMethod.displayName |
String |
Required |
@Not empty |
The name of the payment method as displayed to the user. |
token.paymentMethod.network |
String |
Required |
@Not empty |
The payment network associated with the card used (e.g., "visa"). |
token.paymentMethod.type |
String |
Required |
@Not empty |
The type of payment card (e.g., "credit"). |
token.transactionIdentifier |
String |
Required |
@Not empty |
A unique identifier for the payment transaction. |
street |
String |
Optional |
@Length(min = 1, max = 55) |
Receiver street |
houseNumber |
String |
Optional |
@Length(min = 1, max = 10) |
Receiver house number |
city |
String |
Optional |
@Length(min = 1, max = 55) |
Receiver city |
postalCode |
String |
Optional |
@Length(min = 1, max = 10) |
Receiver postal code |
flatNumber |
String |
Optional |
@Length(min = 1, max = 5) |
Receiver flat number |
String |
Optional |
@Length(min = 1, max = 128) |
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 |
17.2.5. Receiver Datacore
"receiver" : {
"type" : "DATACORE",
"firstName" : "Rob",
"lastName" : "Jackson",
"cardId": 5435,
"email" : "senderdocs@fenige.pl",
"currency" : "PLN",
"countryOfResidence" : "PL"
}
Path | Type | Validation | Rule | Description |
---|---|---|---|---|
type |
String |
Required |
@NotNull |
For this configuration the value of this field must be "DATACORE", otherwise request will be declined |
firstName |
String |
Required |
@NotNull |
Receiver first name |
lastName |
String |
Required |
@NotNull |
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 |
String |
Optional |
@NotNull |
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 |
17.2.6. Receiver Phone
"receiver" : {
"type" : "PHONE",
"firstName" : "Rob",
"lastName" : "Jackson",
"phoneNumber": "48123777619",
"currency" : "PLN",
"birthDate": "1995-03-16",
"countryOfResidence" : "PL"
}
Path | Type | Validation | Rule | Description |
---|---|---|---|---|
type |
String |
Required |
@NotNull |
For this configuration the value of this field must be "PHONE" otherwise request will be declined |
firstName |
String |
Required |
@NotNull |
Receiver first name |
lastName |
String |
Required |
@NotNull |
Receiver last name |
phoneNumber |
String |
Required |
@NotNull |
Receiver phone number |
street |
String |
Optional |
@Length(min = 1, max = 55) |
Receiver street |
houseNumber |
String |
Optional |
@Length(min = 1, max = 10) |
Receiver house number |
city |
String |
Optional |
@Length(min = 1, max = 55) |
Receiver city |
postalCode |
String |
Optional |
@Length(min = 1, max = 10) |
Receiver postal code |
flatNumber |
String |
Optional |
@Length(min = 1, max = 5) |
Receiver flat number |
String |
Optional |
@Length(min = 1, max = 128) |
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 |
17.2.7. Receiver Cash
"receiver" : {
"type" : "CASH",
"firstName" : "Rob",
"lastName" : "Jackson",
"country": "PL"
}
Path | Type | Validation | Rule | Description |
---|---|---|---|---|
type |
String |
Required |
@NotNull |
For this configuration the value of this field must be "CASH", otherwise request will be declined |
firstName |
String |
Required |
@NotNull |
Receiver first name |
lastName |
String |
Required |
@NotNull |
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) |
Receiver street |
houseNumber |
String |
Optional |
@Length(min = 1, max = 10) |
Receiver house number |
city |
String |
Optional |
@Length(min = 1, max = 55) |
Receiver city |
postalCode |
String |
Optional |
@Length(min = 1, max = 10) |
Receiver postal code |
flatNumber |
String |
Optional |
@Length(min = 1, max = 5) |
Receiver flat number |
String |
Optional |
@Length(min = 1, max = 128) |
Receiver email |
17.2.8. Receiver Account
"receiver" : {
"type" : "ACCOUNT",
"accountType": "I",
"firstName" : "Rob",
"lastName" : "Wring",
"birthDate" : "2023-12-10",
"currency" : "EUR",
"countryOfResidence" : "PL",
"province": "NY",
"country" : "US",
"street": "Olszewskiego",
"houseNumber": "17A",
"city": "Lublin",
"postalCode": "20-400",
"flatNumber": "2",
"governmentId": {
"type": "TIN",
"id": "12345678911",
"issueDate": "2021-09-23",
"expirationDate": "2029-09-23",
"issuingCountry": "BR"
}
"bank": {
"bankCode": "800554",
"bankCodeType": "SORT_CODE",
"accountNumberType": "IBAN",
"accountName": "Money Market",
"countryCode": "BE",
"bankName": "Barclays",
"accountNumber": "BE71096123456769",
"currencyCode": "EUR",
"bic": "HBUGHK23",
"accountType": "C"
}
}
Path | Type | Validation | Rule | Description |
---|---|---|---|---|
type |
String |
Required |
@NotNull |
For this configuration the value of this field must be "ACCOUNT", otherwise request will be rejected |
accountType |
String |
Required |
@NotNull |
There are two possible values "I" (stands for Individual) or "C" (stands for Commercial). |
firstName |
String |
Required |
@NotNull |
Receiver first name |
lastName |
String |
Required |
@NotNull |
Receiver last name |
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) |
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) |
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) |
Receiver postal code |
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 |
province |
String |
Required when receiver’s address is located in USA/CAN |
@NotNull |
USA state or CAN province code. Field is required when card country is USA or CAN. |
country |
String |
Required for Payouts on Account |
@NotNull |
Sender country code in accordance with ISO 3166-1 Alpha-2 |
flatNumber |
String |
Optional |
@Length(min = 1, max = 5) |
Receiver flat number |
String |
Optional |
@Length(min = 1, max = 128) |
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 |
governmentId |
Object |
Required for Payouts on Account to Corridors: BR-BRL |
Constraint and possible values depends on Corridor. Make /client/send-money/validate to be sure what value should you use |
A government ID is an official identification document issued by a government authority, such as a passport, driver’s license, or national ID, used to verify an individual’s identity. This is the CPF number for BR-BRL and must be equally 11 digital characters long. |
governmentId.id |
String |
Required for Payouts on Account in BR-BRL Corridors |
Possible values: |
A governmentId.type is an official identification document type issued by a government authority |
governmentId.issueDate |
String |
Required for Payouts on Account in BR-BRL Corridors |
@Pattern("yyyy-MM-dd") |
The date the governmentId was issued |
governmentId.expirationDate |
String |
Required for Payouts on Account in BR-BRL Corridors |
@Pattern("yyyy-MM-dd") |
The date the governmentId expires |
governmentId.issuingCountry |
String |
Required for Payouts on Account in BR-BRL Corridors |
@NotNull |
The country that issued the governmentId |
bank.bankCode |
String |
Optional |
@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 |
Optional |
@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) |
Currency code of account in bank |
bank.bic |
String |
Required for Payouts on Account |
Constraint and possible values depends on Corridor. Make /client/send-money/validate to be sure what value should you use |
A BIC (Bank Identifier Code) in banking is an 8 or 11-character code used to identify specific banks during international transactions. |
bank.accountType |
String |
Required for Payouts on Account to Corridors: BR-BRL and JP-JPY |
Constraint and possible values depends on Corridor. Make /client/send-money/validate to be sure what value should you use |
Account Type refers to the classification of a bank account, where for BR-BRL Corridor "C" stands for Checking account and "P" stands for Savings account. For JP-JPY we can use values: "CAK" stands for Checking Account, OAK stands for Ordinary Account, SAK stands for Savings Account |
17.2.9. Receiver Delayed
"receiver" : {
"firstName" : "John",
"lastName" : "Doe",
"type" : "DELAYED",
"email" : "email@fenige.pl",
"currency" : "PLN"
}
Path | Type | Validation | Rule | Description |
---|---|---|---|---|
type |
String |
Required |
@NotNull |
For this configuration the value of this field must be "DELAYED", otherwise request will be declined |
firstName |
String |
Required |
@NotNull |
Receiver first name |
lastName |
String |
Required |
@NotNull |
Receiver last name |
String |
Required when phone is not present |
@Length(min = 1, max = 128) |
Receiver email |
|
phoneNumber |
String |
Required when email is not present |
@NotNull |
Receiver phone number |
currency |
String |
Required |
@Length(min = 3, max = 3) |
Currency for transaction. Example: PLN |
"receiver" : {
"type" : "DELAYED",
"firstName" : "Rob",
"lastName" : "Wring",
"email" : "rob.wring@fenige.pl",
"phoneNumber" : "600300200",
"cardNumber" : "5117964247989169",
"currency" : "PLN",
"rememberReceiver" : true,
"birthDate": "1995-03-16"
}
Path | Type | Validation | Rule | Description |
---|---|---|---|---|
type |
String |
Required |
@NotNull |
For this configuration the value of this field must be "DELAYED", otherwise request will be declined |
firstName |
String |
Required |
@NotNull |
Receiver first name |
lastName |
String |
Required |
@NotNull |
Receiver last name |
cardNumber |
String |
Required |
@NotNull @LuhnCheck |
Receiver card number |
String |
Required when phone is not present |
@Length(min = 1, max = 128) |
Receiver email |
|
phoneNumber |
String |
Required when email is not present |
@NotNull |
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 |
18. FAQ
Here you can find most frequency asked questions about Fenige Moneysend API