Release Notes

Released: 04.02.2020

Added

  • A new endpoint Update Customer has been added to enable merchants to change the consumer distribution method.

Changed

  • Social security number normalization improved for Finland.
  • Now Checkout API will not return checkoutId if One-Step Authorize is rejected by risk check.
  • Authorize returns deliveryCustomer object if it is present in the request.
  • GetOrder response was changed to always contain billing customer information.

Released: 14.01.2020

Fixed

  • VAT Percent capped at 100%.

Changed

  • Improved risk steering for DACH region.
  • Social security number normalization improved for Denmark.

Released: 10.12.2019

Fixed

  • Unified the order amount validation for Capture - now it is permitted to have 1 cent difference per orderline.

Changed

  • Validation for the Authorize call added - in Two-Step Checkout case, when the order amount is larger than provided in the Available call, it will be rejected with a business error 400.184
  • Netherlands risk provider response code mapping was enhanced.
  • Authorize and Available calls validation loosened to allow firstName, lastName and companyName to be longer than 50 characters. Extension will be truncated.
  • Added support to use the same orderItem object for both Refund and Capture calls in order to provide easier means for integration.
  • Improved support for B2B customer lookup.
  • Health-check improvements for online-critical components.
  • Added descriptions for B2B customer lookup in Developers Portal.

Released: 14.11.2019

Added

  • Payment method Campaign with type 'FloatingDueDate' now available. 'FloatingDueDate' campaign also includes paymentTerm as number of days. For example, if paymentTerm is 30 then payment is due within 30 days from dispatch.
  • Authorize and Available now have a limit for the OrderItem object. Up to 200 items per call is possible, otherwise an error 400.008 "Array size exceeds maximum allowed." will be returned.

Changed

  • Message publisher performance improved.
  • identificationNumber validation improved.

Released: 23.10.2019

Added

  • Hosted Fields: Fields are now styled based on configuration of merchant.
  • Hosted Fields: Placeholder configuration added in the format field-languageCode-country.
  • Hosted Fields: Default validation for input based on field and profile has been added.
  • Hosted Fields: Now fetching the Bank Name and BIC when IBAN is provided. BIC, Bank Name and masked IBAN are provided back to the merchant in the onChange event.
  • Hosted Fields: Support for loading Google Fonts is added. Fonts can be specified by adding the font family names into config input "googleFonts".

Changed

  • Hosted Fields: Front-end optimization and better accessibility - title and keyboard support.
  • Hosted Fields: Base address is now controlled by Afterpay. Former configuration is ignored to keep control over changes in hosting infrastructure.
  • Hosted Fields: Formatting improvements for social security number.

Released: 10.10.2019

Added

  • Extended API monitoring with new risk provider health-checks.

Fixed

  • Idempotency key handling was improved.

Changed

  • Search Order endpoint now responds with an empty result set in case an order was not found instead of a business error "Customer Not Found".
  • Improved IBAN validator logic for ValidateBankAccount endpoint.

Released: 17.09.2019

Fixed

  • Refined customer lookup response filtering.

Released: 04.09.2019

Added

  • Remaining authorized amount was added to the Void response.
  • Extended Authorize response to include risk provider information based on client setting.
  • Extended customer facing messages in French.
  • DACH region risk provider request was extended with ExternalClientID.
  • Added DirectDebit tokenization support in Authorize call.
  • Added Hosted Fields support in ValidateBankAccount call.
  • Monitoring parameters were extended to provide risk steering data.
  • New translations for customer facing messages were added.

Fixed

  • Fixed an issue where duplicate reservations with the same checkoutID were generated.
  • CustomerCardClassification is now forwarded to the DACH risk provider.

Released: 15.08.2019

Added

  • GetOrderResponse now includes the Payment object.
  • PaymentMethod object in AvailablePaymentMethods response now contains the consumerFeeAmount field. This is relevant to display dynamic consumer invoice fee.
  • It is now possible to split the Tolerance Amount in case of the partial capture calls.
    The Tolerance Amount is a merchant-specific Core setting that allows a merchant to Capture an amount higher than Authorized. (Contact your Key Account Manager to learn more.)
    With this release, the total Tolerance Amount for an order can be used up in parts between multiple Partial Captures.

Fixed

  • googleAnalyticsClientId and googleAnalyticsUserId during Capture call added to the invoice.
  • The ApplyForCredit call now returns correct ResponseMessage if customerNumber exceeds maximum length.
  • Now it is not allowed to send Authorize request with already used checkoutId.
  • Fixed an issue with Refund creation date.

Changed

  • Improved risk steering for DACH region.

Released: 10.07.2019

