Finix API

Learn how to accept payments at the point of sale using the Finix API.


Processing In-Person Payments with the Finix API is similar to processing Online Payments.

Along with creating a Merchant and Authorization, you also create a Device to represent the payment terminal.
info

If you're interested in processing In-Person Payments, contact your Finix point of contact or the Finix Support team.

In-Person Payments API Overview

Take the following steps to integrate your point of sale application with the Finix API:

StepDescription
1. Provision a MerchantOnboard merchants and set up their payment terminals to accept in-person payments (also known as Card Present transactions).
2. Create a DeviceCreate a Device resource and connect your payment terminal to Finix's API.
3. Activate the Payment TerminalActivate the payment terminal to begin setup.
4. Set up the Payment TerminalComplete the initial set up of the payment terminal. This includes connecting the terminal to your Wi-fi network and installing any outstanding updates.
5. Create a SaleCreate a sale to debit a buyer for an in-person transaction.

The Finix API facilitates communication between your platforms's backend, the payment terminal, and the Finix API.

In-person Payments - Finix API Overview

Step 1: Provision a Merchant

To process card-present transactions with our API first, create a Merchant resource for your seller.

Sunmi Terminals
  • For Sandbox environments: Include DUMMY_V1 as the Merchant#processor.
  • For Live environments: Include FINIX_V1 as the Merchant#processor.
  • Do not include a Merchant#gateway.
PAX and Ingenico Terminals
  • For Sandbox environments: Include DATACAP_V1 as the Merchant#gateway.
  • For Live environments: Include VANTIV_V1 as the Merchant#processor.
SunmiPAX and Ingenico
Copy
Copied
curl https://finix.sandbox-payments-api.com/identities/IDuy7QZ4kWCvhDA79VLJGSDR/merchants \
        -H "Content-Type: application/json" \
        -H 'Finix-Version: 2022-02-01' \
        -u  USjHFGYvecE4LBitYG8KDE2g:b698f403-d9b7-4157-82d8-162cea8c8cc3 \
        -d '
        {
            "processor": "DUMMY_V1"
        }'
Copy
Copied
curl https://finix.sandbox-payments-api.com/identities/IDuy7QZ4kWCvhDA79VLJGSDR/merchants \
        -H "Content-Type: application/json" \
        -H 'Finix-Version: 2022-02-01' \
        -u  USjHFGYvecE4LBitYG8KDE2g:b698f403-d9b7-4157-82d8-162cea8c8cc3 \
        -d '
        {
            "gateway": "DATACAP_V1",
            "processor": "VANTIV_V1"
        }'

HTTP Request

POST https://finix.sandbox-payments-api.com/identities/:IDENTITY_ID:/merchants

URL Parameters

ParameterDescription
:IDENTITY_ID:ID of the Identity

Request Arguments

FieldTypeDescription
gatewaystring, optionalName of the gateway; required for PAX and Ingenico terminals. Pass DATACAP_V1 to enable In-Person card-present transactions with Finix; Finix uses Datacap to gateway card-present transactions.
processorstring, requiredName of the processor.
  • Pass VANTIV_V1 for PAX and Ingenico Terminals; Finix uses Vantiv to process card-present transactions.
  • Pass FINIX_V1 for Sunmi Terminals.
