/evaluate

On a declined transaction, POST /evaluate for FlexFactor to analyze and rescue/decline it.


Retrieve the tokenized credit card information and pass it along with the /evaluate request. FlexFactor will then determine if this transaction can be rescued or not.

❗️

Prerequisites to invoke this API:


Workflows

FlexFactor will process different types of transactions in the following way



Customer Initiated Transactions

See details about Customer Initiated Transactions (CIT)

These are straight sales happening on a checkout page.

You will need to update the definitive status. See Order Status.

CIT general workflow

CIT general workflow




Merchant Initiated Transactions (MIT)

See details about Merchant Initiated Transactions.

MIT are rebills on subscriptions, or billing after free trial.

These transactions are being processed without the consumer facing the checkout page, so when failing, these transactions can be retried at a later point.

🔀

Who's managing the MIT:

Unmanaged MIT: these MIT will not be managed by FlexFactor, you will receive a real-time response.

Managed MIT: these MIT will be managed by FlexFactor for the time you allocate. You will have to mark these transactions as 'pending' until FlexFactor responds with their definitive status.


MIT unmanaged by FlexFactor

If you don't want FlexFactor to manage the MIT (e.g., you want to use your retry mechanism or you cannot mark a transaction as 'pending'), we will configure your account accordingly.

This way, /evaluate will return a real-time status response that you can reconcile within your system.

Sync MIT flow

MIT unmanaged by Flex


MIT managed by FlexFactor

If you want FlexFactor to managed your MIT, we will configure your account accordingly.

This flow requires that you interrupt your retry mechanism, and that you set an Expiry Date for the orders that will be pending over at FlexFactor.

You will need to reconcile the definitive status with a webhook. See Order Status.

MIT general workflow

MIT managed by Flex



Request parameters

Property Name

Type

Required?

Notes

isDeclined

bool

required

Required, send this as true for all requests to evaluate.

transactionType

enum

optional

AUTHORIZATION | PURCHASE

  • *Authorization:** In a 2-step authorization / capture flow, please provide authorization in order to receive the Capture Required response status, and then call /capture
  • *Purchase:** In a straight sale flow, provide 'purchase'

If null, the default value ispurchase.

mid

string

optional

Your FlexFactor Merchant Identification Number. Get your Mid

orderId

string

required

Your internal order ID. This will reference your system of record with FlexFactor.

siteId

string

required

Unique FlexFactor ID of the website/campaign generating this transaction.
Retrieve your siteId

customerIp

string

  • *required** for CIT

Customer's IP as captured on the checkout page

siteUrl

string

optional

Url can be specified if multiple domains share the same siteId.

orderSource

enum

optional

Source of the order. if not sent the default enum is ecommerce
ecommerce, terminal, vterminal

idempotencyKey

guid/uuid

required

You need to generate a unique GUID/UUID, so that we can identify repeated requests.

sequenceNumber

string

required
for batch via SFTP

  • *SFTP ONLY** Numerical position of that transaction within the batch. Starting from 1.

isMIT

bool

required

true for merchant-initiated transactions.
When true, requires specific MIT fields.

transaction

object

required

See transaction fields below.

payer

object

required

See payer fields below.

billingInformation

object

required

See billingInformation fields below.

paymentMethod

object

required

See paymentMethod fields below.

shippingInformation

object

optional

See shippingInformation fields below.

deviceDetails

object

optional

See deviceDetails fields below.

merchant

object

required
for partners

See merchant fields below

orderItems

object array

optional

See orderItems fields below.

additionalFields

object array

optional

See additionalFields fields below.

Try it right now: check out the /evaluate Reference. or the Postman Collection

Additional parameters for MIT

A request for Merchant Initiated Transaction (e.g.: subscriptions) requires the additional following fields:

Property Name

Type

Required?

Notes

isMIT

bool

required

true for merchant-initiated transactions. When true, requires specific MIT fields below.

isRecurring

bool

required for MIT

true for subscriptions.

expiryDateUtc

datetime

Depends on MIT configuration

Indicates period during which FlexFactor will retry the transaction.

  • Required when your configuration is async MIT.
  • Must be left empty when your configuration is sync MIT. Otherwise will return a validation error.

siteUrl

string

Optional
for MIT

Website linked to the descriptor of the subscription.

subscription

object

