Skip to main content

Heartland API Endpoints

The Heartland Retail API endpoints the iPaaS.com Heartland integration calls, grouped by entity, with the authentication, pagination, filtering, and rate-limit behavior of the Heartland Retail API.

This article lists the Heartland Retail API endpoints that the iPaaS.com Heartland integration calls, grouped by entity. Use it when whitelisting outbound traffic, assessing the impact of a Heartland API change, or troubleshooting a specific transfer.

All endpoint paths, parameters, authentication details, pagination behavior, and rate-limit statements below are taken from Heartland Retail's public API documentation at https://dev.retail.heartland.us/, accessed 20 July 2026. Where a path the integration calls does not appear in that published reference, this article says so rather than asserting behavior that Heartland has not documented.

Portal Info

Heartland Retail issues each account its own subdomain. The Heartland Retail web application and the Heartland Retail API are served from that same account address.

  • Account address: https://{subdomain}.retail.heartland.us

  • Shared authorization host: https://retail.heartland.us, used for the authorization and token steps described under Authentication, and for the account host lookup.

Heartland Retail does not publish separate regional hosts. There is one account address per Heartland Retail account.

API Endpoints Intro

The Heartland Retail API is a JSON REST API. Requests and responses use application/json, except for the token request described under Authentication, which is form-encoded.

Heartland Retail documents the API base path as an account-specific subdomain with /api/ appended (Heartland Retail API documentation, accessed 20 July 2026):

https://{subdomain}.retail.heartland.us/api/

On the iPaaS.com Heartland subscription you supply the account address in the API URL setting. The integration appends the /api/... paths listed in this article to that value.

  • Base URL: https://{subdomain}.retail.heartland.us

  • Base URL example: https://ipaasdev.retail.heartland.us

Throughout this article, [Base URL] stands for the account address you entered in API URL.

Heartland Retail does not publish a separate sandbox or test host. A non-production Heartland Retail account has its own subdomain and is reached through the same address pattern, so a test subscription differs only in the API URL value.

The Heartland Retail API is unversioned. There is no version segment in the path and Heartland Retail does not publish a version header.

Table of Contents

Customer Endpoints

Search Customers (GET)

[Base URL]/api/customers

Used for scheduled polling and for on-demand initialization. Query parameters used: page, per_page, and the change filter ~[updated_at][$gt] described under Pagination and Filtering.

Look Up a Customer by Email Address (GET)

[Base URL]/api/customers?email={EmailAddress}

Used to find an existing Heartland customer before creating a new one. Heartland Retail's published reference documents query, page, and per_page as the search parameters on this collection and does not document a bare email equality parameter, so this specific query form is not covered by the published reference.

Get a Customer (GET)

[Base URL]/api/customers/{CustomerId}

Create a Customer (POST)

[Base URL]/api/customers

Documented body fields include first_name, last_name, email, address_id, shipping_address_id, billing_address_id, and custom.

Update a Customer (PUT)

[Base URL]/api/customers/{CustomerId}

List Customer Addresses (GET)

[Base URL]/api/customers/{CustomerId}/addresses

Get a Customer Address (GET)

[Base URL]/api/customers/{CustomerId}/addresses/{AddressId}

Create a Customer Address (POST)

[Base URL]/api/customers/{CustomerId}/addresses

Documented body fields include line_1, city, state, postal_code, country, phone, and custom.

Update a Customer Address (PUT)

[Base URL]/api/customers/{CustomerId}/addresses/{AddressId}

Product Endpoints

Heartland Retail models a product family as an item grid and each sellable variation as an item. The integration calls both.

Search Items (GET)

[Base URL]/api/items

Query parameters used: page, per_page, _filter, and the change filter ~[updated_at][$gt].

Get an Item (GET)

[Base URL]/api/items/{ItemId}

Sideloaded records are requested with _include[]. The integration requests combinations of _include[]=grid, _include[]=tags, and _include[]=custom_prices.

Look Up an Item by SKU (GET)

[Base URL]/api/items?public_id={Sku}

Heartland Retail documents public_id as an item field but does not document it as a bare query parameter on the item search, so this query form is not covered by the published reference.

List Items in an Item Grid (GET)

[Base URL]/api/items?grid_id={GridId}

Heartland Retail does not document grid_id as a bare query parameter on the item search. The equivalent documented approach is a filter expression, described under Pagination and Filtering.

Create an Item (POST)

[Base URL]/api/items

Documented body fields include cost, price, financial_class_id, import_batch_id, and primary_vendor_id.

Update an Item (PUT)

[Base URL]/api/items/{ItemId}

Search Item Grids (GET)

[Base URL]/api/item_grids

Query parameters used: page, per_page, and the change filter ~[updated_at][$gt].

Get an Item Grid (GET)

