Zero balance anti-fraud and validations integration

This article details the call the Pismo platform makes to a Zero balance issuer during step 5 in the Full and zero balance workflows. Zero balance issuers need to do their own account and limit checks as well as anti-fraud checks.

Zero balance issuers need to register a webhook URL for this process during setup. This webhook enables you to send an authorization response to the request that is detailed in the Zero balance anti-fraud and validations request webhook specification.

📘

Basic card validations failure

Note that this webhook is not called if an authorization fails the card checks that Pismo does. In that case, Pismo just responds to the network.

Below is the sample payload that the Pismo platform sends to the card issuer. The example contains some simulated information in the fields. The missing values depend on the type of authorization request the Pismo platform receives from the card network.

Sample payload
{
    "id": "99999999-aaaa-aaaa-1111-1234567abcde",
    "entity": "transaction",
    "fields": {
        "mti": "0100",
        "card_id": 1,
        "account_id": 1,
        "amount_transaction": 10.10,
        "amount_local": 10.10,
        "amount_settlement": 2.05,
        "transaction_timestamp": "2021-11-05T16:00:00",
        "processing_code": "000000",
        "payment_card_brand": "Mastercard",
        "currency": "986",
        "merchant_id_code": "599999000009999",
        "merchant_name": "MERCHANT NAME  ",
        "merchant_city": "MERCHANT CITY     ",
        "merchant_state_or_country_code": "USA",
        "merchant_terminal_id": "",
        "atc_chip": "",
        "atc_database": "",
        "cvv_data": "",
        "entry_mode": "10",
        "mcc": "5942",
        "card_type": "PLASTIC",
        "country_code": "",
        "chip_validation": true,
        "postal_code": "99999999",
        "chip_cryptogram_information_data": "",
        "chip_transaction_date": "",
        "chip_transaction_type": "",
        "chip_amount_authorized": "",
        "chip_transaction_currency_code": "",
        "chip_application_interchange_profile": "",
        "chip_terminal_country_code": "",
        "chip_cardholder_verification_method": "",
        "chip_terminal_capabilities": "",
        "chip_amount_other": "",
        "chip_application_transaction_counter": "",
        "cardholder_postal_code": "",
        "transaction_type": "00",
        "nsu": "999999",
        "retrieval_reference_number": "999919319999",
        "authorization_code": "ABC123",
        "response_code": "00",
        "terminal_capability": "2",
        "tvr": "",
        "cvr": "",
        "number_of_installments": 1,
        "network_score": 0,
        "pos_postal_code": "99999999",
        "acquirer_code": "016205",
        "denial_code": "",
        "financial_network_code": "MRW",
        "banknet_reference_number": "ZZZ999",
        "network_transaction_data": "",
        "original_network_data": {}, 
        "cvv_presence": false,
        "password_present": false,
        "account_type": "00",
        "validation_results": [{}]
    }
}

The expected response from the card issuer for the approved transaction:

{
  "is_approved":true,
  "response_code":"00",
  "limit_amount":null
}

The expected response from the card issuer for the declined transaction:

{
  "is_approved":false,
  "response_code":"57",
  "limit_amount":null
}

Visa partial authorization

Partial authorization addresses insufficient fund declines at the point-of-sale. It provides an alternative to a declined transaction when the available Visa card or account balance is not sufficient to approve a transaction in full. Instead of a decline, the transaction is approved for a portion of the original amount requested. The remainder of the transaction amount may then be paid by other means using split tender functionality, where applicable.

Partial authorization response

Set the following fields in the partial_approval_info object in the authorization response:

  • local_amount - Amount that was partially approved in the transaction's local currency.
  • settlement_amount- Amount that was partially approved in the reconciliation currency.
  • cardholder_amount- Amount that was partially approved in the cardholder's currency.

Example response

{
   "is_approved": true,
   "response_code": "10", 
   "limit_amount": null,

   "partial_approval_info": {
       local_amount: 10.0,
       settlement_amount: 2.0,
       cardholder_amount: 8.50
     }
}

A response_code = "10" means that the transaction was partially approved, and the issuer needs to return the approved amounts fields. When these fields aren't returned or the amounts are negative, Pismo returns the ZBD custom field and response_code = 96.