Release 10.09.2024
Changelog
Payouts
Enhancements
- Time-To-Live (TTL): For all payouts, a TTL of 1 week has been introduced, starting from the moment the payout is created. For more details, please refer to the Create Payout Request Documentation.
paymentSettingsAlias in the order creation endpoint to control which payment configuration is used for processing the order. This feature is particularly useful for merchants who need to manage multiple configurations with the same provider.
To learn more about configuring and using aliases, please refer to the Alias Documentation.paymentSettingsAlias in the payout creation endpoint. This allows for precise control over which payment configuration is used for payouts.
To learn more about configuring and using aliases, please refer to the Alias Documentation.Fix: Resolved an issue where payouts could not be created if the DataEntryMode was not specified during payout creation, when only one DataEntryMode was available for the payment method. Now, the DataEntryMode is only required when there are multiple DataEntryMode available in the Retrieve Payout Methods endpoint response. If only one DataEntryMode is provided, it will be automatically applied, and no manual input is necessary.
Update: The response structure of the Retrieve Payout Status endpoint has been expanded. This includes additional fields that provide more detailed information about the payout process. Backward compatibility with the previous response format has been maintained, ensuring existing integrations continue to function without disruption.
Update: New values have been added to the transferType. The transferType can now include the following values:
virtual_accountkhipugiropayepsopen_financeorder -> cost -> amount) or the provider might adjust the amount. In these cases, both the amount in the Retrieve Order Details endpoint and the callback for payment status will now reflect the actual amount paid or modified by the provider in data -> cost -> amount, rather than the initial amount specified by the merchant.rrn parameter (payments -> paymentDetails -> rrn) was incorrectly returned as rnn. The parameter is now correctly returned as rrn.paymentStatus object to the payments array in the Retrieve Order Details endpoint response and the order status callback. This object contains the payment status and additional error details in the details object if the payment status is failed.Fix: Resolved an issue in the POST Retrieve Required Payout Fields endpoint where the value and label parameters in the options array were swapped. The values now correctly match the documentation:
Before:
"options": [
{
"value": "Checking account",
"label": "C"
}
]
Now:
"options": [
{
"value": "C",
"label": "Checking account"
}
]
Here is the structure of the Retrieve Payout Status response and the Payout Callback structure that will be introduced in the August 27 release:
{
"data": {
"shopId": 123,
"id": 54222,
"payoutStatus": "in_progress",
"payoutNumber": "56573FDFVFDBWF",
"purpose": "string",
"cost": {
"amount": "56.99",
"currency": "USD",
"region": "RU"
},
"payoutCreatedAt": "2023-08-29T15:34:56+03:00",
"payoutPaidAt": "2023-08-29T15:34:56+03:00",
"payoutTransactions": [
{
"transactionId": "79",
"providerTransactionId": "990943",
"cost": {
"amount": "56.99",
"currency": "USD"
},
"provider": {
"code": "fyst"
},
"acquirer": {
"code": "fyst"
},
"instrumentType": "card"
}
],
"customer": {
"customerId": "56656",
"firstName": "John",
"lastName": "Doe",
"middleName": "James",
"phone": "79221110500",
"email": "john.doe@mymail.com"
},
"payoutDetails": {
"recipient": {
"paymentSystem": "visa", // returned only if instrumentType = card
"maskedCardNumber": "123456******7890", // returned only if instrumentType = card
"walletId": "34534534333", // returned only if instrumentType = wallet
"accountNumber": "34543243243534333", // returned only if instrumentType = bank_transfer
"transferType": "sbp" // returned only if instrumentType = bank_transfer
},
"sender": {
"paymentSystem": "visa", // returned only if instrumentType = card
"maskedCardNumber": "123456******7890", // returned only if instrumentType = card
"walletId": "34534534333", // returned only if instrumentType = wallet
"accountNumber": "34543243243534333" // returned only if instrumentType = bank_transfer
}
}
}
}
Feature: The webhook for order status and the order status endpoint now return the paymentDetails object within the payments array in the following format:
instrumentType=card):
{
"CardPaymentDetails": {
"paymentSystem": "visa",
"authCode": "auth94753457343",
"rrn": "rrn583743856734",
"maskedCardNumber": "123456******1234"
}
}
instrumentType=bank_transfer):
{
"BankTransferPaymentDetails": {
"transferType": "swift",
"purpose": "Payment for invoice #12345",
"accountNumber": "5103984571309587"
}
}
instrumentType=wallet):
{
"WalletPaymentDetails": {
"walletId": "aslk1351346"
}
}
Enhancement: When creating an order, if the redirectUrls object in paymentSettings does not include values for success and failUrl, the default values will now be the shop URL that created the order.
Fix: Resolved an issue where, in some cases, the payment page was incorrectly generated when creating an order with "dataEntryMode": "redirect". This caused the user to be unable to redirect to the provider's page because the Pay button was not clickable.
Fix: Resolved a bug where the Retrieve Order Details could accept payoutNumber as orderNumber. This endpoint now only accepts orderNumber. If payoutNumber is provided as orderNumber, an error will be returned:
{
"message": "Not found order number some_number in shop with id: some_shop_id",
"code": 404
}
recipient property. The response now adheres to the documentation.Feature: There will be an option for manual resending of the order/payout status callback. In the merchant account dashboard, within the order/payout details window, a button Send order status by API will be added. Clicking this button will resend the order or payout status callback. The callback will be sent to the addresses specified in the callback settings, and if webhookUrl was specified during the order/payout creation, both callbacks (settings and webhookUrl) will be sent.
As we mentioned in the previous release note, the new payout endpoint Retrieve Required Payout Fields is currently available but is returning placeholder responses instead of actual data. We are working on finalizing this feature, and it will be fully functional and provide accurate data in the next release.
TransferType value virtual_account. See TransferType doc.transferType has been added to the paymentSettings object in the Create Order endpoint. This allows specifying the type of bank transfer when instrumentType is bank_transfer.region has been added to the payout object in the Create Payout Request endpoint. Specifying the region is mandatory for payouts through certain providers.sender, with a structure similar to recipient, has been added to the Create Payout Request endpoint. This is required by some providers to include sender information for the payout.transferType has been added to the bankTransferData objects within both recipient and sender in the Create Payout Request endpoint. This allows specifying the type of bank transfer when instrumentType is bank_transfer.The structure of the response for the future POST endpoint Retrieve Required Payout Fields has been radically updated, which will eventually replace the current GET Retrieve Required Payout Fields endpoint.
In the Retrieve Payment Methods Endpoint, a new mandatory parameter dataEntryMode has been added to the response. This parameter specifies the methods for customer data entry to process payments.
The dataEntryMode value obtained from the response of the Retrieve Payment Methods Endpoint is now used in the paymentSettings object of the Create Order Endpoint.
In the Payout Creation Endpoint, a new optional parameter webhookUrl has been added. This parameter allows you to specify a webhook URL for receiving notifications about payout status changes for this specific payout.
A new parameter providerPaymentId has been added to the response of the Retrieve Order Details and order Callback. This parameter is the identifier for the specific payment assigned by the payment provider.
A new optional parameter dataEntryMode has been added to the paymentSettings object of the Create Order endpoint. This parameter specifies the methods for customer data entry to process payments:
redirect: The customer enters payment information on the provider's (acquirer's) page via redirect.h2h (host2host): The customer enters payment information on our payment page.qr: The customer scans a QR code and enters information on the aggregator's side.The default order time limit has been increased from 15 minutes to 24 hours (+1 day from the time of order creation). Change the timeLimit only if you understand the implications.
As promised in the previous release, we have synchronized the responses of the order status endpoint and webhook, making their responses identical.
In the order creation endpoint, a new optional parameter webhookUrl has been added to the paymentSettings object. This parameter allows specifying an individual webhook for order status changes for each order. webhookUrl is of type string and is validated as a URL, so it must begin with https://.
If webhookUrl is specified when creating an order, notifications about the order status change will be sent to this URL and will not be sent to the general webhook URL set for the shop.
The new parameter is highlighted in the code below:
{
"shopId": 1234,
"order": {
"orderNumber": "56573FDFVFDBWF",
"cost": {
"amount": "56.99",
"currency": "PHP"
}
},
"customer": {
"customerId": "56656",
"firstName": "John",
"lastName": "Doe",
"middleName": "James",
"phone": "79221110500",
"email": "john.doe@mymail.com"
},
"paymentSettings": {
"instrumentType": "wallet",
"providerCode": "connectpay",
"acquirerCode": "gcash",
"entryMode": null,
"autoCapture": true,
"timeLimit": "2024-02-03T10:51:49.086Z",
"redirectUrls": {
"success": "https://example.com/success",
"failure": "https://example.com/failure"
},
"webhookUrl": "https://example.com/webhook"
},
"paymentPageDesign": {
"alias": "default",
"format": "redirect"
}
}
The logic for the customerId parameter in the order creation endpoint has been modified. The customerId can now be unique either within a shop or across the entire company/merchant. The existing logic remains unchanged for current merchants, meaning customerId uniqueness remains within the shop by default. This update simply adds the option to change this setting via the technical support. To determine the setting for your shop, check the admin panel of your merchant account under the settings menu in the field 'External customer ID unique for'.
In future versions, the endpoint /payouts/fields/{providerCode}/{instrumentType}/ Retrieve Required Payout Fields will be declared deprecated. It will be replaced by a new endpoint, /api/v1/payouts/fields Retrieve Required Payout Fields, which is currently under development. The response structures of these endpoints will be identical, but the new endpoint will support a significantly larger number of parameters in the request, allowing it to support a wider range of providers.
The /payouts/fields/{providerCode}/{instrumentType}/ Retrieve Required Payout Fields endpoint will gradually be discontinued. We will make a separate announcement to inform you when it is officially deprecated.
A new optional parameter, transferType, will be added to the Payout Creation Request. The new transferType parameter will be mandatory when creating a payout with instrumentType == bank_transfer.
The new parameter that will be added is highlighted in this request example:
{
"shopId": 2,
"payout": {
"cost": {
"amount": "100.50",
"currency": "PHP"
},
"payoutNumber": "43242332"
},
"purpose": "string",
"providerCode": "connectpay",
"acquirerCode": "gcash",
"instrumentType": "bank_transfer",
"transferType": "bank_wire",
"customer": {
"customerId": "56656",
"firstName": "John",
"lastName": "Doe",
"middleName": "James",
"phone": "79221110500",
"email": "john.doe@mymail.com"
}
}
The changes mentioned in the previous changelog (14.05.2024) regarding the webhook with breaking changes will not be made in this release but will be implemented in the next release on 11.06.2024. For now, the webhook remains unchanged.
The webhook for orders will change in the next release (11.06.2024) without backward compatibility.
Lines highlighted will be removed from the webhook in the next release.
{
"id": 77,
"number": "7_1706275173",
"status": "in_progress",
"cost": {
"amount": "56.99",
"currency": "USD"
},
"timeLimit": {
"date": "2024-01-27 07:45:51.000000",
"timezone_type": 3,
"timezone": "UTC"
},
"orderCreatedAt": {
"date": "2024-01-26 13:19:33.222170",
"timezone_type": 3,
"timezone": "UTC"
},
"orderPaidAt": {
"date": "2024-01-26 13:19:33.222170",
"timezone_type": 3,
"timezone": "UTC"
},
"captureNeeded": false,
"payments": [
{
"id": "79",
"type": "payment",
"parentPaymentId": "83",
"cost": {
"amount": "56.99",
"currency": "USD"
},
"acquirerCode": "fyst",
"paymentMethod": "card",
"paymentDetails": {
"type": "card",
"authCode": "auth94753457343",
"rrn": "rrn583743856734",
"maskedCardNumber": "123456******1234"
}
}
],
"customer": {
"id": 13,
"name": "John",
"middleName": "James",
"surname": "Doe",
"phone": "79221110500",
"email": "john.doe@mymail.com"
},
"data": {
"shopId": 123,
"orderNumber": "56573FDFVFDBWF",
"orderStatus": "in_progress",
"cost": {
"amount": "56.99",
"currency": "USD"
},
"timeLimit": "2023-08-29T15:34:56+03:00",
"orderCreatedAt": "2023-08-29T15:34:56+03:00",
"orderPaidAt": "2023-08-29T15:34:56+03:00",
"autoCapture": true,
"payments": [
{
"paymentId": "79",
"paymentType": "payment",
"parentPayment": "83",
"cost": {
"amount": "56.99",
"currency": "USD"
},
"acquirer": {
"code": "fyst"
},
"instrumentType": "card",
"paymentDetails": {
"authCode": "auth94753457343",
"maskedCardNumber": "123456******1234",
"rrn": "rrn583743856734"
}
}
],
"customer": {
"customerId": "56656",
"firstName": "John",
"lastName": "Doe",
"middleName": "James",
"phone": "79221110500",
"email": "john.doe@mymail.com"
}
}
}