[Base URL]/api/item_grids/{GridId}

Sideloaded with _include[]=tags and _include[]=custom_prices.

Look Up an Item Grid by Public ID (GET)

[Base URL]/api/item_grids?public_id={Sku}

As with the item search, Heartland Retail does not document public_id as a bare query parameter on this collection.

Create an Item Grid (POST)

[Base URL]/api/item_grids

Documented body fields include item_cost, item_price, item_original_price, item_financial_class_id, and item_primary_vendor_id.

Update an Item Grid (PUT)

[Base URL]/api/item_grids/{GridId}

Create an Item Within an Item Grid (POST)

[Base URL]/api/item_grids/{GridId}/items

This path does not appear in Heartland Retail's published API reference. Its behavior cannot be confirmed from the public documentation.

Inventory Endpoints

Get Inventory Values (GET)

[Base URL]/api/inventory/values

Query parameters used: item_id to scope the result to one item, location_id to scope it to one location, and group[] to group the returned quantities. The integration groups by location_id and item_id.

Search Inventory Transactions (GET)

[Base URL]/api/inventory/transactions

Used for scheduled polling with page, per_page, and the change filter ~[updated_at][$gt]. This path does not appear in Heartland Retail's published API reference.

Create an Inventory Adjustment Set (POST)

[Base URL]/api/inventory/adjustment_sets

Documented body fields: adjustment_reason_id and location_id.

Update an Inventory Adjustment Set (PUT)

[Base URL]/api/inventory/adjustment_sets/{AdjustmentSetId}

Used to move an adjustment set to its completed state after its lines have been added.

Add a Line to an Inventory Adjustment Set (POST)

[Base URL]/api/inventory/adjustment_sets/{AdjustmentSetId}/lines

Documented body fields: adjustment_set_id, item_id, qty, and unit_cost.

Get an Inventory Adjustment Set Line (GET)

[Base URL]/api/inventory/adjustment_sets/{AdjustmentSetId}/lines/{LineId}

List Inventory Adjustment Reasons (GET)

[Base URL]/api/reason_codes/inventory_adjustment_reasons?active=true

Used to resolve the adjustment reason required when creating an adjustment set. Heartland Retail's published reference documents an adjustment reason identifier on the adjustment set body but does not document an endpoint for listing inventory adjustment reasons, so neither this path nor the active parameter is covered by the published reference.

Location Endpoints

Search Locations (GET)

[Base URL]/api/locations

Query parameters used: page, per_page, and the change filter ~[updated_at][$gt].

Get a Location (GET)

[Base URL]/api/locations/{LocationId}

Heartland Retail's published reference documents the location search but does not document retrieval of a single location by identifier.

Get a Location Address (GET)

[Base URL]/api/locations/{LocationId}/address

This path does not appear in Heartland Retail's published API reference.

Payment Method Endpoints

Heartland Retail calls these payment types.

Search Payment Types (GET)

[Base URL]/api/payment_types

Query parameters used: page, per_page, and the change filter ~[updated_at][$gt].

Get a Payment Type (GET)

[Base URL]/api/payment_types/{PaymentTypeId}

Documented fields include public_id, name, kind, description, payment_account_id, deposit_account_id, expiration_account_id, and max_refund_amount.

Shipping Method Endpoints

Search Shipping Methods (GET)

[Base URL]/api/shipping/methods

Query parameters used: page, per_page, and the change filter ~[updated_at][$gt].

Get a Shipping Method (GET)

[Base URL]/api/shipping/methods/{MethodId}

Documented body fields: name, amount, and income_account_id.

Gift Card Endpoints

Search Gift Cards (GET)

[Base URL]/api/gift_cards

Query parameters used: page, per_page, and the change filter ~[updated_at][$gt].

Get a Gift Card (GET)

[Base URL]/api/gift_cards/{GiftCardNumber}

Heartland Retail documents this path as retrieval by gift card number, not by an internal identifier.

Create a Gift Card (POST)

[Base URL]/api/gift_cards

Documented body field: number.

Update a Gift Card (PUT)

[Base URL]/api/gift_cards/{GiftCardNumber}

Heartland Retail's published reference documents creation and retrieval of gift cards but does not document an update operation on this path.

Search Gift Card Adjustments (GET)

[Base URL]/api/gift_card/adjustments

The integration scopes this search to one gift card with the bracket filter ~[gift_card_id]. Heartland Retail notes that this search always returns HTTP 403 when gift cards are processed externally rather than in Heartland Retail.

Note the singular gift_card segment on adjustments against the plural gift_cards on gift cards themselves. Both are as Heartland Retail publishes them.

Get a Gift Card Adjustment (GET)

[Base URL]/api/gift_card/adjustments/{AdjustmentId}

Create a Gift Card Adjustment (POST)