required
for MIT

See subscription fields below.

threeDSecure

object

required
for MIT

See 3DSecure fields below.

❗️

Send only MIT that have just failed

The FlexFactor service is optimized to work with failed Merchant Initiated Transactions (MIT) that have just failed. These need to be passed to FlexFactor on that day (and not after a few days or weeks) and should not be retried by the Merchant up to the set expiry date.


Detailed object parameters:

transaction

Required object

Property Name

Type

Required?

Notes

id

string

required

External transaction identifier in the format of a GUID

dynamicDescriptor

string

conditional

Required only if enabled by FlexFactor for your configuration, pass the descriptor from the gateway that declined the transaction.

timestampUtc

datetime

required

Date and time of the transaction.

timezoneUtcOffset

integer

required

UTC offset of the timezone.

transactionType

string

optional

E.g.: 'Auth', 'Capture', 'Void'

amount

integer

required

Amount of the transaction in cents. Must be >$0.00 and <$200.00 E.g. $19.99 -> '1999'

currency

string

required

ISO 4217 currency code.

responseCode

string

required

Response code received from the gateway.

responseDescription

string

optional

Description of the response, usually the response message.

responseStatus

string

optional

E.g.: Approved, Declined, Voided, Refunded, Chargeback, etc.

responseSubStatus

string

optional

Sub-status of the response.

responseCodeSource

string

required

This is the source of the code from the original transaction E.g.: "nmi", "Paypal"

processorName

string

optional

Name of the processor.

avsResultCode

string

required

Address Verification Service result code.

cvvResultCode

string

required

Card Verification Value result code.

cavvResultCode

string

required

Cardholder Authentication Verification Value result code.

cardNotPresent

bool

required

Indicates if the card was present during the transaction.

payer

Required object

Property NameTypeRequired?Noted
emailstringrequiredCustomer's email
phonestringoptionalCustomer's phone
idstringoptionalCustomer's id in your system
birthdatedatetimeoptionalCustomer's birthdate

affiliate

optional object

Property NameTypeRequired?Notes
idstringoptionalThis is an internal identifier for the affiliate. It's typically used for backend or database purposes to uniquely identify affiliates within a system.
namestringoptionalThis is a friendly name or label associated with the affiliate.

billingInformation

Optional object.

Property Name

Type

Required?

Notes

firstName

string

required

lastName

string

required

phone

string

optional

country

string

required

countryCode

string

required

ISO 3166-1 alpha-2 country code (2-letter)

addressLine1

string

required

addressLine2

string

optional

state

string

required for US cards

2-letter and 2-digit codes from the ANSI standard INCITS 38:2009 (supersedes FIPS 5-2)

city

string

required

zipCode

string

required

5 or 9 digits

paymentMethod

Required object.

Property Name

Type

Required?

Notes

holderName

string

required

Card Holder Name

cardType

string

required

CREDIT, DEBIT, PREPAID

cardBrand

string

required

E.g.: VISA, Mastercard, AMEX, etc.

cardCountry

string

required

ISO 3166-1 alpha-2 country code (2-letter)

cardIssuer

string

optional

cardLevel

string

optional

cardFingerprint

string

optional

expirationMonth

integer

required

expirationYear

integer

required

cardBinNumber

string

required

6-character string.

cardLast4Digits

string

required

4-character string.

cardNumber

string

required

- Send the token that was returned with /tokenize

  • Send the full PAN if you are PCI compliant

verificationValue

string

optional

CVV value (only for PCI-compliant calls)

token

boolean

optional

- If you send a FlexFactor token in cardNumber: provide true

  • If you send the full PAN in cardNumber: provide false

deviceDetails

Optional object.

Property Name

Type

Required?

Notes

deviceType

string

required if this object is provided

Type of device used for that transaction (e.g., 'mobile', 'laptop', 'tablet')

deviceName

string

required if this object is provided

Name of the device (e.g., 'iPhone 12', 'Samsung Galaxy S21')

deviceOS

string

required if this object is provided

Operating system of the device (e.g., 'iOS 14', 'Android 11')

browser

string

required if this object is provided

Name of the browser (e.g., 'Chrome', 'Safari')

userAgent

string

required if this object is provided

User-agent string (a detailed string provided by the browser that identifies the browser, its version, and the operating system)

merchant