Added

  • Billing customer validation has been changed based on new client setting.
  • New process now available for retrieving customer identifiable information from Hosted Fields.
  • AutoCapture functionality added based on new client setting.
  • Customer lookup is now working in Sandbox Environment.

Fixed

  • Fixed a bug where Capture request parameters were discarded when orderDetails or orderDetails.TotalGrossAmount are missing.

Changed

  • Improved mobilePhone and phone validation.

Released: 17.06.2019

Fixed

  • Negative authorization handling now works correctly.

Released: 05.06.2019

Fixed

  • Successful address validations from our DACH risk engines were erroneously processed as False.

Released: 29.05.2019

Added

  • The following responses now contain ExpiryDate:
    • AuthorizePaymentResponse
    • GetOrderResponse
    • UpdateOrderResponse

    This is the expiry date of the order's Reservation in the AfterPay backend. Captures after this date will be rejected.

Changed

  • The response to GetCapture no longer includes AfterPay's internal Invoice ID. (This is a value that is not relevant to the merchant).
  • For NL merchants, Low VAT Category has been changed from 6% to 9% (as per new local legislation).
  • Removed the error message 400.130, as Zero-Amount Void calls are now allowed.

Released: 13.05.2019

Added

  • Implemented a new version of the risk provider API for the DACH market.
  • New customer-facing messages for validating IBAN numbers from other countries.

Fixed

  • Fixed an error in handling Zero-Amount Authorize calls (see Release Notes for 3.40) where an Order Item had a negative Gross Unit Price. Now, negative Gross Unit Prices cannot affect the order's Reservation.
  • eCom API now returns the proper error message when a B2B transaction is attempted in Germany. AfterPay's German risk provider does not support companies as customers.
  • Validation for the Customer Number field has been improved.
  • eCom API now returns the correct error message if an Authorize request is sent with a missing opening curly bracket.
  • Improved the masking of Customer Lookup data.
  • Improved the translations of customer-facing messages.
  • Significantly improved internal Message Queue operations.

Changed

  • eCom API now tracks the expiration date of a Reservation independently. Before, a Reservation could expire without visibility to eCom. In this case, eCom would accept a Capture for an order whose Reservation had already expired.
    Now, eCom will reliably reject a Capture for an expired order.
  • Improved validation for DateTime fields in the eCom API.
  • eCom now strongly enforces the requirement to always provide the following:
    • For the order total - Gross amount and Net amount.
    • For each order item - Gross unit price, Net unit price, VAT amount, VAT percent.


Released: 16.04.2019

Fixed

  • eCom now provides specific and localized responses to Authorize calls if the customer has failed a credit check. For example:
    • If the merchant sends an Authorize call with a customer's details, and AfterPay's risk provider returns a low score for that customer (meaning that AfterPay cannot offer them Part Payment options), eCom will return a Business Error 200.105 with an appropriate Action Code, and a Customer Facing Message in the merchant's configured language, saying that Part Payments are not available, and the customer should select a different payment method.
  • Payment method Direct debit now supports bankAccount with hyphens.

Released: 04.04.2019

Added

  • Authorize and Available calls now support two new (optional) fields: ourReference and yourReference.
  • Tags for field references are now supported within information displayed to customers (such as Titles and Taglines for payment methods, when returned for an Available call). For example:
    • Split over *|installment.numberOfInstallments|* months will display as "Split over 5 months" if that payment method's Installment Profile is configured for 5 months.
    • The text (including tags) is configured on the AfterPay end, and cannot be changed by the merchant. Contact your Key Account Manager if you want to use this.

Changed

  • The AfterPay API documentation has been clarified for some fields that were marked as Optional, but are actually Required when used with Partial requests.

Released: 19.03.2019

Added

  • eCom API now supports Authorize, Capture, Void and Refund calls where the Total Gross Amount is 0.
    • Up to 100 calls of each type can be made for a particular Order. Otherwise error code 400.177 "Too many calls with 0 amount for same order" will be thrown.
    • This is needed to support Voucher purchases, Consolidated Invoices and subscription services, where a single Order can remain open for a long time, and involve multiple transactions. Some transactions will have no cost, but the merchant wants them on the record.

Changed

  • Error messages for eCom API errors 400.001 and 400.177 no longer mention the request field that contained incorrect data. These errors are returned in cases when a reference to a field is not relevant.

Released: 07.03.2019

Fixed

  • Fixed incorrect negative amount handling in Refund calls.
  • In case of incorrect mobile prefix, the system was throwing an ArgumentOutOfRangeException. The exception was removed

