HomeGuidesReference
Log In
Guides

Receipts and confirmation screens

Learn about FNS requirements for transaction records and how to extract the data

A confirmation screen is a display within a merchant’s website or app that immediately alerts a customer to the status of their purchase, refund, or failed transaction attempt.

A receipt is a record of a customer’s transaction. Receipts give customers proof of purchase, refund, or failed transaction attempt.

FNS requires that receipts and confirmation screens for EBT SNAP online include specific information. This guide details what that information is and where to find it. Read on for an introduction to the Forage receipt object, or skip to FNS requirements for order confirmation screens and receipts.

Jump to FNS requirements

To skip the technical implementation details, head to FNS requirements.

Forage receipt object

{
  "ref_number": "591bbfe14a",
  "is_voided": false,
  "snap_amount": "20.00",
  "ebt_cash_amount": "0.00",
  "other_amount": "0.00",
  "sales_tax_applied": "0.00",
  "balance": {
    "id": 29103,
    "snap": "80.00",
    "non_snap": "100.00",
    "updated": "2023-11-07T05:17:22.824579-08:00"
  },
  "last_4": "5455",
  "message": "Approved",
  "transaction_type": "Order",
  "created": "2023-11-07T05:17:23.122849-08:00"
}

The Forage receipt object includes most of the information that FNS requires merchants to display to EBT cardholders. Forage returns a receipt in response to calls to specific Payments API endpoints and SDK methods.

🚧

The receipt value is null until the associated transaction is captured.*

A Payment is captured via an SDK submit function. An Order is captured via the Forage Checkout UI. Refer to How to retrieve receipt data for more details.

*Except in the case of refunds. Receipt data is available for a Refund as soon as it is created.

receipt properties

PropertyTypeDescription
ref_numberstringA unique reference hash for the Forage Order, Payment, or Refund associated with this receipt.
is_voidedbooleanWhether the transaction associated with this receipt has been voided. If false, then the transaction is proceeding as expected; if true, then the transaction is to be reversed.
snap_amountstringThe USD amount charged/refunded to the SNAP balance of the EBT Card, represented as a numeric string.
ebt_cash_amountstringThe USD amount charged/refunded to the EBT Cash balance of the EBT Card, represented as a numeric string.
other_amountstringThe USD amount charged/refunded to any payment method that is not an EBT Card, represented as a numeric string.
sales_tax_appliedstringThe USD amount of taxes charged to the customer’s non-EBT payment instrument, represented as a numeric string.
balanceobjectRefer to balance for details.
last_4stringThe last four digits of the EBT Card number.
messagestringA message from the EBT payment network.
transaction_typestringA constant string that is used to identify the transaction type associated with the receipt. One of:

- Order
- Payment
- Refund
createdISO 8601 date-time stringA timestamp of when the transaction object was created.

balance properties

PropertyTypeDescription
snapstringThe available SNAP balance in USD on the customer’s EBT Card, represented as a numeric string.
non_snapstringThe available EBT Cash balance in USD on the EBT Card, represented as a numeric string.
updatedISO 8601 date-time stringA timestamp of when the funds in the account last changed.

How to retrieve receipt data

Receipt data populates when a transaction’s status is succeeded.

For orders, pass the ref returned in the response that created the order's parent Session in periodic GET requests to /orders/{order_ref}/ until the status of the Order is succeeded.

For payments, pass the ref returned in the response to create the Payment in periodic GET requests to /payments/{payment_ref}/ until the status of the Payment is succeeded.

Endpoints that return a receipt

SDK methods that return a receipt

All SDK methods that capture an EBT payment return a receipt.

  • Android: capturePayment(pinForageEditText, paymentRef)
  • iOS: ForageSDK.shared.capturePayment(foragePinTextField, paymentReference)
  • JS: forage.capturePayment(ForagePinElement, paymentRef)

How to extract data from a receipt

The following receipt fields include data that FNS requires merchants to display to EBT cardholders:

  • transaction_type
  • snap_amount
  • ebt_cash_amount
  • other_amount
  • sales_tax_applied
  • last_4

