Run everything you never had time to implement. Define your process once, and keep it running with Qore.

All reports
Amazon Seller Central
Fees & Finance

Amazon Financial Transactions Report (Finances API listTransactions)

Amazon's Financial Transactions report is the Finances API's listTransactions feed: one row per posted financial transaction, with its type, status, description, total amount and currency, the marketplace it was posted in, and any deferral that is holding it — plus five child tables that split each transaction into its items, the recursive charge and fee breakdowns at both the transaction and item level, and the name/value identifiers Amazon attaches. It is the transaction-level ledger underneath your settlements, served by a live paginated endpoint rather than a downloadable report file.

Known upstream as
listTransactions
One row is
One row per financial transaction
Refreshed
Daily
Columns
47
Marketplaces
All marketplaces
History
Partly established. Amazon caps a single request rather than publishing a retention period: if postedAfter and postedBefore are more than 180 days apart the response comes back empty, so anything longer has to be walked in 180-day windows. No earliest date or archive statement is published for the operation, so how far back it actually answers has not been confirmed against a real pull.
Latency
Amazon warns that the response "might not include orders from the last 48 hours", and both ends of the posted-date window must be more than two minutes older than the request, so the newest two days of any window are provisional. On top of that a transaction's status changes in place — a DEFERRED transaction becomes DEFERRED_RELEASED when it is released — so a posted day is not final the first time it is pulled.
Requires

What this report contains

A financial transaction is one posted entry in Amazon's ledger for your account: a charge, a fee, a payment or an adjustment, posted on a date, in a marketplace, with a total. This report is the Finances API's listTransactions feed, and one row of it is one transaction, identified by transaction_id, posted at posted_date, carrying transaction_type, transaction_status, description, total_amount beside total_amount_currency_code, the marketplace (reported_marketplace_id, marketplace_name), selling_partner_id and account_type. A transaction Amazon is holding back also carries deferral_reason and maturity_date.

Each transaction document nests four collections, so the file lands as six tables, and the field reference below is grouped under one heading per table — which is why transaction_id and posted_date appear once under each of the six. After the transactions table come:

- Items — one row per item in the transaction, keyed by transaction_id and item_index, with the item's own description and total_amount, and its product context flattened on: asin, sku, fulfillment_network, quantity_shipped. Every item has exactly one. - Item-level breakdowns and transaction-level breakdowns — the recursive tree of what an amount is made of. Each node is a row with its level, its slash-joined breakdown_path (Expenses/AmazonFees/Commission), its breakdown_type and its breakdown_amount. Four levels were observed in production, Sales down through ProductCharges to Base, and parents are written before children. - Item identifiers and transaction identifiers — name/value pairs Amazon attaches, related_identifier_name and related_identifier_value, at both levels.

Two facts about the shape matter more than any column. A breakdown parent's amount already sums its children, so a breakdown table is a tree, not a list to total. And every child row carries posted_date copied from its transaction, because posted date is the axis the whole report is filtered and re-stated on.

Transactions arrive in three statuses — RELEASED, DEFERRED and DEFERRED_RELEASED — and a deferred one changes status in place, to DEFERRED_RELEASED, when it is released; maturity_date is the date Amazon is due to release it. Amazon also sends an address context on transactions, but it arrives with no fields at all without a restricted data token, so it is not carried here. The column set was established from 2,500 production transactions in the US marketplace.

How to get it

There is no Reports API report type for this data. It comes from the Selling Partner API Finances API, version 2024-06-19, through the listTransactions operation on GET /finances/2024-06-19/transactions — a synchronous, paginated live endpoint. The posted-date window is postedAfter and postedBefore, the store is marketplaceId, and pagination is nextToken; transactionStatus, relatedIdentifierName and relatedIdentifierValue narrow the result further. Amazon marks every parameter optional, but postedAfter is required unless you pass a related identifier, both dates must be more than two minutes older than the request, and you have to follow nextToken until it comes back null because the operation can return empty pages in the middle of a result. The response is JSON, and each transaction document nests the four collections that become the six tables.