Changed

  • Fixed a typo in the Developer Portal's API documentation. Order.Item types previously contained both ShippingFee and ShippingFees. The second one is redundant/incorrect, and has been removed.
  • Previously, a Full Refund worked only if the body of the request was empty.
    Now, it also works if the body contains orderItems=null (and additional parameters, such as an invoiceNumber).
    This was done to support the requirements of certain risk providers.

Released: 19.02.2019

Added

  • Refund order response now contains the totalRefundedAmount field.
  • Mobile phone numbers are now normalized by eCom.

Fixed

  • Previously, LanguageCode was a string. Now changed to enum.
  • If an Authorize call uses a Direct Debit payment method, the bankCode is now optional and the bankAccount is mandatory, in all countries.

Released: 23.01.2019

Added

  • Authorize and Available now have Customer.companyName.
    This is relevant if customerCategory=Company.
  • customerLookupRequest now has the parameter customerCategory. The default value is "person".
  • Customer Lookup now returns the postalCode of company addresses.

Fixed

  • Previously, if deliveryCustomer contained an invalid value for phone or mobilePhone, eCom would return 500 "System error". Now it returns the error 400.004 "Value format is incorrect."
  • Fixed a typo in 400.120 "Cannot capture the order as a capture with the specified invoice number already exists."

Changed

  • In Authorize and Available calls, if conversationLanguage is not provided, the customer-facing message will be returned based on the merchant's Language Code (Core setting).
  • The API now accepts only the 'YYYY-MM-DD' date format.
  • The API now normalizes 'bankAccounts' and 'bankCode' inputs.
  • Misleading error message 400.001 "Request body missing" has been changed to 400.001 "The body of the request is missing, or its format is invalid."

Released: 18.12.2018

Added

  • AvailablePaymentMethodsResponse now includes dueDate.
    When the merchant makes an Available call, and the available payment methods include the Campaign Invoice, the response also includes the Due Date (date on which the payment must be made) for each campaign. This is in paymentMethods.campaign.dueDate.
  • eCom now supports the risk provider Mercury. This is relevant for merchants in Belgium.
    No changes to API calls.
  • Support for masked customer details in Customer Lookup response.
    In certain countries where the data protection law requires it, the User Profile returned for a Customer Lookup call will include maskedEmail, maskedFirstName, maskedLastName and maskedMobileNumber instead of unmasked parameters. The values will be partially replaced with asterisks.

Fixed

  • Previously, sending a request with an invalid URL resulted in a 500 "ArgumentException" error. Now, the merchant will get a 404 "Not Found" error.
  • Previously, sending a string value instead of an integer in a request would return 400.000 "Unknown error." Now, this returns the error 400.004 "Value format is incorrect".
  • Previously, when the postal code length was more than 10 characters, eCom would return 500 "System error" . Now, this returns the error 400.005 "A string value exceeds the maximum length of 10."
  • Previously, merchants from Belgium got the error 200 "Rejected" if the risk provider Mercury failed with an internal error. Now, this results in the error 500 "Internal error".

Changed

  • Previously, Authorize or Refund calls with an invalid campaignNumber passed without an error (and were treated as regular 14-Day Invoices). Now, "400.174", "Campaign profile not found." will be thrown when the campaign does not exist, and "400.175", "Campaign is not active." will be thrown when the campaign is currently not active.
    Note: campaignNumber is an optional parameter and used only with Campaign Invoices. Errors 400.174 and 400.175 are only thrown if a campaignNumber is provided but invalid. If the parameter is not provided at all, the API call is treated as a regular 14-Day Invoice.
  • Direct Debit is disabled for merchants in Sweden.
    The response to an Available call from a Swedish merchant will never include directDebit.true, regardless of Core settings.
  • Fixed a bug with customerNumber in an API response.
    Previously, in certain cases where the merchant provided a customerNumber in the call, eCom would replace it with a different auto-generated customerNumber in the response. This is now fixed: if the merchant specified a customerNumber, the same value will be used in the response as well.
  • Previously, a Full Capture worked only if the body of the request was empty.
    Now, it also works if the body contains orderItems=null (and additional parameters, such as an invoiceNumber).
    This was done to support the requirements of certain risk providers.
  • Previously, eCom accepted language codes for Sweden as "SE" and for Denmark as "DK".
    Now, eCom also accepts "SV" for Sweden and "DA" for Denmark, as per ISO standards.
    "SE" and "DK" language codes are obsolete, and will be deprecated in a future eCom version.

Released: 22.11.2018

Added

  • Technical changes

Released: 07.11.2018

Fixed

  • Fixed a bug where Authorize calls were sometimes handled incorrectly if unnecessary payment method details were provided. Previously, if an Authorize call with payment.Type = Invoice was sent with InstallmentProfileNo specified, eCom would treat it as payment.Type = Installment (same for AccountProfileNo, etc.). Now, the extra parameters are ignored by eCom if they are not consistent with the payment type.