[Base URL]/api/gift_card/adjustments

Documented body fields: gift_card_id, reason_id, and delta_balance.

Sales Transaction Endpoints

Heartland Retail keeps three separate sales documents: orders, tickets, and invoices. The integration calls the same shapes against each, so the paths below are shown once with {SalesDocument} standing for orders, tickets, or invoices.

Search Sales Documents (GET)

[Base URL]/api/sales/orders
[Base URL]/api/sales/tickets
[Base URL]/api/sales/invoices

Query parameters used: page, per_page, and the change filter ~[updated_at][$gt].

Get a Sales Document (GET)

[Base URL]/api/sales/{SalesDocument}/{DocumentId}

Sideloaded records are requested with _include[]. The integration requests combinations of _include[]=payments, _include[]=taxes, _include[]=customer, _include[]=notes, _include[]=shipment, _include[]=shipping_address, _include[]=billing_address, and _include[]=order_shipping_method_name, depending on the document type.

Create a Sales Document (POST)

[Base URL]/api/sales/orders
[Base URL]/api/sales/tickets
[Base URL]/api/sales/invoices

Update a Sales Document (PUT)

[Base URL]/api/sales/{SalesDocument}/{DocumentId}

Heartland Retail also uses this operation for changes that have no dedicated sub-resource, including setting the shipping method and shipping charge on an order, and voiding a sales document by setting its status to void. Heartland Retail does not document a DELETE operation on sales documents.

List Sales Document Lines (GET)

[Base URL]/api/sales/{SalesDocument}/{DocumentId}/lines

On orders the integration requests _include[]=discounts to return line-level discount detail alongside each line.

Add a Line to a Sales Document (POST)

[Base URL]/api/sales/{SalesDocument}/{DocumentId}/lines

Heartland Retail documents line creation on orders and invoices at this path. On tickets, the published reference documents line creation at an item_lines sub-resource while lines are read from lines, so the ticket create path used here is not covered by the published reference.

List Sales Document Payments (GET)

[Base URL]/api/sales/{SalesDocument}/{DocumentId}/payments/{PaymentId}

Add a Payment to a Sales Document (POST)

[Base URL]/api/sales/{SalesDocument}/{DocumentId}/payments

Update a Payment on a Sales Document (PUT)

[Base URL]/api/sales/{SalesDocument}/{DocumentId}/payments/{PaymentId}

Heartland Retail documents adding a payment but does not document updating or retrieving an individual payment at these paths.

List Sales Document Notes (GET)

[Base URL]/api/sales/{SalesDocument}/{DocumentId}/notes

Add a Note to a Sales Document (POST)

[Base URL]/api/sales/{SalesDocument}/{DocumentId}/notes

Sales document notes are reachable as sideloaded data through _include[]=notes on the order retrieval above, but a notes sub-resource does not appear in Heartland Retail's published API reference.

Add a Shipment to an Invoice (POST)

[Base URL]/api/sales/invoices/{InvoiceId}/shipments

Used to record tracking information against an invoice. Heartland Retail publishes a shipments sub-resource on inventory transfers but not on invoices, so this path is not covered by the published reference.

Tax Rule Endpoints

Get a Tax Rule (GET)

[Base URL]/api/sales/tax_rules/{RuleId}

Used to resolve the tax detail applied to a transferred sales document. Documented tax rule fields include jurisdiction_id, liability_account_id, minimum_price, maximum_price, and the customer_filter and item_filter expressions, which use the same filter operator language described under Pagination and Filtering.

Vendor Endpoints

Look Up a Vendor by Name (GET)

[Base URL]/api/purchasing/vendors?name={VendorName}

Heartland Retail documents the vendor search but does not document a bare name equality parameter on it.

Get a Vendor (GET)

[Base URL]/api/purchasing/vendors/{VendorId}

Custom Field Endpoints

Search Custom Fields (GET)

[Base URL]/api/custom_fields

Query parameters used: page and per_page.

Look Up a Custom Field by Key (GET)

[Base URL]/api/custom_fields?key={Key}

Heartland Retail does not document a bare key equality parameter on this collection.

Get a Custom Field (GET)

[Base URL]/api/custom_fields/{CustomFieldId}

Create a Custom Field (POST)

[Base URL]/api/custom_fields

Documented body fields: group_id, name, validation_type (text or list), and validation_options.

Update a Custom Field (PUT)

[Base URL]/api/custom_fields/{CustomFieldId}

System Endpoints

Look Up the Account Host (GET)

https://retail.heartland.us/api/system/host

Returns the account-specific host for the authorized account. iPaaS.com calls this endpoint on the shared Heartland Retail host to confirm that the stored credential is valid before treating the subscription as connected.

Authentication