tagsobject, optionalKey value pair for annotating custom metadata (e.g. order numbers)
SunmiPAX and Ingenico
Copy
Copied
{
  "id" : "MU5KOsghJvQWeubQCRRL7Y6g",
  "created_at" : "2022-10-10T05:50:02.21Z",
  "updated_at" : "2022-10-10T05:50:02.21Z",
  "application" : "APeUbTUjvYb1CdPXvNcwW1wP",
  "card_cvv_required" : false,
  "card_expiration_date_required" : true,
  "convenience_charges_enabled" : false,
  "creating_transfer_from_report_enabled" : false,
  "default_partial_authorization_enabled" : false,
  "fee_ready_to_settle_upon" : "RECONCILIATION",
  "gross_settlement_enabled" : false,
  "identity" : "IDuy7QZ4kWCvhDA79VLJGSDR",
  "level_two_level_three_data_enabled" : false,
  "mcc" : null,
  "merchant_name" : null,
  "merchant_profile" : "MPeGFDyZjBu4G5sNZhnYdLVT",
  "mid" : null,
  "onboarding_state" : "PROVISIONING",
  "processing_enabled" : false,
  "processor" : "FINIX_V1",
  "processor_details" : { },
  "ready_to_settle_upon" : "RECONCILIATION",
  "rent_surcharges_enabled" : false,
  "settlement_enabled" : false,
  "settlement_funding_identifier" : "UNSET",
  "surcharges_enabled": false,
  "tags" : { },
  "verification" : "VI8AzaREBqoE1zTDQ9XANrcx",
  "_links" : {
    "self" : {
      "href" : "https://finix.sandbox-payments-api.com/merchants/MU5KOsghJvQWeubQCRRL7Y6g"
    },
    "identity" : {
      "href" : "https://finix.sandbox-payments-api.com/identities/IDuy7QZ4kWCvhDA79VLJGSDR"
    },
    "verifications" : {
      "href" : "https://finix.sandbox-payments-api.com/merchants/MU5KOsghJvQWeubQCRRL7Y6g/verifications"
    },
    "merchant_profile" : {
      "href" : "https://finix.sandbox-payments-api.com/merchant_profiles/MPeGFDyZjBu4G5sNZhnYdLVT"
    },
    "application" : {
      "href" : "https://finix.sandbox-payments-api.com/applications/APeUbTUjvYb1CdPXvNcwW1wP"
    },
    "verification" : {
      "href" : "https://finix.sandbox-payments-api.com/verifications/VI8AzaREBqoE1zTDQ9XANrcx"
    }
  }
}
Copy
Copied
{
  "id" : "MU4LYrniAvqVKUBqcATb7Y7p",
  "created_at" : "2022-10-10T05:50:02.21Z",
  "updated_at" : "2022-10-10T05:50:02.21Z",
  "application" : "APeUbTUjvYb1CdPXvNcwW1wP",
  "card_cvv_required" : false,
  "card_expiration_date_required" : true,
  "convenience_charges_enabled" : false,
  "creating_transfer_from_report_enabled" : false,
  "default_partial_authorization_enabled" : false,
  "fee_ready_to_settle_upon" : "RECONCILIATION",
  "gross_settlement_enabled" : false,
  "identity" : "IDuy7QZ4kWCvhDA79VLJGSDR",
  "level_two_level_three_data_enabled" : false,
  "mcc" : null,
  "merchant_name" : null,
  "merchant_profile" : "MPeGFDyZjBu4G5sNZhnYdLVT",
  "mid" : null,
  "onboarding_state" : "PROVISIONING",
  "processing_enabled" : false,
  "processor" : "VANTIV_V1",
  "processor_details" : { },
  "ready_to_settle_upon" : "RECONCILIATION",
  "rent_surcharges_enabled" : false,
  "settlement_enabled" : false,
  "settlement_funding_identifier" : "UNSET",
  "surcharges_enabled": false,
  "tags" : { },
  "verification" : "VI8AzaREBqoE1zTDQ9XANrcx",
  "_links" : {
    "self" : {
      "href" : "https://finix.sandbox-payments-api.com/merchants/MU4LYrniAvqVKUBqcATb7Y7p"
    },
    "identity" : {
      "href" : "https://finix.sandbox-payments-api.com/identities/IDuy7QZ4kWCvhDA79VLJGSDR"
    },
    "verifications" : {
      "href" : "https://finix.sandbox-payments-api.com/merchants/MU4LYrniAvqVKUBqcATb7Y7p/verifications"
    },
    "merchant_profile" : {
      "href" : "https://finix.sandbox-payments-api.com/merchant_profiles/MPeGFDyZjBu4G5sNZhnYdLVT"
    },
    "application" : {
      "href" : "https://finix.sandbox-payments-api.com/applications/APeUbTUjvYb1CdPXvNcwW1wP"
    },
    "verification" : {
      "href" : "https://finix.sandbox-payments-api.com/verifications/VI8AzaREBqoE1zTDQ9XANrcx"
    }
  }
}

