A response header indicating the date and time of the API request.
Finix API Reference (2022-02-01)
The Finix API is resource oriented, relying heavily on common REST principles. Our API uses JSON encoded requests and responses.
You will receive separate Sandbox and Live accounts, as well as corresponding API credentials to access the Finix API.
To communicate with the Finix API, you must authenticate your requests via HTTP Basic Authentication with a username:password combination, which you can get from your Finix Dashboard. If you do not have a Dashboard yet, you can test our APIs with the Sandbox credentials below.
| Parameter | Value |
|---|---|
| Sandbox Username | USsRhsHYZGBPnQw8CByJyEQW |
| Sandbox Password | 8a14c2f9-d94b-4c72-8f5c-a62908e5b30e |
curl "https://finix.sandbox-payments-api.com/" \
-H "Content-Type: application/json" \
-H "Finix-Version: 2022-02-01" \
-u USsRhsHYZGBPnQw8CByJyEQW:8a14c2f9-d94b-4c72-8f5c-a62908e5b30eFinix provides two environments with distinct base URLs to make API requests.
- A Sandbox environment for developing and testing your integration.
- A Live environment for processing payments.
These environments are entirely separate and do not share API Credentials.
| Environment | Endpoint URL |
|---|---|
| Sandbox | https://finix.sandbox-payments-api.com |
| Live | https://finix.live-payments-api.com |
To get access to the Live environment, please reach out to your Finix point-of-contact.
Finix uses HTTP codes to communicate whether requests succeeded or failed. Requests to Finix's API return responses within less than one second.
However, communications between card networks and processors can increase response latency. Additionally, response latency for card-present devices can be higher depending on how quickly buyers complete the transaction on payment terminals.
Due of this, requests to the Finix API have a maximum timeout of 5 minutes.
For more details, see Error Codes. Also, you can test for specific errors and responses.
| Code | Definition | Explanation |
|---|---|---|
400 | Bad Request | We could not parse your request. Verify you are providing valid JSON. |
401 | Unauthorized | We could not authenticate your request. Verify your username and password are correct. |
402 | Upstream Processor Error | Errors caused by 3rd-party service(s). |
403 | Forbidden | Your credentials do not have the correct permissions to perform the request. |
404 | Not Found | We could not find the specified resource. |
405 | Method Not Allowed | The specified resource does not support the HTTP Method used to submit the request. |
406 | Not Acceptable | The server could accept the submitted request. Confirm how the request was formatted and submitted. |
409 | Conflict | The submitted request conflicts with the current state of the server. |
422 | Unprocessable Entity | The parameters were valid, but the request failed. Usually, the error involves misunderstanding of how to perform the request (e.g., creating a transfer with a seller that is not-yet-approved). |
500 | Internal Server Error | We had a problem with our server. Try again later. |
The Authorization and Transfer resources both have an idempotency_id field. Use this field to ensure the API Request is performed only once.
Why is this important? We've all experienced a checkout page that hangs on a request or payment, and feared that if we refresh or submit the payment again, we'd be charged twice.
Finix removes this ambiguity with the idempotency_id. You or the user can generate a unique ID that can be included as an idempotency_id with the usual request payload. If anyone attempts a request with the same idempotency_id, the response will raise an exception.
By passing an idempotency_id in the body of your requests, you can be rest assured that when you create an Authorization or Transfer, the user will be protected from potential network issues.
idempotency_id is available on the following three endpoints:
/transfers/authorizations/transfers/{id}/reversals
idempotency_id checks against previous requests made on the same endpoint.
Every Finix resource (e.g., Authorizations, Transfers) can be listed and reviewed using GET requests. Additionally, every endpoint has query parameters available to help you filter the resources that are returned.
See the following example of how to query the Transfers endpoint for Transfer resources with type: DEBIT.
curl "https://finix.sandbox-payments-api.com/transfers?type=DEBIT" \
-H "Finix-Version: 2022-02-01" \
-u USsRhsHYZGBPnQw8CByJyEQW:8a14c2f9-d94b-4c72-8f5c-a62908e5b30eAs Finix improves our products and features, we will make changes to our APIs. When breaking changes are made to Finix's API, we may release a new dated API version.
The API version your requests use controls how API responses and webhooks behave (for example, the values you see in responses and the parameters you can include in requests). For more information, see Versioning.
https://finix.sandbox-payments-api.com/
https://finix.live-payments-api.com/
Compliance Forms
To process payments, your Merchants must validate their compliance with PCI DSS requirements annually. To do this, your Merchants must attest to PCI Self-Assessment Questionnaire (SAQ) compliance forms.
Related Guides: Managing PCI Compliance, PCI DSS Compliance
Devices
A Device resource represents a Point-of-Sale terminal. Devices are used for In-Person transactions.
Disputes
Disputes, also known as chargebacks, represent any customer-disputed charges. A core part of the dispute lifecycle is the ability for a Merchant to upload Dispute evidence that supports their side of the Dispute.
Related Guides: Managing Disputes
Files
Use Finix's File API to upload and manage files for your merchants.
Related Guides: File Uploads, Update Requests
Identities
An Identity resource represents either a person or business in Finix. You'll create an Identity to onboard your sellers, and verify the different owners.
Related Guides: Getting Started, Onboarding Sellers, Push to Card
Merchants
A Merchant resource represents the entity's merchant account on a processor. Your Merchant must be APPROVED to process payments.
Related Guides: Getting Started, Onboarding Sellers
Onboarding Forms
Finix offers and hosts pre-built onboarding forms that you can use to collect onboarding and identity verification information from your users.
Related Guides: Onboarding, Onboarding Forms.
Payment Instruments
A Payment Instrument resource represents the payment details of a credit card or bank account. Payment details get tokenized multiple times and each tokenization produces a unique Payment Instrument.
A Payment Instrument is associated with a single Identity. Once a Payment Instrument is created, the Identity it's associated with can't be changed.
Including an address when creating a Payment Instrument can lower interchange on credit card transactions.
Related Guides: Using Hosted Fields, Getting Started
Specify the API version of your request. For more details, see Versioning.
- Sandbox server
https://finix.sandbox-payments-api.com/payment_instruments/{payment_instrument_id}
- Production server
https://finix.live-payments-api.com/payment_instruments/{payment_instrument_id}
curl -i -X GET \
-u USfdccsr1Z5iVbXDyYt7hjZZ:313636f3-fac2-45a7-bff7-a334b93e7bda \
https://finix.sandbox-payments-api.com/payment_instruments/PInVUXZLswZi6pdcK1T41MuE \
-H 'Finix-Version: 2022-02-01'A single Payment Instrument
This response header indicating the role of the user who sent the API request.
When enabled at the Payment Instrument-level, Finix automatically checks for updates with card networks. This Account Updater functionality:
- Automatically updates card details (e.g., number or expiration date) to maintain continuity of charges, increasing authorization rates.
- Saves the cardholder the hassle of updating card details across
Merchantsfor each of theirSubscriptions.
If set at the Application level, this Payment Instrument-level setting will override the Application-level configuration. If not configured at the Application-level, the card defaults to false, requiring explicit opt-in.
Note: Cards created before the feature is enabled are unaffected by default. To include these cards, you can manually enable the Account Updater functionality for each card individually using a PUT request. Once enabled, you can link the card to this API call to trigger updates with card networks.
The address of the card owner. Including a postal or zip code when creating a Payment Instrument can lower the interchange on credit card transactions.
- Details the results of verifying
addresswith the issuing bank. - Set to UNKNOWN when
addressgets updated.
The brand of the card saved in the Payment Instrument.
The type of payment card saved in the Payment Instrument.
ISO 4217 3-letter currency code.
Indicates whether the Payment Instrument resource is enabled. The default value is true; set it to false to disable the Payment Instrument.
The Alpha-3 Code of the country the card was issued in.
In addition, the following values are possible:
NON_USA- The card was issued outside of the United States.UNKNOWN- The processor did not return an issuer country for this particular BIN.
When enabled at the Payment Instrument level, a "network token" replaces raw card details (e.g., the 16-digit PAN and expiration date) for transactions. Network tokens have several benefits:
- The token offers increased authorization rates, even for lost or stolen cards, as it remains valid while the physical card is replaced.
- Visa reduces interchange fees when using network tokens.
- Tokens enhance security by replacing card details with a non-sensitive string that is usable only within the Finix system.
If set at the Application level, this Payment Instrument level setting will override the application level configuration. If not configured at the application level, the card defaults to false, requiring explicit opt-in.
Note: Cards created before the feature is enabled are unaffected. To include them, update an individual Payment Instrument. Then, you can insert the hyperlink on the "update".
The state of the network token. The possible enum values are as follows:
NOT_ENABLED: Thenetwork_token_stateisNOT_ENABLEDwhen the value ofnetwork_token_enabledon thePayment Instrumentisfalse.PENDING: Immediately after Finix enables network tokens for a specific card,network_token_stateis initially set toPENDING.ACTIVE: After Finix receives the network token successfully from the card network,network_token_stateupdates toACTIVE.FAILED: In the event that there is an issue with the card network such as service becomes unavailable,FAILEDis returned.SUSPENDED: When the issuing bank does not allow the network token to be used in transactions,SUSPENDEDis returned.CLOSED: In the event that the issuing bank has closed the card permanently,CLOSEDis returned.
Details if the card is enabled to receive push-payments for online gambling payouts.
Details if the card is enabled to receive push-to-card disbursements.
Details the results of the Card Verification Code check.
Include up to 50 key: value pairs to annotate requests with custom metadata.
- Maximum character length for individual
keysis 40. - Maximum character length for individual
valuesis 500. (For example,order_number: 25,item_type: produce,department: sales)
{ "id": "PI6F5kkcCB3dtGhFy1t8Aua5", "created_at": "2024-11-15T09:42:33.42Z", "updated_at": "2024-11-15T09:42:33.42Z", "account_updater_enabled": false, "application": "APgPDQrLD52TYvqazjHJJchM", "created_via": "API", "currency": "USD", "disabled_code": null, "disabled_message": null, "enabled": true, "fingerprint": "FPRiCenDk2SoRng7WjQTr7RJY", "identity": "IDgWxBhfGYLLdkhxx2ddYf9K", "instrument_type": "PAYMENT_CARD", "address": { "line1": "900 Metro Center Blv", "line2": null, "city": "San Francisco", "region": "CA", "postal_code": "94404", "country": "USA" }, "address_verification": "UNKNOWN", "bin": "520082", "brand": "MASTERCARD", "card_type": "DEBIT", "expiration_month": 12, "expiration_year": 2029, "issuer_country": "NON_USA", "last_four": "8210", "name": "John Smith", "network_token_enabled": false, "network_token_state": "NOT_ENABLED", "security_code_verification": "UNKNOWN", "tags": {}, "third_party": null, "third_party_token": null, "type": "PAYMENT_CARD", "_links": { "self": { … }, "authorizations": { … }, "transfers": { … }, "verifications": { … }, "application": { … }, "identity": { … }, "updates": { … } } }
Request
Update a Payment Instrument to:
- Change the billing address in case the account holder moved (
instrument_type:PAYMENT_CARD only). - Disable the
Payment Instrumentresource so it can't be used in requests. - Update the
nameon thePayment Instrument. - Change the
tags. - Enable or disable Account Updater.
- Enable or disable Network Tokens.
- Payment Instrument - Bank Account Validation Check
- Payment Instrument - Disable a Payment Instrument
- Payment Instrument - Enable Account Updater
- Payment Instrument - Enable Network Tokens
- Payment Instrument - Update Card Address
- Payment Instrument - Update Name
- Payment Instrument - Update Tags
- Payment Instrument - Add Address for Google or Apply Pay
Verify and validate the Payment Instrument to confirm it can be used for ACH Direct Debits.
- Set to True to verify the
Payment Instrumentcan be used for ACH payments. - Only
Payment Instrumentscreated from bank accounts can be used for ACH payments.
- Sandbox server
https://finix.sandbox-payments-api.com/payment_instruments/{payment_instrument_id}
- Production server
https://finix.live-payments-api.com/payment_instruments/{payment_instrument_id}
curl -i -X PUT \
-u USfdccsr1Z5iVbXDyYt7hjZZ:313636f3-fac2-45a7-bff7-a334b93e7bda \
https://finix.sandbox-payments-api.com/payment_instruments/PInVUXZLswZi6pdcK1T41MuE \
-H 'Content-Type: application/json' \
-d '{
"attempt_bank_account_validation_check": "true"
}'A single Payment Instrument
A response header indicating the date and time of the API request.
This response header indicating the role of the user who sent the API request.
- Payment Instrument - Bank Account Validation Check
- Payment Instrument - Disable a Payment Instrument
- Payment Instrument - Enable Account Updater
- Payment Instrument - Enable Network Tokens
- Payment Instrument - Update Card Address
- Payment Instrument - Update Name
- Payment Instrument - Update Tags
- Payment Instrument - Add Address for Google or Apply Pay
Possible values returned when attempt_bank_account_validation_check is true or the Payment Instrument is used for a Transfer:
INCONCLUSIVE: A verification check was conducted, but the bank account could not be found or verified with the issuing bank. Please contact the buyer to confirm the details collected or request an alternate method of payment.INVALID: The Payment Instrument was involved in transactions that returned one or more of the following ACH errors:- Account Does Not Allow ACH Transactions
- Account is Closed
- Account Funds are Frozen
- Deceased Account Holder
- Invalid Account Number
- Invalid Routing Number
- No Account on File
For further details about the different ACH failure codes, please refer to ACH Direct Debit documentation.
NOT_ATTEMPTED: A verification check was not performed, and the Payment Instrument has not been used to create a Transfer or Authorization.VALID: The bank account was successfully verified. The Payment Instrument is eligible for use in creating ACH Direct Debits.
ISO 4217 3-letter currency code.
Indicates whether the Payment Instrument resource is enabled. The default value is true; set it to false to disable the Payment Instrument.
Canadian bank identifier (EFT). Exactly 3 digits that identify the financial institution (e.g., 004 = TD, 002 = Scotiabank). Stored as a string to preserve leading zeros.
The last 4 digits of the account number used to create the Payment Instrument.
Canadian branch/branch-transit identifier (EFT). Exactly 5 digits that identify the branch where the account is held. Stored as a string to preserve leading zeros.
Include up to 50 key: value pairs to annotate requests with custom metadata.
- Maximum character length for individual
keysis 40. - Maximum character length for individual
valuesis 500. (For example,order_number: 25,item_type: produce,department: sales)
{ "id": "PIpU66orYpdrPSs91fqRJd66", "created_at": "2023-03-13T23:28:34.10Z", "updated_at": "2023-03-13T23:28:34.10Z", "application": "APgPDQrLD52TYvqazjHJJchM", "created_via": "API", "currency": "USD", "disabled_code": null, "disabled_message": null, "enabled": true, "fingerprint": "FPRd5moHxL3Ltuvk4cczxetCg", "identity": "IDpYDM7J9n57q849o9E9yNrG", "instrument_type": "BANK_ACCOUNT", "account_type": "SAVINGS", "bank_account_validation_check": "VALID", "bank_code": "123123123", "country": "USA", "masked_account_number": "XXXXX3123", "name": null, "tags": {}, "type": "BANK_ACCOUNT", "_links": { "self": { … }, "authorizations": { … }, "transfers": { … }, "verifications": { … }, "application": { … }, "identity": { … } } }
Specify the API version of your request. For more details, see Versioning.
- Sandbox server
https://finix.sandbox-payments-api.com/payment_instruments/{payment_instrument_id}/instrument_history
- Production server
https://finix.live-payments-api.com/payment_instruments/{payment_instrument_id}/instrument_history
curl -i -X GET \
-u USfdccsr1Z5iVbXDyYt7hjZZ:313636f3-fac2-45a7-bff7-a334b93e7bda \
'https://finix.sandbox-payments-api.com/payment_instruments/PInVUXZLswZi6pdcK1T41MuE/instrument_history' \
-H 'Finix-Version: 2022-02-01'List of Instrument History Entry objects.
A response header indicating the date and time of the API request.
This response header indicating the role of the user who sent the API request.
{ "_embedded": { "instrument_history_entries": [ … ] }, "_links": { "self": { … }, "next": { … } }, "page": { "limit": 10, "next_cursor": "instrument_history_nAzun1LYhSAJ6rvLeyVAfj" } }
Settlements
A Settlement is a logical construct representing a collection (i.e. batch) of Settlement Entries that will get paid out to a specific Merchant. A Settlement Entry can represent Transfers or Split Transfers
Related Guides: Payouts
Settlement Queue Entries
A Settlement Queue Entry resource represents an entry in the settlement queue used to track when and how a transfer is queued to be processed.
If a merchant's settlement_queue_mode is set to MANUAL, all transfers will have a Settlement Queue Entry created and will not be placed into settlement until the Settlement Queue Entry is explicitly released using a PUT Update Settlement Queue Entries request.
Related Guides: Account Structures and Settlements
Split Transfers
Transfers can be split among several different Merchants. A split_transfer represents how the funds from a split Transfer were distributed into a Merchants Settlement.
Related Guides: Online Payments Quickstart, Split a Transaction
Transfers
A Transfer represents any flow of funds either to or from a Payment Instrument. All payments in Finix are represented by a Transfer.
Related Guides: Online Payments Quickstart, Level 2 and 3 Processing, POS Integration, Buyer Charges, ACH (eCheck) Direct Debit
Users
A User resource represents a pair of API keys which are used to perform authenticated requests against the Finix API. When making authenticated requests via HTTP basic access authentication the ID of a User resource maps to the username, while the password corresponds to the password (i.e. secret key).
The password field for a User resource is only returned during the initial creation. Any following GET requests to the resource returns the password field as null for security purposes.
Related Guides: Account Structure
Webhooks
Webhooks lets you build or set up integrations which subscribe to certain automated notifications (i.e. events) on the Finix API. When one of those events is triggered, a HTTP POST payload is sent to the webhook's configured URL.
Related Guides: Webhooks
Checkout Forms
Checkout Forms are a low-code solution that enables you to create a customizable payment page where buyers can easily enter their payment details and submit a payment on both desktop and mobile devices.
With Checkout Forms, you can quickly create checkout pages and accept payments from buyers with minimal development work.
Related Guides: Checkout Pages
Payment Links
Payment Links create individual links you can send to buyers to complete a transaction. You can share these links on different platforms such as web pages, email, text, or QR codes.
Related Guides: Payment Links
Payout Links
A Payout Link is a unique, one-time link you can send via email or text to a recipient for fast and secure payouts. For card-based payouts, funds are typically available within minutes.
Payout Links can be used for various purposes, including insurance payments, sales commissions, and more. Each link can be customized to display your brand name and logo, providing a seamless experience for recipients.
Related Guides: Payout Links
Receipts
The Receipt resource generates a receipt for Transfers or Authorizations. You can then send the Receipt via Email, SMS, or use the information from the Receipt to send it yourself.
Related Guides: Receipts for Online Payments
Subscriptions
A Subscription resource represents a recurring charge to a Payment Instrument at regular intervals. Subscribers can be buyers, customers, or merchants.
When creating a Subscription, you have the option to use a Subscription Plan.
Limitations:
- Supported countries: At this time, subscriptions are available in the United States.
- Supported payment methods: Subscriptions currently support recurring card payments and recurring bank account payments (ACH in the USA).
- Approved merchants: At this time, only approved merchants with one of the following processors can create subscriptions: DUMMY_V1 and FINIX_V1.
Related Guides: Creating Subscriptions, Creating Subscription Plans, Recurring Payments Guidelines
Subscription Plans
A Subscription Plan resource is a template with set recurring costs and frequencies that can be reused across multiple Subscription resources.
Related Guides: Creating Subscriptions Plans, Creating Subscriptions, Recurring Payments Guidelines
Transfer Attempts
A transfer_attempt is created when a buyer attempts to pay for a payment using a Payment Link or Checkout Form. Using Transfer Attempts, you can track the lifecycle of a payment or a series of payments if you are using a multi-use Payment Link.
Each transfer_attempt has as reference to a transfer_id to allow you to query it for additional data.
Balances
A Balance resource represents the current financial state of an Application identified by the linked_to query parameter.
It tracks the state of funds processed through the system, including amounts that are:
available_amountfor immediate use or disbursement.pending_amountdue to processing times, holds, or other constraints.posted_amount, which reflects the total sum (including both available and pending funds).
Disbursement Rules
For the Payouts product, when a payout is executed, such as a Push-To-Card or ACH transaction, Finix checks the transaction against velocity rules and balance rules.
Rules establish limits on transactions. For example, there may be a daily transaction limit of 100 transactions (count_limit) or a monthly volume limit of $100,000 (volume_limit). If a transaction exceeds any defined limit, the transaction is rejected.
Rules are set for entities involved in transactions, including the application, senders, and recipients.
The "Application" represents the customer to whom Finix is applying the rules. Application rules are set solely by Finix and are applied to every single transaction.
You can establish rules for "senders" and "recipients," referring to the parties involved in transactions:
- In the case of a
PULL_FROM_CARDorPULL_FROM_ACHtransaction, sender rules are applied (either card or ACH rules). The "target" of the pull is referred to as the "sender," specifically the customer of Finix's client. - Conversely, in the case of a
PUSH_FROM_CARDorPUSH_FROM_ACHtransaction, the recipient rules are applied (either card or ACH rules). The "target" of the push is referred to as the "recipient," which is, in turn, the customer of Finix's client.
Applications
The Application resource represents your app. For example, an iOS app, website, online marketplace, SaaS platform, etc. – any web service that connects buyers (i.e. customers) and sellers (i.e. merchants). In other words, an Application is a resource that represents the program you're integrating with Finix and using to connect with customers (i.e. buyers).
Related Guides: Getting Started
Balance Transfers
Our Balance Transfers API provides platforms the option to create a money movement between their FBO (For the Benefit Of) Settlement account and their operating account. This is only available for Finix Core customers with Litle V12 credentials.
If you have any questions, please reach out to your Finix point of contact or contact the Finix Support team.
Merchant Profiles
A merchant_profile links a merchant to it's risk_profile and fee_profile. Each merchant has a merchant_profile.
When a merchant gets created, a merchant_profile also gets created. This new merchant_profile automatically receives a new risk_profile and fee_profile that are copies of the risk and fee profiles on the application_profile.
Related Guides:
Payout Profiles
A Payout Profile configures how fees and payouts get calculated and processed.
Related Guides: Configuring Payouts
Review Queue Items
Funds are released to sub-merchants when a Settlement's corresponding Review Queue Item is marked as ACCEPTED by a user with the appropriate role permissions.
Related Guides: Roles & Permissions
Verifications
Verifications are used to verify Identities and Payment Instruments.
For Identities, a verification represents an attempt to onboard and underwrite an identity.
For Payment Instruments, a verification represents getting additional information from the card brands to verify a card is eligible for push to card.
Related Guides: Onboarding with the API, Push to Card