Balances configuration overview [beta]

👍

Beta release

This feature is currently in beta release to give customers a chance to check out its functionality and provide feedback. Its functionality might change before being released to production. Contact your Pismo representative for more information or to participate in the beta program..

A balance configuration is a set of flex controls to determine how balances and account limits are adjusted or credited and debited based on transaction amounts. For example, you can stop a customer from spending over their available credit limit. You can use the Balance config API to create balance configurations, replace balance configurations, and get one or all balance configurations.

You can use the Create balance configuration endpoint to do the following:

  • Apply a balance configuration to an organization, program, or account using the level parameter.
  • Define a filter object to filter transactions using processing codes , currency codes, merchant category codes, and other criteria.
  • Define a condition object to evaluate a transaction amount’s impact on accounting limits and balances.
  • Define a result object to adjust account limits or balances or debit/credit based on transaction amount.

Note: The scenarios object is a container for condition and result objects. The configs (Configurations below) object is a container for filter and scenarios objects.

Use Cases

Adjust available credit limit based on transaction spending

In the payload below, the account’s available credit limit is set so the account cannot exceed their spending limit on transportation services. You can manage the account’s available credit limit based on transaction amount. In this case, the account is allowed to directly adjust the available credit limit without checking if the available credit limit has been exceeded.

In this example, level is set to account indicating the balance configuration is applied to an account, specifically to account 12345678. This is the same account identified in the impact_account object that will have its available credit limit adjusted based on transaction amounts.

The configs object is the balance configuration. You can use the filters object to determine the transaction filtering criteria like processing_codes or merchant category codes (mcc). The processing_codes field is required. For more information on processing codes, refer to Processing codes and transaction types . Processing code 903002 is for utilities and mcc 4000 is for transportation services.

The scenarios object is a container for condition and result objects which represent the account balances and limits evaluated and adjusted. Since there can be multiple scenarios objects, the condition object determines in what order (order) it is executed and its type .

A scenario can either have a custom or default type. A custom type is executed before a default type and does validations (such as checking if the customer has a high enough available credit limit for the transaction amount) as would be indicated in a consider object (not shown here) which would list what account limits to check. A default type is executed last and does not do validations and therefore, does not require a consider object.

The result object represents the account's adjusted limits or balances based on the transaction amount. In result, amount and impact are required. The impact field defines how the limit or balance is adjusted.

In the result object, impact = AvailableCreditLimit is evaluated and AvailableCreditLimit is the limit adjusted. Since amount = contract_amount, the amount credited to AvailableCreditLimit is the contract_amount. The contract_amount is the final amount including any interest or fees. The available credit limit (AvailableCreditLimit) for the account that impact_account.account_id identifies is adjusted.

{
    "level": "account",
    "account_id": 12345678,
    "configs": [
        {
            "filters": {
                "processing_codes": [
                    "903002"
                ],
                "mcc":[
                    "4000"
                ]
            },
            "scenarios": [
                {
                    "condition": {
                        "order": 1,
                        "type": "default"
                    },
                    "result": {
                        "impact": [
                            "AvailableCreditLimit"
                        ],
                        "amount": "contract_amount",
                        "impact_account": {
                            "account_id": 12345678
                        }
                    }
                }
            ]
        }
    ]
}

Given a transaction for $10 that had a processing code of 903002 and an mcc = 4000 as identified in the filters object, the 12345678 account would have its available credit limit (AvailableCreditLimit) debited $10. If AvailableCreditLimit was $100, it would be $90 after this transaction.

Impacting different limits due to insufficient main limit

Use a different limit in situations where the main limit is not sufficient. With two distinct credit limits, the clean credit limit and the collateral credit limit, the Pismo platform determines which limit takes priority during the authorization flow. The example below shows which limit should be impacted.

{
    "level": "account",
    "account_id": 123456,
    "configs": [
        {
            "filters": {
                "processing_codes": [
                    "003100"
                ]
            },
            "scenarios": [
                {
                    "condition": {
                        "order": 1,
                        "type": "custom",
                        "amount_to_check_balance": "amount"
                    },
                    "result": {
                        "impact": [
                            "AvailableCreditLimit"
                        ],
                        "consider": [
                            "AvailableCreditLimit",
                            "OverLimit"
                        ],
                        "amount": "contract_amount"
                    }
                },
                {
                    "condition": {
                        "order": 2,
                        "type": "default"
                    },
                    "result": {
                        "impact": [
                            "InstallmentCreditLimit"
                        ],
                        "amount": "contract_amount"
                    }
                }
            ]
        }
    ]
}

Managing credit limits based on number of installments

The Pismo platform provides customizable credit limits such as personal loans. In the following example, Pismo handles credit limit impacts based on the number of installments.

Scenario A - Authorizations up to 12 Installments:

  • Condition 1: If authorizations have up to 12 installments and there is sufficient available credit, Pismo impacts the AvailableCreditLimit.
  • Condition 2: If the available credit is insufficient, Pismo impacts the InstallmentCreditLimit.

Scenario B - Authorizations with more than 12 Installments:

  • Condition 1: For authorizations with more than 12 installments and if there is sufficient installment credit, Pismo platform directly impacts the InstallmentCreditLimit.
  • Condition 2: If the InstallmentCreditLimit is insufficient, Pismo platform impacts the AvailableCreditLimit.

In summary, to perform these configurations, create two distinct scenarios, each containing two specific conditions, as follows:

{
    "level": "program",
    "program_id":   1065,
    "configs": [
        {
            "filters": {
                "processing_codes": [
                    "00"
                ],
                "min_installments": 1,
                "max_installments": 12
            },
            "scenarios": [
                {
                    "condition": {
                        "order": 1,
                        "type": "custom",
                        "amount_to_check_balance": "amount"
                    },
                    "result": {
                        "impact": [
                            "AvailableCreditLimit"
                        ],
                        "consider": [
                            "AvailableCreditLimit",
                            "OverLimit"
                        ],
                        "amount": "contract_amount",
                        "amount_consider": "principal_amount",
                        "reset_limit": "payment"
                    }
                },
                {
                    "condition": {
                        "order": 2,
                        "type": "default"
                    },
                    "result": {
                        "impact": [
                            "AvailableTotalInstallmentCredit"
                        ],
                        "amount": "contract_amount",
                        "amount_consider": "principal_amount",
                        "reset_limit": "payment"
                    }
                }
            ]
        },
        {        
            "filters": {
                "processing_codes": [
                    "00"
                ],
                "min_installments": 13,
                "max_installments": 99
            },
            "scenarios": [
                {
                    "condition": {
                        "order": 1,
                        "type": "custom",
                        "amount_to_check_balance": "amount"
                    },
                    "result": {
                        "impact": [
                            "AvailableTotalInstallmentCredit"
                        ],
                        "consider": [
                            "AvailableTotalInstallmentCredit"
                        ],
                        "amount": "contract_amount",
                        "amount_consider": "principal_amount",
                        "reset_limit": "payment"
                    }
                },
                {
                    "condition": {
                        "order": 2,
                        "type": "default"
                    },
                    "result": {
                        "impact": [
                            "AvailableCreditLimit"
                        ],
                        "amount": "contract_amount",
                        "amount_consider": "principal_amount",
                        "reset_limit": "payment"
                    }
                }
            ]
        }
    ]
}