The nearest thing in Seller Central is the Payments dashboard's Transaction View tab. Amazon's own seller site gives two ways to it — Reports → Payments, then the Transaction View tab, or Payments → Payments, which opens the dashboard on Statement View. Amazon does not say what that tab carries, so treat it as where to eyeball a transaction, not as an export of this feed.

Unlike the region-wide flat-file reports, the marketplaceId parameter here is honoured: a response is one marketplace, and in 2,500 of 2,500 validated transactions the document's own marketplace matched the one requested. So to cover an account you make one call per marketplace, and you can trust reported_marketplace_id on each row.

The window is a posted-date filter, and the rows it returns are their current state. One request's span is capped: if postedAfter and postedBefore are more than 180 days apart the response comes back empty, so a backfill has to be walked in windows rather than asked for in one call. Amazon also warns that the response "might not include orders from the last 48 hours", which makes the newest two days of any window provisional. And because a deferred transaction's status flips when it is released, a day you pulled once is not final, so a rolling window of posted days has to be re-pulled and re-stated rather than read once and kept.

The trap that stops the call working at all is authorization vintage. An older refresh token, granted before this operation existed for your app, answers 403 Access to requested resource is denied on listTransactions — even while the same credential's v0 listFinancialEvents works. The grant is per operation, not per API version; the same old credential is refused on v0 listFinancialEventGroups too. The fix is for the seller to re-authorize the app, and nothing in the request changes.

Sample rows

Illustrative values, not data from a real account. Shown to give the shape of the file.

transaction_idposted_datetransaction_statustotal_amounttotal_amount_currency_codereported_marketplace_idmarketplace_namedeferral_reasonmaturity_date
TX-EXAMPLE-00012026-09-08T14:05:00ZRELEASED42.50USDATVPDKIKX0DERAmazon.com
TX-EXAMPLE-00022026-09-08T16:20:00ZRELEASED18.00USDATVPDKIKX0DERAmazon.com
TX-EXAMPLE-00032026-09-09T09:15:00ZDEFERRED120.00USDATVPDKIKX0DERAmazon.comDD72026-09-16T00:00:00Z
TX-EXAMPLE-00042026-09-10T11:40:00ZDEFERRED_RELEASED58.00USDATVPDKIKX0DERAmazon.comDD72026-09-10T00:00:00Z
TX-EXAMPLE-00052026-09-11T18:30:00ZRELEASED9.99USDATVPDKIKX0DERAmazon.com

Field reference

Main table

ColumnTypeDescription
transaction_idstringAmazon's identifier for the transaction, and the row's identity in the transactions table. Every child row in the other five tables carries the same value to join back on.
posted_datetimestamp_msWhen Amazon posted the transaction. This is the one column the request window filters on, so it decides which day's pull a transaction belongs to, and it is copied onto every child row so each table can be re-stated by posted day.
transaction_typestringAmazon's classification of the transaction. Amazon's reference documents a single possible value, Shipment, and does not model the field as an enum, so the full vocabulary is neither published nor confirmed from the evidence behind this page.
transaction_statusstringOne of RELEASED, DEFERRED or DEFERRED_RELEASED, all three observed in production and all three enumerated in Amazon's reference. It changes in place: a DEFERRED transaction becomes DEFERRED_RELEASED when it is released, so the same transaction_id can come back with a different status on a later pull of the same posted day.
descriptionstringAmazon's text describing the transaction.
total_amountdecimalThe transaction's total, as a decimal, beside total_amount_currency_code. The transaction-level breakdown table describes what it is made of; this column is the whole-transaction figure.
total_amount_currency_codestringThe currency total_amount is in. Every amount in this report sits beside its own currency code and nothing is converted, so group on this before summing across marketplaces.
reported_marketplace_idstringThe marketplace id Amazon wrote in the document itself, as opposed to the one requested. In 2,500 of 2,500 production transactions it matched the requested marketplace; it is carried so that a response which ever spanned marketplaces would land visibly rather than mislabelled.
marketplace_namestringThe marketplace's name as Amazon labels it in the document, alongside reported_marketplace_id.
selling_partner_idstringThe seller account the transaction belongs to.
account_typestringAmazon's account type label on the transaction. Amazon's reference describes it only as "the type of account in the transaction" and publishes no value list, and it cannot be filtered on, so the literal values are not confirmed from the evidence behind this page either.
deferral_reasonstringWhy Amazon is holding the transaction, flattened from the transaction's DeferredContext — codes such as DD7. Expect it empty on a transaction that was never deferred.
maturity_datetimestamp_msWhen a deferred transaction is due to release, from the same DeferredContext. Once it passes, transaction_status changes in place on the same row.

