Release Notes: Recent Update

Release Notes: Recent Update

Version 2.23.1 to 2.24.0

What's New

GET /issuers/{issuerId}/accounts/external-accounts/{issuerAccountExternalReference}/corporate-contract

Retrieve corporate contract for an account by external reference (beta)

The API enables the corporate contract data for a given account to be retrieved.

POST /issuers/{issuerId}/accounts/external-accounts/{issuerAccountExternalReference}/inquire-operation

Retrieve an operation by external references triplet and account external reference (beta)

The API allows to retrieve an operation using its external operation references for the given account by using issuer account external reference or the account reference (generated by WL).

GET /issuers/{issuerId}/accounts/{accountReference}/corporate-contract

Retrieve corporate contract for an account (beta)

The API enables the corporate contract data for a given account to be retrieved.

POST /issuers/{issuerId}/accounts/{accountReference}/inquire-operation

Retrieve an operation by external references triplet (beta)

The API allows to retrieve an operation using its external operation references for the given account by using issuer account external reference or the account reference (generated by WL).

GET /issuers/{issuerId}/card-contracts/external-card-contracts/{issuerCardContractExternalReference}/corporate-contract

Retrieve corporate contract for a card contract by external reference (beta)

The API allows the corporate contract detail of a card contract to be retrieved.

GET /issuers/{issuerId}/card-contracts/{cardContractReference}/corporate-contract
Retrieve corporate contract for a card contract (beta)

The API allows the contract detail of a corporate card contract to be retrieved.

PATCH /issuers/{issuerId}/corporate-contracts/{contractReference}/corporate-contract-entities/{companyEntityExternalReference}

Modify an entity of a Corporate contract (beta)

The API allows certain data of an existing entity of a corporate contract to be updated such as

  • the allowed advertisement channels (flags)
  • the allowed delivery channel for possible letters

As a result the corporate contract entity is immediately updated with provided data in our system.

PATCH /issuers/{issuerId}/corporate-contracts/external-contracts/{issuerContractExternalReference}/corporate-contract-entities/{companyEntityExternalReference}

Modify an entity of a Corporate contract by external reference (beta)

The API allows certain data of an existing entity of a corporate contract to be updated such as

  • the allowed advertisement channels (flags)
  • the allowed delivery channel for possible letters

As a result the corporate contract entity is immediately updated with provided data in our system.

GET /issuers/{issuerId}/corporate-contracts/{contractReference}/contract-owner

Retrieve contract owner for a corporate contract (beta)

This API allows the contract owner for a corporate contract identified by the Issuer Contract external reference or the Contract reference, to be retrieved.

GET /issuers/{issuerId}/corporate-contracts/external-contracts/{issuerContractExternalReference}/contract-owner

Retrieve contract owner for a corporate contract by external reference (beta)

This API allows the contract owner for a corporate contract identified by the Issuer Contract external reference or the Contract reference, to be retrieved.

 

What's Changed

POST /issuers/{issuerId}/disputes/{disputeFolderReference}/documents

Request body :

  • Added property documentTypeId (string)
POST /issuers/{issuerId}/disputes/external-disputes/{issuerDisputeExternalReference}/documents

Request body :

  • Added property documentTypeId (string)
POST /issuers/{issuerId}/cards/block-all

Request body :

  • Added property cancelScheduledCardBlocking (boolean)
POST /issuers/{issuerId}/cards/external-cards/{issuerCardExternalReference}/block

Request body :

  • Added property cancelScheduledCardBlocking (boolean)
POST /issuers/{issuerId}/cards/{cardReference}/block

Request body :

  • Added property cancelScheduledCardBlocking (boolean)
POST /issuers/{issuerId}/operations/{externalOperationReference}/disputes

Request body :

  • Changed property disputeDocuments (array)
    • Changed items (object CreateDocumentRequest)
      • Added property documentTypeId (string)
POST /issuers/{issuerId}/cards/{cardReference}/create-emergency-card

Response:

  • Changed property data (object CreateEmergencyCardResponse)
    • Added property maskedPan (string)
POST /issuers/{issuerId}/cards/external-cards/{issuerCardExternalReference}/create-emergency-card

Response:

  • Changed property data (object CreateEmergencyCardResponse)
    • Added property maskedPan (string)
GET /issuers/{issuerId}/accounts/external-accounts/{issuerAccountExternalReference}
Response:
  • Changed property data (object Account)
    • Added property externalVelocityLimits (array)
    • Added property externalAuthorizationsRestrictions (array)
GET /issuers/{issuerId}/accounts/external-accounts/{issuerAccountExternalReference}/operations/{operationId}

Response:

  • Changed property data (object Operation)
    • New required properties:
      • status
GET /issuers/{issuerId}/accounts/{accountReference}

Response:

  • Changed property data (object Account)
    • Added property externalVelocityLimits (array)
    • Added property externalAuthorizationsRestrictions (array)
GET /issuers/{issuerId}/accounts/{accountReference}/operations/{operationId}

Response:

  • Changed property data (object Operation)
    • New required properties:
      • status
GET /issuers/{issuerId}/accounts/external-accounts/{issuerAccountExternalReference}/operations

Parameters:

Added: sort in query
Changed: printOnStatement in query

Response:

  • Changed property data (array)
    • Changed items (object Operation)
      • New required properties:
        • status
GET /issuers/{issuerId}/accounts/external-accounts/{issuerAccountExternalReference}/statements/last/operations

Response:

  • Changed property data (array)
    • Changed items (object Operation)
      • New required properties:
        • status
GET /issuers/{issuerId}/accounts/external-accounts/{issuerAccountExternalReference}/statements/next/operations
Response:
  • Changed property data (array)
    • Changed items (object Operation)
      • New required properties:
        • status
GET /issuers/{issuerId}/accounts/external-accounts/{issuerAccountExternalReference}/statements/{cycleClosureDate}/operations

Response:

  • Changed property data (array)
    • Changed items (object Operation)
      • New required properties:
        • status
GET /issuers/{issuerId}/accounts/{accountReference}/operations

Parameters:

Added: sort in query
Changed: printOnStatement in query

Response:

  • Changed property data (array)
    • Changed items (object Operation)
      • New required properties:
        • status
GET /issuers/{issuerId}/accounts/{accountReference}/statements/last/operations

Response:

  • Changed property data (array)
    • Changed items (object Operation)
      • New required properties:
        • status
GET /issuers/{issuerId}/accounts/{accountReference}/statements/next/operations
Response:
  • Changed property data (array)
    • Changed items (object Operation)
      • New required properties:
        • status
GET /issuers/{issuerId}/accounts/{accountReference}/statements/{cycleClosureDate}/operations

Response:

  • Changed property data (array)
    • Changed items (object Operation)
      • New required properties:
        • status
POST /issuers/{issuerId}/cards/external-cards/{issuerCardExternalReference}/block-and-replace

Request body :

  • Changed property blockCardRequest (object BlockCardRequest)
    • Added property cancelScheduledCardBlocking (boolean)
POST /issuers/{issuerId}/cards/search

Request body :

  • New optional properties:

    • pan
  • Added property panReference (string)

POST /issuers/{issuerId}/cards/{cardReference}/block-and-replace

Request body :

  • Changed property blockCardRequest (object BlockCardRequest)
    • Added property cancelScheduledCardBlocking (boolean)
GET /issuers/{issuerId}/contracts/external-contracts/{issuerContractExternalReference}/accounts
Response:
  • Changed property data (array)
    • Changed items (object Account)
      • Added property externalVelocityLimits (array)
      • Added property externalAuthorizationsRestrictions (array)
GET /issuers/{issuerId}/contracts/{contractReference}/accounts

Response:

  • Changed property data (array)
    • Changed items (object Account)
      • Added property externalVelocityLimits (array)
      • Added property externalAuthorizationsRestrictions (array)
GET /issuers/{issuerId}/customers/external-customers/{issuerCustomerExternalReference}/accounts

Response:

  • Changed property data (array)
    • Changed items (object Account)
      • Added property externalVelocityLimits (array)
      • Added property externalAuthorizationsRestrictions (array)
GET /issuers/{issuerId}/customers/{customerReference}/accounts