Step 2: Create a Device

Create a Device under the Merchant provisioned to process In-Person Payments. Include the Device#model of the payment terminal you'll be using to process cards.

A breakdown of the payment terminals available can be found in Managing Payment Terminals.

For more details about the payment terminals available, see Managing Payment Terminals.

SunmiPAX and Ingenico
Copy
Copied
curl https://finix.sandbox-payments-api.com/merchants/MU5KOsghJvQWeubQCRRL7Y6g/devices \
        -H "Content-Type: application/json" \
        -H 'Finix-Version: 2022-02-01' \
        -u  USjHFGYvecE4LBitYG8KDE2g:b698f403-d9b7-4157-82d8-162cea8c8cc3 \
        -d '
      {
        "description": "Cashier Two",
        "model": "SUNMI_P2",
        "name": "My Sunmi Finix Device",
        "serial_number" : "19046260945"
      }'
Copy
Copied
curl https://finix.sandbox-payments-api.com/merchants/MU4LYrniAvqVKUBqcATb7Y7p/devices \
        -H "Content-Type: application/json" \
        -H 'Finix-Version: 2022-02-01' \
        -u  USjHFGYvecE4LBitYG8KDE2g:b698f403-d9b7-4157-82d8-162cea8c8cc3 \
        -d '
      {
        "configuration": {
          "prompt_amount_confirmation": true
        },
        "description": "Cashier One",
        "model": "LINK_2500",
        "name": "My PAX Finix Device",
        "serial_number" : "18123123012"
      }'

HTTP Request

POST https://finix.sandbox-payments-api.com/merchants/:MERCHANT_ID:/devices

URL Parameters

FieldTypeDescription
:MERCHANT_ID:string, requiredID of Device.

Request Arguments

FieldTypeDescription
configurationobject, optionalRequired for PAX and Ingenico Terminals.
descriptionstring, optionalAdditional information about the device (e.g. self serving terminal).
modelstring, requiredPass the following values to lets Finix know the type of device is being used:
  • LINK_2500
  • LANE_3000
  • LANE_5000
  • LANE_7000
  • LANE_8000
namestring, requiredThe display name of the Device used for filtering purposes.
serial_numberstring, requiredThe serial number of the Device. You must have the serial number set before activating the device. The serial_number is the 16 digit number in the back of the device. The serial_number can be added at a later time via a PUT request.
tagsobject, optionalKey value pair for annotating custom metadata (e.g. order numbers).

Configuration Arguments