You can send a request to any of the Forage endpoints that returns a receipt and extract the required fields from the response. The following examples fetch an Order:

function fetchOrderDetails(orderRef = '', sessionToken = '', merchantId = '') {
  const url = `https://api.sandbox.joinforage.app/api/orders/${orderRef}/`;

  const headers = {
    'API-Version': '2023-05-15',
    'Authorization': `Bearer ${sessionToken}`,
    'Merchant-Account': merchantId,
    'accept': 'application/json'
  };

  fetch(url, {
    method: 'GET',
    headers: headers
  })
  .then(response => {
    if (!response.ok) {
      throw new Error('Network response was not ok');
    }
    return response.json();
  })
  .then(data => {
    console.log(data);
  })
  .catch(error => {
    console.error('There has been a problem with your fetch operation:', error);
  });
}
curl --request GET \
     --url https://api.sandbox.joinforage.app/api/orders/{order_ref}/ \
     --header 'Authorization: Bearer <authentication-token>' \
     --header 'Merchant-Account: 9000055' \
     --header 'accept: application/json' \
     --header 'content-type: application/json'

Then you can display the data, as in these examples:

import React from "react";

const DataDisplay = (props) => {
  const {
    // From the Forage receipt object 
    transaction_type,
    snap_amount, 
    ebt_cash_amount, 
    other_amount, 
    sales_tax_applied,
    last_4, 
    // Merchant-provided or calculated 
    total_amount, 
    store_name, 
    contact_info,
    transaction_date, 
    transaction_time,
    snap_balance, 
    ebt_balance, 
    delivery_address, 
    fees  
  } = props

  return (
    <div>
      <p>Store Name: {data.store_name}</p>
      <p>Transaction Date: {data.transaction_date}</p>
      <p>Transaction Time: {data.transaction_time}</p>
      <p>Transaction Type: {data.transaction_type}</p>
      <p>Snap Amount: {data.snap_amount}</p>
      <p>EBT Cash Amount: {data.ebt_cash_amount}</p>
      <p>Other Amount: {data.other_amount}</p>
      <p>Sales Tax Applied: {data.sales_tax_applied}</p>
      <p>Fees: {data.fees}</p> 
      <p>Order Total: {data.total_amount}</p>
      <p>Remaining SNAP balance: {data.snap_balance}</p>
      <p>Remaining EBT Cash balance: {data.ebt_balance}</p>
      <p>Last 4 Card Digits: {data.last_4}</p>
      <p>Delivery Address: {data.delivery_address}</p>
      <p>Contact Info: {data.contact_info}</p>
    </div>
  );
};

export default DataDisplay;
import UIKit

class DataDisplayView: UIView {

    var data: [String: Any] = [:] {
        didSet {
            updateUI()
        }
    }
  
    // Example labels to display the data
    let storeNameLabel = UILabel()
    let transactionDateLabel = UILabel()
    let transactionTimeLabel = UILabel()
    let transactionTypeLabel = UILabel()
    let snapAmountLabel = UILabel()
    let ebtCashAmountLabel = UILabel()
    let otherAmountLabel = UILabel()
    let salesTaxAppliedLabel = UILabel()
    let feesLabel = UILabel()
    let orderTotalLabel = UILabel()
    let snapBalanceLabel = UILabel()
    let ebtCashBalanceLabel = UILabel()
    let last4Label = UILabel()
    let deliveryAddressLabel = UILabel()
    let contactInfoLabel = UILabel()

    override init(frame: CGRect) {
        super.init(frame: frame)
        setupUI()
    }

    required init?(coder: NSCoder) {
        super.init(coder: coder)
        setupUI()
    }