Response:

  • Changed property data (array)
    • Changed items (object Account)
      • Added property externalVelocityLimits (array)
      • Added property externalAuthorizationsRestrictions (array)
GET /issuers/{issuerId}/accounts/external-accounts/{issuerAccountExternalReference}/contract

Response:

  • Changed property data (object Contract)
    • Changed property accounts (array)
      • Changed items (object Account)
        • Added property externalVelocityLimits (array)
        • Added property externalAuthorizationsRestrictions (array)
GET /issuers/{issuerId}/accounts/{accountReference}/contract

Response:

  • Changed property data (object Contract)
    • Changed property accounts (array)
      • Changed items (object Account)
        • Added property externalVelocityLimits (array)
        • Added property externalAuthorizationsRestrictions (array)
GET /issuers/{issuerId}/card-contracts/external-card-contracts/{issuerCardContractExternalReference}/contract

Response:

  • Changed property data (object Contract)
    • Changed property accounts (array)
      • Changed items (object Account)
        • Added property externalVelocityLimits (array)
        • Added property externalAuthorizationsRestrictions (array)
GET /issuers/{issuerId}/card-contracts/{cardContractReference}/contract
Response:
  • Changed property data (object Contract)
    • Changed property accounts (array)
      • Changed items (object Account)
        • Added property externalVelocityLimits (array)
        • Added property externalAuthorizationsRestrictions (array)
GET /issuers/{issuerId}/corporate-contracts/{contractReference}/corporate-employee-accounts/{accountReference}

Response:

  • Changed property data (object CorporateEmployeeAccount)
    • Changed property account (object Account)
      • Added property externalVelocityLimits (array)
      • Added property externalAuthorizationsRestrictions (array)
GET /issuers/{issuerId}/corporate-contracts/{contractReference}/corporate-employee-accounts/external-accounts/{issuerAccountExternalReference}

Response:

  • Changed property data (object CorporateEmployeeAccount)
    • Changed property account (object Account)
      • Added property externalVelocityLimits (array)
      • Added property externalAuthorizationsRestrictions (array)
GET /issuers/{issuerId}/corporate-contracts/external-contracts/{issuerContractExternalReference}/corporate-employee-accounts/external-accounts/{issuerAccountExternalReference}

Response:

  • Changed property data (object CorporateEmployeeAccount)
    • Changed property account (object Account)
      • Added property externalVelocityLimits (array)
      • Added property externalAuthorizationsRestrictions (array)
GET /issuers/{issuerId}/corporate-contracts/external-contracts/{issuerContractExternalReference}/corporate-employee-accounts/{accountReference}

Response:

  • Changed property data (object CorporateEmployeeAccount)
    • Changed property account (object Account)
      • Added property externalVelocityLimits (array)
      • Added property externalAuthorizationsRestrictions (array)
PATCH /issuers/{issuerId}/corporate-contracts/{contractReference}/corporate-contract-entity/{companyEntityExternalReference}

OperationId:

modifyCorporateContractEntity -> modifyCorporateContractEntityDeprecated

PATCH /issuers/{issuerId}/corporate-contracts/external-contracts/{issuerContractExternalReference}/corporate-contract-entity/{companyEntityExternalReference}

OperationId:

modifyCorporateContractEntityByIssuerExtRef -> modifyCorporateContractEntityByIssuerExtRefDeprecated

POST /search-operations

Response:

  • Changed property data (object ApiResponseEntityListOperation)
    • Changed property data (array)
      • Changed items (object Operation)
        • New required properties:
          • status
GET /issuers/{issuerId}/contracts/external-contracts/{issuerContractExternalReference}

Response:

  • Changed property data (object Contract)
    • Changed property accounts (array)
      • Changed items (object Account)
        • Added property externalVelocityLimits (array)
        • Added property externalAuthorizationsRestrictions (array)
GET /issuers/{issuerId}/contracts/{contractReference}

Response:

  • Changed property data (object Contract)
    • Changed property accounts (array)
      • Changed items (object Account)
        • Added property externalVelocityLimits (array)
        • Added property externalAuthorizationsRestrictions (array)
GET /issuers/{issuerId}/corporate-contracts/{contractReference}

Response:

  • Changed property data (object CorporateContract)
    • Changed property rootAccount (object Account)
      • Added property externalVelocityLimits (array)
      • Added property externalAuthorizationsRestrictions (array)
    • Changed property corporateContractEntities (array)
      • Changed items (object CorporateContractEntity)
        • Changed property account (object Account)
          • Added property externalVelocityLimits (array)
          • Added property externalAuthorizationsRestrictions (array)
    • Changed property corporateEmployeeAccounts (array)
      • Changed items (object CorporateEmployeeAccount)
        • Changed property account (object Account)
          • Added property externalVelocityLimits (array)
          • Added property externalAuthorizationsRestrictions (array)
GET /issuers/{issuerId}/corporate-contracts/external-contracts/{issuerContractExternalReference}

Response:

  • Changed property data (object CorporateContract)
    • Changed property rootAccount (object Account)
      • Added property externalVelocityLimits (array)
      • Added property externalAuthorizationsRestrictions (array)
    • Changed property corporateContractEntities (array)
      • Changed items (object CorporateContractEntity)
        • Changed property account (object Account)
          • Added property externalVelocityLimits (array)
          • Added property externalAuthorizationsRestrictions (array)
    • Changed property corporateEmployeeAccounts (array)
      • Changed items (object CorporateEmployeeAccount)
        • Changed property account (object Account)
          • Added property externalVelocityLimits (array)
          • Added property externalAuthorizationsRestrictions (array)
POST /issuers/{issuerId}/contracts/create-consumer-contract
Request body :
  • Changed property addCardsAccounts (object CreateConsumerContractRequest.AddCardsAccounts)
    • Changed property accounts (array)
      • Changed items (object CreateConsumerContractRequest.Account)
        • Added property externalVelocityLimits (array)
        • Added property externalAuthorizationsRestrictions (array)
POST /issuers/{issuerId}/contracts/external-contracts/{issuerContractExternalReference}/add-cards-accounts

Request body :

  • Changed property accountHierarchy (object AddCardsAccountsRequest.AccountHierarchy)
    • Changed property accounts (array)
      • Changed items (object CreateConsumerContractRequest.Account)
        • Added property externalVelocityLimits (array)
        • Added property externalAuthorizationsRestrictions (array)
        • Response:
        • Changed property data (object AddCardsAccountsResponse)
          • Added property originalContract (object)
          • Added property changedContract (object)
          • Added property productChangeInformation (object)
POST /issuers/{issuerId}/contracts/search

Response:

  • Changed property data (array)
    • Changed items (object Contract)
      • Changed property accounts (array)
        • Changed items (object Account)
          • Added property externalVelocityLimits (array)
          • Added property externalAuthorizationsRestrictions (array)
POST /issuers/{issuerId}/contracts/{contractReference}/add-cards-accounts

Request body :

  • Changed property accountHierarchy (object AddCardsAccountsRequest.AccountHierarchy)
    • Changed property accounts (array)
      • Changed items (object CreateConsumerContractRequest.Account)
        • Added property externalVelocityLimits (array)
        • Added property externalAuthorizationsRestrictions (array)
        • Response:
        • Changed property data (object AddCardsAccountsResponse)
          • Added property originalContract (object)
          • Added property changedContract (object)
          • Added property productChangeInformation (object)
GET /issuers/{issuerId}/customers/external-customers/{issuerCustomerExternalReference}/contracts

Response:

  • Changed property data (array)
    • Changed items (object Contract)
      • Changed property accounts (array)
        • Changed items (object Account)
          • Added property externalVelocityLimits (array)
          • Added property externalAuthorizationsRestrictions (array)
GET /issuers/{issuerId}/customers/{customerReference}/contracts
Response:
  • Changed property data (array)
    • Changed items (object Contract)
      • Changed property accounts (array)
        • Changed items (object Account)
          • Added property externalVelocityLimits (array)
          • Added property externalAuthorizationsRestrictions (array)
GET /issuers/{issuerId}/companies/{customerReference}/corporate-contracts

