Integration Flow

This guide outlines the integration flow with Identiq for payment transactions optimization. It details how session IDs are managed, when to call the Identiq APIs, and the expected responses and response codes.

API Categories

Identiq Authentication API: Obtain API key and secret for secure access to our services.

Card Authorization APIs:

  • Pre-Auth Request API (pre-auth-req): Retrieves an optimized authorization payload in real-time for PSPs and acquirers to send to card networks.
  • Post-Auth Response API (post-auth-res): Collects the full authorization request and response details after completion for analysis and reporting.

3DS Authentication APIs:

  • Pre-3DS Request API (Coming soon): Retrieves an optimized 3DS authentication request (AREQ) payload in real-time
  • Post-3DS Response API (post-3ds-res): Collects the full 3DS request and response details after completion for reporting and analysis.

πŸ“˜

API Endpoint

Each endpoint must include the target acquirer bank or 3DS provider ID, as PSPs may work with multiple partners. Make sure you call the correct endpoint.

Example Flow

  • Authenticate: Call the Identiq authentication-api to receive your API key and secret.
  • Prepare Metadata object: Prepare a set of metadata required for Identiq API calls such as the merchant details
  • Post-3DS Response: After each 3DS transaction, call post-3ds-res with the full request and response details. This is an optional step that is only required for transactions who passed thought 3DS authentication
  • Pre-Authorization Request: Before processing a card authorization, call pre-auth-req to receive the optimized payload.
  • Post-Authorization Update: After each authorization transaction, call post-auth-res with the complete request and response data.

Quick Integration Guide

1 - Obtain API Key

Identiq is using the OAuth 2 authorization framework. Call the authentication API with your credentials to receive an API key and secret for future requests.

When you call the authentication API, you will receive both an access token and a refresh token. The refresh token is a long-lived credential, which includes a TTL (time-to-live) value indicating its expiration. It’s important to refresh the token before it expires to maintain continuous access, allowing you to request a new access token without needing to re-authenticate with your credentials.

Make sure you use the proper CLIENT_ID and CLIENT_SECRET.

  • Expected Input: API user credentials.
  • Output: API key and secret for secure access.

Example request and response:


{
    
     "audience": "https://identiq.com/v1/api",
     "client_id": "CLIENT_ID",
     "client_secret": "CLIENT_SECRET",
     "grant_type": "client_credentials"
}
{
  "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Ik0wVXhSakV3UmtNMk9UTTBSa1pCT1VFMlJUSkNOREJEUkRKRFFUbEZOVEJET0RZM016azVSZyJ9.eyJodHRwczovL2lkZW50aXEuY29tL3RlbmFudCI6IkxBWk5lcU14VFJubGs1blRheTlaIiwiaXNzIjoiaHR0cHM6Ly9pZGVudGlxLXByb3RvY29sLmF1dGgwLmNvbS8iLAbBmSc2JltKukrmRtrdjo1lH7O6GZb04IlOOKUzFzFnK1Gp9g1s55c4asqY_uTukLXLGExO56V-gDT_uPVf4UBMvu-9EAfXU1Z4iA6GnIrQud9GcORfi3x4R2gqGgQWRf1AAc87FoTDRZdi-RMyug",
  "token_type": "Bearer",
  "expires_in": 63211,
  "scope": "create:verification read:verification"
}

In the response, you will receive the access token which needs to be cached for the next few hours (expires_in provides the number of seconds until the token is expired).

πŸ“˜

Read more

Full API Reference Documentation for the Authentication API can be found here: Token

2 - Prepare Metadata

Prepare the set of metadata required for Identiq requests, as this object is used throughout Pre-Auth and Post-Auth requests. The metadata includes:

{
 		"identiqSessionId": "5da42ghghg",
    "partnerPaymentId": "uV7qelQg",
    "merchantName": "Commerce Records",
    "merchantId": "15483",
    "merchantCountry": "US",
    "mcc": "8944",
    "recurringType":"initial"
}