items

ColumnTypeDescription
transaction_idstringItems table. The transaction this item belongs to; join it to the transactions table on this column.
posted_datetimestamp_msItems table. The parent transaction's posted date, copied onto the item row so the table is re-stated by the same posted-day window as its parent.
item_indexint64Items table. The item's position within its transaction. With transaction_id it identifies the item, and it is the key the item-level breakdowns and item identifiers carry to join back to it. Amazon's Item schema carries no index of its own, so this is the position in the items array as it arrived rather than a field Amazon publishes.
descriptionstringItems table. Amazon's text describing the item.
total_amountdecimalItems table. The item's total, as a decimal, beside its own currency code. The item-level breakdown table describes what it is made of.
total_amount_currency_codestringItems table. The currency the item's total_amount is in.
asinstringItems table. The item's ASIN, flattened from its ProductContext — every item carries exactly one.
skustringItems table. The seller SKU, from the same ProductContext as asin.
fulfillment_networkstringItems table. Which fulfilment network handled the item, from its ProductContext. Amazon documents it as a plain string with no value list, so the literal values are not confirmed from the evidence behind this page either.
quantity_shippedint64Items table. Units shipped for this item, from its ProductContext. The one count column in the whole report; everything else numeric is money.

item_level_breakdowns

ColumnTypeDescription
transaction_idstringItem-level breakdowns table. The transaction this breakdown node descends from.
posted_datetimestamp_msItem-level breakdowns table. The parent transaction's posted date, copied down.
item_indexint64Item-level breakdowns table. Which item of the transaction this node breaks down; join on transaction_id and item_index together.
levelint64Item-level breakdowns table. The node's depth in the item's breakdown tree. Four levels were observed in production. Filter on this, or on breakdown_path, before summing — a parent's amount already includes its children.
breakdown_pathstringItem-level breakdowns table. The node's slash-joined ancestry, such as Expenses/AmazonFees/Commission. Parents are written before their children.
breakdown_typestringItem-level breakdowns table. The name of this node — Sales, ProductCharges, Base and so on, the last segment of breakdown_path.
breakdown_amountdecimalItem-level breakdowns table. This node's amount, as a decimal, beside its own currency code. A parent's amount already sums its children, so summing the whole column double-counts.
breakdown_amount_currency_codestringItem-level breakdowns table. The currency breakdown_amount is in.

item_related_identifiers

ColumnTypeDescription
transaction_idstringItem identifiers table. The transaction this identifier belongs to.
posted_datetimestamp_msItem identifiers table. The parent transaction's posted date, copied down.
item_indexint64Item identifiers table. Which item of the transaction this identifier is attached to.
related_identifier_namestringItem identifiers table. The name of a reference Amazon attached to the item, from its name/value identifier list. Amazon's item-level enum is ORDER_ADJUSTMENT_ITEM_ID, COUPON_ID, REMOVAL_SHIPMENT_ITEM_ID and TRANSACTION_ID — a different and shorter list than the transaction-level one. Which of them a real file carries is not confirmed from the evidence behind this page.
related_identifier_valuestringItem identifiers table. The value of that reference.

transaction_level_breakdowns