Response:

  • Changed property data (array)
    • Changed items (object CorporateContract)
      • Changed property rootAccount (object Account)
        • Added property externalVelocityLimits (array)
        • Added property externalAuthorizationsRestrictions (array)
      • Changed property corporateContractEntities (array)
        • Changed items (object CorporateContractEntity)
          • Changed property account (object Account)
            • Added property externalVelocityLimits (array)
            • Added property externalAuthorizationsRestrictions (array)
      • Changed property corporateEmployeeAccounts (array)
        • Changed items (object CorporateEmployeeAccount)
          • Changed property account (object Account)
            • Added property externalVelocityLimits (array)
            • Added property externalAuthorizationsRestrictions (array)
GET /issuers/{issuerId}/companies/external-customers/{issuerCustomerExternalReference}/corporate-contracts

Response:

  • Changed property data (array)
    • Changed items (object CorporateContract)
      • Changed property rootAccount (object Account)
        • Added property externalVelocityLimits (array)
        • Added property externalAuthorizationsRestrictions (array)
      • Changed property corporateContractEntities (array)
        • Changed items (object CorporateContractEntity)
          • Changed property account (object Account)
            • Added property externalVelocityLimits (array)
            • Added property externalAuthorizationsRestrictions (array)
      • Changed property corporateEmployeeAccounts (array)
        • Changed items (object CorporateEmployeeAccount)
          • Changed property account (object Account)
            • Added property externalVelocityLimits (array)
            • Added property externalAuthorizationsRestrictions (array)
POST /search-contracts

Response:

  • Changed property data (object ApiResponseEntityListContract)
    • Changed property data (array)
      • Changed items (object Contract)
        • Changed property accounts (array)
          • Changed items (object Account)
            • Added property externalVelocityLimits (array)
            • Added property externalAuthorizationsRestrictions (array)
POST /search-corporate-contracts

Response:

  • Changed property data (array)
    • Changed items (object CorporateContract)
      • Changed property rootAccount (object Account)
        • Added property externalVelocityLimits (array)
        • Added property externalAuthorizationsRestrictions (array)
      • Changed property corporateContractEntities (array)
        • Changed items (object CorporateContractEntity)
          • Changed property account (object Account)
            • Added property externalVelocityLimits (array)
            • Added property externalAuthorizationsRestrictions (array)
      • Changed property corporateEmployeeAccounts (array)
        • Changed items (object CorporateEmployeeAccount)
          • Changed property account (object Account)
            • Added property externalVelocityLimits (array)
            • Added property externalAuthorizationsRestrictions (array)
  •  

What's Deleted

No API deleted.

 

What's Deprecated

PATCH /issuers/{issuerId}/corporate-contracts/{contractReference}/corporate-contract-entity/{companyEntityExternalReference}

Modify an entity of a Corporate contract (beta) - deprecated

The API allows certain data of an existing entity of a corporate contract to be updated such as

  • the allowed advertisement channels (flags)
  • the allowed delivery channel for possible letters

As a result the corporate contract entity is immediately updated with provided data in our system.

PATCH /issuers/{issuerId}/corporate-contracts/external-contracts/{issuerContractExternalReference}/corporate-contract-entity/{companyEntityExternalReference}

modify an entity of a Corporate contract by external reference (beta) - deprecated

The API allows certain data of an existing entity of a corporate contract to be updated such as

  • the allowed advertisement channels (flags)
  • the allowed delivery channel for possible letters

As a result the corporate contract entity is immediately updated with provided data in our system.

 

Enable "on this page" menu on doc section
On

Data Export

Data Export

API Reference

Data export solution description

The data export solution is a new external Push Service totally independent from the existing scoring notification request, containing a maximum of information of the transaction and the authentication process.

The platform HUB purposes two kinds connectivity with banks for this purpose.

  • The data are sent by Webservice to API REST bank Server end-point

or

  • The data are sent by file to bank file Server

Data export scheme

The data export solution defined is based on data conveyed in the AReq and RReq messages + Scoring and authentication process.

It takes advantage of the HUB to provide the necessary available data from those messages.

The HUB is the key module to collect and to treat those data as it is the central module involved in the 3DS authentication process. 

The messages contain most of the relevant information needed to get the context of a transaction and to provide enough information to consolidate and refine the authorization process.

Workflow of the process:

  • The HUB collect data from Areq and Rreq messages.
  • The datas are encrypted and sent through messages to the transaction export gateway.
  • The data are sent through a specific gateway to the IS bank according to the selected option (batch file or real time).

Real-time push option

With this solution, bank will be able to receive the data just after the authentication transaction ending (after RReq/RRes message).

The data are pushed to bank through a dedicated Webservice API.

The data will be sent on a REST JSON format. The Web Services will be transmitted in HTTPS - TLS 1.2 and will be configured on the Worldline PCI-DSS Proxy as followed:

  • By default on internet with a mandatory mutualized authentication
  • If asked by the bank, on a VPN or LS

A rate limiter is defined (max TPS) on the HUB push platform and must be configured depending on Issuer Bank transaction volume and IS Bank Server capacity.

If the HUB cannot reach the bank Webservice, a retry process is forecasted. This retry flow is ordered by a FIFO rule.

Two kind of errors are defined, some are due to context and triggers a retry attempt, some are due to data or configuration error and will no triggered any retry. Cf. 3.5.1.2

The retention of data is fixed for a 4 days period. During this time laps the transactions are systematically pushed to the bank until the bank module responds.

After 4 days, the transaction and data not transmitted are deleted from the queue.

Batch file option

With this solution, bank will receive the data through a file.

The file will be generated with a frequency of at least 2 files per day (one per site).

A ‘pull’ or ‘push’ process could be implemented to share the files with IS Bank.

A file system solution will allow Worldline to keep the file during 2 weeks. After this period, the files will be deleted.

The data will be sent on a JSON format through the PCI-DSS gateway on sFTP or PESIT SSL. File could be encrypted in GPG or SMIME.

Enable "on this page" menu on doc section
On

Referential WS Client

Referential WS Client

API Reference

Referential WS Client is the standard referential interfaces exposed by the Issuers' Bank.
ACS is therefore client of the Bank Information System.

Thanks to this API ACS can  :

  • get card information from the Bank Information System ;
  • update cards/users/credentials information to the Bank Information System.

 

Enable "on this page" menu on doc section
On

Referential Batch

Referential Batch

Version 24R2-1.2 of May 14th 2024

The referential card of an issuer is required. It is used for enrollment and authentication needs of cardholders.

In mode batch the issuer sends a periodic file to the platform in order to operate the provisionning of cardholder data.

The referential management is based on a XML file. This file takes in charge the creation of cardholders, cards and authentication data.

Retro compatibility with old XML and flat file formats is managed.

Glossary :

The following list gives a description of acronyms used :

  • WLP-AHB: Worldline Product – Authentication HuB
  • PAN: Primary Account Number
  • CAP: Chip Authentication Program
  • DDN: Birthdate
  • PWD: Password
  • SSN: Social Security number
  • PAM: Personal Assurance Message
  • PGP: Pretty Good Privacy
  • GPG: GNU Privacy Guard
  • PCI: Payment Card Industry

 

1. Historic

DATEVERSIONTYPE DE UPDATEREASONS FOR THE UPDATE
20/03/2017AACreationDocument creation
    
17/08/2017ABUpdateUpdate length
19/09/2017ACUpdateAdd CSV and Positional Format
17/01/2018ADUpdate

Add missing KeyTag attribute in some XML elements

Update some French labels

Remove CSV and Positional Format (refers to old specifications)

26/03/2018AEUpdateAdd/update xml messages examples
16/05/2018AFUpdate

Update length and comments for some fields

Add TA Authentication

01/10/2018AGUpdateAdd Issuer and SubIssuer at card level
05/02/2019AHUpdateCheck rules
19/02/2019AIUpdateBetter handling of invalid inputs
03/01/2020AJUpdateAdd skipped use case
05/10/2020AKUpdate

Added the DeleteTime attribute in “Card” record and structure.

Change email control

02/12/2020ALUpdateChange profil regex
16/02/2021AMUpdate

Change field status on card Level

Update authentication means list