NOTE: an identiqSessionId is required to identify all calls the belong to the same payment sequence. If no session id is provided, it will be generated on the first call in the sequence. Future calls belonging to the same sequence must include the same session_id to allow events to be linked to each other. See details below.

Field Β Β Β Β  Description
partnerPaymentId The transaction identifier used by the partner to track the payment.
If multiple events are associated with this transaction (such as 3DS authentication, authorization, etc.), this ID should remain consistent across all events.
identiqSessionIdA unique identifier generated by Identiq for each transaction flow. The session ID should be included in all subsequent calls after it is first generated. see 'Identiq Session ID Handling' below for more information.
merchantIdThe identifier for the merchant as recognized by the partner, ideally consistent across different acquirers.
merchantNameThe name of the merchant.
merchantCountryThe country where the merchant is registered.
MCCThe merchant category code (MCC) associated with the merchant within the specific acquirer.
partnerResponseCodeUsed only in Post-Auth and Post-3DS requests.
This represents the internal transaction status as translated by the partner based on schema and acquirer reason codes
recurringTypeSpecifies whether the transaction is non-recurring, recurring initial, or recurring subsequent

Identiq Session ID Handling

A session ID is a unique identifier generated by Identiq for each transaction flow.
It ensures consistency across all Identiq API calls related to a specific payment attempt.
The session ID should be included in all subsequent calls after it is first generated.

When is the Session ID Created?

The session ID is first generated on the first API call to Identiq in a given transaction flow.
The first Pre-3DS or Pre-Auth call will generate the session ID.

How to Use the Session ID?

The session ID should be included in all subsequent API calls related to the transaction.

API CallSession ID Generation
Pre-3DS Request(coming soon)
Pre-Auth RequestFirst call generates session ID
Post-3DS UpdateRequires session ID
Post-Auth UpdateRequires session ID

3 - Update 3DS outcome

After completing 3D Secure authentication, update Identiq with the authentication outcome.
The session ID must be included to link the update to the correct transaction flow.
Each endpoint must include the target 3DS provider ID, as PSPs may work with multiple partners. Use the access_token from the previous call.

  • Expected Input: Full 3DS request and response data, including authentication status and relevant metadata.

πŸ‘

Pass the Authentication Payloads As-Is

Ensure that the payment payload is sent to Identiq exactly as it will be submitted to, or had been received from the 3DS vendor without any modifications.

Example request and response:


{
  "metadata": {
 		"identiqSessionId": "",
    "partnerPaymentId": "session_1234",
    "merchantName": "best commerce",
    "merchantId": "123",
    "mcc": "50",
    "recurringType":"initial",
    "partnerResponseCode": "0"
  },
  "request": {
    "acctID": "ActiveServer 3DS Test Account 000000001",
    "acctInfo": {
      "chAccAgeInd": "03",
      "chAccChange": "20160712",
      "chAccChangeInd": "04",
      "chAccDate": "20140328",
      "chAccPwChange": "20170328",
      "chAccPwChangeInd": "02",
      "nbPurchaseAccount": "11",
      "paymentAccAge": "20160917",
      "paymentAccInd": "04",
      "provisionAttemptsDay": "3",
      "shipAddressUsage": "20160714",
      "shipAddressUsageInd": "04",
      "shipNameIndicator": "02",
      "suspiciousAccActivity": "01",
      "txnActivityDay": "1",
      "txnActivityYear": "21"
    },
    "acctNumber": "7654310438720050",
    "acctType": "03",
    "authenticationInd": "01",
    "authenticationInfo": {
      "threeDSReqAuthData": "validlogin at UL TS BV",
      "threeDSReqAuthMethod": "02",
      "threeDSReqAuthTimestamp": "201711071307"
    },
    "browserInfo": "eyJicm93c2VyQWNjZXB0SGVhZGVyIjoidGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksKi8qO3E9MC44IiwiYnJvd3NlcklQIjoiMTkyLjE2OC4xLjExIiwiYnJvd3NlckphdmFFbmFibGVkIjpmYWxzZSwiYnJvd3Nlckxhbmd1YWdlIjoiZW4iLCJicm93c2VyQ29sb3JEZXB0aCI6IjQ4IiwiYnJvd3NlclNjcmVlbkhlaWdodCI6IjQwMCIsImJyb3dzZXJTY3JlZW5XaWR0aCI6IjYwMCIsImJyb3dzZXJUWiI6IjAiLCJicm93c2VyVXNlckFnZW50IjoiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgNi4xOyBXaW42NDsgeDY0OyBydjo0Ny4wKSBHZWNrby8yMDEwMDEwMSBGaXJlZm94LzQ3LjAifQ",
    "browserInfoCollected": {
      "browserAcceptHeader": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
      "browserColorDepth": 48,
      "browserIP": "192.168.1.11",
      "browserJavaEnabled": false,
      "browserJavascriptEnabled": true,
      "browserLanguage": "en",
      "browserScreenHeight": 400,
      "browserScreenWidth": 600,
      "browserTZ": 0,
      "browserUserAgent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0"
    },
    "cardExpiryDate": "1910",
    "cardHolderInfo": {
      "addrMatch": "Y",
      "billAddrCity": "Bill City Name",
      "billAddrCountry": "840",
      "billAddrLine1": "Bill Address Line 1",
      "billAddrLine2": "Bill Address Line 2",
      "billAddrLine3": "Bill Address Line 3",
      "billAddrPostCode": "Bill Post Code",
      "billAddrState": "CO",
      "cardholderName": "Cardholder Name",
      "email": "[email protected]",
      "homePhone": {
        "cc": "123",
        "subscriber": "123456789"
      },
      "mobilePhone": {
        "cc": "123",
        "subscriber": "123456789"
      },
      "shipAddrCity": "Ship City Name",
      "shipAddrCountry": "840",
      "shipAddrLine1": "Ship Address Line 1",
      "shipAddrLine2": "Ship Address Line 2",
      "shipAddrLine3": "Ship Address Line 3",
      "shipAddrPostCode": "Ship Post Code",
      "shipAddrState": "CO",
      "workPhone": {
        "cc": "123",
        "subscriber": "123456789"
      }
    },
    "challengeInd": "02",
    "forceMessageVersion": true,
    "merchantId": "1234567890123456789012345678901234",
    "merchantName": "Test Merchant",
    "merchantOverride": {
      "acquirerBIN": "123456",
      "mcc": "1234",
      "threeDSRequestorID": "GP_123456789",
      "threeDSRequestorName": "Test Merchant"
    },
    "merchantRiskIndicator": {
      "deliveryEmailAddress": "[email protected]",
      "deliveryTimeframe": "01",
      "giftCardAmount": "337",
      "giftCardCount": "02",
      "giftCardCurr": "840",
      "preOrderDate": "20170519",
      "preOrderPurchaseInd": "02",
      "reorderItemsInd": "01",
      "shipIndicator": "02"
    },
    "messageCategory": "01",
    "messageExtension": [
      {
        "criticalityIndicator": false,
        "data": {
          "A000000004-merchantData": {
            "scaExemptions": "05",
            "merchantFraudRate": "1",
            "acquirerCountryCode": "050",
            "secureCorporatePayment": "Y"
          }
        },
        "id": "A000000004-merchantData",
        "name": "Merchant Data"
      }
    ],
    "messageVersion": "2.2.0",
    "priorAuthenticationInfo": {
      "threeDSReqPriorAuthData": "validlogin at UL TS BV",
      "threeDSReqPriorAuthMethod": "02",
      "threeDSReqPriorAuthTimestamp": "201711071307",
      "threeDSReqPriorRef": "375d8b16-9e97-48ca-a3c2-cddb8268939c"
    },
    "purchaseAmount": "12345",
    "purchaseCurrency": "978",
    "purchaseDate": "20180122153045",
    "purchaseInstalData": "024",
    "recurringExpiry": "20180131",
    "recurringFrequency": "2",
    "threeDSRequestorDecMaxTime": "00010",
    "threeDSRequestorDecReqInd": "Y",
    "threeDSServerTransID": "6afa6072-9412-446b-9673-2f98b3ee98a2",
    "transType": "03",
    "whiteListStatus": "Y"
  },
  "response": {
    "acsChallengeMandated": "Y",
    "acsDecConInd": "N",
    "acsReferenceNumber": "3DS_GP_ACS_201_13579",
    "acsTransID": "375d90ad-3873-498b-9133-380cbbc8d99d",
    "amexDsTransID": "020100006afa60729412446b96732f98b3ee98a2",
    "authenticationType": "02",
    "authenticationValue": "MTIzNDU2Nzg5MDA5ODc2NTQzMjE=",
    "cardholderInfo": "Additional authentication is needed for this transaction, please contact (Issuer Name) at xxx-xxx-xxxx.",
    "challengeUrl": "https://api.demo.activeserver.cloud/api/v2/brw/challenge/init?txid=6afa6072-9412-446b-9673-2f98b3ee98a2",
    "dsReferenceNumber": "3DS_GP_DS_201_13579",
    "dsTransID": "6afa6072-9412-446b-9673-2f98b3ee98a2",
    "eci": "02",
    "messageVersion": "2.1.0",
    "resolvedCardScheme": "VISA",
    "resultMonUrl": "https://api.demo.activeserver.cloud/api/v2/brw/result/mon?t=6afa6072-9412-446b-9673-2f98b3ee98a2",
    "threeDSServerTransID": "6afa6072-9412-446b-9673-2f98b3ee98a2",
    "transStatus": "Y",
    "transStatusReason": "11",
    "whiteListStatus": "Y",
    "whiteListStatusSource": "03"
  }
}
{ 
  "success": true,
    "metadata": {
    "identiq_session_id": "a4aa4ef7-5b33-4ab6-98df-8e354267f8eb",
  },
}