Changed

  • "Read More" links for Flex and Fix methods at checkout are now country- and language-specific. Previously, terms and conditions for Part Payment methods would be displayed in the language matching the merchant's country (as per the API key). Now, eCom also looks at the Conversation Language provided for that customer. If the Terms and Conditions are available in that language, the "Read More" link will open the correct translation. If that language is not available, the merchant country's default language is used instead (as previously).

Released: 22.10.2018

Added

  • Technical changes

Released: 18.10.2018

Added

  • When using the Customer Lookup functionality, the user profiles and addresses returned by AfterPay are now ordered by most recently updated. Merchants and integrators are encouraged to select the first returned user profile (if multiple profiles are returned), or the first returned address (if multiple addresses are returned per user profile) - the most up-to-date one is most likely to be correct.

Released: 08.10.2018

Fixed

  • Fixed an issue with AdditionalInfo fields. If additional information is provided in the body of an Available call, and then equivalent data is also provided in the Authorize call, then the later overwrites the earlier information correctly.
  • Fixed an error where a Refund call would sometimes not reach the back-end, despite getting a Successful response from eCom
  • Fixed logging timestamps for Refund calls.

Changed

  • The description of the "customerIndividualScore" field was updated for clarification: accepts a number from -10000 to 10000 or a single case-insensitive letter from 'a' to 'z'.
  • The description of the "birthDate" field was updated: the suggested format is 'YYYY-MM-DD'.

Released: 27.09.2018

Fixed

  • eCom now returns the error 400.002 "Value is required" if Installment profile number is missing

Released: 05.09.2018

Added

  • eCom now supports custom payment method descriptions as returned by Available. The following can be customized:
    - Payment method title
    - Payment method tagline (short description)
    - Payment method logo

Fixed

  • eCom now returns the error 400.002 "Value is required" if a required enum element is missing, and 400.003 "Value out of range" if the value is incorrect.
  • Fixed a bug where under certain circumstances, partial captures would not update the balance of a reservation (leading to the total Capture amount potentially exceeding the Authorize amount).
  • Fixed a bug where an Authorize call with no order items would return a Reservation ID consisting of all zeroes. Such a call now returns a valid Reservation ID, but fails on a full Capture with an empty body. (If no order items are included in the Authorize call, they must be included in the Capture call.)
  • Fixed a bug where new installment profiles for existing clients were not showing up correctly, if they used previously existing profile numbers.

Changed

  • eCom now accepts a Cancellation call with an empty body, or where CancellationDetails is null, and treats it as a full order cancellation.

Released: 23.08.2018

Added

  • The Authorize call now validates the minimum length of Direct Debit information (BankAccount and BankCode).
  • For an Available call, if payment type "Account" (Flexible Part Payment) is available, eCom now returns the minimum payment amount along with other relevant information.The following information about installments is returned: installment profile number, order amount, startup fee, monthly fee, interest rate, and the URL of the full terms & conditions.
  • eCom now returns 'transactionReference' info in Order Management calls. This is a unique identifier of individual transactions within the same order. It maps to transaction IDs in external Payment System Provider ledgers.

Fixed

  • eCom application logs now correctly store all information about API calls and responses.
  • Spelling mistake in Available Payment Method response has been fixed
  • eCom now returns the error 400.004 "Value format is incorrect" if a comma is used as the decimal separator.
  • eCom now returns the error 400.156 "The country code is not valid for this customer" if the country code in the delivery address is invalid.
  • eCom now returns the error 200.908 "Bank details invalid" for invalid Danish bank account numbers.
  • eCom now returns the error 400.002 "Value is required" if a required parameter value is not specified.
  • When eCom returns an error message for a missing order amount in a full Capture, the error message now correctly states the fieldReference value (telling you which parameter is missing).
  • eCom now supports IPv6.

Released: 13.07.2018

Added

  • Developer Sandbox now has a mock Risk Engine attached. This Risk Engine is currently configured to approve transactions based on triggers in customer email addresses.

Fixed

  • eCom now correctly forwards Profile Tracking IDs (used for fraud prevention) to the backend system.
  • eCom now correctly handles Risk Engine responses that include updated customer details (Customer Lookup).
  • eCom now returns correct error codes for too short bank account number and bank SWIFT or BIC code (400.006). Previously this returned the generic code 400.000.

Changed

  • eCom's handling of Campaign Invoices improved: if different campaign numbers are provided at different stages of an order, the newest one is sent to the backend system. If a campaign number is not provided in an API call, but one was provided earlier for this order, the most recently provided campaign number is sent to the backend system.