FieldTypeDescription
allow_debitboolean, optionalSets whether the device will allow debit transactions (defaults to true).
bypass_device_on_captureboolean, requiredSets if the device will be used to capture transactions. This field must be set to true (defaults to false).
check_for_duplicate_transactionsboolean, optionalSets if the device will check for duplicate transactions.
prompt_amount_confirmationboolean, optionalSets if the cardholder needs to confirm the amount they'll pay (defaults to true).
prompt_manual_entryboolean, optionalIf true, sets the default card input method to manual entry (defaults to false).
SunmiPAX and Ingenico
Copy
Copied
{
  "id" : "DVbFNEoNLAGJjrc7wvy1ctji",
  "created_at" : "2022-10-10T05:51:42.172580Z",
  "updated_at" : "2022-10-10T05:51:42.172580Z",
  "configuration_details" : null,
  "description" : "Cashier Two",
  "enabled" : true,
  "idle_message" : null,
  "merchant" : "MU4LYrniAvqVKUBqcATb7Y7p",
  "model" : "SUNMI_P2",
  "name" : "My First Finix Device",
  "serial_number" : "18123123012",
  "tags" : { },
  "_links" : {
    "self" : {
      "href" : "https://finix.sandbox-payments-api.com/devices/DVbFNEoNLAGJjrc7wvy1ctji"
    },
    "merchant" : {
      "href" : "https://finix.sandbox-payments-api.com/merchants/MU4LYrniAvqVKUBqcATb7Y7p"
    },
    "transfers" : {
      "href" : "https://finix.sandbox-payments-api.com/transfers"
    },
    "authorizations" : {
      "href" : "https://finix.sandbox-payments-api.com/authorizations"
    }
  }
}
Copy
Copied
{
  "id" : "DVbFNEoNLAGJjrc7wvy1ctji",
  "created_at" : "2022-10-10T05:51:42.172580Z",
  "updated_at" : "2022-10-10T05:51:42.172580Z",
  "configuration_details" : {
    "allow_debit" : true,
    "check_for_duplicate_transactions" : true,
    "prompt_amount_confirmation" : true,
    "prompt_manual_entry" : false,
    "prompt_signature" : "NEVER",
    "signature_threshold_amount" : 0,
    "bypass_device_on_capture" : true
  },
  "description" : "Cashier One",
  "enabled" : true,
  "idle_message" : null,
  "merchant" : "MU4LYrniAvqVKUBqcATb7Y7p",
  "model" : "LINK_2500",
  "name" : "My First Finix Device",
  "serial_number" : "18123123012",
  "tags" : { },
  "_links" : {
    "self" : {
      "href" : "https://finix.sandbox-payments-api.com/devices/DVbFNEoNLAGJjrc7wvy1ctji"
    },
    "merchant" : {
      "href" : "https://finix.sandbox-payments-api.com/merchants/MU4LYrniAvqVKUBqcATb7Y7p"
    },
    "transfers" : {
      "href" : "https://finix.sandbox-payments-api.com/transfers"
    },
    "authorizations" : {
      "href" : "https://finix.sandbox-payments-api.com/authorizations"
    }
  }
}

Step 3: Activate the Payment Terminal

Once the Device is created and the serial_number is set, you can link the Device resource with the payment terminal you'll use by sending an activation request to the payment terminal. A successful request returns Device#enabled as true.

For PAX devices on DATACAP_V1, work with your Finix representative or Finix Support to enable payment processing.
Copy
Copied
curl https://finix.sandbox-payments-api.com/devices/DVf2H8sh4LZZC52GTUrwCPPf \
  -H "Content-Type: application/json" \
  -H 'Finix-Version: 2022-02-01' \
  -u  USjHFGYvecE4LBitYG8KDE2g:b698f403-d9b7-4157-82d8-162cea8c8cc3 \
  -X PUT \
  -d '
    {
      "action": "ACTIVATE"
    }'

HTTP Request

PUT https://finix.sandbox-payments-api.com/devices/:DEVICE_ID:

URL Parameters

FieldTypeDescription
:DEVICE_ID:string, requiredID of the Device that's configured to connect with Finix.

Request Arguments

FieldTypeDescription
actionstring, requiredaction must include ACTIVATE to enable the device.
tagsobject, optionalKey value pair for annotating custom metadata (e.g. order numbers).
Copy
Copied
{
  "id" : "DVf2H8sh4LZZC52GTUrwCPPf",
  "created_at" : "2019-03-01T02:27:20.366Z",
  "updated_at" : "2022-04-05T18:48:40.383Z",
  "configuration_details" : {
    "allow_debit" : true,
    "check_for_duplicate_transactions" : true,
    "prompt_amount_confirmation" : false,
    "prompt_manual_entry" : true,
    "prompt_signature" : "AMOUNT",
    "signature_threshold_amount" : 10,
    "bypass_device_on_capture" : false
  },
  "description" : "John Smith",
  "enabled" : true,
  "idle_message" : null,
  "merchant" : "MUu56ZGx3Xb6U9gAqKfgNisd",
  "model" : "LINK_2500",
  "name" : "My First Finix Device",
  "serial_number" : "18123123012",
  "tags" : { },
  "_links" : {
    "self" : {
      "href" : "https://finix.sandbox-payments-api.com/devices/DVf2H8sh4LZZC52GTUrwCPPf"
    },
    "merchant" : {
      "href" : "https://finix.sandbox-payments-api.com/merchants/MUu56ZGx3Xb6U9gAqKfgNisd"
    },
    "transfers" : {
      "href" : "https://finix.sandbox-payments-api.com/transfers"
    },
    "authorizations" : {
      "href" : "https://finix.sandbox-payments-api.com/authorizations"
    }
  }
}

