Skip to content

HSA / FSA Cards

Learn how to accept Health Savings Account (HSA) or Flexible Spending Account (FSA) cards with Finix.

HSA (Health Savings Account) and FSA (Flexible Spending Account) cards are prepaid debit cards linked to tax-advantaged accounts that consumers use to pay for qualified medical expenses (prescriptions, doctor visits, medical equipment, etc.).

To accept HSA and FSA cards, a merchant must meet one of the following requirements:

Accepting HSA or FSA payments does not ensure cards will get processed successfully. Like other transactions, card issuers ultimately decide to authorize or decline a payment.

Medical service providers with one of the following MCCs can process transactions made with HSA and FSA cards without Special Interest Group for IIAS Standards (SIGIS) registration and Inventory Information Approval System (IIAS) certification.

Merchant Category Code (MCC)Description
4119Ambulance Services (Dependent on Plan Administrator)
5047Medical, Dental, Ophthalmic, and Hospital Equipment and Supplies
5975Hearing Aids - Sales, Service, Supply Stores
7277Counseling Service - Debt, Marriage, and Personal (Dependent on Plan Administrator)
8011Doctors and Physicians (not elsewhere classified)
8021Dentists, Orthodontists
8031Osteopaths
8041Chiropractors
8042Optometrists, Ophthalmologists
8043Opticians, Optical Goods, and Eyeglasses
8049Podiatrists and Chiropodists
8050Nursing and Personal Care Facilities
8062Hospitals
8071Medical and Dental Laboratories
8099Health Practitioners, Medical Services (not elsewhere classified)

Non-Healthcare MCC Requirements

To accept HSA and FSA cards with a non-healthcare MCC, the merchant needs a SIGIS registration and IIAS certification.

Here’s how to process HSA and FSA cards with a non-healthcare MCC:

  1. The merchant submits their registration directly to SIGIS for approval.

  2. The merchant must certify with Finix support engineers that they can pass the required additional healthcare data fields in their transactions.

  3. After SIGIS approves the merchant’s registration, Finix registers with Visa and Mastercard to obtain a Visa Merchant Verification Value (MVV) and MCID (Mastercard Assigned ID). This process takes about 3 to 4 weeks.

For questions about non-healthcare MCC requirements, contact your Finix point of contact or Finix Support.

Making a Payment with HSA or FSA Cards

How you make payments with HSA or FSA cards depends on whether the merchant has a healthcare-related MCC or a non-healthcare-related MCC.

  • Healthcare-related MCC transactions: If the merchant has a healthcare MCC, they do not need to provide healthcare data in their transactions. Follow the standard process for sending Transfer and Authorizations requests using the API.
  • Non-healthcare-related MCC transactions: To accept HSA and FSA cards with a non-healthcare MCC, the merchant needs a SIGIS registration and IIAS certification before processing payments. For more details, see Non-Healthcare MCC Requirements.

Transfer - HSA or FSA Card for Non-Healthcare MCC

To create a Transfer using HSA or FSA cards for a non-healthcare MCC with the appropriate SIGIS registration and IIAS certification, refer to the sample request below.

To provide the card networks with the necessary information to process HSA and FSA cards, you need to include the additional_healthcare_data object in your Transfer request.

curl -i -X POST \
  -u USfdccsr1Z5iVbXDyYt7hjZZ:313636f3-fac2-45a7-bff7-a334b93e7bda \
  https://finix.sandbox-payments-api.com/transfers \
  -H 'Content-Type: application/json' \
  -H 'Finix-Version: 2022-02-01' \
  -d '{
    "additional_healthcare_data": {
      "clinic_amount": 50,
      "dental_amount": 200,
      "prescription_amount": 300,
      "vision_amount": 300
    },
    "amount": 950,
    "currency": "USD",
    "merchant": "MUmfEGv5bMpSJ9k5TFRUjkmm",
    "source": "PI6iQcTtJNCS8GZAVKYi5Ueb",
    "tags": {
      "order_number": "21DFASJSAKAS"
    }
  }'

A successful request returns a 201 Created status code, with the response body containing the newly created Transfer with the additional healthcare amounts:

Transfer
{
  "id": "TRt1zYnvR1CfWgcFwo4RADAw",
  "created_at": "2025-07-25T17:43:20.49Z",
  "updated_at": "2025-07-25T17:43:20.49Z",
  "additional_buyer_charges": null,
  "additional_healthcare_data": { 
    "clinic_amount": 50, 
    "dental_amount": 200, 
    "prescription_amount": 300, 
    "vision_amount": 300
  }, 
  "additional_purchase_data": null,
  "address_verification": "POSTAL_CODE_AND_STREET_MATCH",
  "amount": 662154,
  "amount_requested": 662154,
  "application": "APc9vhYcPsRuTSpKD9KpMtPe",
  "currency": "USD",
  "destination": null,
  "externally_funded": "UNKNOWN",
  "failure_code": null,
  "failure_message": null,
  "fee": 0,
  "fee_profile": "FPuizPqrhzYLbmJm88u7aqfj",
  "idempotency_id": null,
  "merchant": "MUmfEGv5bMpSJ9k5TFRUjkmm",
  "merchant_identity": "ID6UfSm1d4WPiWgLYmbyeo3H",
  "messages": [],
  "operation_key": "CARD_NOT_PRESENT_SALE",
  "parent_transfer": null,
  "parent_transfer_trace_id": null,
  "raw": null,
  "ready_to_settle_at": "2025-07-26T17:43:20.97Z",
  "receipt_last_printed_at": null,
  "security_code_verification": "MATCHED",
  "source": "PI6iQcTtJNCS8GZAVKYi5Ueb",
  "split_transfers": [],
  "state": "SUCCEEDED",
  "statement_descriptor": "FLX*FINIX FLOWERS",
  "subtype": "API",
  "supplemental_fee": null,
  "tags": {
    "test": "Sale"
  },
  "tip_amount": null,
  "trace_id": "036fad58-1708-4e43-a67c-fcbdf8213b0e",
  "type": "DEBIT",
  "_links": {
    "application": {
      "href": "https://finix.sandbox-payments-api.com/applications/APc9vhYcPsRuTSpKD9KpMtPe"
    },
    "self": {
      "href": "https://finix.sandbox-payments-api.com/transfers/TRt1zYnvR1CfWgcFwo4RADAw"
    },
    "merchant_identity": {
      "href": "https://finix.sandbox-payments-api.com/transfers/ID6UfSm1d4WPiWgLYmbyeo3H"
    },
    "payment_instruments": {
      "href": "https://finix.sandbox-payments-api.com/transfers/TRt1zYnvR1CfWgcFwo4RADAw/payment_instruments"
    },
    "reversals": {
      "href": "https://finix.sandbox-payments-api.com/transfers/TRt1zYnvR1CfWgcFwo4RADAw/reversals"
    },
    "fees": {
      "href": "https://finix.sandbox-payments-api.com/transfers/TRt1zYnvR1CfWgcFwo4RADAw/fees"
    },
    "disputes": {
      "href": "https://finix.sandbox-payments-api.com/transfers/TRt1zYnvR1CfWgcFwo4RADAw/disputes"
    },
    "source": {
      "href": "https://finix.sandbox-payments-api.com/payment_instruments/PI6iQcTtJNCS8GZAVKYi5Ueb"
    },
    "fee_profile": {
      "href": "https://finix.sandbox-payments-api.com/fee_profiles/FPuizPqrhzYLbmJm88u7aqfj"
    }
  }
}

Authorization - HSA or FSA Card for Non-Healthcare MCC

Just as with Transfer requests, you need to include the additional_healthcare_data object for Authorization requests involving HSA or FSA cards that use a non-healthcare MCC.

curl -i -X POST \
  -u USfdccsr1Z5iVbXDyYt7hjZZ:313636f3-fac2-45a7-bff7-a334b93e7bda \
  https://finix.sandbox-payments-api.com/authorizations \
  -H 'Content-Type: application/json' \
  -H 'Finix-Version: 2022-02-01' \
  -d '{
    "additional_healthcare_data": {
      "clinic_amount": 50,
      "dental_amount": 200,
      "prescription_amount": 300,
      "vision_amount": 300
    },
    "amount": 950,
    "currency": "USD",
    "merchant": "MU7noQ1wdgdAeAfymw2rfBMq",
    "source": "PIkxmtueemLD6dN9ZoWGHT44"
  }'

A successful request returns a 201 Created status code, with the response body containing the newly created Authorization with the additional healthcare amounts:

{
  "id": "AU2J7hDBvWSBEnis5BHGhBCR",
  "created_at": "2024-12-04T10:12:59.44Z",
  "updated_at": "2024-12-04T10:12:59.44Z",
  "3ds_redirect_url": null,
  "additional_buyer_charges": null,
  "additional_healthcare_data": { 
    "clinic_amount": 50, 
    "dental_amount": 200, 
    "prescription_amount": 300, 
    "vision_amount": 300
  },
  "additional_purchase_data": null,
  "address_verification": "POSTAL_CODE_AND_STREET_MATCH",
  "amount": 950,
  "amount_requested": 950,
  "application": "APc9vhYcPsRuTSpKD9KpMtPe",
  "currency": "USD",
  "expires_at": "2024-12-11T10:12:59.44Z",
  "failure_code": null,
  "failure_message": null,
  "idempotency_id": null,
  "is_void": false,
  "merchant": "MU7noQ1wdgdAeAfymw2rfBMq",
  "merchant_identity": "IDjvxGeXBLKH1V9YnWm1CS4n",
  "messages": [],
  "raw": null,
  "receipt_last_printed_at": null,
  "security_code_verification": "MATCHED",
  "source": "PIkxmtueemLD6dN9ZoWGHT44",
  "state": "SUCCEEDED",
  "tags": {
    "order_number": "21DFASJSAKAS"
  },
  "trace_id": "f834fd36-6978-48e7-b0fc-a40cc208bdde",
  "transfer": null,
  "void_state": "UNATTEMPTED",
  "_links": {
    "self": {
      "href": "https://finix.sandbox-payments-api.com/authorizations/AU2J7hDBvWSBEnis5BHGhBCR"
    },
    "application": {
      "href": "https://finix.sandbox-payments-api.com/applications/APc9vhYcPsRuTSpKD9KpMtPe"
    },
    "merchant_identity": {
      "href": "https://finix.sandbox-payments-api.com/identities/IDjvxGeXBLKH1V9YnWm1CS4n"
    }
  }
}