06/05/2021V21R2 1.0UpdateChange versioning norm
29/06/2021V21R2 1.1UpdateFix typo “deletedTime”
13/07/202121R3 1.0UpdateUpdate cardholder ID constraints
18/08/202121R3 1.1UpdateAdded QMYST example into “AuthentiactionData”
18/08/202121R3 1.1UpdateAdded “cardId” attribute in “Card” structure
10/09/202121R3 1.2UpdateAuthenticationDataUpdateMode = Update to delete a credential : definition and example
05/10/202122R1 1.0UpdatePublished version with new graphical charter
24/03/202222R2 1.0PublicationFirst 22R2 Official version
23/05/202222R2 1.1UpdateAdd cardID sample and in structure description
04/07/202222R3 1.0Publication

First 22R3 Official version

Remove DELETED card status

13/07/202223R1 1.0Update

Fix back “DeleteTime”

Fix various format controls

13/12/202223R1 1.1UpdateComplete paragraph “File reject”
20/01/202323R2 1.0UpdateAdd optional field effectiveUpdateDate
30/03/202323R2 1.0PublishFirst 23R2 official version
05/07/202323R3 1.0PublishFirst 23R2 official version – no change
11/09/202324R1 1.0UpdateRemoved references to QMYST
23/02/202424R2 1.0PublishFirst 24R2 official version – no change
03/05/202424R2 1.1UpdateThe batch does not control the field FileNumber.
14/05/202424R2 1.2UpdateUpdateMode  can be set by CREATE_OR_UPDATE and not CREATED_OR_UPDATE
Add SMS as label in AuthenticationData

 

2. Description of referential file in format xml

The structure of file is given by the following figure. The possible values of each field and potential error codes are described in the following tables.

The maximum number of cardholders in a file is limited to 999 999 records.
An example of a report with errors is also available.


 

  2.1. File transfer mode

File transfers are carried out through a VPN tunnel or on Internet. Two protocols are available FTPs or PesitSSL.


 

  2.2. Security of exchanges through file transfers

    2.2.1 File encryption/decryption

Files containing sensitive data can be encrypted using PGP.

GPG is used.

The Issuer must use an encryption program that is compatible with the free GPG program used by equensWorldline, which makes it possible to ensure the authenticity and confidentiality of the transferred file with an RSA key.

GPG is a free implementation of the RSA algorithm that complies with the OpenPGP standard (RFC2440).

A REAL NAME (e.g. IssuerName_3DSAtos), a COMMENT (e.g. Atos 3DS signature by Issuer Name) and an E-MAIL ADDRESS will be specified to generate the keys.

The encryption algorithm used is AES256.

The ISSUER and equensWorldline exchange the public keys via e-mail in ASC format.

Keys are valid for 19 months. 

To comply with PCI, the key must not be used for encryption for more than 12 consecutive months. The expiry date is set to 19 months to allow restoration for 6 months; an extra month is added to the validity period of the key.

File encryption/decryption procedure:

Exchange of keys (carried out every 12 months):

  • ISSUER generates a pair of keys: Public Key (P1) and Secret Key (S1);
  • equensWorldline generates a pair of keys: Public Key (P2) and Secret Key (S2);
  • Issuer and equensWorldline exchange their P1 and P2 public keys.

For the encryption/decryption of a file sent by ISSUER to equensWorldline, the file is encrypted with equensWorldline’s P2 key and signed with ISSUER’s S1 private key.

For the encryption/decryption of a file sent by equensWorldline to ISSUER, the file is encrypted with ISSUER’s P1 key and signed with equensWorldline’s S2 private key.

Keys are renewed through equensWorldline’s change tool. The application manager will get in touch with the customer contact appointed during the creation of the key to ask them to send the new public key; in return, they will provide equensWorldline’s new public key. The content to exchange will be the result of the export of the public key into ASCII. This will be sent via e-mail. To validate the public keys exchanged, each person involved will have to phone their appointed contract to obtain and validate the fingerprint of the key. It is imperative that the fingerprint be validated before the public key is used.

    2.2.2. Data security

The sensitive data contained in the file must be encrypted. Authentication data and card information are considered as sensitive.

For the repository file, the data to encrypt are:

  • The PAN of the Card element;
  • The value of the Authentication element (Phone number, email, date of birth, etc.).

All encrypted data will be encoded in Base64.

Symmetric encryption uses the AES algorithm.

The data are encrypted using 256-bit AES in CBC mode (Cipher Block Chaining); more precisely, it uses a Java implementation called javax.crypto.Cipher "AES/CBC/PKCS5Padding".

Upon each encryption operation, an IV (Initialization Vector) set to empty is used.

The encryption and decryption keys are identical.

The AES key is generated by the Issuer.

A different key will be used for each environment.

The exchange of such key whose generation remains at the responsibility of the issuer is not specified in this document.

 

  2.3. XML file for updating the cardholder repository

XML format è equensWorldline provides the Issuer with the .XSD file that makes it possible to generate this format.

The format will be XML in “MAJ” format according to the particularities of equensWorldline.

A different file transfer identifiers have to be defined for acceptance and production.

Description of referential file in a XML format

The structure of file is given by the following figure. The possible values of each field are described in the following tables. The maximum number of cards in a flat file is limited to 999 999 records.

  2.4. Description of fields

 

Each field must respect constraints in order not to be rejected. The following list gives a description of possible format controls:

  • AN: Alphanumeric
  • A: Alphabetic
  • N: Numeric
  • H: Hexadecimal
  • B64: Base 64

    2.4.1. Record « Header »

 NameMandatorylengthPattern / Values / ContraintsComments
Header (mandatory 1-1)IssuerY5NIssuer Code / Issuer Identifier
SubIssuerN5NSubIssuer Code / SubIssuer Identifier
FileNumberY6NSee specification below
UpdatedY8N (format YYYYMMDD)Date of generation of the file
UpdateModeY-AN (CREATE_ONLY or CREATE_OR_UPDATE)CREATE_ONLY: this mode will create only new cards. If card already exists, do nothing.CREATE_OR_UPDATE: create new cards, update existing one
CardHolderCountY1-6N (< 999 999)Number of cardholders records presents in the file

 

    2.4.2. Structure « Header »

The field FileNumber is incremental and depends on the day when the file is received. So, if this field is valued by 728502, it means that the file is the 2nd file of day 285 of the year 2007. The batch can controls that there does not exist two files with the same identifier and reject it in case of duplication. The batch does not control the field FileNumber.

 

    2.4.3. Record « CardHolder »

 NameMandatoryLengthPattern / Values / ContraintsComments
Cardholder (optional 0-999 999)IdElementYes1-6NCounter of cardholder in the file (incremental)
CardCountYes1-2NNumber of cards declared for this cardholder
IdentifierYes1-36AN + ‘-‘Cardholder identifier
NameNo1-50A – Clear valueLastname of the cardholder
-B64 – encrypted value
FirstNameNo1-50A - Clear valueFirstName of the cardholder
-B64 – encrypted value
LanguageNo2A - ISO 639-1Language
 Card (optional 0-X)IdElementYes1-2NCounter of card for the current CardHolder (incremental)
PANYes-B64 – encrypted valueCard Number (encrypted and base64 or in clear)
16-19N – clear value
OldPANNo-B64 – encrypted valueOld Card Number (encrypted and base64 or in clear)
16-19N – clear value
ExpiryDateNo24B64 – encrypted valueExpiry date (encrypted and base64 or in clear). Clear value must have the following pattern: YYYY-MM
7YYYY-MM – clear value
ProfilSetNameNo1-32AN + ‘-‘Specific profileset to assign to the card instead of bin range profileset
DeleteTimeNo14yyyyMMddHHmmss Date and time of card deletion.
AuthenticationDataUpdateModeYes-« UPDATE » or « DELETE_AND_CREATE »

When a card already exists (and UpdateMode is CREATE_OR_UPDATE), specify what to do with AuthenticationData

· UPDATE: if AuthenticationData is provided for an authentication mean, replace existing values (if any) with provided one. Other authentication means (not provided in file) will be kept.

If AuthenticationData is provided with one specific authentication mean and value = DELETED, the credential will be deleted of all the attached value.

