Release Notes

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