ColumnTypeDescription
transaction_idstringTransaction-level breakdowns table. The transaction this node breaks down.
posted_datetimestamp_msTransaction-level breakdowns table. The transaction's posted date, copied down.
levelint64Transaction-level breakdowns table. The node's depth in the transaction's breakdown tree; four levels were observed. Filter on it before summing.
breakdown_pathstringTransaction-level breakdowns table. The node's slash-joined ancestry, parents before children.
breakdown_typestringTransaction-level breakdowns table. The name of this node — the last segment of breakdown_path.
breakdown_amountdecimalTransaction-level breakdowns table. This node's amount, beside its own currency code. A parent's amount already sums its children.
breakdown_amount_currency_codestringTransaction-level breakdowns table. The currency breakdown_amount is in.

transaction_related_identifiers

ColumnTypeDescription
transaction_idstringTransaction identifiers table. The transaction this identifier belongs to.
posted_datetimestamp_msTransaction identifiers table. The transaction's posted date, copied down.
related_identifier_namestringTransaction identifiers table. The name of a reference Amazon attached to the whole transaction. Amazon's transaction-level enum is ORDER_ID, SHIPMENT_ID, FINANCIAL_EVENT_GROUP_ID, REFUND_ID, INVOICE_ID, DISBURSEMENT_ID, TRANSFER_ID, DEFERRED_TRANSACTION_ID, RELEASE_TRANSACTION_ID and SETTLEMENT_ID; only ORDER_ID and FINANCIAL_EVENT_GROUP_ID can be filtered on in the request. Which of them a real file carries is not confirmed from the evidence behind this page.
related_identifier_valuestringTransaction identifiers table. The value of that reference.

Use cases

Getting the real fee on a single order item. Filter the item-level breakdowns to one transaction_id and item_index, then to the leaf you want by breakdown_path — for example Expenses/AmazonFees/Commission — and read breakdown_amount. The item row beside it gives the asin, sku and quantity_shipped the fee applied to.

Knowing how much cash Amazon is holding. Transactions with transaction_status of DEFERRED are money that has posted but not released. Sum their total_amount grouped by total_amount_currency_code, and use maturity_date to see when each is due and deferral_reason to see why it is held.

Building a per-SKU net from the ledger. The items table carries sku and asin on every item, and the item-level breakdowns split each item's amount into sales and fees. Joining the two on transaction_id and item_index, and keeping one level of the tree, gives net proceeds per SKU per posted day without a settlement file.

Keeping marketplaces apart in a multi-country account. One call is one marketplace and every row carries reported_marketplace_id, so a European or North American account can be reported per country from this feed without the currency guesswork the account-level event groups require.

Tracing a transaction back to its source record. The identifier tables hold the name/value references Amazon attaches at transaction and item level, related_identifier_name beside related_identifier_value. Amazon's reference enumerates the transaction-level names as ORDER_ID, SHIPMENT_ID, FINANCIAL_EVENT_GROUP_ID, REFUND_ID, INVOICE_ID, DISBURSEMENT_ID, TRANSFER_ID, DEFERRED_TRANSACTION_ID, RELEASE_TRANSACTION_ID and SETTLEMENT_ID, and gives items a separate, shorter list — ORDER_ADJUSTMENT_ITEM_ID, COUPON_ID, REMOVAL_SHIPMENT_ITEM_ID and TRANSACTION_ID. These are the hooks to match a ledger entry to the order, refund or payout it came from.

Limitations and gotchas

Summing a breakdown table double-counts. Each node's breakdown_amount already includes its children — the Sales node includes ProductCharges, which includes Base. Totalling a breakdown table across all rows counts every leaf once per ancestor. Filter on level, or on a path prefix, before you add anything.

Statuses change in place. RELEASED, DEFERRED and DEFERRED_RELEASED all appear, and a DEFERRED transaction's status changes when its maturity_date passes, on a row you may already have stored. Anything that pulls a posted day once and keeps it will hold stale statuses. Re-pull a rolling window of posted days and overwrite.

Six tables share column names. transaction_id, posted_date, description, total_amount and item_index each appear in several tables. A join on transaction_id alone fans out across items; anything below an item needs item_index as well.