    private func setupUI() {
        addSubview(storeNameLabel)
        addSubview(transactionDateLabel)
        addSubview(transactionTimeLabel)
        addSubview(transactionTypeLabel)
        addSubview(snapAmountLabel)
        addSubview(ebtCashAmountLabel)
        addSubview(otherAmountLabel)
        addSubview(salesTaxAppliedLabel)
        addSubview(feesLabel)
        addSubview(orderTotalLabel)
        addSubview(snapBalanceLabel) 
        addSubview(ebtCashBalanceLabel)
        addSubview(last4Label)
        addSubview(deliveryAddressLabel) 
        addSubview(contactInfoLabel) 

        // Set layout constraints using AutoLayout or other layout methods
        storeNameLabel.frame = CGRect(x: 0, y: 0, width: frame.width, height: 20)
        transactionDateLabel.frame = CGRect(x: 0, y: 30, width: frame.width, height: 20)
        transactionTimeLabel.frame = CGRect(x: 0, y: 60, width: frame.width, height: 20)
        transactionTypeLabel.frame = CGRect(x: 0, y: 60, width: frame.width, height: 20)
        snapAmountLabel.frame = CGRect(x: 0, y: 60, width: frame.width, height: 20)
        ebtCashAmountLabel.frame = CGRect(x: 0, y: 60, width: frame.width, height: 20)
        otherAmountLabel.frame = CGRect(x: 0, y: 60, width: frame.width, height: 20)
        salesTaxAppliedLabel.frame = CGRect(x: 0, y: 60, width: frame.width, height: 20)
        feesLabel.frame = CGRect(x: 0, y: 60, width: frame.width, height: 20)
        orderTotalLabel.frame = CGRect(x: 0, y: 60, width: frame.width, height: 20)
        snapBalanceLabel.frame = CGRect(x: 0, y: 60, width: frame.width, height: 20)
        ebtCashBalanceLabel.frame = CGRect(x: 0, y: 60, width: frame.width, height: 20)
        last4Label.frame = CGRect(x: 0, y: 60, width: frame.width, height: 20)	
        deliveryAddressLabel.frame = CGRect(x: 0, y: 60, width: frame.width, height: 20)
        contactInfoLabel.frame = CGRect(x: 0, y: 60, width: frame.width, height: 20)       

        updateUI()
    }