πŸ“˜

Read more

Full API Reference Documentation for the post 3DS response API can be found here: Post 3ds

4 - Optimize Card Authorization

4.a Pre-Auth Optimization Request

Obtain an optimized authorization payload in real-time before sending the transaction to the acquirer.

πŸ“˜

Session ID

If this is the first request in the transaction flow, Identiq will generate a session ID and return it.
The session ID should be included in all subsequent calls related to this transaction.

  • Expected Input: The authorization payload that needs to be optimized before being sent to the acquirer/network for approval, along with the metadata object.
  • Output: An optimized payload to be sent to the acquirer/network, along with additional metadata indicating the optimization flow applied.

πŸ‘

Pass the Payment Payload As-Is

Ensure that the payment payload is sent exactly as it will be submitted to the acquirer or networkβ€”without any modifications. Identiq will optimize the payload and return it in the same format, ready for submission. This ensures seamless integration, prevents mismatches, and maintains compliance with acquirer requirements.

Examples request and response:

{
  "metadata": {
    "identiqSessionId": "a4aa4ef7-5b33-4ab6-98df-8e354267f8eb",
    "partnerPaymentId": "uV7qelQg",
    "merchantName": "Commerce Records",
    "merchantId": "15483",
    "merchantCountry": "US",
    "mcc": "8944",
    "recurringType":"initial"
  },
  "request": {
    "transaction_type": "sale3d",
    "transaction_id": "55487lQg",
    "amount": "5500",
    "currency": "USD",
    "card_holder": "Linden Billy",
    "card_number": "425603XXXXXX1234",
    "expiration_month": "1",
    "expiration_year": "30"
  }
}
'
{
  "metadata": {
    "optimizationGroup": "test",
    "hasChanged": true,
    "outcome": "Request processed successfully",
    "identiqSessionId": "a4aa4ef7-5b33-4ab6-98df-8e354267f8eb",
    "changedKeys": ["card_holder"]
  },
  "request": {
    "transaction_type": "sale3d",
    "transaction_id": "55487lQg",
    "amount": "5500",
    "currency": "USD",
    "card_holder": "BILLY LINDEN",
    "card_number": "425603XXXXXX1234",
    "expiration_month": "1",
    "expiration_year": "30"
  }
}

