The two contracts
Execution APIs make something happen. When you callPOST on a payment rail — ACH, Wires, Instant Payments, Internal Transfers, Blockchain Payments — or request a Funding, you are instructing Lead to move money. Lead is the actor: it validates the instruction, submits it to a payment network or its core ledger, and owns the outcome. The object’s status is authoritative — it tells you what has actually happened to real money, and only Lead’s systems change it.
Reporting APIs tell Lead something that happened in your systems. For the products your customers hold, you are the ledger of record, not Lead. Your platform decided the underwriting outcome, opened the account, issued the card, posted the fee. Lead is your regulator-facing partner bank, and it needs an accurate, timely picture of that activity for compliance oversight — so you report it, through the Entity, Applications, Accounts, and Cards APIs, and through the daily Balance and Transaction files. Here the object’s status is declarative — it reflects what you told Lead is true in your ledger.
Why the distinction predicts API behavior
Webhooks exist where Lead knows something you don’t. Payment rails emit webhooksach.posted, wire.rejected, instant_payment.counterparty_status_updated, funding.posted) because the state lives on Lead’s side and in the payment networks — Lead is telling you what happened. Reporting objects generally don’t emit webhooks for lifecycle changes, because you made the change; there is nothing Lead knows that you don’t.
“Terminal” means different things. On an execution object, a terminal status describes reality: a returned ACH was returned; that cannot un-happen. On a reporting object, a terminal status describes your report — and reports can be wrong. This is why, for example, a Card reported as closed can be corrected back to active through the API: the correction isn’t reopening a card, it’s fixing an inaccurate report so Lead’s picture matches your ledger. If a rule on a reporting API looks strange, re-read it as “keep Lead’s copy accurate” and it usually makes sense.
Mistakes have different blast radii. A duplicate execution call risks moving money twice — which is why every write endpoint requires an Idempotency-Key, and why you should treat idempotency on payment rails as non-negotiable. A duplicate or erroneous report corrupts Lead’s picture of your ledger — no money moves, but your compliance reporting is now wrong, and correcting it is on you.
Timeliness obligations differ. Execution is on-demand: you call when you want money to move. Reporting is an obligation with a clock: Lead needs your customer activity on a defined cadence whether or not anything interesting happened.