    private func updateUI() {
        storeNameLabel.text = "Store Name: \(data["store_name"] ?? "")"
        transactionDateLabel.text = "Transaction Date: \(data["transaction_date"] ?? "")"
        transactionTimeLabel.text = "Transaction Time: \(data["transaction_time"] ?? "")"
        transactionTypeLabel.text = "Transaction Type: \(data["transaction_type"] ?? "")"
        snapAmountLabel.text = "Snap Amount: \(data["snap_amount"] ?? "")"
        ebtCashAmountLabel.text = "EBT Cash Amount: \(data["ebt_cash_amount"] ?? "")"
        otherAmountLabel.text = "Other Amount: \(data["other_amount"] ?? "")"
        salesTaxApplied.text = "Sales Tax Applied: \(data["sales_tax_applied"] ?? "")"
        feesLabel.text = "Fees: \(data["fees"] ?? "")"
        orderTotalLabel.text = "Order Total: \(data["total_amount"] ?? "")"
        snapBalanceLabel.text = "Remaining SNAP balance: \(data["snap_balance"] ?? "")"
        ebtCashBalanceLabel.text = "Remaining EBT Cash balance: \(data["ebt_balance"] ?? "")"
        last4Label.text = "Last 4 Card Digits: \(data["last4"] ?? "")"
        deliveryAddressLabel.text = "Delivery Address: \(data["delivery_address"] ?? "")"
        contactInfoLabel.text = "Contact Info: \(data["contact_info"] ?? "")"
    }
}
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val data = intent.getBundleExtra("data") ?: Bundle()

        updateUI(data)
    }

    private fun updateUI(data: Bundle) {
        val storeNameTextView = findViewById<TextView>(R.id.storeNameTextView)
        val transactionDateTextView = findViewById<TextView>(R.id.transactionDateTextView)
        val transactionTimeTextView = findViewById<TextView>(R.id.transactionTimeTextView)
				val transactionTypeTextView = findViewById<TextView>(R.id.transactionTypeTextView)
				val snapAmountTextView = findViewById<TextView>(R.id.snapAmountTextView)
				val ebtCashAmountTextView = findViewById<TextView>(R.id.ebtCashAmountTextView)
				val otherAmountTextView = findViewById<TextView>(R.id.otherAmountTextView)
				val salesTaxAppliedTextView = findViewById<TextView>(R.id.salesTaxAppliedTextView)
				val feesTextView = findViewById<TextView>(R.id.feesTextView)
				val orderTotalTextView = findViewById<TextView>(R.id.orderTotalTimeTextView)
				val snapBalanceTextView = findViewById<TextView>(R.id.snapBalanceTextView)
				val ebtCashBalanceTextView = findViewById<TextView>(R.id.ebtCashBalanceTextView)
				val last4TextView = findViewById<TextView>(R.id.last4TextView)
				val deliveryAddressTextView = findViewById<TextView>(R.id.deliveryAddressTextView)
				val contactInfoTextView = findViewById<TextView>(R.id.contactInfoTextView)
        
        storeNameTextView.text = "Store Name: ${data.getString("store_name")}"
        transactionDateTextView.text = "Transaction Date: ${data.getString("transaction_date")}"
        transactionTimeTextView.text = "Transaction Time: ${data.getString("transaction_time")}"
				transactionTypeTextView.text = "Transaction Type: ${data.getString("transaction_type")}"
				snapAmountTextView.text = "SNAP Amount: ${data.getString("transaction_time")}"
				ebtCashAmountTextView.text = "EBT Cash Amount: ${data.getString("transaction_time")}"
				otherAmountTextView.text = "Other Amount: ${data.getString("transaction_time")}"
				salesTaxAppliedTextView.text = "Sales Tax: ${data.getString("transaction_time")}"
				feesLabelTextView.text = "Fees: ${data.getString("transaction_time")}"
				orderTotalTextView.text = "Order Total: ${data.getString("transaction_time")}"
				snapBalanceTextView.text = "Remaining SNAP Balance: ${data.getString("transaction_time")}"
				ebtCashBalanceTextView.text = "Remaining EBT Cash Balance: ${data.getString("transaction_time")}"
				last4TextView.text = "Last 4 Card Digits: ${data.getString("transaction_time")}"
				deliveryAddressTextView.text = "Delivery Address: ${data.getString("transaction_time")}"
				contactInfoTextView.text = "Contact Info: ${data.getString("transaction_time")}"
    }
}

Online confirmation screens and receipts

To protect EBT SNAP cardholders, FNS requires that merchants provide confirmation screens and receipts to customers following purchases or refunds that involve government benefits.

A confirmation screen must be displayed immediately after a customer completes a purchase. It documents order details and alerts a customer to the status of their transaction.

An email receipt provides customers with proof of purchase. FNS mandates that merchants either send an email receipt or add the required receipt details to a customer’s online account history within 24 hours after the order is submitted.

The following sections outline the requirements for confirmation screens and email receipts, for both EBT SNAP purchases and refunds.

EBT purchases

Confirmation screen requirements for EBT purchases

Order confirmation page from Rob's Vegan Store lists items purchased and amount charged to each tender in addition to other FNS requirements

Example purchase confirmation screen

RequirementWhere to find the dataExample value
Merchant nameMerchant-providedRob’s Vegan Store
Merchant contact information*

*It’s not required to provide a physical address if non-EBT receipts do not currently display a physical address.
Merchant-providedContact Information
If you need to make modifications to your order, our team is more than happy to help! Please contact [email protected] or dial 204-129-2859
Transaction dateFully Hosted & Custom:

- Pass the ref returned in the response to the request that created the Session in periodic GET requests to /orders/{order_ref}/ until the success_date field populates.SDKs:

- Pass the ref returned in the response to the request that created the Payment in periodic GET requests to /payments/{payment_ref}/ until the success_date field populates.
Order Date March 1st, 2022 11:53 AM ET
Transaction time*

*A timestamp is only required if non-EBT receipts currently display a timestamp.
Fully Hosted & Custom:

- Pass the ref returned in the response to the request that created the Session in periodic GET requests to /orders/{order_ref}/ until the success_date field populates.SDKs:

- Pass the ref returned in the response to the request that created the Payment in periodic GET requests to /payments/{payment_ref}/ until the success_date field populates.
Order Date March 1st, 2022 11:53 AM ET
Transaction typereceipt.transaction_typeYour Order Is Confirmed!
Truncated EBT Card Numberreceipt.last_4xxxx2748
Total transacted amountSum the following receipt fields to calculate the total cost:

snap_amount + ebt_cash_amount + other_amount+ sales_tax_applied
$36.52
Tender type(s) and amount(s)- receipt.snap_amount

- receipt.ebt_cash_amount

- receipt.other_amount

- receipt.sales_tax_applied
Amount Charged to SNAP $16.56

Amount Charged to EBT Cash $5.99

Amount Charged to Credit Card $9.99

Sales Tax $0.00
Remaining SNAP and/or EBT Cash balanceFully Hosted & Custom:

- Pass the ref returned in the response to the request that created the Session in periodic GET requests to /orders/{order_ref}/ until the status of the Order is succeeded. At that point, the receipt.balance is up-to-date.SDKs:

- Pass the ref returned in the response to the request that created the Payment in periodic GET requests to /payments/{payment_ref}/ until the status of the Payment is succeeded. At that point, the receipt.balance is up-to-date.
SNAP Balance xxxx2748 $83.44

EBT Cash Balance xxxx2748 $94.01
Delivery or pickup addressEither the delivery_address field of the response object of the request that created the Session (Fully Hosted & Custom) or Payment (SDKs), or merchant-provided.Ketan Awasthi
1857 Market St.
San Francisco, CA 94117
United States
Scheduled delivery or pickup dateMerchant-providedEstimated delivery March 3rd, 2022
Scheduled delivery or pickup time, if applicableMerchant-providedN/A
Itemized fees for delivery/pickup/shipping, ordering, convenience, handling or other fees or chargesMerchant-providedFees (delivery, pickup etc) $0.00
Itemized fees for bags or other delivery/pickup/shipping containersMerchant-providedFees (delivery, pickup etc) $0.00

Email receipt requirements for EBT purchases

You can opt to document the below in a customer’s online account instead of in an email receipt.

Instead of sending an email receipt within 24 hours of a transaction submission, you can provide a password-authenticated interface for a customer to review their transaction history.

Email receipt from Rob's Vegan Store lists items purchased and amount charged to each tender in addition to other FNS requirements

Example purchase receipt

RequirementWhere to find the dataExample value
Transaction date and timeFully Hosted & Custom:

- Pass the ref returned in the response to the request that created the Session in periodic GET requests to /orders/{order_ref}/ until the success_date field populates.SDKs:

- Pass the ref returned in the response to the request that created the Payment in periodic GET requests to /payments/{payment_ref}/ until the success_date field populates.
Order Date March 1st, 2022 11:53 AM ET
Merchant nameMerchant-providedRob’s Vegan Store
Merchant contact informationMerchant-providedContact Information
If you need to make modifications to your order, our team is more than happy to help! Please contact [email protected] or dial 204-129-2859
Delivery or pickup addressEither the delivery_address field of the response object of the request that created the Session (Fully Hosted & Custom) or Payment (SDKs), or merchant-provided.Ketan Awasthi
1857 Market St.
San Francisco, CA 94117
United States
Scheduled delivery or pickup timeMerchant-providedMarch 3rd, 2022
Transaction programMerchant-provided, or parse the purchase receipt fields for where the value is not zero for snap_amount or ebt_cash_amount.Amount Charged to SNAP

Amount Charged to EBT Cash
Tender type(s) and amount(s)- receipt.snap_amount

- receipt.ebt_cash_amount

- receipt.other_amount

- receipt.sales_tax_applied
Amount Charged to SNAP $16.56

Amount Charged to EBT Cash: $5.99