Required object for partners only.

Property Name

Type

Required?

Notes

id

string

required if this object is provided

External ID

name

string

optional

Name of the merchant

mcc

integer

required if this object is provided

MCC code that merchant is enrolled with standard processing MID(s).

country

string

required if this object is provided

The country in which the merchant operates

subscription

Required object when*isMIT** and isRecurring are true.*

Property Name

Type

Required?

Notes

subscriptionId

string

required if this object is provided

Note - this should be unique per subscriber within the merchant platform. This is combined with other subscription elements to make acceptance decisions.

schemeTransactionId

string

optional

Unique reference of the transaction returned by the authorization server of the issuer. Allows to chain an MIT (Merchant Initiated Transaction) to an initial CIT (Customer Initiated Transaction). Visa Example Transaction ID: 987654321234567 MC Example: Trace ID: MCCABC1XY0107

schemeBrand

string

optional

Card/scheme brand associated with the subscription. Will generally be similar to the cardBrand value in most cases, but might be different in some edge cases. E.g.: Visa

interval

string

required if this object is provided

E.g.: 'daily', 'weekly', 'monthly', 'quarterly', 'yearly'.

price

int

required if this object is provided

Amount in cents

currency

string

required if this object is provided

paymentNumber

string

optional

The sequential number indicates the specific payment within the subscription cycle.

E.g., Customer subscribed monthly on Jan 15: Jan 15 is paymentNumber : 1 Feb 15 is paymentNumber : 2 Mar 15 is paymentNumber : 3

totalPayments

string

optional

Total number of payments for that subscription.

E.g. 1, Customer subscribed monthly for 6 months:
totalPayments : 6\ Leave null if the subscription is indefinite.

threeDSecure

Required object when*isMIT** and isRecurring are true.*

Property Name

Type

Required?

Notes

threeDsVersion

string

optional

Protocol version for the card payment authentication. E.g.: '1.0.2' '2.1.0' '2.2.0'

ecommerceIndicator

string

required if this object is provided

The indication of an online commerce transaction.

authenticationValue

string

required if this object is provided

The encrypted code from the cardholder's bank.

directoryServerTransactionId

string

required if this object is provided

The unique ID for the transaction with the bank.

xid

string

optional

Transaction identifier generated by the 3D Secure system.

authenticationValueAlgorithm

string

optional

The encryption algorithm used to secure the payment. E.g.: SHA-256

directoryResponseStatus

string

optional

The response status code from the bank's directory. E.g.: 'Y'

authenticationResponseStatus

string

optional

The response status code for the payment authentication. E.g.: 'Y'

enrolled

string

optional

The card's enrollment status in 3D Secure. E.g.: 'Y'

orderItems

Optional object.

Property NameTypeRequired?Notes
skustringoptionalThe SKU of the item.
namestringoptionalThe name of the item.
descriptionstringoptionalThe description of the item.
amountintegeroptionalThe amount of the item.
discountAmountintegeroptionalThe discount amount on the item.
taxintegeroptionalThe tax on the item.
discountTypestringoptionalThe discount type on the item.
quantitystringoptionalThe quantity of this item.

shippingInformation

Optional object.

Property Name

Type

Required?

Notes

firstName

string

required if this object is provided

lastName

string

required if this object is provided

phone

string

optional

country

string

required if this object is provided

countryCode

string

required if this object is provided

ISO 3166-1 alpha-2 country code (2-letter)

addressLine1

string

required if this object is provided

addressLine2

string

optional

state

string

optional

2-letter and 2-digit codes from the ANSI standard INCITS 38:2009 (supersedes FIPS 5-2)

city

string

required if this object is provided

zipCode

string

required if this object is provided

5 or 9 digits

additionalFields

Optional array of object. Max 50 objects

Property NameTypeRequired?Notes
keystringoptionalMax 40 characters, Description of the additional information.
valuestringoptionalMax 500 characters, Content of the additional information.


Response status

Property Name

Type

Notes

result

string

Result of the API request: SUCCESS | FAILED ⚠️Is notthe result of the transaction, see Status below.

status

string

For sync calls: APPROVED ; DECLINED ; CHALLENGE ; CAPTUREREQUIRED

For async: SUBMITTED

orderSessionKey

guid/uuid

FlexFactor unique transaction identifier

senseKey