Released: 27.06.2018

Fixed

  • Broken request body now returns the correct error 400.001
  • Previously, birthDate was required for B2B customers (who are legal entities and do not have a birth date). This is now optional.

Changed

  • Database field alignments with the master system.
  • The description of the parameter CustomerCardSince was updated to clarify its meaning: the date on which the loyalty card was issued to the customer.
  • Message queue configured to prefetch 1 message at a time. This was done to improve message queue stability.
  • If an order in the Netherlands has a delivery address different from the customer's billing address, the IP address and birth date provided in the delivery info are not validated now. This info may be copied from the customer object, as the Dutch Core required both Customer and deliveryCustomer data to be provided.
  • Birthdate is now a required field for customers in Switzerland, and optional for customers in Germany. Previously, it was required in Germany and optional in Switzerland.

Released: 14.06.2018

Fixed

  • Fixed a bug where successful calls had no outcome specified.

Changed

  • Changed error code mapping to respond with 'Contract already exists' instead of 'Negative customer score' where appropriate.
  • Changed the response structure for ApplyForAccountCredit and AddEvent, to allow responses with value 200for risk check messages.
  • Added SSN validation for Nordics countries for the ApplyForAccountCredit endpoint.

Released: 12.06.2018

Added

  • Returning a 'Read More' link with a Part Payment method in Available Payment Methods response. This leads to a customer-facing explanation of the payment method.
  • Added functionality to return a Customer object with the Lookup feature.
  • Work on the shadow environment to improve release quality verification.

Fixed

  • Fixed a bug where IP Address was validated even if it wasn't present in the request.
  • Returning a correct response message in case of a full refund, where a partial refund is done beforehand.
  • Fixed a bug where an Authorize payment call failed when DirectDebit information was not provided. As a prerequisite, the customer had a contract already in place with AfterPay.
  • Fixed a bug where an Authorize payment call failed when multiple threads were processing at the same time.

Changed

  • Improved validation rules for ValidateBankAccount endpoint.

Released: 29.05.2018

Added

  • Added more flexibility to Available Payment Methods calls, which now allow a successful response based on the basket value only.
  • Added minimum-to-pay information to the Available Payment Methods response.

Fixed

  • Fixed a bug where the provided postal code was not added to the external request.
  • Fixed account profile mappings for different markets.

Changed

  • Database field alignments with the master system.

Released: 08.05.2018

Added

  • Type field added to orderItem, to distinguish between shipping fees, discounts, digital goods, and regular order items.
  • Adding error messages in Capture when an order is not found.
  • Adding master system support for conversationLanguage.
  • Added type and VAT amount fields to GetOrderResponse.

Fixed

  • Fixed a bug where the customer number wasn't provided in the response.
  • Fixed a bug where a correct response wasn't provided by the eCom API.
  • Fixed a bug where requests started failing due to order item type not being specified.
  • Fixed a bug where an incorrect response was provided after a failure in an external service.

Changed

  • Database field updates to align with the master system.
  • Risk engine response alignment for Netherlands.
  • Mapping Risk Provider responses for Customer Limit Reached to an Afterpay error code.
  • Improved validation for IBAN and SWIFT validators in eCom ValidateBankAccount.
  • Removed an unnecessary field in the POCO classes.
  • Aligned actionCodes for responses.
  • Removed discount amount from order and order line objects, as they are not necessary after the introduction of Order Item Types.

Released: 19.04.2018

Added

  • customerAccountId has been added to CheckoutCustomer table

Fixed

  • Incorrect text of 400.102 message has been fixed

Changed

  • Salutation has been changed to optional for DE, AT, CH

Released: 22.03.2018

Changed

  • Response for the AvailablePaymentMethods has been changed

Incident

  • RSS calls not passing in production

Released: 22.03.2018

Added

  • Validation for the bankaccount number in Authorize for DE and AT markets
  • New caching layer for eCommerce
  • Added validation to OrderNumber field not to allow spaces at the end
  • customerNumber has been added to the CustomerLookup
  • "skipExternalSearch" input parameter has been added to Customer lookup
  • X-Idempotency-Key added to the header
  • MerchantId has been added to Void
  • MerchantId has been added to Refund
  • customerAccountId has been added to CheckoutCustomer and DeliveryCustomer

Fixed

  • Delivery customer Email is no longer mandatory
  • OrderNotFound has been replaced with a VoidNotFound message
  • Error when sending in invalid Birthdate
  • MQError message has been replaced with "An error has occurred" message
  • Response for the Authorize payment method has been fixed
  • Error message has been changed for missing salutation in Authorize payment method
  • Error message for missing DeliveryCustomer.Firstname
  • "Cannot deserialize the current JSON" message has been changed to "Cannot deserialize the current JSON. Please compare the JSON implementation with Afterpay documentation."
  • 200.901 errors structure has been changed to look like business errors (400.xxx)