Response will include two main objects:

  • Request object - The 'request' object will include the optimized payload.
  • Response Metadata - Identiq includes specific metadata fields in responses to Pre-Auth and Pre-3DS requests:
FieldDescription
optimizationGroupIndicates test/control/out-of-scope allocation
hasChangedIndicates whether the requested payload was optimized and altered (true/false)
changedKeysLists all fields that were modified during the optimization process.
outcomeStatus of the optimization request (e.g., "Request processed successfully")
identiqSessionIdThe unique identifier for the transaction generated by Identiq when flow initiated

πŸ“˜

Read More

Full API Reference Documentation for the pre authorization API per acquirer, can be found here: Pre-Auth

4.b Post Card Authorization Update

Once a payment has been authorized, send a final update to Identiq.
The session ID must be included to ensure the transaction data remains linked.

Similar to the 3DS post-processing API, this captures the entire request and response details after the card authorization process. It is used solely for reporting and analysis.

  • Expected Input: Full authorization request and response data, including final status.

Example request and response:

{
  "metadata": {
    "identiqSessionId": "a4aa4ef7-5b33-4ab6-98df-8e354267f8eb",
    "partnerPaymentId": "session_1234",
    "merchantName": "best commerce",
    "merchantId": "123",
    "mcc": "50",
    "recurringType":"initial",
    "partnerResponseCode": "0"
  },
  "auth": {
    "request": {
      "payment_transaction": {
        "transaction_type": "sale3d",
        "transaction_id": "ABqbP8aZ",
        "amount": "100",
        "currency": "EUR",
        "card_holder": "Travis Trump",
        "card_number": "453304XXXXXX3333",
        "expiration_month": "11",
        "expiration_year": "2025",
        "customer_email": "[email protected]",
        "customer_phone": "+1987987987987",
        "billing_address": {
          "first_name": "Travis",
          "last_name": "Trump",
          "address1": "5rue augustes bl",
          "zip_code": "10178",
          "city": "Los Angeles",
          "neighborhood": "Hollywood",
          "state": "CA",
          "country": "US"
        },
        "moto": "false",
        "mpi_params": {
          "eci": "05",
          "cavv": "AAgCBIcWMAAAABMil4JSdQAAAAA=",
          "protocol_version": "2",
          "protocol_sub_version": "2",
          "directory_server_id": "2b3b30b9-2168-4d76-8c71-919b9b585c7b",
          "acs_transaction_id": "7f219820-56fe-013d-2288-0a58a9feac02",
          "threeds_challenge_indicator": "preference"
        },
      }
    },
    "response": {
      "payment_response": {
        "transaction_type": "authorize",
        "status": "approved",
        "mode": "live",
        "transaction_id": "ABqbP8aZ",
        "unique_id": "44177a21403427eb96664a6d7e5d5d48",
        "consumer_id": "123456",
        "token": "ee946db8-d7db-4bb7-b608-b65b153e127d",
        "avs_response_code": "5I",
        "avs_response_text": "Response provided by issuer processor; Address information not verified",
        "cvv_result_code": "M",
        "authorization_code": "345678",
        "retrieval_reference_number": "016813015184",
        "payment_account_reference": "50019P9LBXOLHN9G7QMU5VN520YSY",
        "response_code": "00",
        "timestamp": "2024-09-16T08:40:59Z",
        "amount": "100",
        "currency": "EUR",
        "scheme_response_code": "00",
        "sca_exemption_result": "13"
      }
    }
  }
}
{
  "success": true
}

πŸ“˜

Read more

Full API Reference Documentation for the post authorization response API per acquirer can be found here: post auth

Key Notes

  • Targeted Endpoints: Specify the target acquirer bank or 3DS provider in each API call to support routing and reporting.
  • Response Handling: In post-* APIs, submit both the original request and the final response for