Skip to main content

List FBA Reimbursements

GET 

/api/amazon/unified/fba-reimbursements

Paginated list of FBA reimbursements Amazon has already paid, unified across all Amazon integration instances. Rows are ingested from the FBA reimbursements report and form the authoritative payout log that reimbursement cases are reconciled against; amazon_reimbursement_case_id (and the embedded reimbursement_case object) is set when a row has been matched to a tracked case.

Not yet available to API tokens

This endpoint currently requires session authentication; Personal Access Token scope support is in progress.

Per-row recovery fields:

  • linked_case_id (integer|null) — the reimbursement case this payout is linked to (same value as amazon_reimbursement_case_id).
  • linked_sales_order (object|null) — the sales order behind amazon_order_id on the same integration instance (id, sales_order_number, order_status); null when the row has no order ID or the order has not been imported.
  • underpaid (boolean) — true when the payout was flagged as underpaid: Amazon paid less per unit than its policy owes: for a unit lost before a sale, the purchase cost (the price on the product's latest purchase order on or before the payment; shipping and duties are excluded; the unit cost at the event when there is no purchase order); for a refunded unit, the sale price less promotions and the sale's fees, or the purchase cost until the order settles.
  • expected_per_unit (number|null) — what the unit was worth according to the underpaid check; null when the row was not flagged.
  • underpaid_case_id (integer|null) — the open underpaid-reimbursement case raised for this row; null when not flagged.

Payout against cost:

  • recoverability (string|null) — never_returns, may_reappear or cash_only: whether the reimbursed units can come back.
  • fba_loss_event_id (integer|null) — the FBA loss event this payment pays for (the first one when it pays for several).
  • settlement_data_id (integer|null) — the settlement line that carried this payment's cash.
  • cost_basis (string|null) — how cost_total was measured: consumed_layer (the FIFO cost the lost units consumed), recorded_shortage (an inbound loss: what the recorded inbound shortage wrote off), landed_at_event_date (no ledger cost, so the product's unit cost at the loss date), replacement (Amazon replaced the units instead of paying — nothing to compare), supplement (a money-only top-up of an earlier payment; its units were costed on the original payment, so it is never costed), unknown (no cost on file).
  • cost_total (number|null) — what the cash-reimbursed units cost you.
  • unit_cost (number|null) — cost_total divided by quantity_reimbursed_cash.
  • variance_total (number|null) — amount_total minus cost_total; negative when Amazon paid less than cost. Null when there is no cost or the row is not a positive payment.
  • variance_per_unit (number|null) — variance_total per cash-reimbursed unit.

Pagination: page and per_page (default 10). Sorting: sort=<field> ascending or sort=-<field> descending. Sortable fields: id, reimbursement_id, approval_date, case_id, amazon_order_id, reason, reason_category, sku, fnsku, asin, amount_per_unit, amount_total, currency, quantity_reimbursed_cash, quantity_reimbursed_inventory, quantity_reimbursed_total, cost_total, variance, created_at, updated_at. variance sorts by amount paid minus cost, so sort=variance lists the most underpaid payments first; payments without a cost sort last in either direction.

Simple filters:

  • filter[search] — fuzzy search across reimbursement_id, case_id, amazon_order_id, sku, asin, fnsku, reason and the integration instance name. Restrict with search_columns and force exact matching per column with search_strict_columns.
  • filter[integration_instance_ids] — comma-separated Amazon integration instance IDs.
  • filter[reason_category] — comma-separated list of normalized reason categories.
  • filter[currency] — comma-separated list of currency codes.
  • filter[has_case_id] — true/false (also accepts 1/0, yes/no): rows that do or do not carry an Amazon case ID.
  • filter[has_linked_case] — true/false (also accepts 1/0, yes/no): rows that are or are not linked to a SKU.io reimbursement case.
  • filter[underpaid] — 1/0 (also accepts true/false, yes/no): rows that were or were not flagged as underpaid, i.e. Amazon paid less per unit than the unit was worth and an open (not dismissed) underpaid-reimbursement case exists for the row.
  • filter[linked] — filed (linked to a case you filed in Seller Central, i.e. the case has an Amazon case ID), auto (linked to a case that was never filed — Amazon paid on its own and the payout was matched automatically), or none (not linked to any case).
  • filter[variance] — negative (Amazon paid less than the units cost) or positive (paid at or above cost). Only payments with a known cost and a positive amount match.
  • filter[recoverability] — comma-separated list of never_returns, may_reappear, cash_only.
  • filter[loss_event_status] — comma-separated statuses of the FBA loss event the payment pays for (researching, confirmed_lost, partially_reimbursed, reimbursed, found, reversed, written_off); payments not linked to a loss event never match.
  • filter[fba_loss_event_id] — payments for one FBA loss event (exact match).
  • filter[loss_outcome] — comma-separated list of found and/or reimbursed. Matches a payment when any loss event it pays for or claws back (through its loss-event links, not only fba_loss_event_id) has found units (found), or has more than zero units paid for net of reversals (cash plus replacements) while more units were lost than found (reimbursed). Several values match either; unknown values are ignored.

Advanced operator filters use the syntax filter[column.operator]=value; a bare filter[column]=value is treated as the is operator.

  • Text columns (reimbursement_id, case_id, amazon_order_id, reason, reason_category, sku, fnsku, asin, condition) support: contains, does_not_contain, is, is_not, is_one_of, is_not_one_of, starts_with, does_not_start_with, ends_with, does_not_end_with, is_empty, is_not_empty.
  • Numeric columns (amount_per_unit, amount_total, quantity_reimbursed_cash, quantity_reimbursed_inventory, quantity_reimbursed_total) support: is, is_not, is_one_of, is_not_one_of, greater_than, less_than, greater_than_or_equal, less_than_or_equal, between, is_empty, is_not_empty.
  • Date columns (approval_date, created_at, updated_at) support: is, is_not, before, after, on_or_before, on_or_after, between, is_empty, is_not_empty, today, yesterday, tomorrow, past_week, past_month, past_year, next_week, next_month, next_year, days_ago, days_from_now, past_days, next_days. Date values use ISO 8601 / Y-m-d; between takes two comma-separated values.

Complex AND/OR filter trees can be sent via filter_groups (base64-encoded JSON tree of conditions and nested groups).

unmatched_reason says why the claim this payment names by case id was not settled by it — the payment is in a different currency from the claim, or the claim type does not accept the payment's reason (e.g. "Payment is in EUR but the claim (case 17389245671) is in USD — record it on the claim manually with "Record Amazon's answer"."). null when matched or when no case id applies.

Request​

Responses​

OK

Response Headers
    Content-Type