Changed

  • Response for the AvailablePaymentMethods.Installment has been changed
  • Validation ErrorCode has been removed, as it replaced with ResponseCodes constants
  • Customer lookup has been changed to optional in Available Payment Methods and Authorize requests
  • The length of DeliveryPostalPlace has been changed to 100
  • Customer object for the Available payment methods has been changed as optional
  • Customer not found now returns 200.101 instead of 400.099
  • Customer below minimum age will now return 200.001
  • Support Customer lookup without postalcode condition has been changed for Finland
  • Allow authorization without email for a Finnish Fasttrack
  • Allow sending authorization request with amount instead of order lines
  • "Address not found" message has been replaced with "Customer not found"

Released: 07.03.2018

Changed

  • Validation ErrorCode has been removed, as it replaced with ResponseCodes constants
  • Support Customer lookup without postalcode condition has been changed for Finland
  • Allow authorization without email for a Finnish Fasttrack
  • Prefixes and white-spaces will be now removed from numbers for Norway

Released: 19.02.2018

Added

  • Mock AFS riskprovider has been added

Released: 10.01.2018

Added

  • Client setting has been added to enable Customer lookup in Available Payment Methods and Authorize requests

Fixed

  • Mapping of customerNumber has been fixed
  • Mappings for ChannelType has been corrected
  • Using installment plans fixed in Authorize

Changed

  • PostalCode length has been changed to 10
  • Now returning Installment business errors instead of Account business errors
  • Installment related error messages and codes have been unified, 400.144 error code is now returned only for Account payment type
  • Now returning "The grand total of gross unit prices must be positive." error message for error 400.124
  • Customer lookup has been changed to optional in Available Payment Methods and Authorize requests
  • The BankCode and BankAccont are trimmed
  • Now MaxDownPaymentMonths is used, if number of installments is not present in Authorize

Released: 30.11.2017

Fixed

  • Correct 400.XXX error code returned when "Quantity" in Order object is set to null

Changed

  • Limited "careOf" field in Address object to 50 characters

Released: 21.11.2017

Added

  • Added "Read More" links to available installment plans

Fixed

  • Limited field StreetNumberAdditional in Address object to 10 characters
  • Added error message to Authorize response when SSN is missing
  • Unified fieldReferences for error messages
  • Changed Authorize call to return 5 separate error messages instead of one

Changed

  • Relaxed e-mail validation rules

Released: 17.11.2017

Fixed

  • Fixed rounding of price data

Released: 10.11.2017

Fixed

  • Corrected error code when sending in empty checkoutId to Authorize request
  • Technical refactoring

Released: 09.11.2017

Added

  • MerchantImageUrl added to the Order
  • Consolidated invoice added
  • Refunding with a negative total amount should not be allowed
  • Field references added to MissingValue, IncorrectFormat and ValueOutOfLegalRange error messages

Fixed

  • Now returning 400.xxx error, if the order cannot be cancelled because the order is already partially or fully capured
  • Now returning 400.xxx error, if the order cannot be cancelled because the balance of the linked order is 0
  • Now returning 400.xxx error, if the order cannot be cancelled because the specified capture has higher amount than the reserved amount
  • Now returning 400.002 error, if the Identification code is not specified
  • Rating failure response fixed
  • First name in Authorize request is not replaced with empty string
  • Missing identification code error message fixed
  • Missing email returns 400.002 (MissingValue) error code instead of 400.004 (InvalidFormat)
  • Email validation rules changed, single digit domain names are allowed

Changed

  • Payment methods response updated to respond more detailed installment info
  • Gross and Net amount requirements and calculation unified across requests
  • Performance improvements
  • 404 error responses are removed
  • Whitespaces are not causing validation errors for Identification numbers

Released: 26.10.2017

Added

  • Added new configuration for future Risk Providers
  • Authentication handling for new risk provider
  • Implementation of Authorize call for new risk provider
  • Exposing field length requirements for Developers Portal
  • Allowing negative amount Authorize calls for payment type "ConsolidatedInvoice"
  • Allowing full capture for negative authorizations, when payment type is "ConsolidatedInvoice"
  • Implemented birth date extraction from SSN in Sweden
  • Support for decimals in FastTrack Services AddEventToAccount quantity
  • Changed the implementation of invoice date mappings