string

Optional.

Order status

Order Status

Type of status

Description

Returned by

Challenge

⚠️ Conditional

The transaction rescue requires an action from the customer. This action can be performed via the UI Widget. If the UI Widget is not embedded, treat as a decline.

/evaluate webhook

Capture required

⚠️ Conditional

The transaction rescue requires a /capture.

/evaluate /orders webhooks

Submitted

⏳ Pending

The transaction was successfully received. Order status needs to be updated via GET /orders or webhooks.

/evaluate

Draft

⏳ Pending

MIT order was picked up by system, but is not yet being processed.

/orders

Processing

⏳ Pending

The order is being processed.

/orders

Expired

❌ Fail

The transaction can no longer be rescued by FlexFactor.

/orders

Completed

✅ Success

The transaction was rescued.

/orders webhook

Approved

✅ Success

The transaction was rescued.

/evaluate webhook

Declined

❌ Fail

The transaction could not be rescued

/evaluate webhook

Cancelled

❌ Fail

The transaction could not be rescued

/evaluate webhook

Update the order status with GET /orders

Immediate response from /evaluate cannot cover all scenarios, please update the order status with


Payload examples

Request example

curl --request POST \
     --url https://api-sandbox.flex-charge.com/v1/evaluate \
     --header 'Authorization: Bearer {bearer_token_returned_by_oauth2}' \ //replace with bearer returned by oauth2
     --header 'accept: application/json' \
     --header 'content-type: application/*+json' \
     --data '
{
  "transaction": {
    "id": "3478613",
    "timestampUtc": "0001-01-01T00:00:00Z",
    "timezoneUtcOffset": 0,
    "amount": 15000,	//In cents. must be >10 and <20000 for test calls
    "currency": "USD",
    "responseCode": "203",
    "avsResultCode": "M",
    "processorName": "Acme Payments",
    "cavvResultCode": "2",
    "responseCodeSource": "NMI",
    "responseDescription": "Activity limit exceeded",
    "responseStatus": "DECLINED",
    "transactionType": "CAPTURE",
    "dynamicDescriptor": "MyShoesStore"
  },
  "payer": {
    "id": "customer123",
    "email": "[email protected]",
    "phone": "+1 555-123-4567",
    "birthdate": "1990-01-01"
  },
  "orderItems": [
    {
      "sku": "SKU123",
      "name": "Product 1",
      "description": "Description of Product 1",
      "amount": 2500,
      "discountAmount": 0,
      "tax": 100,
      "quantity": 2
    },
    {
      "sku": "SKU456",
      "name": "Product 2",
      "description": "Description of Product 2",
      "amount": 10000,
      "discountAmount": 0,
      "tax": 50,
      "quantity": 1
    }
  ],
  "shippingInformation": {
    "firstName": "John",
    "lastName": "Doenowitz",
    "phone": "+1 555-123-4567",
    "country": "United States",
    "countryCode": "US",
    "addressLine1": "123 Main St.",
    "city": "CA",
    "zipcode": "94111"
  },
  "merchant": {
    "country": "US",
    "mcc": 5999,
    "id": "merchant123",
    "name": "Acme Inc."
  },
  "deviceDetails": {
    "deviceType": "mobile",
    "deviceName": "iPhone 12",
    "deviceOS": "iOS 14",
    "browser": "Safari",
    "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1"
  },
  "affiliate": {
    "id": "123123123",
    "name": "Affiliate 1"
  },
  "paymentMethod": {
    "holderName": "John Doenowitz",
    "cardType": "CREDIT",
    "cardBrand": "VISA",
    "cardCountry": "United States",
    "cardIssuer": "Acme Bank",
    "cardFingerprint": "abcd1234",
    "expirationMonth": 12,
    "expirationYear": 2028,
    "cardBinNumber": "411111",
    "cardLast4Digits": "1111",
    "cardNumber": "zJb6YF7pL5gk8x9VhRnSwHd4q2t" // If you are not PCI compliant, do not send credit card number in clear, send token returned by /tokenize
  },
  "billingInformation": {
    "firstName": "John",
    "lastName": "Doenowitz",
    "phone": "+1 555-123-4567",
    "country": "United States",
    "countryCode": "US",
    "addressLine1": "123 Main St.",
    "state": "CA",
    "city": "San Francisco",
    "zipcode": "94111"
  },
  
  "customerIp": "201.154.255.255", //Customer's IP address from the checkout page
  "mid": "abcd1234", //Replace with your MID
  "siteId" : "UUID/GUID", //needs to be taken from the merchant portal developers section
  "siteUrl" : "https://www.someSite.com",
  "orderSource" : "ecommerce",
  "isDeclined": true,
  "isMIT": false,
  "orderId": "ed44736a-b5fa-4bc2-bfb9-0e873bc09511", //must be unique even for test calls
  "idempotencyKey": "abcd1234"
}
curl --request POST \
     --url https://api-sandbox.flex-charge.com/v1/evaluate \
     --header 'Authorization: abc123def456' \ //replace with bearer returned by oauth2
     --header 'accept: application/json' \
     --header 'content-type: application/*+json' \
     --data '
{

	"isMIT": true,
	"isRecurring": true,
	"expiryDateUtc": "2023-05-24T12:30:20Z",
	"subscription": {
		"subscriptionId": "sub_123456",
		"schemeTransactionId": "txn_789012",
		"schemeBrand": "Visa",
		"interval": "Monthly",
		"price": 2599,
		"currency": "USD",
		"paymentNumber": 2,
		"totalPayments": 12
	}, 
	"threeDSecure": {
		"threeDsVersion": "2.1.0",
		"ecommerceIndicator": "02",
		"authenticationValue": "abcdefg12345",
		"directoryServerTransactionId": "ds_987654",
		"xid": "xid_246810",
		"authenticationValueAlgorithm": "SHA-256",
		"directoryResponseStatus": "Y",
		"authenticationResponseStatus": "Y",
		"enrolled": "Y"
	},
  "transaction": {
    "id": "3478613",
    "timestampUtc": "0001-01-01T00:00:00Z",
    "timezoneUtcOffset": 0,
    "amount": 19975, //In cents. must be >10 and <20000 for test calls
    "currency": "USD",
    "responseCode": "203",
    "avsResultCode": "M",
    "cvvResultCode": "NA",
    "processorName": "Acme Payments",
    "cavvResultCode": "2",
    "responseCodeSource": "NMI",
    "responseDescription": "Activity limit exceeded",
    "responseStatus": "DECLINED",
    "transactionType": "CAPTURE",
    "dynamicDescriptor": "MyShoesStore"
  },
  "payer": {
    "id": "customer123",
    "email": "[email protected]", //must be this exact address mail if using the 4111111111111111 test card
    "phone": "+1 555-123-4567",
    "birthdate": "1990-01-01"
  },
  "orderItems": [
    {
      "sku": "SKU123",
      "name": "Subscription 1",
      "description": "Description of Subscription 1",
      "amount": 20000,
      "discountAmount": 0,
      "tax": 100,
      "quantity": 1
    },
    {
      "sku": "SKU456",
      "name": "Subscription 2",
      "description": "Description of Subscription 2",
      "amount": 10000,
      "discountAmount": 0,
      "tax": 50,
      "quantity": 1
    }
  ],
  "shippingInformation": {
    "firstName": "John",
    "lastName": "Doenowitz",
    "phone": "+1 555-123-4567",
    "country": "United States",
    "countryCode": "US",
    "addressLine1": "123 Main St.",
    "city": "CA",
    "zipcode": "94111"
  },
  "merchant": {
    "country": "US",
    "mcc": 1234,
    "id": "merchant123",
    "name": "Acme Inc."
  },
  "affiliate": {
    "id": "123123123",
    "name": "Affiliate 1"
  },
  "paymentMethod": {
    "holderName": "John Doe",
    "cardType": "CREDIT",
    "cardBrand": "VISA",
    "cardCountry": "United States",
    "cardIssuer": "Acme Bank",
    "cardFingerprint": "abcd1234",
    "expirationMonth": 2028,
    "expirationYear": 12,
    "cardBinNumber": "411111",
    "cardLast4Digits": "1111",
    "cardNumber": "zJb6YF7pL5gk8x9VhRnSwHd4q2t" //Do not send credit card number in clear, send token returned by /tokenize
  },
  "billingInformation": {
    "firstName": "John",
    "lastName": "Doenowitz",
    "phone": "+1 555-123-4567",
    "country": "United States",
    "countryCode": "US",
    "addressLine1": "123 Main St.",
    "state": "CA",
    "city": "San Francisco",
    "zipcode": "94111"
  },
  "mid": "123-456", //replace with your mid
  "isDeclined": true,
  "orderId": "987-654-321", //must be unique even for test calls
  "idempotencyKey": "abcd1234",
}
'
//file name: 'evaluate_{yourfilename}'
//any file without the prefix will not be picked up