· DELETE_AND_CREATE: Existing AuthenticationData (for all authentication means) will be deleted and replaced by provided one.

When the card doesn’t exist yet, you can provide any of the two values (result will be the same).

StatusNo6-9AACTIVE orINACTIVE. In case of null or invalid value, ACTIVE is chosen by default
IssuerNo5NIssuer Code / Issuer Identifier
SubIssuerNo5NSubIssuer Code / SubIssuer Identifier
 CardIdNo2-36AN + ‘-‘Unique Card identifier
 EffectiveUpdateDateNo14yyyyMMddHHmmss Date used to update user, card and credential. If effectiveUpdate date is superior to cardHolder/card/authenticationData updatedTime field in database, the data will be updated otherwise not. Only work with AuthenticationDataUpdateMode = UPDATE.
 AuthenticationData (optional 0-X)IdElementYes1-2NCounter of Authentication data for the current Card (incremental)
LabelYes0-20ANAuthentication data label
ValueYes1-50AN – clear valueAuthentication data value (encrypted and base64 or in clear)
B64 – encrypted value
PatternNo0-25AN + ‘-‘NONE, DD/MM/YYYY…
MiscellaneousNo0-200ANFuture use
     
CardData (optional 0-1)RIDNo-HFuture use
PIXNo-H
DKINo2H
PSNNo2H
ATCNo4H
AIPNo4H
CVNNo2N
ExpiryDateNo??
?B64 – encrypted value
ModeNo-A

 

    2.4.4. Structure « CardHolder »

 

    2.4.5. Structure « Card »

 

 

    2.4.6. Authentication Data

To process the authentication flow, several authentication data can be stored: 

  • PHONE: the phone number (Deprecated)
  • SMS : mobile phone number
  • SVI : fix phone number for IVR authentication
  • EMAIL: the email address
  • SSN: the Social Security Number, person identifier
  • PAM: the Personal Assurance Message
  • TOKEN: the identifier of the token
  • DDN: the birthdate
  • PWD: the password
  • TA: trusted authentication

HUB phone number must be in international standard E.164 format.
E.164 numbers are formatted [+] [country code] [subscriber number including area code] and can have a maximum of fifteen digits.

 

    2.4.7. Structure « CardData »

Note: CardData is not currently used.

 

    2.4.8. XML message example

Here is an example with:

  • A card where all authentication data are replaces with provided ones,
  • Another card where only EMAIL authentication data is created/updated,
  • And a last one where nothing is created/updated/deleted (since no authentication data is provided)

 

Here is another example with:

  • A card to which we delete the value of a credential,
  • A card where all authentication data are replaces with provided ones

 

    2.4.9. File processing report

During the integration process of XML, a log file can be provided by file transfer. This file contains all rejected records with an error label associated to each reject. The file describes a global report of execution of integration and each error is formatted according to the following rules:

  • If the reject happens in the section Header:
    • Format: Error on Header : Error Label
    • Example: Error on Header : Issuer is invalid
    • Signification: The issuer code mentioned in the Header has invalid format.
  • If the reject happens in the section CardHolder
    • Format: Error on CardHolder(identifier): Error Label
    • Example: Error on CardHolder(identifier=12345678901234567890123456789012345678) : The length of the identifier must be between 1 and 36
    • Signification: The Cardholder with identifier 12345678901234567890123456789012345678 has a field Identifier whose length is too long.
  • If the reject happens in the section Card
    • Format: Error on CardHolder(identifier) - Card# : Error Label
    • Example: Error on CardHolder(identifier=111447612) - Card#1 : PAN is invalid Signification: The PAN of card having the IdElement=1 in section CardHolder having identifier=111447612 is invalid or missing.

 

    2.4.10. Example file log report

 

    2.4.11. Description

For each batch, the report file starts by “start execution date” and “file name” and finishes by “returned code”, “job Id”, “end execution date” and “duration”.

Between the start and the end of execution, we have all reported data errors, as described in previous section. This is followed by a summary of the number of cards treated, and number of found records for each kind of movement.

 

3. Validation rules for xml format

 

  3.1. Header

SectionFieldPresenceControlsType of rejectError Label
Header (Mandatory)IssuerMandatory5 digitsFile

Issuer is missing

Issuer is invalid

Existing in DBFileError on Issuer/Subissuer retrieval
SubIssuerOptional5 digitsFileSubIssuer is invalid
Existing in DBFileError on Issuer/Subissuer retrieval
FileNumberMandatory6 digitsFile

File number is missing

File number is invalid

UpdatedMandatoryDate in YYYYMMDD formatFileUpdated is missing
UpdateModeMandatoryEquals to CREATE_ONLY or CREATE_OR_UPDATEFile

Update mode is missing

UpdateMode is invalid

CardHolderCountMandatoryNumeric >0File

The number of cardholder is missing

The number of cardholder cannot be less than 1

 

  3.2. CardHolder

SectionFieldPresenceControlsType of rejectError Label
CardHolderIdElementMandatoryNumeric >0CardHolder

The idElement is missing

The idElement must be numeric >0

CardCountMandatoryNumeric >0CardHolder

The cardCount is missing

The cardCount must be numeric >0

IdentifierMandatoryAlphanumeric (and ‘-‘) of length [1;36]CardHolder

The identifier is missing

The length of the identifier must be between 1 and 36

NameOptionalAlphanumeric of length [0;50]CardHolderName length cannot be more than 50 characters
FirstNameOptionalAlphanumeric of length [0;50]CardHolderFirstName length cannot be more than 50 characters
LanguageOptionalAlphabetic of length [2]CardHolderLanguage is invalid

 

  3.3. Card

SectionFieldPresenceControlsType of rejectError Label
CardIdElementMandatoryNumeric >0CardHolder

The idElement is missing

The idElement must be numeric >0

PANMandatoryNumeric of length [16;19]CardHolderPAN is invalid
OldPanOptionalNumeric of length [16;19]CardHolderOld PAN is invalid
Existing in DBCardHolderCan't replace Card because old card doesn't exist with given PAN!
ExpiryDateOptionalFormat YYYY-MMCardHolderExpiryDate is invalid
ProfilSetNameOptionalAlphanumeric (and ‘-‘) of length [1;32]CardHolderThe profilSetName is invalid
AuthenticationDataUpdateModeMandatoryEquals to UPDATE or DELETE_AND_CREATECardHolder

The authentication data update mode is missing

The authentication data update mode is invalid

IssuerOptional5 digitsCardHolderIssuer is invalid
Existing in DBCardHolderError on Issuer/Subissuer retrieval
SubIssuerOptional5 digitsCardHolderSubIssuer is invalid
Existing in DBCardHolderError on Issuer/Subissuer retrieval
StatusOptional---
CardIdOptionalAlphanumeric (and ‘-‘) of length [2;36]CardHolderThe length of the card identifier must be between 2 and 36
DeleteTimeOptionalyyyyMMddHHmmss CardHolder-
EffectiveUpdateDateOptionalyyyyMMddHHmmss CardHolder-

 

  3.4. AuthenticationData

SectionFieldPresenceControlsType of rejectError Label
AuthenticationDataIdElementMandatoryNumeric >0CardHolder

The idElement is missing

The idElement must be numeric >0

LabelMandatoryAlphanumeric (and ‘-‘) of length [0;20]CardHolder

The authentication label is missing

The authentication label is invalid

Equals to SMS, PHONE, EMAIL, PWD, SSN, TOKEN, PAM, DDN, …AuthenticationDataAn unknow authentication mean ([LABEL]) appears in the file (once or more). It will be ignored.
PatternOptionalAlphanumeric (and ‘-‘) of length [0;25]CardHolderThe pattern is invalid
ValueMandatory

PHONE, SMS, SVI: has phone number format (according to the Google API PhoneNumberUtil)

EMAIL: corresponds to regular expression: ^(\w[-.\w]*)@([-\w]+(?:\.[-\w]+)*)\.([A-Za-z]{2,20})$

 

CCP: corresponds to regular expression: ^[A-Za-z0-9]{11}$

DDN: DD/MM/YYYY

CardHolder

Authentication value format isn't correct

The value is missing

The pattern is invalid

 