Money is not converted. Every amount carries its own currency code, and nothing is converted. Group on the currency code before summing.

Address data is absent. The address context Amazon attaches arrives with no fields at all unless the call carries a restricted data token, so it is deliberately not part of this report.

Old authorizations get 403. A seller who authorized your app before listTransactions was part of its grant is denied on it until they re-authorize, even when other Finances calls succeed for them. It looks like a permissions bug in your code and is not one.

Some vocabularies are open-ended, and some are just unpublished. breakdown_type Amazon states outright is "an open-ended string" with no published list of values, added to as needed — so Sales, ProductCharges and Base are examples, and anything reading a breakdown table has to tolerate a type it has never seen. The rest is silence rather than openness: the reference settles the three status values and both identifier-name lists, but documents transaction_type with a single possible value, Shipment, which plainly is not the whole set, and gives account_type and fulfillment_network no value list at all. Amazon also publishes no earliest date for the operation — only the 180-day cap on one request's span — so how far back it answers is unknown until a real backfill is run.

FAQ

What is the difference between listTransactions and listFinancialEvents?

listFinancialEvents is the v0 Finances API operation; listTransactions is the 2024-06-19 version, and this report is built on it. Access to each is granted separately, so a credential can work on one and be refused on the other.

Why do transaction_id and posted_date appear six times in the field list?

Because the report lands as six tables: the transactions themselves, their items, the item-level and transaction-level breakdown trees, and the identifier lists at both levels. Every child row carries transaction_id and posted_date to join back and to be re-stated by posted day, so the columns repeat once per table. The field reference is grouped under a heading per table, so each repeat sits with the table it belongs to.

What do RELEASED, DEFERRED and DEFERRED_RELEASED mean?

All three appear in production and all three are enumerated in Amazon's reference. DEFERRED money has posted but Amazon is holding it, with a deferral reason such as DD7 and a maturity date; RELEASED money is not held. DEFERRED_RELEASED is a transaction that was deferred in the past and is now released — Amazon states that a deferred transaction's status is updated to DEFERRED_RELEASED when the transaction is released. The change happens in place, on the same transaction id.

Why does adding up the breakdown amounts give me more than the transaction total?

Because the breakdowns are a tree and a parent's amount already includes its children. Sales includes ProductCharges, which includes Base, so summing every row counts each leaf several times. Pick one level, or one path, and sum only that.

Does one response cover all my marketplaces?

No. The marketplaceId parameter is honoured, so a response is one marketplace and each row carries the marketplace Amazon wrote in the document. Make one call per marketplace to cover an account.

Why does listTransactions return 403 for one seller and work for another?

Because access follows the vintage of the authorization. A refresh token granted before the operation was part of your app's grant is refused on it even though other Finances calls work for the same seller. The seller has to re-authorize your app; nothing in the request is wrong.

Sources

