---
updatedAt: 2026-05-07T18:17:26.000Z
agentTools:
  projectIndex: https://docs.joinforage.app/llms.txt
---

# Retrieve an Order Report

> 📘 Fully Hosted And Custom Integrations Only
>
> Order Reports are only relevant to Fully Hosted and Custom integrations. Only Fully Hosted and Custom integrations generate Forage `Orders`. Use any of the other `/reporting/` endpoints if you're building with an SDK.

A `GET` request to `/reporting/orders/` retrieves an Order Report.

On success, the API returns a list of Forage `Orders` created during the provided reporting period.


# OpenAPI definition

```json
{
  "openapi": "3.0.0",
  "x-readme": {
    "explorer-enabled": false,
    "proxy-enabled": false
  },
  "info": {
    "title": "Forage Payments API",
    "description": "The Forage Payments API is a REST API for processing Electronic Benefits Transfer (EBT) payments (SNAP and EBT Cash) in your e-commerce or in-store application.\n\nProcessing any EBT payment, or checking an EBT card's balance, requires the cardholder's PIN. Federal regulations require all PIN entry to happen through a PCI-compliant, USDA-approved interface. Forage provides that interface, so EBT PIN collection always happens through a Forage-hosted surface (Forage Checkout or a Forage SDK), never directly in your own form. Some endpoints (for example, capture and balance) are only reachable through that surface because they require PIN data in the request.\n\nEBT rarely covers an entire order: items like delivery fees and non-eligible products can't be paid with SNAP or EBT Cash. You decide how to handle the remaining balance (split tender) and any credit or debit processing alongside the EBT portion.\n\nForage offers four integration options. Pick the one that fits your platform and engineering resources:\n\n1. **Fully Hosted Checkout.** Forage processes EBT and credit/debit through a Forage-hosted Checkout UI. Lowest engineering effort, and Forage absorbs most error handling. See the [Fully Hosted Checkout guide](https://docs.joinforage.app/docs/fully-hosted).\n2. **Custom Checkout.** Forage processes EBT; you handle split tender, taxes, and credit/debit in your own checkout flow. Best when you want minimal changes to your existing UX. See the [Custom Checkout guide](https://docs.joinforage.app/docs/custom).\n3. **Online SDKs.** Client-side SDKs for [web](https://docs.joinforage.app/docs/forage-js), [iOS](https://docs.joinforage.app/docs/ios), and [Android](https://docs.joinforage.app/docs/android) that collect EBT PINs in your app while keeping you out of PCI scope.\n4. **POS Terminal SDK.** Accept in-person EBT payments on an Android POS device. See the [POS Terminal guide](https://docs.joinforage.app/docs/forage-terminal-android).\n\nAs a general principle, any data created by your requests, or by your customers on a Forage-hosted surface, is retrievable through GET requests to the appropriate resource.\n\nHave more questions? Use our [contact form](https://www.joinforage.com/get-in-touch) to reach our sales and engineering support teams.\n",
    "contact": {
      "name": "API Support",
      "email": "engineering@joinforage.com"
    },
    "version": "2025-08-04"
  },
  "externalDocs": {
    "description": "Forage documentation",
    "url": "https://docs.joinforage.app/"
  },
  "servers": [
    {
      "url": "https://{environment}.joinforage.app",
      "variables": {
        "environment": {
          "default": "api.sandbox",
          "enum": [
            "api",
            "api.sandbox"
          ]
        }
      }
    }
  ],
  "security": [],
  "paths": {
    "/reporting/orders/": {
      "get": {
        "parameters": [
          {
            "name": "Merchant-Account",
            "in": "header",
            "description": "A unique merchant ID that Forage provides during onboarding, as in `123ab45c67`. The Merchant ID can be found in the Forage [sandbox](https://dashboard.sandbox.joinforage.app/login/) or [production](https://dashboard.joinforage.app/login/) dashboard.\n\nIf querying on behalf of a platform that supports multiple merchants, then omitting this header returns platform-wide results. You must indicate a `Merchant-Account` header to retrieve results for a specific merchant on a platform.\n",
            "schema": {
              "type": "string"
            },
            "required": false
          },
          {
            "$ref": "#/components/parameters/APIVersionHeader"
          },
          {
            "$ref": "#/components/parameters/StartDateQueryParam"
          },
          {
            "$ref": "#/components/parameters/EndDateQueryParam"
          },
          {
            "$ref": "#/components/parameters/LimitQueryParam"
          },
          {
            "$ref": "#/components/parameters/CursorQueryParam"
          },
          {
            "$ref": "#/components/parameters/StatusQueryParam"
          }
        ],
        "tags": [
          "Reports"
        ],
        "summary": "Retrieve an Order Report",
        "x-readme": {
          "code-samples": [
            {
              "language": "curl",
              "code": "curl --request GET \\\n    --url 'https://api.sandbox.joinforage.app/reporting/orders/?start_date=2021-01-31&end_date=2021-02-28&limit=1&cursor=cJ0xMDIzLZAxLTMxKzIxLTNBMzElM0ExNC40NTUxNjMlMkIwMCUzQTAp&status=succeeded&offset=1' \\\n    --header 'Authorization: Bearer <api_key>' \\\n    --header 'Merchant-Account: <merchant-id>' \\\n    --header 'accept: application/json'\n"
            }
          ]
        },
        "description": "> 📘 Fully Hosted And Custom Integrations Only\n>\n> Order Reports are only relevant to Fully Hosted and Custom integrations. Only Fully Hosted and Custom integrations generate Forage `Orders`. Use any of the other `/reporting/` endpoints if you’re building with an SDK.\n\nA `GET` request to `/reporting/orders/` retrieves an Order Report.\n\nOn success, the API returns a list of Forage `Orders` created during the provided reporting period.\n",
        "operationId": "reporting:orders",
        "security": [
          {
            "OAuth2": [
              "reporting",
              "internal"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "__OK__ - Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderAndTaxesReportResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponseObject"
                },
                "examples": {
                  "invalid_filters": {
                    "summary": "Invalid Filter",
                    "value": {
                      "path": "/reporting/orders/",
                      "errors": [
                        {
                          "code": "invalid_filters",
                          "message": "{filter}: required filter is missing",
                          "source": {
                            "resource": "Reports",
                            "ref": ""
                          }
                        }
                      ]
                    }
                  },
                  "invalid_input_data": {
                    "summary": "Invalid Input Data",
                    "value": {
                      "path": "/reporting/orders/",
                      "errors": [
                        {
                          "code": "invalid_input_data",
                          "message": "Query parameter missing or incomplete.",
                          "source": {
                            "resource": "Reports",
                            "ref": ""
                          }
                        }
                      ]
                    }
                  },
                  "invalid_merchant_account": {
                    "summary": "Invalid Merchant Account",
                    "value": {
                      "path": "/reporting/orders/",
                      "errors": [
                        {
                          "code": "invalid_merchant_account",
                          "message": "Merchant account Merchant ID not valid.",
                          "source": {
                            "resource": "Merchants"
                          }
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "__Unauthorized__",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponseObject"
                },
                "examples": {
                  "invalid_token": {
                    "summary": "Invalid Token",
                    "value": {
                      "path": "/reporting/orders/",
                      "errors": [
                        {
                          "code": "invalid_token",
                          "message": "Incorrect authentication credentials.",
                          "source": {
                            "resource": "Accounts",
                            "ref": ""
                          }
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "__Too Many Requests__",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponseObject"
                },
                "examples": {
                  "too_many_requests": {
                    "summary": "Too Many Requests",
                    "value": {
                      "path": "/reporting/orders/",
                      "errors": [
                        {
                          "code": "too_many_requests",
                          "message": "Request was throttled, please try again later.",
                          "source": {
                            "resource": "Reports",
                            "ref": ""
                          }
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponseObject"
                },
                "examples": {
                  "secure_storage_inaccessible": {
                    "summary": "Secure Storage Inaccessible",
                    "value": {
                      "path": "/reporting/orders/",
                      "errors": [
                        {
                          "code": "secure_storage_inaccessible",
                          "message": "Temporarily unable to access data in secure storage. Please try again.",
                          "source": {
                            "resource": "Reports",
                            "ref": ""
                          }
                        }
                      ]
                    }
                  },
                  "unknown_server_error": {
                    "summary": "Unknown Server Error",
                    "value": {
                      "path": "/reporting/orders/",
                      "errors": [
                        {
                          "code": "unknown_server_error",
                          "message": "Unable to continue",
                          "source": {
                            "resource": "Reports",
                            "ref": ""
                          }
                        }
                      ]
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "ErrorsArray": {
        "type": "array",
        "description": "An array with information about the error.",
        "items": {
          "type": "object",
          "properties": {
            "code": {
              "type": "string",
              "description": "A short string that represents the error."
            },
            "message": {
              "type": "string",
              "description": "A developer-facing message with more details about the error, not to be displayed to customers."
            },
            "source": {
              "type": "object",
              "properties": {
                "resource": {
                  "type": "string",
                  "description": "The type of the Forage resource involved in the error."
                },
                "ref": {
                  "type": "string",
                  "description": "If applicable, the ten character reference hash of the Forage resource that caused the error. An empty string if no specific individual resource was involved."
                }
              }
            },
            "details": {
              "type": "object",
              "description": "Additional details about the error, if applicable."
            }
          }
        },
        "example": []
      },
      "ErrorResponseObject": {
        "type": "object",
        "description": "An object that includes details about the error.",
        "properties": {
          "path": {
            "type": "string",
            "description": "The requested endpoint."
          },
          "errors": {
            "$ref": "#/components/schemas/ErrorsArray"
          }
        }
      },
      "PaginatedReportCommonFields": {
        "properties": {
          "next": {
            "type": "string",
            "nullable": true,
            "description": "A URL that you can send a `GET` to in order to retrieve the next set of results. Alternatively, you can retrieve the `cursor` value from the URL and pass it in the body of a new request.\n\nThis value is `null` if there are no more results.\n"
          },
          "previous": {
            "type": "string",
            "nullable": true,
            "description": "A URL that you can send a `GET` to in order to retrieve the previous set of results. Alternatively, you can retrieve the `cursor` value from the URL and pass it in the body of a new request.\n\nThis value is `null` if the response includes the first set of results.\n"
          }
        }
      },
      "OrderAndTaxesReportResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/PaginatedReportCommonFields"
          },
          {
            "type": "object",
            "properties": {
              "next": {
                "example": "https://api.sandbox.joinforage.app/reporting/orders/?cursor=cD0yMDIzLTAxLTMxKzIxJTNBMzElM0ExNC40NTUxNjMlMkIwMCUzQTAw&end_date=2021-02-28&start_date=2021-01-31"
              },
              "previous": {
                "example": null
              },
              "results": {
                "type": "array",
                "description": "An array of objects that detail information about each `Order` during the provided reporting period.",
                "items": {
                  "type": "object",
                  "properties": {
                    "ref": {
                      "type": "string",
                      "description": "A unique reference hash for the Forage `Order` object.",
                      "example": "b085e45a54"
                    },
                    "status": {
                      "type": "string",
                      "description": "The status of the order in the Forage lifecycle. One of:\n\n- `canceled`\n- `draft`\n- `failed`\n- `processing`\n- `succeeded`\n",
                      "enum": [
                        "canceled",
                        "draft",
                        "failed",
                        "processing",
                        "succeeded"
                      ],
                      "example": "draft"
                    },
                    "snap_eligible_total": {
                      "type": "string",
                      "format": "decimal",
                      "description": "The SNAP-only eligible portion of the order cost in USD.",
                      "example": "25.99"
                    },
                    "ebt_cash_eligible_total": {
                      "type": "string",
                      "format": "decimal",
                      "description": "The EBT Cash-only eligible portion of the order cost in USD.",
                      "example": "21.23"
                    },
                    "remaining_total": {
                      "type": "string",
                      "format": "decimal",
                      "description": "The portion of the `Order` total, in USD, that is neither SNAP eligible nor EBT Cash eligible. This amount must be charged to a credit or debit card.",
                      "example": "44.39"
                    },
                    "sales_tax_applied": {
                      "type": "string",
                      "format": "decimal",
                      "nullable": true,
                      "description": "The amount of sales tax that Forage added to the order total, calculated after the customer distributed tender across payment methods.\n\nThis value is always `0` for Custom integrations. Forage only calculates taxes for Fully Hosted integrations.\n\nIf the value is nonzero, then some of the `ebt_cash_paid` or `credit_debit_paid` amount covered taxes. Per FNS regulations, `snap_paid` is tax-exempt. The sum of (`snap_paid`, `ebt_cash_paid`, `credit_debit_paid`) should always equal the sum of (`sales_tax_applied`, `snap_eligible_total`, `remaining_total`).\n\n_The value of this field is `null` if the `status` of the `Order` is not `succeeded` or `failed`_.\n",
                      "example": "5.12"
                    },
                    "snap_paid": {
                      "type": "string",
                      "format": "decimal",
                      "nullable": true,
                      "description": "The portion of the order cost in USD that the customer paid for with SNAP benefits.\n\n_The value of this field is `null` if the `status` of the `Order` is not `succeeded` or `failed`_.\n",
                      "example": "86.29"
                    },
                    "ebt_cash_paid": {
                      "type": "string",
                      "format": "decimal",
                      "nullable": true,
                      "description": "The portion of the order cost in USD that the customer paid for with EBT Cash benefits.\n\n_The value of this field is `null` if the `status` of the `Order` is not `succeeded` or `failed`_.\n",
                      "example": "15.22"
                    },
                    "credit_debit_paid": {
                      "type": "string",
                      "format": "decimal",
                      "nullable": true,
                      "description": "The portion of the order cost in USD that the customer paid for with credit/debit card.\n\n_The value of this field is `null` if the `status` of the `Order` is not `succeeded` or `failed`_.\n",
                      "example": "67.90"
                    },
                    "merchant_fns_number": {
                      "type": "string",
                      "description": "The FNS number of the merchant that created this order.",
                      "example": "1234567"
                    },
                    "created": {
                      "type": "string",
                      "format": "date-time",
                      "description": "A UTC timestamp of when the `Order` was created, represented as an [ISO 8601 date-time](https://www.iso.org/iso-8601-date-and-time-format.html) string.",
                      "example": "2021-06-15T00:11:50.000000Z"
                    },
                    "success_date": {
                      "type": "string",
                      "format": "date-time",
                      "description": "A UTC timestamp of when all `OrderPayments` associated with the `Order` were successfully processed, represented as an [ISO 8601 date-time](https://www.iso.org/iso-8601-date-and-time-format.html) string.",
                      "example": "2021-06-16T00:11:50.000000Z"
                    },
                    "payments": {
                      "type": "array",
                      "description": "An array of the unique reference hashes for any Forage `OrderPayments` associated with the `Order`.",
                      "example": [
                        "cd62e45f33",
                        "a2f4e45665"
                      ],
                      "items": {
                        "type": "string"
                      }
                    },
                    "refunds": {
                      "type": "array",
                      "description": "An array of the unique reference hashes for any Forage `OrderRefunds` associated with the `Order`.",
                      "example": [
                        "aaabe45432",
                        "7e84e45db7"
                      ],
                      "items": {
                        "type": "string"
                      }
                    },
                    "psp_customer_id": {
                      "type": "string",
                      "nullable": true,
                      "description": "The third-party credit/debit payment processor’s unique identifier for the customer.\n\n_The value of this field is null if the `Order` was created via a POST to `/capture_sessions/`_\n\n**You must build with Forage Version `2023-05-15` or later to use `psp_customer_id`.** Either pass `2023-05-15` as the `API-Version` header on a per request basis, or set the version for all requests in the Forage dashboard.\n"
                    },
                    "external_order_id": {
                      "$ref": "#/components/schemas/ExternalOrderIDField"
                    },
                    "external_location_id": {
                      "$ref": "#/components/schemas/ExternalLocationIDField"
                    }
                  }
                },
                "required": [
                  "ref",
                  "status",
                  "snap_eligible_total",
                  "ebt_cash_eligible_total",
                  "remaining_total",
                  "sales_tax_applied",
                  "snap_paid",
                  "ebt_cash_paid",
                  "credit_debit_paid",
                  "merchant_fns_number",
                  "created",
                  "payments",
                  "refunds",
                  "psp_customer_id"
                ]
              }
            }
          }
        ]
      },
      "ExternalOrderIDField": {
        "type": "string",
        "maxLength": 64,
        "description": "A unique identifier for the order as created by the merchant or platform (not Forage).\n\nWhen a merchant or platform passes this order ID to Forage, it persists in each Forage transaction related to the `Order`. This field enables merchants to map order IDs in their system to corresponding Forage `Order` IDs.\n\n**You must build with Forage Version `2023-05-15` or later to use `external_order_id`.** Either pass `2023-05-15` as the `API-Version` header on a per request basis, or set the version for all requests in the Forage dashboard.\n"
      },
      "ExternalLocationIDField": {
        "type": "string",
        "description": "A unique identifier, provided by the merchant or platform (not Forage), that indicates the physical fulfillment location for the order. For example, this field could specify which location of a grocery store chain fulfilled an order.\n",
        "example": "6e3b2ff7-51c8-4c64-befa-2eac90f7c3e9"
      }
    },
    "parameters": {
      "StartDateQueryParam": {
        "name": "start_date",
        "in": "query",
        "description": "The date that the reporting period starts, represented as an [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) UTC date string, inclusive. The result set includes all reported items that occurred on the date.\n",
        "required": true,
        "schema": {
          "type": "string",
          "format": "date"
        }
      },
      "EndDateQueryParam": {
        "name": "end_date",
        "in": "query",
        "description": "The date that the reporting period ends, represented as an [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) UTC date string, inclusive. The result set includes all reported items that occurred on the date.\n",
        "required": true,
        "schema": {
          "type": "string",
          "format": "date"
        }
      },
      "CursorQueryParam": {
        "name": "cursor",
        "in": "query",
        "description": "The starting point for the `results`, as returned in a previous `/reporting/` request. Find a cursor in the URL returned in the `next` and/or `previous` response values.",
        "schema": {
          "type": "string"
        }
      },
      "LimitQueryParam": {
        "name": "limit",
        "in": "query",
        "description": "The maximum number of objects to include in the `results` array. Not to exceed `1000`. If the limit exceeds `1000`, then Forage returns a `400` error response.\n\nDefaults to `100`.\n",
        "required": false,
        "schema": {
          "type": "integer",
          "default": 100
        }
      },
      "StatusQueryParam": {
        "name": "status",
        "in": "query",
        "description": "The status of the `Orders` to be returned in the response. `succeeded` is the only currently supported value, instructing the `start_date` and `end_date` params to refer to the order’s `success_date`, rather than its `created` value. The `status` filter has no effect if any other value is applied or if excluded from the request.",
        "required": false,
        "schema": {
          "type": "string"
        }
      },
      "APIVersionHeader": {
        "name": "API-Version",
        "in": "header",
        "description": "The [Forage version](https://docs.joinforage.app/reference/version-history), represented as a string with the format of a `YYYY-MM-DD` date.\n\nIf not specified in the request header, then the version defaults to the value set in the Forage dashboard.\n",
        "schema": {
          "type": "string"
        },
        "required": false
      }
    },
    "securitySchemes": {
      "OAuth2": {
        "type": "oauth2",
        "description": "Pass the access token in the 'Authorization' header with the format \"Bearer ${token}\", i.e. the word \"Bearer\" and your access token from the /o/token/ API, separated by whitespace.\n",
        "flows": {
          "password": {
            "tokenUrl": "/o/token/",
            "scopes": {
              "hosted_checkout": "Scope for tokens used by merchant applications which allow Forage to manage split tender processing (i.e. EBT + Credit/Debit).\n",
              "pinpad_only": "Scope for tokens used by merchant applications which manage their own split tender (i.e. Forage Checkout is used only for EBT processing).\n"
            }
          },
          "clientCredentials": {
            "tokenUrl": "/o/token/",
            "scopes": {
              "internal": "Scope for tokens used by Forage internal applications.\n",
              "pin-protected": "Scope for tokens which can access secure storage.\n",
              "disbursement": "Scope for tokens which can disburse money to merchants.\n"
            }
          }
        }
      }
    }
  }
}
```

# Sibling pages

* [Retrieve a Payout Report](https://docs.joinforage.app/reference/get-payout-report.md)
* [Retrieve a Payout Transaction Report](https://docs.joinforage.app/reference/get-payout-transaction-report.md)
* [Retrieve a Transaction Report](https://docs.joinforage.app/reference/get-transaction-report.md)