4. Functional Validation rules

 

4.1.  File reject

If more than 5% of lines are in error the file is rejected with an error code 12 : “Batch KO, number of line errors greater than 5%”.

The blocking errors :

If the header is empty the file is rejected with an error code 40 : "No header specified"
If the header format is invalid the file is rejected with an error code 41 : "Specified header is incorrect"
If the header format is invalid the file is rejected with an error code 18 : "Error read input file xml"

Non-blocking errors threshold:

A skip limit can be defined for the non-blocking exceptions if this limit is reached the file is rejected.
By default the parameter is set to 100%.

Skip limit parameter : ${app-skip-limit}

 

4.2.  Skipped requests

On batch process, the skipped card are corresponding to the specific use case :

  • On ACS3 XML format
    • Record Card in UpdateMode = CREATE_ONLY but the card is already exist in Data Base, so we can’t create it , so request is skipped
  • On ACS1 XML or CSV format

    • Record Card with ModificationType = RENEWAL but the card doesn’t exist in Data Base, so we can’t renewal it, so request is skipped
    • Record Card with ModificationType = DELETION but the card doesn’t exist in Data Base, so we can’t delete it, so request is skipped
    • Record Card with ModificationType = REPLACE but the card doesn’t exist in Data Base, so we can’t replace it and retrieve the initial credentials, so request is skipped

     

Enable "on this page" menu on doc section
On

General Terms

General Terms

 

1. Terminology

Here below you will find the acronyms used and their meanings:

Acronym/Common Name

Meaning

AC / CA

Certification Authority

ADS

3D Secure service use case 
(registration of a new authentication credential)

AES

Advanced Encryption Standard

API

Application Programming Interface

APM

Authentication Process Management

CAP

Chip Authentication Program

GCM

Galois/Counter Mode

CH

Card Holder

CR

Central Repository

GZip

GZip is a compressed file format base on the deflate algorithm. Please refer to RFC 1952 for more information

HTTPS

HyperText Transfer Protocol Secure

ITA

Identity, Trust and Authentication

JSON

JavaScript Object Notation

OOB

Out Of Band

OTP

One Time Password

OTRC

One Time Registration Code

PAN

Primary Account Number

PCI

Payment Card Industry

REST

reStructuredText

UCR

Unconnected Card Reader

URL

A Uniform Resource Locator (also known as web address, particularly when used with HTTP), is a specific character string that constitutes a reference to a resource. Please refer to RFC 3986 for more information.

UUID

Universally Unique Identifier. Please refer to RFC 4122 for more information.

REINIT

3D Secure service use case 
(update of existing authentication credential)

WL

Worldline

 

2. Overview

ITA Sec Authentication Hub exposes a unified API for host-to-host communications.

The methods are exposed through a RESTful API built on HTTP and JSON.

As per the REST principles:

  • All the methods are accessed by performing an HTTP request to the web service endpoint,
  • URL are used to access the data
  • HTTP bodies carry the representation of the business objects (elements),
  • HTTP verbs are used to indicate the action to perform :
    • POST: create a new element for which no identifier is known
    • PUT: update an element, or create a resource for which the identifier is known in advance
    • GET: retrieve one or more elements
    • DELETE: delete an element

 

3. Versioning

From version 2019R2.0, the version number has been included in the service URI. By default, when the version is not provided in the URI, the version 2019R1.0 implementation is used.

Version URI parameter

Version used

none

2019R1.0

2019R1-1.0

2019R1.0

2019R2-1.0

2019R2.0

2021R1-1.0

2021R1.0

2021R2-1.0

2021R2.0

2021R3-1.0

2021R3.0

2022R1-1.0

2022R1.0

2023R1-1.0

2023R1.0

2023R2-1.0

2023R2.0

Examples of URI :

/referential/rest/2019R2-1.0/public/updateCardWithCredentials/669c8c64-e71f-4e87-8966-cb578a86074e

/referential/rest/2021R1-1.0/public/updateCardWithCredentials/3aaa4686-d139-4822-b193-6a0140467264

 

4. Connectivity

  4.1. Network

All the services are exposed through the HTTPS protocol (RFC 2818) TLS 1. 2.

No HTTP compression (RFC 2616) is activated.

 

  4.2. Security

In order to secure the communication channel between the bank and authentication HUB, the mutual authentication is recommended.

 

     SSL Client

Authentication Hub will provide a Certificate Request based on Bank recommendation.

Bank must sign the certificate with AC of its choice.

The certificate file must comply with the PKCS10 format and be base-64 encoded.

 

  4.3. IP Filtering

In case of IP filtering on server side firewalls, the IP address of EWL for incoming requests are provided below:

ACS3

DEV/IAT

160.92.7.69

160.92.7.70

160.92.184.192

160.92.184.193

CAT

160.92.184.192

160.92.184.193

160.92.186.211

160.92.128.189

PROD

160.92.186.93

160.92.152.3

160.92.119.160

160.92.135.97

 5. Interfaces

  5.1. Format

The data exchanged is serialized using

The character set supported for input and output data is UTF-8 (RFC 3629).

  5.2. Common headers (for WS Client)

       5.2.1. Hypermedia

Hypermedia is used to specify content type and charset to be used.

Currently supported values are:

  • Content type: json
  • Charset: UTF-8
 

Accept

Description

Header to ensure acceptance of a JSON UTF-8 response compatible with target version of the API

Mandatory

Yes

Format

application/json

Example

application/json

Table 1 - Hypermedia input header

 

Content-Type

Description

Header that denotes the API version, content type and charset of the response.

Mandatory

Yes

Format

application/json

Example

application/json

Table 2 - Hypermedia output header

       5.2.2. Oauth 2.0

API could be secure by using Oauth 2.0 protocol. All API requests using Oauth 2.0 must contain at least the following headers: Date, Digest and Authorization.

In order to verify that the message was not tampered with during transit, a signature is also requested.

Two types of signature can be implemented :

  • HTTP signature, in this case, API requires a "Signature" header to be supplied
  • JWS signature, in this case, API requires an "X-JWS-Signature" header.
 

Date

Description

The "Date" header field represents the date and time at which the message was originated

Mandatory

Yes

Format

The expected format is a fixed-length and single-zone subset of the date and time specification used by the Internet Message Format in GMT

Example

Wed, 25 Oct 2023 13:00:05 GMT

 

Digest

Description

The "Digest" header is used to verify the integrity of the message body exchanged between Client and Server platforms.

Mandatory

Yes

Format

The digest is done by calculating the SHA-256 hash of the payload of the message and Base64 encoding the hash. The digest is prefixed by string “SHA-256=”.

Example

SHA-256=8HAW5Ig3X/RCOG840pFdji5JnPGNa4i32lsilUt3qK4=

 

Authorization

Description

Field used for request authorization on the OAuth2 side. It contains the bearer token ; A security token with the property that any party in possession of the token (a "bearer") can use the token in any way that any other party in possession of it can.

The access token is returned in response of /oauth2/token endpoint

Mandatory

Yes

Format

String of alphanumeric characters, up to 2048

“Bearer ” + access token value

Example