Every researched claim on this page, and the Amazon or Walmart page it came from.

  • marketplaces — developer-docs.amazon.com/finances-api-v2024-06-19-use-case-guide — the Finances API guide's Roles table gives listTransactions a Regions value of "NA, EU, FE", Amazon's three SP-API regions, with no per-store exception. The v0 operations listed beside it are qualified "NA, EU, FE except where noted"; the v2024-06-19 operations are not, so the operation is published for every store a seller sells in.
  • latency — developer-docs.amazon.com/finances-api-v2024-06-19-reference — the listTransactions description states "Financial events might not include orders from the last 48 hours", and both postedAfter and postedBefore must be "more than two minutes before the time of the request".
  • history_window — developer-docs.amazon.com/finances-api-v2024-06-19-reference — postedBefore states "If PostedAfter and PostedBefore are more than 180 days apart, the response is empty". That caps one request's span. Amazon publishes no earliest date, retention period or archive statement for the operation.
  • how-to-get-it (request parameters) — developer-docs.amazon.com/finances-api-v2024-06-19-reference — GET /finances/2024-06-19/transactions takes postedAfter, postedBefore, marketplaceId, transactionStatus, relatedIdentifierName, relatedIdentifierValue and nextToken. All are marked optional, but postedAfter "is required if you do not specify a related identifier", and nextToken is to be followed "until nextToken is null" because "this operation can return empty pages".
  • fields (transaction_status) — developer-docs.amazon.com/finances-api-v2024-06-19-reference — the reference enumerates the same three values the evidence observed, DEFERRED, RELEASED and DEFERRED_RELEASED, and states "The status of a deferred transaction is updated to DEFERRED_RELEASED when the transaction is released".
  • fields (related_identifier_name) — developer-docs.amazon.com/finances-api-v2024-06-19-reference — the RelatedIdentifierName enum is ORDER_ID, SHIPMENT_ID, FINANCIAL_EVENT_GROUP_ID, REFUND_ID, INVOICE_ID, DISBURSEMENT_ID, TRANSFER_ID, DEFERRED_TRANSACTION_ID, RELEASE_TRANSACTION_ID and SETTLEMENT_ID. Items carry a separate ItemRelatedIdentifierName enum: ORDER_ADJUSTMENT_ITEM_ID, COUPON_ID, REMOVAL_SHIPMENT_ITEM_ID and TRANSACTION_ID. Only ORDER_ID and FINANCIAL_EVENT_GROUP_ID can be filtered on.
  • fields (transaction_type) — developer-docs.amazon.com/finances-api-v2024-06-19-reference — the Transaction schema documents transactionType as "The type of transaction. Possible value: Shipment" — a single value, not modelled as an enum. Amazon publishes no fuller list, and the same schema's description examples ("Order Payment", "Refund Order") show the field cannot really be one-valued.
  • fields (account_type, fulfillment_network) — developer-docs.amazon.com/finances-api-v2024-06-19-reference — SellingPartnerMetadata.accountType is documented only as "The type of account in the transaction" and ProductContext.fulfillmentNetwork only as "The fulfillment network of the item", both plain strings with no possible-value list, and neither can be filtered on in the request. The Finances API guide and both v2024-06-19 use-case guides publish no list either, so these two vocabularies stay unconfirmed until a real file is read.
  • fields (breakdown_type) — developer-docs.amazon.com/get-latest-transactions — Amazon states that breakdownType "is an open-ended string; Amazon does not publish a closed list of values, and new values are added as needed", and names CSBAFee, MPFRegulatoryFee, MarketplaceFacilitatorRegulatoryFee-Principal and OurPriceRegulatoryFee as common ones. The Sales / ProductCharges / Base values the evidence observed are therefore examples, not an enum.
  • fields (item_index) — developer-docs.amazon.com/finances-api-v2024-06-19-reference — Amazon's Item schema carries description, relatedIdentifiers, totalAmount, breakdowns and contexts, and no index of its own. item_index is this report's position within the items array rather than an Amazon field, so whether it starts at 0 or 1 is a property of the pull and not something Amazon publishes.
  • fields (amount sign) — developer-docs.amazon.com/finances-api-v2024-06-19-reference — every money value is a Currency whose currencyAmount is a BigDecimal, defined as "A signed decimal number", so a negative amount is possible. Amazon does not say which transactions or breakdowns carry one, so the sample shows only the positive rows the evidence establishes.
  • history_window (what is not published) — developer-docs.amazon.com/finances-api — the Finances API guide publishes regions, roles, sandbox mode and release notes for listTransactions, and no earliest date, retention period or archive statement. Neither do the two v2024-06-19 use-case guides nor the SP-API documentation index, whose only retention pages are Data Kiosk's. The 180-day cap is on one request's span, not on how far back the operation answers.
  • how-to-get-it (console path) — sell.amazon.com/seller-export-and-delivery — "To view charges for SEND, select Reports, then Payments from the main menu. Then select the Transaction View tab"; and sell.amazon.com/amazon-seller-payments — "hover over Payments in the main menu, then select Payments. This takes you to the Statement View page of the Payments Dashboard". Both pages are Amazon's own and open without a login. Neither states what that tab carries, so it is not evidence that the screen holds the same columns as the operation.