Heartland Retail authorizes API requests with a bearer token presented in the Authorization request header (Heartland Retail API documentation, accessed 20 July 2026):

Authorization: Bearer {Token}

Heartland Retail documents two ways to obtain that token.

  • API token: generated in the Heartland Retail application under your name menu, then My AccountAPIGenerate new token. This is the value you enter in the API Key setting on the iPaaS.com Heartland subscription.

  • OAuth 2.0 authorization code flow: for registered applications. Heartland Retail's documentation states that new OAuth application registrations are not currently being accepted, so accounts without an existing registration should use an API token.

Where an OAuth 2.0 access token has been obtained and stored on the subscription, the integration presents that token. Where none has been stored, it presents the value of the API Key setting. Either way the header format is identical.

Heartland Retail does not publish a token lifetime, an expiry field, or a refresh token grant for the API. Plan for a token to remain valid until it is revoked or regenerated in Heartland Retail, and update the API Key setting whenever you generate a new token.

Authorization Endpoints

Both OAuth 2.0 steps are served from the shared Heartland Retail host, not from your account subdomain.

Authorization request:

https://retail.heartland.us/oauth/authorize

Documented parameters: client_id, scope, and redirect_uri (all required), plus an optional state value for cross-site request forgery protection.

Token request:

https://retail.heartland.us/api/oauth/token

Documented parameters: client_id, client_secret, code, grant_type, and redirect_uri, all required. The only grant type Heartland Retail documents is authorization_code. The response carries access_token and token_type.

Pagination and Filtering

Pagination

Heartland Retail paginates every search endpoint with two query parameters (Heartland Retail API documentation, accessed 20 July 2026):

  • page: the page number to return.

  • per_page: the number of records per page.

The response envelope on a search endpoint carries three keys:

  • total: the total number of records matching the search.

  • pages: the number of pages of results.

  • results: the array of result objects.

The integration walks the pages of a search until the last page is reached. For most polling and initialization searches it requests 100 records per page.

Heartland Retail does not publish a maximum or default value for per_page, and it does not document any pagination response headers. If you are validating a change against a large Heartland Retail catalog, confirm the page size behaves as you expect in a staging account before relying on it in production.

Filtering

Heartland Retail supports two equivalent filter parameter names, _filter and the shorthand ~, in two forms.

  • Bracket form: ?~[field][$operator]=value, for example ?~[price][$gt]=100.

  • JSON form: a URL-encoded JSON filter expression passed as _filter.

Documented comparison operators are $eq, $neq, $in, $nin, $gt, $gte, $lt, $lte, and $like. Documented logical operators are $and and $or, which Heartland Retail states can be nested arbitrarily. The $like operator treats * as a wildcard, is case-insensitive, and behaves as $eq when no wildcard is supplied.

The integration uses the bracket form ~[updated_at][$gt] with the last successful poll timestamp to request only records changed since the previous run, and uses the JSON form for the compound filters on the item searches.

Heartland Retail also documents:

  • Full-text search: the query parameter performs fuzzy matching across indexed text fields, with partial matches supported from the start of a term. Which fields are indexed varies by collection.

  • Sideloading: _include[] returns a related record inline. Heartland Retail states this works on any property whose name ends in _id, and the response carries both the identifier and the embedded record.

  • Custom fields in filters: referenced with a custom@ prefix, for example ~[custom@color]=blue.

Heartland Retail does not document any sort or ordering parameter.

Rate Limits and Concurrency

Heartland Retail

Heartland Retail does not publish any API rate limit. Its documentation states no request quota, no time window, no rate-limit response headers, and no documented HTTP 429 behavior, and it gives no general throughput guidance either (Heartland Retail API documentation, accessed 20 July 2026). No limit is asserted here because none is published.

Because no published ceiling exists, treat throughput as something to establish empirically against your own Heartland Retail account rather than something to read off a specification.

iPaaS.com Subscription Controls

Throughput is governed on the iPaaS.com side by four settings on the Heartland subscription. The Heartland integration does not override the iPaaS.com platform defaults, so the platform-standard values apply until you change them.

  • API Throttle Limit: the number of API requests allowed within the throttle window.

  • API Throttle Seconds: the length of the throttle window over which the limit is measured. Requests beyond the limit are held until the window resets.

  • Concurrent Connections: the maximum number of simultaneous API connections the integration holds open. Requests beyond this are queued.

  • Concurrent Batch Executions: the maximum number of batch executions processed at one time. Batches beyond this are queued.

For what each field does and where to set it, see Subscription Configuration – Edit.

Because Heartland Retail publishes no limits to design against, raise these values gradually and watch the Dashboard logs after each change rather than starting high. Stagger large transfers, and avoid running several bulk operations against the same Heartland Retail account at the same time.

Related Documents

Setup & Reference

Did this answer your question?