Bearer eyJjdHkiOiJKV1QiLCJlbmMiOiJBMjU2Q0JDLUhTNTEyIiwiYWxnIjoiZGlyIn0..yQGpzEpF3OT1y_QZUzL2Ag.mLiSvEZE
lh2ryJOFGDwmb1hvP-2vAgUck20qzj5uExfWSodomogSGk1lHaJEHo3Oa3C4yzdpGVRz6C2crWHKzUxgrNgNzV2sTxFf_FpW
-OueEZwW3Sf41qi7dWoIHMaFc6v7hJOsrWrELv7nBnY1xKQ7TCll37xW6JgSEM_IyAvGopaME1WnWvbN2k_lOUcJowxQut
FtRzey8c0VNPKFOj3XG9PvdeApcyZoGj7Emi9whJ_OsCSzyYRmTEZ-KR9Ay6383nedhANUTbAsZgD18Jzty0be7hCbnnR
Rgr4tt7thIIoAK99G14ZWJTRS7iOG41Srch30PkXskp9PG3sa4KgQqgE_bCgVtZgGTN19A7taVPYo6V7oeeM_iufzkhMu
yHuwomKRWhW0moXikHcFLO0ACg3FpdQl8Seflq9hLHqYSTli4gyo04syq9VkZ0HjKyaIXb4iF6OAVNGX8h80BzzRgRTMb
hEcu_PQWiwdJ6fHgINRM3tWFvhIwIdKiIeOBVy5wSKLrDxCRUZTTMafknhaVqflncDuvJJ4A9ebNcVblhViFNgRzQkDY
lbIXKpfblc-7iDUGowyF9GES2ReGrLPWPc0vXt6LTLbwqpeOMoLYRR5X9x-NwQYA_Dm_f8bdMsEDfI_PqOuRFI5jioZGr
qBXCBdlT7Oq5mxJRNSOY5mP--vcJQsKlbpIuPoExRRGLcVR6TgCeVL5R_gshonSiPohn2dG1oyxU5UYC4mpDkg9B1p7O
FggvoIiUKlT41m.1-iOmA8AuGxZo6sn9k3JXuBsAhRM1bJWQSfYfiUK5Qk"

]

          5.2.2.1. HTTP signature

 

Signature

Description

The signature header requires the 4 following parameters to be supplied:

- keyId - The client ID of HUB platform defined during the Oauth 2.0 project,

- algorithm - The algorithm can be 'rsa-sha256',

- headers - The list of the headers that will be included in the signature, currently the headers required are '(request-target) date digest',

- signature - The calculated signature of the header values, using the chosen algorithm (eg. rsa-sha256).

Mandatory

Yes for HTTP Signature

Format

String of alphanumeric characters

Example

keyId=\"e77d776b-90af-4684-bebc-521e5b2614dd\",algorithm=\"rsa-sha256\",headers=\"(request-target) date digest\",signature=
\"v7aAwExqWvvksa3OqwTF1aSumK2LDj3K8B8zxRTn+uc3dENlkAK9vptpTYYL/djHYcRB277EAopP0TCD6xZNwyA4vAdFJCsZc81a74c6zW8PgMAScFeIeLqIbJ1BbrYu1WUyhIHiS1Sa9
09NyjqmGrN4eGanGe4c8ve2sdbfuv4cC/4jrdKFfoLN8uvgF5XFqrfXih6C990OX4c2pKetroEuLOY3nkM2584XdAuo6jRHg78f4BfCg
HZ8qOH8uVls3dXhMQxgyzTov2UA73zfczX5XM3ugU219gBBm5Z5XOWq2KJrxJQ1GrHY1rTaehzSmIIpQrjO/W6cyJ8lLAfQvw==\""

]

          5.2.2.2. JWS signature

 

X-JWS-Signature

Description

JWS Signature is composed of [protected header].[payload].[signature value] where :

- protected header encoded in B64

- payload is empty

- Signature is the B64 encoded result of Signature of JWS B64 encoded header concatenate with HTTP header String

Mandatory

Yes for JWS signature

Format

String of alphanumeric characters

Example

Cf. description below

The JWS structure shall be carried in HTTP header field named "x-jws-signature".

A JWS protected header parameter is composed of parameters :

  • "b64” ; the JWS header shall include b64 header parameter set to false
  • “x5t#S256” is the digest (fingerprint) of the X.509 signing certificate using SHA 256. "x5t#S256" shall be checked against the certificate used to validate the signature
  • crit:["sigT","sigD","b64"] - Non-standard JWS header parameters (ie. not defined in RFC 7515), which are critical
  • "sigT" shall be present and set to the time that the signature was created. The time shall be indicated in UTC (ending in "Z") and shall indicate date and time to the second.
  • "sigD" header parameter shall be present and shall contain :
    • “mId" set to http://uri.etsi.org/19182/HttpHeaders
    • "pars" should include the following HTTP Header field names:
      • "(request-target)" for HTTP Requests
      • "Content-Type"
      • “Digest” enables protection of the HTTP Body
    • "alg" identifies the cryptographic algorithm used to create the JWS Signature Value. Use RS256

Example of protected header

    { "b64":false,
    "x5t#S256":"dytPpSkJYzhTdPXSWP7jhXgG4kCOWIWGiesdzkvNLzY",
    "crit":[ "sigT", "sigD", "b64" ], 
    "sigT":"2023-11-26T11:26:57Z",
    "sigD":{ "pars":[ "(request-target)", "content-type", "digest" ],
    "mId":"http://uri.etsi.org/19182/HttpHeaders" 
    }, 
    "alg":"RS256"
    }

Example of protected header encoded in B64 (without line breaks or extra spaces)

eyJiNjQiOmZhbHNlLCJ4NXQjUzI1NiI6ImR5dFBwU2tKWXpoVGRQWFNXUDdqaFhnRzRrQ09XSVdHaWVzZHprdk5MelkiLCJjcml0IjpbInNpZ1QiLCJzaWdEIiwiYjY0Il0sInNpZ1QiOiIyMDIzLTExLTI2VDExOjI2O
jU3WiIsInNpZ0QiOnsicGFycyI6WyIocmVxdWVzdC10YXJnZXQpIiwiY29udGVudC10eXBlIiwiZGlnZXN0Il0sIm1JZCI6Imh0dHA6Ly91cmkuZXRzaS5vcmcvMTkxODIvSHR0cEhlYWRlcnMifSwiYWxnIjoiUlMyNTYifQ

 

A HTTP header parameter

  • request-target :
  • digest :
  • content-type : application/json

Example of HTTP header

    (request-target): post /initiateAuthentication
    content-type: application/json
    digest: SHA-256=+xeh7JAayYPh8K13UnQCBBcniZzsyat+KDiuy8aZYdI=

Where digest is the hash in SHA-256 of request body

All the header parameters contained in JWS Protected Header are protected by the signature.

The data must be signed with the private key (associated with the certificate identified in "x5t#S256") by using the chosen algorithm (specified in “alg” parameter).

Data to sign is the concatenation of protected header encoded in B64 and HTTP Header separated by “.”

Example of input Data for Signature

    eyJiNjQiOmZhbHNlLCJ4NXQjUzI1NiI6ImR5dFBwU2tKWXpoVGRQWFNXUDdqaFhnRzRrQ09XSVdHaWVzZHprdk5MelkiLCJjcml0IjpbInNpZ1QiLCJzaWdEIiwiYjY0Il0sInNpZ1QiOiIyMDIzLTExLTI2VDExOjI2OjU3WiIsInNpZ0QiOnsicGFycyI6WyIocmVxdWVzdC10YXJnZXQpIiwiY29udGVudC10eXBlIiwiZGlnZXN0Il0sIm1JZCI6Imh0dHA6Ly91cmkuZXRzaS5vcmcvMTkxODIvSHR0cEhlYWRlcnMifSwiYWxnIjoiUlMyNTYifQ.(request-target): post /initiateAuthentication

content-type: application/json
digest: SHA-256=+xeh7JAayYPh8K13UnQCBBcniZzsyat+KDiuy8aZYdI=

Example of Signed Data

    Q9ZSYXJ0QWSoPBfBUR58Sqplw7BQcrcqVR6rvnqfBOvosbBLcsBjkjzi1kCF 2cJsHTJRtp6GcJmZplqRg-7_QBKQAgkUq0BGQpzZwhVYrvP0opdLEarVBrej YA05gt3qnleuS53DWmyZu9iNxhwJTYVPyXediwo3TIlSn-8XjSTZAVHa728E WK6XzRC9rEroXYPYd23iQLXetMygLaDhRT2lGhV5WvmO0wC0B6RbGiYl2zIv D0XliMP6MidX4SDY5zlzyWyFlHqX7eHpkH8xxqAsBdKb16y4IdOoRhil9yws vlzkG6-U9jmBU4y_m3mZArD22oRVXTywzFn9NUtY9w

X-JWS-Signature is the concatenation of protected header encoded in B64 and Signature value separated by “..”