Step 4: Set up the Payment Terminal

Place the payment terminal where you'll use it to process the majority of payments.

To set up the payment terminal, you'll need:

  • A Wi-Fi network and router.
  • The Wi-Fi network's name and password.
  • Physical access to the payment terminal being activated.

Step 4a: Connect to the Network

Sunmi

When you first power on the device, follow the steps on-screen to connect the terminal to your preferred Wi-Fi network.

For details on how to change the Wi-Fi network the terminal is connected to, see Sunmi P2.

PAX and Ingenico

If your payment terminal has an ethernet port, connect it to your router or internet modem.

If your payment terminal can connect to a Wi-Fi network, when you first boot up the payment terminal, a prompt should display with the prompt to "Set up Wi-Fi?":

  1. Press the Enter (Green) key to be taken to the Configure Wi-Fi flow of the payment terminal.
  2. Select 1-Scan Networks.
  3. Once scanning is complete, select your Wi-Fi network.
  4. Type in the network's password and press the Enter (Green) key.
  5. You'll get returned to the menu of the payment terminal.

If the symbol in the top left turns green, then the payment terminal is connected to the internet.

Wi-Fi Payment Terminals

If the “Set up Wi-Fi?” page doesn't display, it's likely one of the menus timed out due to inactivity or the “Cancel (Red)” key was pressed. To manually bring up the Set up Wi-Fi? page:

  1. From the idle screen press the F key (silver circle key).
  2. Select Admin Mode.
  3. Enter 123456A for the admin password .
  4. Select Tetra Admin.
  5. Select 3-Configure Wi-Fi

Step 4b: Update the Payment Terminal

Once the terminal is connected to the internet, install any outstanding updates before processing a payment.

To update a PAX or Ingenico terminal:

  1. From the idle screen, press the F key. If prompted for an amount, press the F key a second time.
  2. Select Admin Mode if given the option.
  3. If prompted for the admin password type 123456A then press the Enter (Green) key.
  4. Select Tetra Admin.
  5. Select 1-Download Application.
  6. Select 2-Start Download.
  7. Press the Enter (Green) key when you're prompted to Enter package name. No value is needed.
  8. The device will reboot twice then settle on the idle screen.

Set Date and Time (Optional)

  1. From the idle screen, press the F key. If prompted for an amount, press the F key a second time.
  2. Select Admin Mode if given the option.
  3. If prompted for the admin password type 123456A then press the "Enter (Green)" key.
  4. Select Tetra Admin.
  5. Select Set Date and Time.
  6. Select Set Date.
  7. Enter the date in a mm/dd/yyyy format and press the Enter (Green) key.
  8. Select Set Time.
  9. Enter time in a hh:mm format and press the Enter (Green) key.
  10. Press the Enter (Green) key
  11. Press Cancel (Red) key twice to return to the idle screen.

Step 5: Create a Sale

With the payment terminal connected, you can begin processing In-Person payments.

Use the Device you enabled to create a Sale.
Copy
Copied
curl https://finix.sandbox-payments-api.com/transfers \
  -H "Content-Type: application/json" \
  -H 'Finix-Version: 2022-02-01' \
  -u  USjHFGYvecE4LBitYG8KDE2g:b698f403-d9b7-4157-82d8-162cea8c8cc3 \
  -d '
  {
    "amount": 150,
    "currency": "USD",
    "device": "DVf2H8sh4LZZC52GTUrwCPPf",
    "operation_key": "CARD_PRESENT_DEBIT",
    "tags": {
      "order_number": "test123transfer"
    }
  }'

HTTP Request