Fixed

  • Showing fieldReference in FastTrack Services ApplyForAccountCredit when customer.firstName is longer than 50 characters
  • Returning 400.XXX error when order cancellation fails
  • Now returning business error when using installment profile number which doesn't exist
  • Now returning correct error message when using installment profile which doesn't exist
  • Allowing no body to be sent into VoidAuthorizationRequest

Changed

  • Made mobile phone field optional in Authorize
  • Made mobile phone field optional in AvailablePaymentMethods
  • Technical refactoring

Released: 01.09.2017

Changed

  • Technical refactoring

Released: 29.08.2017

Fixed

  • Refunding invoice when customer already paid
  • Updated integration with risk providers

Changed

  • Provide additional metrics for monitoring

Released: 18.08.2017

Fixed

  • Restricting sending enum values
  • Wrong error codes in authorize method fixed

Changed

  • Changed how "CreditNoteNumber" is generated during Refund operation

Released: 15.08.2017

Added

  • New field "ConsolidatedInvoiceAllowed" added to the payment method "ConsolidatedInvoice"

Fixed

  • Consolidated Invoice created if payment type is "ConsolidatedInvoice"
  • 400.127 error code instead of "RefundAmountTooHigh"
  • Refunding regular invoice with total negative amount is not allowed
  • Length validation for "DirectDebitSwift" field
  • Length validation for "ItemDescription" field
  • "System.NullReferenceException" in RSS21 risk provider fixed
  • REST API returns correct header on incorrect request
  • "ChannelType" errors in OrderRisk fixed

Changed

  • Handling of international data in JSON REST API

Released: 11.07.2017

Added

  • "Voucher number" field added to Refund

Released: 28.06.2017

Changed

  • Unified behavior of TotalNetAmount for installments and invoices
  • Installment period is now optional

Released: 15.06.2017

Fixed

  • Fixed a case where Authorize Request received an empty Response

Changed

  • Increased InvoiceNo length in CaptureRequest to 19
  • Updated developer portal with new error codes
  • Removed ssn from getOrder response
  • customerLookup now returns textual representation of country code
  • The way system errors are logged
  • The length of ParentTransactionReference is now 50 in authorize, available, capture, void and refund requests

Released: 08.06.2017

Added

  • Implement new risk provider

Fixed

  • InstallmentPlans now return an error if amount is 0
  • Finnish SSN validation failed with small letters
  • A memory leak in eCommerceWebApi
  • Available payment methods now follow account profile usage
  • Available installment plans don't take the amount into account

Changed

  • Invalid risk provider credentials error now returns 500
  • Behavior of 400.099 that it is always BusinessError
  • Updated Developer portal tutorial page with new response code structures
  • Allow negative grossUnitPrice on capture for consolidated invoice

Released: 22.05.2017

Fixed

  • Fixed usage of InstallmentDetails
  • Fixed null reference exception in PaymentRequest

Changed

  • Changed branching strategy

Released: 20.03.2017

Added

  • "directDebit" field to AvailablePaymentMethodResponse indicating when Invoice is available with Direct Debit
  • Functionalities for sending error messages to Slack
  • New Relic monitoring
  • Sending Google Analytics data to Phoenix
  • Sanoma ledger functionality
  • ProductType to GetAvailablePaymentMethods
  • ProductType to AuthorizePayment
  • ProductType to Capture
  • ProductType to Void
  • "additionaData" field in AuthorizePayment
  • Costcenter to CaptureRequest
  • Relocated CustomerIndividualScore to CustomerRisk
  • MarketPlace element to AvailablePaymentMethods additionalData element
  • AdditionalData element to AvailablePaymentMethods
  • Age validation for CustomerCheck requests
  • InvoiceDate to CaptureRequest.References
  • Increased logging for Update database updater
  • partnerData to additional data in availablePaymentMethods
  • partnerData to additional data in authorizePayments
  • 400.002 (MissingValue) customer facing message
  • 400.003 (ValueOutOfLegalRange) customer facing message
  • 400.004 (IncorrectFormat) customer facing message
  • parentTransactionRefelence to Order objec
  • marketPlaceSellerId to orderItem
  • customerIndividualScire to orderRisk
  • ParentTransactionReference to Authorize request
  • ParentTransactionReference to Available Payments request
  • ParentTransactionReference to Refund request
  • 400.101 (with field reference order.netAmount) is now returned if netAmount does not match quantity * netUnitPrice over orderLines
  • 400.102 (with field reference order.grossAmount) is now returned if grossAmount does not match quantity * grossUnitPrice over orderLines
  • 400.100 (with field reference order.orderNumber) is now returned if "order number is already in use for client"
  • 400.103 (with field reference customer.customerNumber) is now returned if customer number differs from CustomerNo in checkout
  • 400.109 (with field reference contractID) is now returned when invalid contract id is given
  • 400.115 (with field reference none) is now returned when reservation is not found
  • 400.131 (with field reference none) is now returned when order is not found
  • 400.132 (with field reference none) is now returned when capture is not found
  • 400.117 (with field reference none) is now returned if Full Capture can not be done in full amount
  • 400.120 (with field reference none) is now returned if Invoice has already been created
  • 400.119 (with field reference orderItems) is now returned if no order items are provided when capture number is set
  • 400.108 (with field reference payment.type) is now returned if invalid payment method is selected
  • 400.111 (with field reference none) is now returned when installment profile plans are missing
  • 400.112 (field reference: none) is now returned when monthly installment amount is invalid
  • 400.113 (field reference: none) is now returned when duration is sent as amount
  • 400.114 (field reference: payment.account.AccountProfileNo) is now returned when invalid AccountProfileNo is sent
  • "readMore"field in installmentInfo response
  • partnerData field added to additionalData