{
  "mid": "123456789-987654321", //replace with your mid
  "authorizationToken": "Bearer abc123def456" //replace with bearer returned by oauth2
  "expiryDateUtc": "2023-04-05T01:23:45.678Z", //default expiry date and time for the whole batch, you can specify individual expiryDate within each transaction
  "requests": [
    {
    
    "sequenceNumber": 1, // The numerical position of the transaction within the batch.
    "IsDeclined": true
    "isMIT": true,
    "isRecurring": true,
    "SiteUrl": "https://example.com", //Website linked to the descriptor of the subscription.
    "subscription": {
      "subscriptionId": "sub_123456",
      "schemeTransactionId": "txn_789012",
      "schemeBrand": "Visa",
      "interval": "Monthly",
      "price": 2599,
      "currency": "USD",
      "paymentNumber": 2,
      "totalPayments": 12
    }, 
    "threeDSecure": {
      "threeDsVersion": "2.1.0",
      "ecommerceIndicator": "02",
      "authenticationValue": "abcdefg12345",
      "directoryServerTransactionId": "ds_987654",
      "xid": "xid_246810",
      "authenticationValueAlgorithm": "SHA-256",
      "directoryResponseStatus": "Y",
      "authenticationResponseStatus": "Y",
      "enrolled": "Y"
    },
    "transaction": {
      "id": "3478613",
      "timestampUtc": "0001-01-01T00:00:00Z",
      "timezoneUtcOffset": 0,
      "amount": 19975, //in cents, >$10 and <$200 for tests
      "currency": "USD",
      "responseCode": "203",
      "avsResultCode": "M",
      "cvvResultCode": "NA",
      "processorName": "Acme Payments",
      "cavvResultCode": "2",
      "responseCodeSource": "NMI",
      "responseDescription": "Activity limit exceeded",
      "responseStatus": "DECLINED",
      "transactionType": "CAPTURE",
      "dynamicDescriptor": "MyShoesStore"
    },
    "payer": {
      "id": "customer123",
      "email": "[email protected]",
      "phone": "+1 555-123-4567",
      "birthdate": "1990-01-01"
    },
    "orderItems": [
      {
        "sku": "SKU123",
        "name": "Subscription 1",
        "description": "Description of Subscription 1",
        "amount": 20000,
        "discountAmount": 0,
        "tax": 100,
        "quantity": 1
      },
      {
        "sku": "SKU456",
        "name": "Subscription 2",
        "description": "Description of Subscription 2",
        "amount": 10000,
        "discountAmount": 0,
        "tax": 50,
        "quantity": 1
      }
    ],
    "shippingInformation": {
      "firstName": "John",
      "lastName": "Doe",
      "phone": "+1 555-123-4567",
      "country": "United States",
      "countryCode": "US",
      "addressLine1": "123 Main St.",
      "city": "CA",
      "zipcode": "94111"
    },
    "merchant": {
      "country": "US",
      "mcc": 1234,
      "id": "merchant123",
      "name": "Acme Inc."
    },
    "paymentMethod": {
      "holderName": "John Doe",
      "cardType": "CREDIT",
      "cardBrand": "VISA",
      "cardCountry": "United States",
      "cardIssuer": "Acme Bank",
      "cardFingerprint": "abcd1234",
      "expirationMonth": 2028,
      "expirationYear": 12,
      "cardBinNumber": "123456",
      "cardLast4Digits": "7890",
      "cardNumber": "zJb6YF7pL5gk8x9VhRnSwHd4q2t" //Do not send credit card number in clear, send token returned by /tokenize
    },
    "billingInformation": {
      "firstName": "John",
      "lastName": "Doe",
      "phone": "+1 555-123-4567",
      "country": "United States",
      "countryCode": "US",
      "addressLine1": "123 Main St.",
      "state": "CA",
      "city": "San Francisco",
      "zipcode": "94111"
    },

    "orderId": "ed44736a-b5fa-4bc2-bfb9-0e873bc09511", //must be unique even for test calls
    "idempotencyKey": "abcd1234",
    "senseKey": "1234567890"
},
{ 
    "sequenceNumber": 2, // The numerical position of the transaction within the batch.
    "isMIT": true,
    "isRecurring": true,
    "isDecline": true,
    "SiteUrl": "https://example.com", //Website linked to the descriptor of the subscription
    "subscription": {
        "subscriptionId": "sub_654321",
        "schemeTransactionId": "txn_210987",
        "schemeBrand": "Mastercard",
        "interval": "Weekly",
        "price": 1599,
        "currency": "USD",
        "paymentNumber": 3,
        "totalPayments": 52
    },
      "threeDSecure": {
        "threeDsVersion": "2.2.0",
        "ecommerceIndicator": "01",
        "authenticationValue": "hijklm67890",
        "directoryServerTransactionId": "ds_456789",
        "xid": "xid_135790",
        "authenticationValueAlgorithm": "SHA-512",
        "directoryResponseStatus": "A",
        "authenticationResponseStatus": "C",
        "enrolled": "Y"
    },
      "transaction": {
        "id": "1234567",
        "timestampUtc": "0001-01-01T00:00:00Z",
        "timezoneUtcOffset": 0,
        "amount": 14999,
        "currency": "USD",
        "responseCode": "204",
        "avsResultCode": "N",
        "cvvResultCode": "M",
        "processorName": "XYZ Payments",
        "cavvResultCode": "1",
        "responseCodeSource": "Braintree",
        "responseDescription": "Insufficient funds",
        "responseStatus": "DECLINED",
        "transactionType": "AUTHORIZE"
    },
      "payer": {
        "id": "customer456",
        "email": "[email protected]",
        "phone": "+1 555-987-6543",
        "birthdate": "1985-05-05"
    },
      "orderItems": [
    {
        "sku": "SKU789",
        "name": "Product 3",
        "description": "Description of Product 3",
        "amount": 30000,
        "discountAmount": 0,
        "tax": 150,
        "quantity": 2
    },
    {
        "sku": "SKU012",
        "name": "Product 4",
        "description": "Description of Product 4",
        "amount": 25000,
        "discountAmount": 0,
        "tax": 125,
        "quantity": 1
    }
    ],
      "shippingInformation": {
        "firstName": "Jane",
        "lastName": "Doe",
        "phone": "+1 555-987-6543",
        "country": "United States",
        "countryCode": "US",
        "addressLine1": "456 Oak St.",
        "city": "NY",
        "zipcode": "10001"
    },
      "merchant": {
        "country": "US",
        "mcc": 5678,
        "id": "merchant456",
        "name": "XYZ Inc."
    },
    "affiliate": {
   		 "id": "123123123",
   		 "name": "Affiliate 1"
 		 },
      "paymentMethod": {
        "holderName": "Jane Doe",
        "cardType": "CREDIT",
        "cardBrand": "MASTERCARD",
        "cardCountry": "United States",
        "cardIssuer": "XYZ Bank",
        "cardFingerprint": "efgh5678",
        "expirationMonth": 2028,
        "expirationYear": 12,
        "cardBinNumber": "123456",
        "cardLast4Digits": "7890",
        "cardNumber": "zJb6YF7pL5gk8x9VhRnSwHd4q2t" //Do not send credit card number in clear, send token returned by /tokenize
    },

      "billingInformation": {
        "firstName": "Jane",
        "lastName": "Doe",
        "phone": "+1 555-987-6543",
        "country": "United States",
        "countryCode": "US",
        "addressLine1": "456 Oak St.",
        "city": "NY",
        "zipcode": "10001"
      },
      
      "orderId": "ed44736a-b5fa-4bc2-bfb9-0e873bc09512", /must be unique even for test calls
      "idempotencyKey": "abcd1234",
      "senseKey": "1234567890"
}
  ]
}

Response example

{
  "Result":"Success/Failed",
  "Status": "APPROVED | DECLINED | CHALLENGE | SUBMITTED | CAPTUREREQUIRED",
  "OrderSessionKey": "{{$guid}}", //FlexFactor unique transaction identifier
  "SenseKey": "same value that was present in request", //optional
}