Example of JWS Signature

   eyJiNjQiOmZhbHNlLCJ4NXQjUzI1NiI6ImR5dFBwU2tKWXpoVGRQWFNXUDdqaFhnRzRrQ09XSVdHaWVzZHprdk5MelkiLCJjcml0IjpbInNpZ1QiLCJzaWdEIiwiYjY0Il0sInNpZ1QiOiIyMDIzLTExLTI2VDExOjI2OjU3WiIsInNpZ0QiOnsicGFycyI6WyIocmVxdWVzdC10YXJnZXQpIiwiY29udGVudC10eXBlIiwiZGlnZXN0Il0sIm1JZCI6Imh0dHA6Ly91cmkuZXRzaS5vcmcvMTkxODIvSHR0cEhlYWRlcnMifSwiYWxnIjoiUlMyNTYifQ..Q9ZSYXJ0QWSoPBfBUR58Sqplw7BQcrcqVR6rvnqfBOvosbBLcsBjkjzi1kCF 2cJsHTJRtp6GcJmZplqRg-7_QBKQAgkUq0BGQpzZwhVYrvP0opdLEarVBrej YA05gt3qnleuS53DWmyZu9iNxhwJTYVPyXediwo3TIlSn-8XjSTZAVHa728E WK6XzRC9rEroXYPYd23iQLXetMygLaDhRT2lGhV5WvmO0wC0B6RbGiYl2zIv D0XliMP6MidX4SDY5zlzyWyFlHqX7eHpkH8xxqAsBdKb16y4IdOoRhil9yws vlzkG6-U9jmBU4y_m3mZArD22oRVXTywzFn9NUtY9w
 
  5.2. Common headers (for WS Client)

 5.3. Common headers (for WS Server)

  5.3.1. Common headers request

 

Accept

Description

Header to ensure acceptance of a JSON UTF-8 response compatible with target version of the API

Mandatory

Yes

Format

^application/json; *charset=UTF-8$

Example

application/json; charset=UTF-8

 

Content-Type

Description

Header that denotes the API version, content type and charset of the response.

Mandatory

Yes

Format

^application/json; *charset=UTF-8$

Example

application/json; charset=UTF-8

 

Request-Identifier

Description

Unique identifier (UUID) of the request. Field “requestId”.

Used to correlate logs between Authentication HUB and the client.

Important note : as part of a protection against requests replay providing the same identifier twice within a short time range will result in the server refusing the request

Mandatory

Yes

Format

String of 36 characters, standard representation of a UUID ( {time_low}-{time_mid}-{time_high_and_version}-{variant_and_sequence}-{node} )

Example

38400000-8cf0-11bd-b23e-10b96e4ef00e

 

Request-Date

Description

UTC datetime at which the request has been issued.

String of characters complying with the ISO 8601 datetime format

Mandatory

Yes

Format

YYYY-MM-DDThh:mm:ss

Example

2015-07-02T20:07:59

  5.3.2. Common headers response

 

Date

Description

Date contains the date and time at which the message was generated

Mandatory

Yes

Format

day-name, day month year hour:minute:second GMT

Example

Fri, 17 Sep 2021 09:34:19 GMT

 

Content-Type

Description

Header that denotes content type of the response.

Mandatory

Yes

Format

application/json

Example

application/json

 

Content-Length

Description

Content-Length indicate the size of entity-body in decimal no of octets.

Mandatory

Yes

Format

decimal

Example

393

 5.4. Api-Key

A parameter, called “Api-Key” is automatically added in the requests by the HUB Applicative Firewall. This value contains the certificate CN provided by Client during mutual authentication process.

This field must not set or define in the API; it’s an internal field.

 5.5. Encryption

Some fields, corresponding to sensitive data, can be either encrypted or plain. In this case, there is a type, a value and a key tag attribute.

When the type is encrypted, the value attribute is a String, before encryption and after being decrypted. The encrypted result is in Hexadecimal format compliant with JSON structure. That’s why this field doesn’t need to be parsed into JSON object.

Only for plain formats, the value needs to be casted to as JSON object. As a result, all the double quotes characters need to be escaped by a backslash, resulting to the following format: "\"PWD\": {\"pwd\":\"@value\"}".

When sensitive fields are encrypted, a “keyTag” value is requested to identify the key used. The “keyTag” value must be defined per field. Same keytag value could be used for all data.

  5.5.1. Encryption

Sensitive data will be encrypted with AES256bits (RFC 3565) encryption in CBC or GCM mode with an initial vector either filled with 0 (in case parameter initializationVector is not filled or at “false”) or with the requestId without “-“ character. The data to encrypt will be padded using PKC7 padding.

The encrypted field is always exchanged in Hexadecimal format.

  5.5.2. Samples

Key

XOR1: B3EE911BA049ADBEE36B0445C8FC8A2832E7646316F111BCFA3EE062B0379E23
CCV1: BF36D7

XOR2: 50A813F0A59FFADDFEFE06904A4E4E42DF30026CE63FECEEAB92043C667FBC0C
CCV2: DA684A

Clear key: E34682EB05D657631D9502D582B2C46AEDD7660FF0CEFD5251ACE45ED648222F
KCV: 84A0D9

Encryption (CBC)

IV: 00000000000000000000000000000000
Data to encrypt (Clear PAN): 4263540111825682
Data encrypted – in hexadecimal: 11A18541F9C9E748F62186292BC2DB48BF407F2B049390FBE1037D00AF5FACDA

IV: 384000008CF011BDB23E10B96E4EF00E
Data to encrypt (Clear PAN): 4263540111825682
Data encrypted – in hexadecimal: 13FA6DE3AA4C939865D5095A14BE22E95E94C9933EA20F32369423270282EC97

Encryption (GCM)

IV: 00000000000000000000000000000000
Data to encrypt (Clear PAN): 4263540111825682
Data encrypted – in hexadecimal: 68e94ab51334a794c10ebdb76b7480cebb740d8d655396cf7626b1177ad9a78f

IV: 384000008CF011BDB23E10B96E4EF00E
Data to encrypt (Clear PAN): 4263540111825682
Data encrypted – in hexadecimal: 0ead51b9582223c003fcf13195fd3c83d39c2f8cb6a6000dfcc758401fb5e7ea

 5.6. Response code

  5.6.1. HTTP codes

HTTP codes are used as a first level of information as to know whether a request has been properly handled or not. The caller must consider these codes in compliance with the HTTP specification.

HTTP codes used:

Code

Description

200

OK (success)

201

CREATED (new url)

202

ACCEPTED

204

No Content (success)

400

BAD REQUEST (format error)

403

FORBIDDEN (failure)

404

NOT FOUND

500

INTERNAL SERVER ERROR

504

TIMEOUT

520

Web server is returning an unknown error

  5.6.2. Error body

Whenever a business management exception occurs, in addition to the HTTP code, an error representation is returned into the body in addition of the nominal content. To ensure confidentiality, only a detailed code is returned (9 digits). This code is to be matched against the dedicated documentation to be interpreted. In the event of an unexpected error, no code is provided. The error content structure is defined below.

Body Attribute

Possible values

errorCode

9-digits code

The body of error message contains additional optional attributes which are only provided in order to facilitate analyzing in case of issue.

 

Attribute

 

Possible values

Format

Error Body

service

C

Service provided in request

String of 1 to 255 characters

issuerCode

C

Issuer Code provided in request

String of 5 characters

subIssuerCode

C

Sub issuer code provided in request

String of 5 characters

requestId

C

Request Identifier provided in request

UUID

errorCode

M

Error Code

9-digits code

origin

O

For logging and analyzing

 

message

O

For logging and analyzing

 

originVersion

O

For logging and analyzing

 

originHost

O

For logging and analyzing

 

contextTemporary

O

For logging and analyzing

 

principal

O

For logging and analyzing

 

Sample of error response

    {
    "issuerCode": "00006",
    "subIssuerCode": "00006",
    "requestId": "b8b1d1ae-3b65-48a2-b331-9607ab295412",
    "service": "ACS_U5G",
    "errorCode": "404030000",
    "origin": "REFERENTIAL",
    "message": "com.wl.gbl.ah.utils.services.exception.AuthenticationHUBExceptionV2: Card not found",
    "originVersion": "21R1.5-P-37",
    "originHost": "tqahx002v",
    "contextTemporary": {}
    }
Enable "on this page" menu on doc section
On