Fixed

  • Error on high volumes of requests (@100/sek per client)
  • Performance improvements
  • Error if no CountryCode present in AvailablePaymentMethods request
  • System.NullReferenceException in GetRiskProvider
  • Exception in AuthorizePayment when calculatingTax fields
  • CreateContract now returns Error 500 instead of SystemError
  • Finnish SSN validation updated to check for length
  • DeleteShippingDetails returned incorrect response code when capture was not found
  • GetAllShipments returned incorrect response code when capture was not found
  • GetShipments returned incorrect response code when capture was not found
  • OrderManagementOperationBase returned "InvoiceLinesMissing" instead of 400.xxx
  • "OrderItemsMissingResponse" code instead of 400.xxx
  • NotImplementedException in Denmark for Required Customer field
  • Forward contractDate and InvoiceDate to proper places in backend system
  • DirectDebit does not return error anymore when client settings allow it without contract
  • Updated Developer Portal to reflect TotalGrossAmounnt and grossUnitPrice requirement on OrderItems
  • Empty LookupCustomer request give Internal Server Error
  • Authorize no longer returns [] when outcome is rejected
  • No access to service no longer gives code 0 but now gives 401

Changed

  • Internal customer lookup logic for all markets
  • Updated all customer-facing messages
  • Behavior of Bank detail saving for DirectDebit Agreements
  • Payment method not supported responds now with 400 error
  • Customer not found in external database now forwards the error from external system
  • Wrong payment method returns now a 400 error
  • When grossUnitPrice is missing in partial capture a 400 error is returned
  • If contract already exists in system 400.136 error is now returned
  • If address is not found 400.135 error is now returned
  • If technical timeout occurs, a 500 error is returned
  • Empty request now gets 400.001 response code
  • "phoneNumber" field changed to "mobilePhone"
  • Remove SSN from customerLookup response
  • If order is not found a 400.131 error is returned
  • If customer is not found internally using identification number the "address not found" error will be returned
  • Mapping of Error Codes
  • Currency, Country and Language enums
  • Rounding for AvailablePaymentMethodsResponse to use only 2 decimal places
  • StreetNumberAdditional length changed from 5 to 50
  • How system logs different errors
  • CustomerCategory behavior to facilitate "Company" value
  • Allow empty GroupId in OrderItem
  • Checkout process when customer is not found
  • Naming of fields in ValidateBankAccount (bankCode, bankAccount)
  • Payment items are now required for debit invoice
  • Rename invoiceCampaignNumber to campaignNumber in CaptureReques
  • Rename merchantTransactionId to parentTransactionId in CaptureRequest
  • Relocated CustomerIndividualScore to CustomerRisk
  • Removed IntermediarId from AdditionalData
  • DevPortal updated with new eCommerceServices.Contracts nuspec package
  • Made payment items required for partial refund
  • Allow full refund with empty payment items
  • Updated response codes for reservation not found
  • Update response code for reservation missing checkout
  • Updated response code for capture number not specified
  • Updated response code for positive gross or net unit price
  • Update response code for reservation mismatch
  • Update response code for refund amount is higher than invoice balance
  • Updated response code for invoice(s) not found
  • Updates for void response codes and automated tests
  • Updated response codes for getCapture
  • Update response code for invoice not found
  • Updated response code for missing order items
  • Order number missing response is now 400.002
  • PhoneNumber field changed to MobilePhone
  • IdentificationNumber has been removed from customer lookup response
  • Cleanup job for non-captured reservations is now configurable between 30-1095 instead of fixed 90 days
  • Make payment items required for partial refund
  • Allow full refund with empty payment items

Released: 25.10.2016

Added

  • Deployment of new AfterPay API