POST https://finix.sandbox-payments-api.com/authorizations

Request Arguments

FieldTypeDescription
amountinteger, requiredAmount of the sale.
currencystring, requiredCurrency of sale.
devicestring, requiredThe ID of the activated Device.
operation_keystring, requiredDescribes the operation that's performed in the transaction.
tagsobject, optionalKey value pair for annotating custom metadata (e.g. order numbers).

Configuration Arguments

While creating a Transfer, you can enable several fields to verify different payment details for the transaction getting processed.
FieldTypeDescription
allow_debitboolean, optionalSets whether the device will allow debit by default or not (defaults to true).
bypass_device_on_captureboolean, requiredSets if the device will be used to capture transactions. (defaults to true).
check_for_duplicate_transactionsboolean, optionalSets if the device will check for duplicate transactions.
prompt_amount_confirmationboolean, optionalSets if the cardholder needs to confirm the amount they'll pay (defaults is true).
prompt_manual_entryboolean, optionalIf true, sets the default card input method to manual entry (defaults to false).
Copy
Copied
{
  "id" : "TRarp7Pz21Low4u2Urw5Ub4W",
  "created_at" : "2019-04-29T20:44:00.13Z",
  "updated_at" : "2022-10-10T05:59:17.59Z",
  "3ds_redirect_url" : null,
  "additional_buyer_charges" : null,
  "additional_healthcare_data" : null,
  "address_verification" : null,
  "amount" : 3138,
  "amount_requested" : 3138,
  "application" : "APeUbTUjvYb1CdPXvNcwW1wP",
  "capture_amount" : 150,
  "card_present_details" : {
    "emv_data" : {
      "application_identifier" : "A0000001523010",
      "application_label" : "DISCOVER",
      "application_preferred_name" : null,
      "application_transaction_counter" : "0005",
      "cryptogram" : "ARCQ F666F8891F870D33",
      "issuer_code_table_index" : null,
      "pin_verified" : false,
      "tags" : null
    },
    "masked_account_number" : "************0059",
    "name" : "Test Card 05",
    "brand" : "DISCOVER",
    "entry_mode" : "CHIP_ENTRY",
    "payment_type" : "CREDIT",
    "approval_code" : "004839"
  },
  "currency" : "USD",
  "device" : "DVfKLD9GZtsjcJxLtc2yCcfd",
  "expires_at" : "2019-05-06T20:44:00.13Z",
  "failure_code" : null,
  "failure_message" : null,
  "idempotency_id" : null,
  "is_void" : false,
  "merchant": "MUeDVrf2ahuKc9Eg5TeZugvs",
  "merchant_identity" : "IDsbTBawhnLBAVeinRb84vFR",
  "messages" : [ ],
  "raw" : null,
  "security_code_verification" : null,
  "source" : "PImTHaz7XVPx4M7mhu9x8gkU",
  "state" : "SUCCEEDED",
  "tags" : {
    "TicketNumber" : "45878"
  },
  "trace_id" : "FNX35FSuraeKKJr65wkGVFJni",
  "void_state" : "UNATTEMPTED",
  "_links" : {
    "self" : {
      "href" : "https://finix.sandbox-payments-api.com/authorizations/AUarp7Pz21Low4u2Urw5Ub4W"
    },
    "application" : {
      "href" : "https://finix.sandbox-payments-api.com/applications/APeUbTUjvYb1CdPXvNcwW1wP"
    },
    "transfer" : {
      "href" : "https://finix.sandbox-payments-api.com/transfers/TRqQCAX7nYHUnkE5YPFTknqd"
    },
    "device" : {
      "href" : "https://finix.sandbox-payments-api.com/devices/DVfKLD9GZtsjcJxLtc2yCcfd"
    },
    "merchant_identity" : {
      "href" : "https://finix.sandbox-payments-api.com/identities/IDsbTBawhnLBAVeinRb84vFR"
    }
  }
}
Once complete, similar to other Finix Authorizations, you can proceed with managing payouts, and the Post-Payments lifecycle.

Next Steps