Amount Charged to Credit Card $9.99

Sales Tax $0.00
Total transacted amountAdd the following receipt fields to calculate the total cost:

snap_amount + ebt_cash_amount + other_amount + sales_tax_applied
$36.52
Transaction typereceipt.transaction_typeYour Order Is Confirmed!
Remaining SNAP and/or EBT Cash balanceFully Hosted & Custom:

- Pass the ref returned in the response to the request that created the Session in periodic GET requests to /orders/{order_ref}/ until the status of the Order is succeeded. At that point, the receipt.balance.snap data is up-to-date.SDKs:

- Pass the ref returned in the response to the request that created the Payment in periodic GET requests to /payments/{payment_ref}/ until the status of the Payment is succeeded. At that point, the receipt.balance.snap is up-to-date.
SNAP Balance xxxx2748 $83.44

EBT Cash Balance xxxx2748 $94.01
Truncated EBT Card Numberreceipt.last_4xxxx2748

While not required by FNS, Forage also recommends that merchants display the following information on receipts or order history pages:

RecommendationWhere to find the dataExample value
Transaction numberEither the Forage-provided ref for the Order (Fully Hosted & Custom) or Payment (SDKs), or merchant-provided.Order Number #3525
Item detailsFully Hosted:

- Either the product_list property of the Session object returned when the Session was created, or merchant-provided.Custom:

- Merchant-providedSDKs:

- Merchant-provided
Green Peas 3.98

Oat Milk $4.59

Produce Bag $7.99

Beer (6-Pack) $9.99

Paper Towels $5.99
Itemized fees for delivery/pickup/shipping, ordering, convenience, handling or other fees or chargesMerchant-providedFees (delivery, pickup etc) $0.00
Fees (delivery, pickup etc) $0.00Merchant-providedFees (delivery, pickup etc) $0.00

EBT refunds

In the case of EBT SNAP refunds, FNS requires that merchants notify customers. The notification can be either a confirmation screen or an email receipt. You are welcome to provide customers with both, but only one is mandatory.

It’s worth highlighting a few specific scenarios:

  • If an EBT refund is processed before an order number is successfully generated, then you are not required to provide a receipt or order confirmation screen. This can happen if there’s an unsuccessful charge to a secondary payment method, or if there’s insufficient inventory to fulfill a purchase.
  • If you display an itemized list of refund details in a customer’s account transaction history, then you’re not required to list itemized details on the refund confirmation screen or email receipt.
  • There is no requirement for an item’s price to be displayed on the refund confirmation screen, email receipt, or in the customer’s account transaction history.

Information requirements for EBT refund notifications

Rob's Vegan store refund confirmation screen lists what items are refunded to what tender types along with other FNS requirements

Example refund confirmation screen

Rob's Vegan Store example refund receipt details the items returned and to what tender types

Example refund email receipt

RequirementWhere to find the dataExample value
Transaction date and timeFully Hosted & Custom:

- Pass the ref returned in the response to the request that created the Session in periodic GET requests to /orders/{order_ref}/ until the success_date field populates.SDKs:

- Pass the ref returned in the response to the request that created the Payment in periodic GET requests to /payments/{payment_ref}/ until the success_date field populates.
Order Date March 1st, 2022 11:53 AM ET
Merchant nameMerchant-providedRob’s Vegan Store
Merchant contact informationMerchant-providedContact Information
email: [email protected]

phone: 204-129-2859
Transaction programMerchant-provided, or parse the refund receipt fields for where the value is not zero for snap_amount, ebt_cash_amount, other_amount or sales_tax_applied.Refund Issued to SNAP

Refund Issued to EBT Cash

Refund Issued to Credit Card
Tender type(s) and amount(s) credited for the refund- receipt.snap_amount

- receipt.ebt_cash_amount

- receipt.other_amount

- receipt.sales_tax_applied
Refund Issued to SNAP $16.56

Refund Issued to EBT Cash $5.99

Refund Issued to Credit Card $9.99
Remaining SNAP and/or EBT Cash balanceFully Hosted & Custom:

- Pass the ref returned in the response to the request that created the OrderRefund in periodic GET requests to /orders/{order_ref}/refunds/{refund_ref}/ until the status of the OrderRefund is succeeded. At that point, the receipt.balance is up-to-date.SDKs:

- Pass the ref returned in the response to the request that created the PaymentRefund in periodic GET requests to /payments/{payment_ref}/refunds/{refund_ref}/ until the status of the PaymentRefund is succeeded. At that point, the receipt.balance is up-to-date.
SNAP Balance xxxx2748 $100.00

EBT Cash Balance xxxx2748 $100.00
Truncated EBT Card Numberreceipt.last_4xxxx2748

While not required by FNS, Forage also recommends that merchants display the following information on receipts or order history pages:

RecommendationWhere to find the dataExample value
Original transaction numberEither the Forage-provided ref for the OrderRefund (Fully Hosted & Custom) or PaymentRefund (SDKs), or merchant-provided.Order Number #3525
Transaction typereceipt.transaction_typeYour refund request has been processed!

POS Terminal receipts

This section is relevant to Forage Terminal integrations.

For more information about Forage Terminal, check out the guide to building a Forage POS integration.

For EBT SNAP payments and refunds processed via POS Terminals, FNS requires that merchants print receipts at the time of the transaction.

FNS mandates that every receipt displays a specific set of information to protect cardholders.

The example receipts and corresponding table below outline these FNS requirements.

Example approved receipt courtesy of FIS

Sample Approved Receipt

Sample Declined Receipt courtesy of FIS

Sample Declined Receipt

RequirementWhere to find the dataExample Value
Transaction dateThe timestamp must reflect when the customer initiated the transaction. Find this data on receipt.created.07/24/YY
Merchant name and locationMerchant-providedYOUR STORE NAME
36069 ANY STREET ADDRESS
YOUR TOWN, STATE
ZIP CODE
Transaction typereceipt.transaction_type

The exact Forage value is either Payment or Refund. The printed receipt that you provide the customer should reflect this transaction type.
CASH PUR
Tender type(s) and amount(s)- receipt.snap_amount

- receipt.ebt_cash_amount
TRAN AMTCASH $3.26
Remaining SNAP and/or EBT Cash balanceOne of:

- Send periodic GET requests to /payments/{payment_ref}/ until the status of the Payment is succeeded. At that point, the receipt.balance is up-to-date.

- Call the checkBalance SDK method
END BAL$482.00
Truncated EBT Card Numberreceipt.last_4CARD # XXXXXXXXXXXX9023
Terminal location*

*The Terminal location can be a street address, generally accepted name for the specific location, or the name of the owner or operator of the terminal.
Merchant-providedTERM ID LA0002
MERCH TERM ID LA0002330
SEQ# 131
CLERK 999
Transaction status: Approved or Denied*

*Denied transactions also require a reason for the denial to be displayed on the receipt.
Pass the ref returned in the response to create the Payment in periodic GET requests to /payments/{payment_ref}/ to retrieve the payment.status.

If the status is succeeded, then the transaction has been approved.

If the status is failed, then the transaction has been denied. The reason for the decline can be found in the receipt.message field of the response.
Receipt #1:
APPROVED

Receipt #2:
DENIED
...
S-NO FUNDS AVAILABLE CALL CUSTOMER SERVICE
Transaction numberEither the Forage-provided ref for the Payment, or merchant-provided.SEQ# 131

POS refund receipts

A refund receipt of a particular transaction needs to be identical to the original transaction except for the negative transaction amount, and an updated EBT Card balance.

While not required by FNS, Forage also recommends that merchants display the following information on POS receipts:

RecommendationWhere to find the dataExample value
Item detailsMerchant-providedN/A
Itemized fees, if applicable, for delivery/pickup/shipping, ordering, convenience, handling, or other fees or chargesMerchant-providedN/A
Transaction timeThe timestamp must reflect when the customer initiated the transaction. Find this data on receipt.created.08:22