Network Working Group S. Das Internet-Draft Independent Inventor Intended status: Informational 9 September 2026 Expires: 13 March 2027 A Signed Instruction Is Not Settlement: Finality for Agentic and API Payments draft-das-payment-execution-finality-01 Abstract Payment rails already know how to move money. They do not know whether this generated instruction — this amount, this beneficiary, this rail, this purpose, from this agent or API worker — is the instruction that was authorized to move. A signed ISO 20022 message, an OAuth token on a PSP, a stored mandate, or a pass through 3-D Secure can all be valid while the act is wrong. The signature authenticates a channel. It does not bind a Candidate Act at the settlement sink. That gap is now an agent gap. A model that can call payout.create, a RPA job that submits ACH, or a checkout agent that captures a card will treat tool selection as settlement authority. Fraud used to steal credentials and replay files. It now steals a seat or injects a document and asks the authorized worker to pay a new beneficiary at the old amount, or the old beneficiary at a new amount. This document specifies a payment-side execution-finality profile. An instruction remains a Payment Candidate Act. A Protected Enforcement Domain binds principal, wallet or account, amount, currency, beneficiary, rail, purpose, policy epoch, and intended settlement sink, then commits evidence before scoped non-bearer authority is issued. The sink that would actually post, capture, or release funds verifies that authority against the live instruction and consumes it. A signed instruction is not settlement. Status of This Memo This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet- Drafts is at https://datatracker.ietf.org/drafts/current/. Das Expires 13 March 2027 [Page 1] Internet-Draft Payment Execution Finality September 2026 Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress." This Internet-Draft will expire on 13 March 2027. Copyright Notice Copyright (c) 2026 IETF Trust and the persons identified as the document authors. All rights reserved. This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/ license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License. Table of Contents 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 2. How Payment Abuse Changed . . . . . . . . . . . . . . . . . . 4 2.1. Past: Steal the Instrument . . . . . . . . . . . . . . . 4 2.2. Present: Steal the Session that Can Pay . . . . . . . . . 5 2.3. Future: Compute the Payment, Then Settle It . . . . . . . 5 3. Requirements Language . . . . . . . . . . . . . . . . . . . . 5 4. Problem Space . . . . . . . . . . . . . . . . . . . . . . . . 5 5. Existing Solutions and What They Do Not Bind . . . . . . . . 6 5.1. ISO 20022, SWIFT, ACH, and Instant Rails . . . . . . . . 6 5.2. OAuth, API Keys, and Open-Banking Consents . . . . . . . 6 5.3. 3-D Secure, SCA, and Step-Up . . . . . . . . . . . . . . 6 5.4. Ledgers, Blockchains, and Smart Contracts . . . . . . . . 7 5.5. Mandates, Standing Orders, and Vendor Master Data . . . . 7 5.6. Human Dual Control . . . . . . . . . . . . . . . . . . . 7 5.7. What This Profile Adds . . . . . . . . . . . . . . . . . 7 6. Difference from Traditional Systems . . . . . . . . . . . . . 7 6.1. What a Traditional System Binds . . . . . . . . . . . . . 8 6.2. Substitutions the Traditional Stack Does Not Stop at the Sink . . . . . . . . . . . . . . . . . . . . . . . . . . 9 6.3. What This Profile Adds . . . . . . . . . . . . . . . . . 9 6.4. Contrast . . . . . . . . . . . . . . . . . . . . . . . . 11 7. Industrial Applicability . . . . . . . . . . . . . . . . . . 12 7.1. PSP and Platform Checkout . . . . . . . . . . . . . . . . 12 7.2. Bank Core, ACH, SEPA, and Instant Credit . . . . . . . . 12 7.3. Corporate AP and Treasury Agents . . . . . . . . . . . . 12 Das Expires 13 March 2027 [Page 2] Internet-Draft Payment Execution Finality September 2026 7.4. Claims, Insurance, and Benefit Payout . . . . . . . . . . 12 7.5. Payroll and Marketplace Split . . . . . . . . . . . . . . 12 7.6. CBDC, Stored Value, and On-Us Books . . . . . . . . . . . 12 7.7. Agentic Wallets and MCP Payment Tools . . . . . . . . . . 13 7.8. How a Bank Would Pilot in One Quarter . . . . . . . . . . 13 7.9. How a PSP Would Expose It to Platforms . . . . . . . . . 13 8. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 13 9. Architecture . . . . . . . . . . . . . . . . . . . . . . . . 14 10. End-to-End Workflow . . . . . . . . . . . . . . . . . . . . . 14 11. Settlement Pseudocode . . . . . . . . . . . . . . . . . . . . 16 12. JSON Interoperability Profile . . . . . . . . . . . . . . . . 17 12.1. PaymentCandidateAct Schema . . . . . . . . . . . . . . . 17 12.2. Evidence and Authority . . . . . . . . . . . . . . . . . 20 12.3. Sink Verify Allow and Deny . . . . . . . . . . . . . . . 22 12.4. Complete Allow Transaction . . . . . . . . . . . . . . . 23 13. Load-Bearing Bindings . . . . . . . . . . . . . . . . . . . . 24 14. Practical Feasibility: Latency and Legacy . . . . . . . . . . 24 14.1. Where the Microseconds Go . . . . . . . . . . . . . . . 25 14.2. Hot-Path Envelope . . . . . . . . . . . . . . . . . . . 25 14.3. Coexistence with ISO 20022 and Clearing Files . . . . . 25 14.4. Coexistence with Card Acquirers . . . . . . . . . . . . 26 14.5. Coexistence with Core Banking . . . . . . . . . . . . . 26 14.6. Coexistence with Agent Runtimes . . . . . . . . . . . . 26 14.7. Failure Modes that Legacy Staff Will Recognize . . . . . 26 14.8. Informative Mapping onto ISO 20022 Credit Transfer . . . 26 14.9. Informative Mapping onto Card Capture . . . . . . . . . 27 14.10. What This Profile Does Not Require . . . . . . . . . . . 27 15. Cross-Border, FX, and Split Legs . . . . . . . . . . . . . . 27 16. Dual Control and Threshold Authority . . . . . . . . . . . . 28 17. Threat Model . . . . . . . . . . . . . . . . . . . . . . . . 28 17.1. Trust Boundary and Adversary Capabilities . . . . . . . 28 17.2. Out-of-Scope Threats . . . . . . . . . . . . . . . . . . 30 17.3. Threat-to-Mitigation Mapping . . . . . . . . . . . . . . 30 18. Payment Threat Catalog . . . . . . . . . . . . . . . . . . . 32 19. Additional Worked Denials . . . . . . . . . . . . . . . . . . 33 20. Regulatory and Operational Notes . . . . . . . . . . . . . . 34 21. Failure Codes and Denial Behavior . . . . . . . . . . . . . . 34 22. Combined Agent Tool Call and Payment Act . . . . . . . . . . 35 23. Security Considerations . . . . . . . . . . . . . . . . . . . 36 24. Privacy Considerations . . . . . . . . . . . . . . . . . . . 36 25. Relevance to IETF Working Groups . . . . . . . . . . . . . . 36 26. Implementation Checklist . . . . . . . . . . . . . . . . . . 37 27. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 38 28. Intellectual Property and Licensing . . . . . . . . . . . . . 38 29. Reference Implementation . . . . . . . . . . . . . . . . . . 39 30. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . 41 31. Normative References . . . . . . . . . . . . . . . . . . . . 41 32. Informative References . . . . . . . . . . . . . . . . . . . 41 Das Expires 13 March 2027 [Page 3] Internet-Draft Payment Execution Finality September 2026 Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 42 1. Introduction The payment path, whether a human treasury screen, a batch file, or an agent tool call, is now: policy / model / ERP / agent -> payment instruction {amount, payee, rail} -> signed or tokenized submit -> PSP / core / card / CBDC engine -> funds move This document controls the last arrow. The computer may compute an instruction. The rail may authenticate the sender. Neither fact is authority for this amount to leave this account toward this beneficiary on this rail in this epoch. Section 4 enumerates the failure classes this profile treats as first-class; Section 5 surveys what messaging standards, tokens, step-up authentication, ledgers, mandates, and dual control already bind and what each leaves open; Section 6 states the difference from those traditional channel and class controls and what this profile adds at the settlement sink. The profile uses the two-boundary chain in [I-D.das-6g-finality] and the tool-dispatch objects in [I-D.das-agentic]. It specifies only payment predicates those drafts leave as an enum: amount and currency binding, beneficiary and rail binding, mandate and purpose binding, idempotency as consume-once authority, and coexistence with ISO 20022, ACH, card capture, and instant-payment APIs. 2. How Payment Abuse Changed 2.1. Past: Steal the Instrument Historical payment crime stole the thing that was already money: a card number, a cheque, a batch file, a SWIFT token on a compromised treasury PC. Defense was instrument-centric. Reissue the card. Rotate the MAC. Watch for a file that did not match yesterday's template. The valuable object was a credential or a pre-built instruction the business had already approved as a class. Das Expires 13 March 2027 [Page 4] Internet-Draft Payment Execution Finality September 2026 2.2. Present: Steal the Session that Can Pay Present abuse often leaves the instrument in place. The attacker takes an ERP session, a PSP dashboard cookie, an agent seat with payout.create enabled, or a poisoned invoice PDF that the AP bot is allowed to read. Strong customer authentication and OAuth are up. The worker is allowed to pay. The instruction it emits is not the one the mandate described. Business email compromise already showed the pattern without models: a lawful payer, a new beneficiary string, a valid signature on the channel. Agentic checkout and AP agents industrialize that pattern. Every tool-enabled seat is a treasury clerk that never sleeps and that will treat retrieved text as an instruction. 2.3. Future: Compute the Payment, Then Settle It The coming incident does not need the attacker to format ISO 20022. The model formats it. A reconstructed "we owe this vendor" join from mail plus ERP plus a prompt-injected statement becomes a Candidate Act that looks like ordinary automation. If the settlement engine accepts any authenticated submit from that worker, reconstruction becomes cash. This profile exists so that even a correctly signed, schema-valid, token-bearing instruction remains non-effective until the sink checks the act digest against current authority. Settlement is not a synonym for "the API returned 200." 3. Requirements Language The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here. Failure to establish current payment-finality authority MUST NOT be converted into permission to post, capture, release, or otherwise settle funds. 4. Problem Space A payment instruction is a Candidate Act with a consequence class that is almost never informational. Once the rail posts, reversal is a business process, not a protocol rollback. The failures this profile treats as first-class are: Das Expires 13 March 2027 [Page 5] Internet-Draft Payment Execution Finality September 2026 * Amount substitution after approval of 50.00 as 5,000.00 on the same beneficiary and rail. * Beneficiary substitution after approval of a named payee. * Rail substitution (internal book-transfer authority reused on an external instant rail). * Replay of a consumed instruction under a new idempotency key or on a second PSP. * Mandate or purpose drift (invoice-pay authority used for payroll or cross-border). * Agent or worker substitution (approved bot A, executing bot B). * Destination-account reuse after revocation or beneficiary-risk list update. In each case some upstream control can be green: the OAuth token is live, the ISO message verifies, the mandate exists, the agent is in the allowlist. The missing question is the sink question: may this exact instruction settle now. 5. Existing Solutions and What They Do Not Bind 5.1. ISO 20022, SWIFT, ACH, and Instant Rails Messaging standards authenticate and structure instructions. They bind fields inside a message. They do not, by themselves, consume single-use authority at the posting engine, and they do not stop a second valid message that differs in one load-bearing field after a human or model "approved payments." 5.2. OAuth, API Keys, and Open-Banking Consents Tokens establish that a client may call a payment API. Consent often names an account and a period. Possession of the token is bearer- like with respect to every instruction that token can form. Act digest, beneficiary bind, and consume-once are application additions, not properties of the token. 5.3. 3-D Secure, SCA, and Step-Up Payer authentication answers "is a human present for this merchant session." It does not hash the agent-generated split of amount and payee after the session, and it does not sit in a payout API that never sees a cardholder. Das Expires 13 March 2027 [Page 6] Internet-Draft Payment Execution Finality September 2026 5.4. Ledgers, Blockchains, and Smart Contracts A chain can make a transfer final among participants. It does not decide whether the off-chain agent was authorized to construct that transfer. Posting a stolen-but-valid signed payload is still settlement. External anchoring MUST NOT retroactively authorize an act that was invalid at effectuation time. 5.5. Mandates, Standing Orders, and Vendor Master Data A mandate is a class approval. Vendor master data is a directory. Neither is an act-specific, amount-bound, nonce-bound capability at the sink. An agent that is allowed to "pay approved vendors" can still pick the wrong vendor row or the wrong invoice total. 5.6. Human Dual Control Maker-checker is the correct industrial instinct. It is slow, and agents exist to skip the queue. This profile does not delete dual control. It makes the checker a predicate that can be a human share, a policy share, or a threshold of both, and it still requires the sink consume the resulting authority. 5.7. What This Profile Adds * the instruction remains a Payment Candidate Act after the model, ERP, or file emitter produces it; * amount, currency, beneficiary, rail, and purpose are in the digest; * authority is non-bearer, sink-bound, epoch-bound, and consumed; * idempotency is consume-once of that digest, not a client-supplied string the attacker can refresh; * legacy rails remain the transport; the sink check is the gate; * hot-path envelopes exist so instant payments are not forced through a remote ledger round trip. 6. Difference from Traditional Systems Traditional payment systems authenticate who may submit and that the message is well-formed. This profile binds whether this exact instruction may change a balance now. That is the difference. Das Expires 13 March 2027 [Page 7] Internet-Draft Payment Execution Finality September 2026 6.1. What a Traditional System Binds A normal path is: policy / ERP / agent -> instruction {amount, payee, rail} -> signed or tokenized submit -> PSP / core / card / CBDC -> funds move Controls on that path answer a channel or class question. They do not answer the sink question. * ISO 20022, SWIFT, ACH, and instant messages bind structure and sender authentication. They do not consume single-use authority at the posting engine for this amount, beneficiary, and rail. * OAuth, API keys, and open-banking consents bind that a client may call a payment API for an account and period. Possession of the token is bearer-like for every instruction that token can form. * 3-D Secure and SCA bind that a human was present for a merchant session. They do not hash an agent-built split of amount and payee after the session, and they do not sit on a payout API that never sees a cardholder. * A mandate, standing order, or vendor master record is a class approval or a directory. It is not an act-specific, amount-bound, nonce-bound capability at the sink. An agent allowed to "pay approved vendors" can still pick the wrong vendor row or the wrong invoice total. * A client idempotency key binds that a string was seen. An attacker can keep the key and change the body, or mint a new key for the same act on a second PSP. * A ledger or chain can make a transfer final among participants. It does not decide whether the off-chain agent was authorized to construct that transfer. Posting a stolen-but-valid signed payload is still settlement. * Maker-checker binds two humans to a screen. An API can still post without those shares. Agents exist to skip the queue. Das Expires 13 March 2027 [Page 8] Internet-Draft Payment Execution Finality September 2026 The traditional failure mode is: channel valid, act wrong. Business email compromise already showed the pattern without models: a lawful payer, a new beneficiary string, a valid signature on the channel. Agentic checkout and AP workers industrialize that pattern. Fraud used to steal the instrument. It now steals the session that can pay. 6.2. Substitutions the Traditional Stack Does Not Stop at the Sink * Amount substitution after approval of 50.00 as 5,000.00 on the same beneficiary and rail. * Beneficiary substitution after approval of a named payee. * Rail substitution (internal book-transfer authority reused on an external instant rail). * Replay of a consumed instruction under a new idempotency key or on a second PSP. * Mandate or purpose drift (invoice-pay authority used for payroll or cross-border). * Agent or worker substitution (approved bot A, executing bot B). * Destination-account reuse after revocation or beneficiary-risk list update. In each case some upstream control can be green: the OAuth token is live, the ISO message verifies, the mandate exists, the agent is in the allowlist. The missing question is whether this exact instruction may settle now. 6.3. What This Profile Adds The profile inserts a hold state and a second check immediately before balance change. Das Expires 13 March 2027 [Page 9] Internet-Draft Payment Execution Finality September 2026 instruction emitted | v PAYMENT CANDIDATE ACT (NON_EFFECTIVE) | v Protected Enforcement Domain binds payer, account, amount, CCY, beneficiary, rail, purpose, mandate/SCA inputs, epochs, sink | v evidence committed + scoped authority | v SETTLEMENT SINK PASS -> post once, consume authority FAIL -> no balance change The following properties are not protocol properties of ISO 20022, OAuth, 3-D Secure, or mandates. They are required by this profile: 1. The generated instruction is a Payment Candidate Act. It is not settlement. Status starts NON_EFFECTIVE. 2. An instruction digest covers canonical amount, currency, beneficiary, rail, account references, purpose, and other load- bearing fields. Changing any of them MUST change the digest. Authority for 150.00 EUR / vendor-441 / SEPA_INSTANT / digest D1 MUST NOT authorize 1,500.00, USD, vendor-442, ACH, or digest D2. 3. The Protected Enforcement Domain validates predicates, commits Protected Validation Evidence, then issues scoped Payment Finality Authority. A PED that returns ALLOW=true without a stored evidence_id has issued a boolean, not this profile. Authority is non-bearer, sink-bound, epoch-bound, and single-use. 4. The Settlement Sink is the component that would actually post, capture, or release. It verifies the live instruction against that authority and consumes the authority atomically with the post. post_to_rail() is unreachable when any check fails. A 200 from an inner HTTP client after a failed check is non-conforming. Timeout MUST NOT post. 5. Idempotency is consume-once of the instruction digest and authority_id, not a client-supplied string the attacker can refresh. Das Expires 13 March 2027 [Page 10] Internet-Draft Payment Execution Finality September 2026 6. A mandate remains a class-level input to PED validation. It MUST NOT by itself be settlement authority for a particular act. 7. A hot-path envelope MAY cache predicates (payer, rail, currency, ceiling, beneficiary set, epochs, sink). It MUST still compare the digest and sink identifier and MUST still consume. Cold path MUST NOT be skipped by timeout. 8. When the instruction is born as a model tool call, both an agent or tool-dispatch check and a payment-sink check are required. If only the dispatcher checks, a handler bug can still post. If only the posting sink checks, a raw HTTP call to the PSP can still fire. 9. Legacy rails remain the transport. ISO 20022, ACH, cards, and instant APIs are not replaced. The admission gate sits immediately before the component that marks the instruction released to clearing or capture. 6.4. Contrast Traditional controls bind the channel and the class of payer. This profile binds the candidate act at the settlement sink: amount, currency, beneficiary, rail, purpose, epoch, and consume-once authority. * Traditional: a signature, token, mandate, or 3-D Secure result means the worker may pay. This profile: those results are inputs. Only consumed, sink-bound, digest-matched authority means this act may settle. * Traditional: settlement is treated as equivalent to "the API returned 200." This profile: settlement is atomic consume plus post at the sink. * Traditional: defense is instrument-centric and channel-centric. This profile: defense is act-centric at effectuation time. * Traditional: replay and field substitution are application defects. This profile: they are protocol denies (EF_INSTRUCTION_SUBSTITUTION, EF_SINK_MISMATCH, EF_AUTHORITY_ALREADY_USED, and related codes). Das Expires 13 March 2027 [Page 11] Internet-Draft Payment Execution Finality September 2026 This document does not specify a new rail, a blockchain on the posting path, or a requirement that the model detect fraud. It does not claim to replace PSD2, SCA, PCI DSS, AML, or sanctions screening. Those systems produce inputs. A clean screen of vendor-441 does not authorize a post to attacker-992. A signed instruction is not settlement. 7. Industrial Applicability 7.1. PSP and Platform Checkout A commerce agent or checkout API already holds a capture token. The sink is the capture or refund call. Authority issued for capture 40.00 at merchant M MUST fail for 4,000.00 or merchant M2. 7.2. Bank Core, ACH, SEPA, and Instant Credit The sink is the posting service that would debit the payer and emit the clearing message. ISO 20022 remains the payload. The Finality Sink verifies the Payment Candidate Act before the message is considered released to clearing. 7.3. Corporate AP and Treasury Agents ERP and TMS tools already batch pay. An agent that reads invoices is the present-theft seat. The RAO-like purpose bind is invoice-pay. Payroll and tax rails are different consequence scopes. 7.4. Claims, Insurance, and Benefit Payout A claims agent proposing a payee from a repair invoice is a beneficiary-substitution surface. Settlement authority MUST bind payee account digest, not only claim-id. 7.5. Payroll and Marketplace Split Many small legs share one worker token. Each leg is its own Candidate Act. A digest for worker A / 1200.00 MUST not authorize worker B / 1200.00. 7.6. CBDC, Stored Value, and On-Us Books Whether the engine is a CBDC participant, an e-money ledger, or an internal book, the sink is the component that would change balances. This document does not specify a CBDC protocol. It specifies that balance change is effectuation. Das Expires 13 March 2027 [Page 12] Internet-Draft Payment Execution Finality September 2026 7.7. Agentic Wallets and MCP Payment Tools payout.create on an MCP server is a tool call under [I-D.das-agentic] and a payment act under this profile. Both checks are required when the tool would move value. Discovery of the server is not mandate authority. 7.8. How a Bank Would Pilot in One Quarter Pick one outbound API used by a new AP agent or by a single PSP payout route. Deploy the consume table next to the existing idempotency store. Issue authority only for that route's currency and ceiling. Leave the green-screen path on maker-checker. Measure posts without authority_id, digest mismatches, replay attempts, and added latency at p50 and p99. Expand rail by rail. This is a pilot, not a core replacement. 7.9. How a PSP Would Expose It to Platforms Offer an optional header carrying the authority object and the instruction digest the platform computed. If the header is absent, today's token behavior remains for legacy platforms. If the header is present, the PSP becomes a cooperating sink and rejects mismatch. Platforms that run agents SHOULD move to header-present. That is how the profile meets the industry without a flag day. 8. Terminology Payment Candidate Act A generated or selected instruction that would debit, credit, capture, refund, release, or otherwise change a balance, but has not been permitted to do so. Settlement Sink The component that would actually post the instruction to a ledger, clearing file, card acquirer, CBDC engine, or stored-value book. If that component can be skipped, it is not the sink. Instruction digest A hash over the canonical amount, currency, beneficiary, rail, account references, purpose, and other load-bearing fields. Changing any of them MUST change the digest. Mandate A class-level approval (vendor, merchant, account, ceiling). A mandate MAY be an input to PED validation. It MUST NOT by itself be settlement authority for a particular act. Das Expires 13 March 2027 [Page 13] Internet-Draft Payment Execution Finality September 2026 9. Architecture ERP / agent / checkout emits instruction | v PAYMENT CANDIDATE ACT | v Non-Effective State | v Protected Enforcement Domain payer, account, amount, CCY beneficiary, rail, purpose mandate / SCA inputs policy and revocation epochs intended settlement sink | v evidence + scoped authority | v SETTLEMENT SINK | +-- PASS -> post once, consume authority | `-- FAIL -> no balance change Figure 1: Settlement-time finality 10. End-to-End Workflow 1. Instruction constructed by agent, API, file, or human UI. Status NON_EFFECTIVE. 2. Canonicalize load-bearing fields. Compute instruction digest. 3. Build PaymentCandidateAct including payer, accounts, amount, currency, beneficiary, rail, purpose, freshness, sink, epochs. 4. PED validates predicates, including mandate envelope and risk lists where required. 5. On fail: deny; lock or quarantine the affected nonce, quota, or protected state to prevent replay, rollback, stale retry, substitution, or cross-sink reuse of the denied Candidate Act; commit denial evidence (a denial LAVR or equivalent protected enforcement record) as evidence of non-completion. Do not post. Das Expires 13 March 2027 [Page 14] Internet-Draft Payment Execution Finality September 2026 6. On pass: update and consume the relevant protected state (nonce, quota, budget, session, revocation, or monotonic counter) so that a concurrent or later validation pass cannot reuse the same protected state before evidence is committed. 7. Commit Protected Validation Evidence, referencing the protected- state transition performed in the previous step. 8. Issue scoped Payment Finality Authority bound to the digest, sink, epochs, and single-use flag. 9. Transport the instruction on the legacy rail (ISO, ACH, card, HTTP) together with the authority reference or an attached object. 10. Settlement Sink builds or reconstructs a sink-side descriptor of the live instruction and local effectuation boundary. 11. Settlement Sink verifies the scoped authority against that sink- side descriptor, the digest, sink, boundary, nonce, policy epoch, evidence reference, and scope, immediately before post. 12. Atomic consume + post, or fail-closed deny with no post if sink verification fails. 13. Record sink-side settlement evidence. Do not treat rail ACK as a substitute for consume. Stage notes that implementations get wrong: Canonicalization MUST include amount scale. 150, 150.0, and 150.00 are the same act only if the canonical form says so. Implementations SHOULD normalize to a fixed scale per currency (two for EUR, zero for JPY unless policy says otherwise) before hashing. expires_at on the Candidate Act is not the rail cut-off time. It is the authority TTL. A SEPA instant that settles in two seconds still uses a short TTL so a queued instruction cannot sit overnight and post after a risk-list change. Evidence commitment is constitutive. A PED that returns ALLOW=true without a stored evidence_id has issued a boolean, not this profile. The sink MUST be able to resolve the evidence or MUST treat the authority as invalid. Das Expires 13 March 2027 [Page 15] Internet-Draft Payment Execution Finality September 2026 Consume and post SHOULD be one database transaction or an equivalent compare-and-swap. Consume-then- crash-then-repost without a durable consume bit is a replay window. Post-then-crash-then-fail-to- consume is a double-post window on retry. The safe pattern is: write consumed+pending, post, write posted; retries read the row. 11. Settlement Pseudocode function ON_PAYMENT_INSTRUCTION(ins, ctx): act = PaymentCandidateAct{ candidate_act_id: fresh_id(), act_type: map_rail(ins.rail), payer: ctx.payer, amount: ins.amount, currency: ins.currency, beneficiary: canonical_payee(ins), rail: ins.rail, purpose: ins.purpose, instruction_digest: HASH(canonicalize(ins)), policy_state: current_epochs(), freshness: {nonce: fresh_nonce()}, finality_sink: ctx.settlement_sink, expires_at: now() + short_ttl } HOLD_NON_EFFECTIVE(act) return PED_VALIDATE(act, ins) function PED_VALIDATE(act, ins): if malformed(act) or amount <= 0: return DENY(MALFORMED_ACT) if not fresh(act.freshness.nonce): return DENY(REPLAY_OR_STALE) if act.policy_state != current_epochs(): return DENY(EPOCH_MISMATCH) if not mandate_covers(act): return DENY(MANDATE_MISS) if beneficiary_blocked(act.beneficiary): return DENY(PAYEE_BLOCKED) if act.amount > hot_envelope_ceiling(act) and not cold_path_approved(act): return ESCALATE_OR_DENY(AMOUNT_ENVELOPE) evidence = COMMIT_PROTECTED_EVIDENCE(act) authority = ISSUE_SCOPED_AUTHORITY(act, evidence) return ALLOW(authority) function SETTLEMENT_SINK_POST(act, authority, live): live_digest = HASH(canonicalize(live)) if authority missing or integrity_fail(authority): Das Expires 13 March 2027 [Page 16] Internet-Draft Payment Execution Finality September 2026 return DENY(NO_OR_INVALID_AUTHORITY) if live_digest != act.instruction_digest: return DENY(INSTRUCTION_SUBSTITUTION) if authority.sink_id != THIS_SINK: return DENY(SINK_MISMATCH) if live.amount != authority.amount or live.currency != authority.currency or canonical_payee(live) != authority.beneficiary: return DENY(FIELD_MISMATCH) if expired(authority) or consumed(authority): return DENY(STALE_OR_USED) ATOMICALLY: consume(authority) advance_replay_state(act.freshness.nonce) result = post_to_rail(live) record_sink_evidence(act, authority, result) return result post_to_rail() is unreachable when any check fails. A 200 from an inner HTTP client after a failed check is non-conforming. 12. JSON Interoperability Profile Objects are UTF-8 JSON. additionalProperties MUST be treated as reject for load-bearing objects. Amounts SHOULD be decimal strings to avoid binary float drift. Canonicalization for the digest SHOULD be JCS or an implementation-defined stable form declared in the digest object. 12.1. PaymentCandidateAct Schema { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "urn:ietf:params:json-schema:payment-finality:candidate-act:1", "title": "PaymentCandidateAct", "type": "object", "additionalProperties": false, "required": [ "version", "object_type", "candidate_act_id", "act_type", "created_at", "expires_at", "payer", "amount", "currency", "beneficiary", "rail", "purpose", "instruction_digest", "policy_state", "freshness", "finality_sink" ], "properties": { "version": { "type": "string", "const": "1.0" }, "object_type": { "type": "string", "const": "payment_candidate_act" Das Expires 13 March 2027 [Page 17] Internet-Draft Payment Execution Finality September 2026 }, "candidate_act_id": { "type": "string", "minLength": 16, "maxLength": 128 }, "act_type": { "type": "string", "enum": [ "CREDIT_TRANSFER", "DIRECT_DEBIT", "CARD_CAPTURE", "CARD_REFUND", "INSTANT_CREDIT", "BOOK_TRANSFER", "STORED_VALUE", "CBDC_TRANSFER", "PAYOUT", "FX_PAYOUT", "OTHER" ] }, "created_at": { "type": "string", "format": "date-time" }, "expires_at": { "type": "string", "format": "date-time" }, "payer": { "type": "object", "required": ["payer_id", "account_ref"], "properties": { "payer_id": { "type": "string" }, "payer_type": { "type": "string", "enum": ["person", "merchant", "enterprise", "agent", "service"] }, "account_ref": { "type": "string" }, "agent_id": { "type": "string" }, "workload_id": { "type": "string" } } }, "amount": { "type": "string", "pattern": "^[0-9]+(\\.[0-9]{1,18})?$" }, "currency": { "type": "string", "minLength": 3, "maxLength": 8 }, "beneficiary": { "type": "object", "required": ["beneficiary_id"], "properties": { "beneficiary_id": { "type": "string" }, "account_ref": { "type": "string" }, "account_digest": { "type": "string" }, "name_digest": { "type": "string" }, Das Expires 13 March 2027 [Page 18] Internet-Draft Payment Execution Finality September 2026 "jurisdiction": { "type": "string" } } }, "rail": { "type": "object", "required": ["rail_id"], "properties": { "rail_id": { "type": "string", "enum": [ "ISO20022", "ACH", "SEPA", "SEPA_INSTANT", "FEDNOW", "CARD", "SWIFT", "ON_US", "CBDC", "STORED_VALUE", "OTHER" ] }, "scheme": { "type": "string" }, "clearing_system": { "type": "string" } } }, "purpose": { "type": "object", "required": ["purpose_id"], "properties": { "purpose_id": { "type": "string" }, "declared_purpose": { "type": "string" }, "invoice_ref": { "type": "string" }, "mandate_id": { "type": "string" }, "end_to_end_id": { "type": "string" } } }, "instruction_digest": { "type": "object", "required": ["algorithm", "value", "canonicalization"], "properties": { "algorithm": { "type": "string", "enum": ["SHA-256", "SHA-384", "SHA-512"] }, "value": { "type": "string" }, "canonicalization": { "type": "string", "enum": ["JCS", "implementation-defined"] } } }, "policy_state": { "type": "object", "required": ["policy_epoch", "revocation_epoch"], Das Expires 13 March 2027 [Page 19] Internet-Draft Payment Execution Finality September 2026 "properties": { "policy_epoch": { "type": "integer", "minimum": 0 }, "revocation_epoch": { "type": "integer", "minimum": 0 }, "risk_list_epoch": { "type": "integer", "minimum": 0 } } }, "freshness": { "type": "object", "required": ["nonce"], "properties": { "nonce": { "type": "string", "minLength": 16 }, "sequence": { "type": "integer", "minimum": 0 }, "idempotency_key": { "type": "string" } } }, "finality_sink": { "type": "object", "required": ["sink_id", "sink_type"], "properties": { "sink_id": { "type": "string" }, "sink_type": { "type": "string", "enum": [ "CORE_POST", "PSP_CAPTURE", "ACH_RELEASE", "INSTANT_RELEASE", "CARD_ACQUIRER", "CBDC_ENGINE", "LEDGER_POST", "OTHER" ] } } } } } 12.2. Evidence and Authority Das Expires 13 March 2027 [Page 20] Internet-Draft Payment Execution Finality September 2026 { "version": "1.0", "object_type": "protected_validation_evidence", "evidence_id": "pve-pay-01", "candidate_act_id": "act-pay-7f39", "decision": "ALLOW", "validated_predicates": { "mandate_covers": true, "amount_in_envelope": true, "beneficiary_not_blocked": true, "rail_permitted": true, "purpose_valid": true, "epoch_valid": true, "freshness_valid": true, "sink_binding_valid": true }, "issued_at": "2026-08-27T02:15:01Z", "protector": { "type": "HSM_SIGNATURE", "key_id": "ped-pay-3", "signature": "base64url-signature" } } Das Expires 13 March 2027 [Page 21] Internet-Draft Payment Execution Finality September 2026 { "version": "1.0", "object_type": "payment_finality_authority", "authority_id": "pfa-88c0", "candidate_act_id": "act-pay-7f39", "evidence_id": "pve-pay-01", "scope": { "act_type": "INSTANT_CREDIT", "amount": "150.00", "currency": "EUR", "beneficiary_id": "vendor-441", "rail_id": "SEPA_INSTANT" }, "binding": { "instruction_digest": { "algorithm": "SHA-256", "value": "base64url-ins-digest" }, "nonce": "A81D4F42B779CC21", "policy_epoch": 12, "revocation_epoch": 4, "finality_sink_id": "core-post-eu-1" }, "lifetime": { "issued_at": "2026-08-27T02:15:01Z", "expires_at": "2026-08-27T02:15:11Z", "single_use": true } } 12.3. Sink Verify Allow and Deny Das Expires 13 March 2027 [Page 22] Internet-Draft Payment Execution Finality September 2026 { "operation": "SettlementSinkVerify", "request_id": "stl-req-09", "decision": "ALLOW", "verification": { "authority_signature": "VALID", "instruction_digest": "MATCH", "amount": "MATCH", "beneficiary": "MATCH", "rail": "MATCH", "nonce": "FRESH", "epochs": "CURRENT", "consumption_state": "UNUSED", "sink_binding": "MATCH" }, "consumption": { "authority_id": "pfa-88c0", "status": "CONSUMED" }, "effectuation": { "permitted": true, "settlement_ref": "e2e-441-19" } } { "operation": "SettlementSinkVerify", "request_id": "stl-req-10", "decision": "DENY", "error": { "code": "EF_INSTRUCTION_SUBSTITUTION", "message": "Live amount does not match authorized digest.", "retryable": false }, "effectuation": { "permitted": false } } 12.4. Complete Allow Transaction Das Expires 13 March 2027 [Page 23] Internet-Draft Payment Execution Finality September 2026 { "step_1_instruction": { "act_type": "INSTANT_CREDIT", "amount": "150.00", "currency": "EUR", "beneficiary_id": "vendor-441", "rail_id": "SEPA_INSTANT", "purpose_id": "invoice-pay", "status": "NON_EFFECTIVE" }, "step_2_digest": { "algorithm": "SHA-256", "value": "base64url-ins-digest" }, "step_3_authority": { "authority_id": "pfa-88c0", "single_use": true, "expires_at": "2026-08-27T02:15:11Z" }, "step_4_sink": { "decision": "ALLOW", "authority_consumed": true }, "step_5_effect": "SEPA instant posted once for digest-bound 150.00 EUR" } 13. Load-Bearing Bindings Authority for amount 150.00 / EUR / vendor-441 / SEPA_INSTANT / digest D1 MUST NOT authorize 1,500.00, USD, vendor-442, ACH, or digest D2. DISPLAY-equivalent mistakes in this profile are amount substitution, beneficiary substitution, and rail substitution. Book-transfer authority MUST NOT automatically authorize an external instant rail. Refund authority MUST NOT automatically authorize a new capture. Authority created under revocation epoch N MUST fail at N+1, including after a beneficiary-risk-list update. 14. Practical Feasibility: Latency and Legacy A profile that cannot sit on a 200 ms instant-payment path, or that demands a greenfield ledger, will not be deployed. This section states how the checks fit existing engines. Das Expires 13 March 2027 [Page 24] Internet-Draft Payment Execution Finality September 2026 14.1. Where the Microseconds Go The load-bearing work at the sink is: parse live fields, hash the canonical instruction, verify a signature or MAC on the authority, compare digest and sink id, test consume-once, post. That is the same order of cost as an existing idempotency-key table plus an HSM MAC verify. Representative targets, not protocol constants: * hot path, local policy and local consume table: about 1-10 ms added to an already-authorized envelope; * card or PSP capture on the same host as the enforcer: similar; * cold path with fresh beneficiary risk, new country, or amount above envelope: tens to hundreds of ms plus any human share; * external transparency log or chain anchor: asynchronous after post, never on the enable path. The architectural split is the same as in [I-D.das-6g-finality]: hot path still verifies at the sink; cold path must not be skipped by timeout. 14.2. Hot-Path Envelope A cold evaluation MAY establish a bounded envelope: payer account A, rail SEPA_INSTANT, currency EUR, max amount 500.00, beneficiary set S, purpose invoice-pay, epochs (P,R), sink core-post-eu-1, valid- until T. Later instructions inside that envelope MAY use local validation. Any change of beneficiary, rail, currency, ceiling, or epoch MUST escalate. "Hot" means cached predicates. It does not mean skip consume or skip digest compare. 14.3. Coexistence with ISO 20022 and Clearing Files The Finality Sink SHOULD sit immediately before the component that marks an instruction released to clearing. The ISO message can carry an end-to-end id that equals or hashes to candidate_act_id. The authority object MAY travel in an accompanying API header, a private supplementary data block, or a side channel keyed by that id. Clearing houses that cannot parse the object still receive only messages the sink has already admitted. Batch ACH or payroll files are N Candidate Acts, not one. A file- level signature is channel authentication. Each row still needs a digest and consume, or a tightly bound envelope that lists row digests. Das Expires 13 March 2027 [Page 25] Internet-Draft Payment Execution Finality September 2026 14.4. Coexistence with Card Acquirers Capture and refund APIs already have idempotency keys. This profile treats that key as insufficient if the body can change under the same key, and as insufficient if a second acquirer accepts the same logical act. The sink is the acquirer-facing submitter in the merchant or platform, or the acquirer itself where the acquirer agrees to verify the authority object. 14.5. Coexistence with Core Banking Cores already implement posting, holds, and double-entry. The feasible placement is a pre-post adapter: no new general ledger, no new rail. The consume table can be a compare-and-swap row next to the existing idempotency store. If the core cannot host the adapter, the adapter MUST be in-line so that bypassing it makes posting impossible. 14.6. Coexistence with Agent Runtimes For MCP and function-calling agents the payment tool handler MUST call SETTLEMENT_SINK_POST before any PSP SDK. A local Python or TypeScript enforcer that only checks allowlists is not this profile unless it consumes digest-bound authority. Combining this document with [I-D.das-agentic] means: build AgentCandidateAct for the tool call and PaymentCandidateAct for the value move, or one object that satisfies both required sets. 14.7. Failure Modes that Legacy Staff Will Recognize Timeout toward the PED is hold-or-deny, the same instinct as "do not auto-approve an SCA fail." Duplicate file submission is consume- once, the same instinct as ACH duplicate detection, but keyed by digest not by filename. Beneficiary change after checker approval is field mismatch, the same instinct as maker-checker, automated. A pilot that only wraps the payout API used by the new agent, and leaves the green-screen treasury path on dual control, is a conforming incremental deployment. Alternate-path closure says the green-screen path MUST eventually grow the same consume semantics if it can emit the same rail message. It does not require a big-bang cutover on day one. 14.8. Informative Mapping onto ISO 20022 Credit Transfer The following mapping is informative and does not modify ISO 20022. It exists so a payments engineer can see that this profile is an admission gate, not a competing message. Das Expires 13 March 2027 [Page 26] Internet-Draft Payment Execution Finality September 2026 * candidate_act_id — may populate or hash into EndToEndId / InstructionId. * amount + currency — InstdAmt / EqvtAmt and Ccy. * beneficiary account_ref or account_digest — CdtrAcct.Id (digest preferred in authority objects that leave the host). * purpose.invoice_ref — RmtInf or Purp. * rail_id SEPA / SWIFT / FedNow — clearing channel already selected by the core. * authority_id — private supplementary data or an API header on the submit that precedes clearing release. If InstdAmt changes after authority issuance, the live digest MUST fail. If only ReltdRmtInf narrative changes and policy treats remittance as non-load-bearing, implementations MAY exclude it from the digest. That exclusion MUST be explicit. Silent exclusion of creditor account is non-conforming. 14.9. Informative Mapping onto Card Capture amount and currency map to capture amount. beneficiary_id maps to merchant or sub-merchant. rail CARD maps to the acquirer route. purpose may carry order_id. A refund is a different act_type. Using a capture authority to refund, or a 40.00 capture authority to capture 400.00, MUST deny. 3DS or SCA results MAY appear as PED inputs. They MUST NOT appear as a reason to skip sink consume. 14.10. What This Profile Does Not Require It does not require replacing SWIFT, cards, or ISO 20022. It does not require a blockchain on the posting path. It does not require the model to detect fraud. It does not require every micropayment to do remote attestation. It requires that the component which can change a balance refuse to do so without current, consumed, digest- bound authority. 15. Cross-Border, FX, and Split Legs An FX payout is two load-bearing facts: the debit in currency C1 and the credit in currency C2 toward a beneficiary in administration J. Implementations MAY model this as one Candidate Act whose digest includes both amounts, both currencies, the FX rate or rate source epoch, and J, or as two acts that MUST NOT settle independently if the business meaning is a single payout. Silent settlement of only Das Expires 13 March 2027 [Page 27] Internet-Draft Payment Execution Finality September 2026 the cheap leg is a substitution. Correspondent or cover payments MUST NOT inherit authority issued for the customer credit. A cover bank is another sink. Authority sink- bound to core-post-eu-1 MUST fail at correspondent-post-us-9 unless a new act is authorized. 16. Dual Control and Threshold Authority Where policy requires maker-checker, the PED MUST treat missing checker shares as validation failure, not as a warning. Shares MAY be human approvals, independent policy engines, or a k-of-n MAC. The issued Payment Finality Authority SHOULD list the share identifiers. The sink MUST reject an authority whose share set no longer meets k. Agents do not replace the checker. An agent MAY be the maker. If an agent is also allowed to be a checker, that fact MUST be explicit in policy and SHOULD be excluded for FINANCIAL class above the hot envelope. Dual control that lives only in a UI, while an API posts without shares, is an alternate path and is non-conforming for that API. 17. Threat Model 17.1. Trust Boundary and Adversary Capabilities This profile assumes an adversary who can: * compromise the Compute / Workload Plane — the model, agent, ERP, checkout flow, or API caller that constructs a payment instruction — including full control of its process, its tool-call arguments, and any client-supplied idempotency key; * steal or forge session-level credentials reaching that plane, including OAuth tokens, API keys, agent seats, and 3-D Secure or SCA session artifacts; * inject or alter upstream content that a human or an agent reads before constructing a Candidate Act, such as a vendor-change email or a modified invoice; * replay a previously observed instruction, signed message, or idempotency key at a second acquirer, PSP, or sink; * observe network traffic between the Compute / Workload Plane and the Protected Enforcement Domain. Das Expires 13 March 2027 [Page 28] Internet-Draft Payment Execution Finality September 2026 This profile assumes an adversary cannot, absent a separate compromise stated as out of scope below: * forge a valid Payment Finality Authority without the Protected Enforcement Domain's signing or MAC key; * cause the Settlement Sink to accept an authority whose digest does not match the live instruction it verifies against; * cause the durable consume-state store to transition an already- consumed authority back to unused. The trust boundary therefore separates the Compute / Workload Plane, which this profile treats as untrusted and fully attacker-reachable, from the Protected Enforcement Domain and the Settlement Sink, which this profile treats as protected. Everything upstream of the Protected Enforcement Domain may be computed by, or under the influence of, an attacker; nothing downstream of it becomes externally effective without independent verification against a live instruction and consumption of a scoped, single-use authority. +-------------------------+ trust boundary +-------------------------+ | Compute / Workload | | | Protected Enforcement | | Plane (UNTRUSTED) | | | Domain (TRUSTED) | | | | | | | agent, model, ERP, | ----> | ----> | validate predicates | | API caller | | | commit evidence | | | | | issue scoped authority | | produces: | | | | | Candidate Act | | | | | (NON_EFFECTIVE) | | | | +-------------------------+ | +-------------------------+ | | | v | +-------------------------+ | | Settlement Sink | | | (TRUSTED) | | | | | | verify live digest | | | vs authority | | | atomic consume + post | | | or fail-closed deny | | +-------------------------+ An instruction that never crosses the trust boundary with matching evidence and unused authority cannot become externally effective, regardless of what the attacker was able to do on the untrusted side. Das Expires 13 March 2027 [Page 29] Internet-Draft Payment Execution Finality September 2026 17.2. Out-of-Scope Threats This profile does not defend against, and does not claim to mitigate: * compromise of the Protected Enforcement Domain's signing or MAC key itself, including key exfiltration from a software-only HMAC deployment (Section 14 discusses hardware- backed alternatives); * a colluding or compromised Settlement Sink operator who chooses not to verify, or who verifies against a falsified live instruction it controls; * social engineering that occurs before the Candidate Act is constructed, such as convincing an authorized human to approve a fraudulent beneficiary in the first instance; the profile binds what was approved, not whether the approval itself was well- founded; * compromise of upstream identity or credential issuance that causes the Protected Enforcement Domain to accept a forged agent or workload identity as genuine; * multi-sink deployments that share consume state incorrectly, such that two independently protected sinks each treat a single-use authority as unused; * denial of service against the Protected Enforcement Domain or Settlement Sink; * compliance failures in sanctions, AML, or beneficiary-risk screening systems that feed a predicate into the Protected Enforcement Domain, beyond binding the screen's epoch or list identifier as stated in Section 23. These are stated explicitly because a profile that is silent on its own limits invites reviewers to assume broader coverage than the architecture provides. 17.3. Threat-to-Mitigation Mapping Each threat in Section 18 is mapped below to the architectural control that defeats it and the residual risk that remains after the control is applied. Das Expires 13 March 2027 [Page 30] Internet-Draft Payment Execution Finality September 2026 +===============+================================+==================+ |Threat |Defeated by |Residual risk | +===============+================================+==================+ |T1 Stolen PSP/ |Token authenticates a client |Attacker who also | |core API token |only; digest-bound scoped |compromises the | | |authority is still required at |PED validation | | |the sink |path | +---------------+--------------------------------+------------------+ |T2 Stolen agent|Agent/workload identity bound |Attacker who | |seat with |into digest and authority; sink |compromises the | |payout tools |checks holder binding |same agent/ | | | |workload identity | | | |itself | +---------------+--------------------------------+------------------+ |T3 Injected |Beneficiary identity/account |Social engineering| |invoice / |load-bearing in digest; PED |before Candidate | |vendor-change |beneficiary-risk predicate |Act construction | |mail | |(out of scope) | +---------------+--------------------------------+------------------+ |T4 Amount |Amount normalized and load- |Compromised | |substitution |bearing; sink reconstructs and |canonicalization | |after approval |compares live digest |implementation or | | | |PED/sink collusion| +---------------+--------------------------------+------------------+ |T5 Beneficiary |Beneficiary ID and account load-|Compromised PED | |substitution / |bearing; digest mismatch denies |signing/MAC key | |BEC | |(out of scope) | +---------------+--------------------------------+------------------+ |T6 Rail |Rail is a load-bearing field; |Sink | |substitution |different rail invalidates the |implementation | | |authority |defect that skips | | | |rail comparison | +---------------+--------------------------------+------------------+ |T7 Replay on |Sink-bound, single-use |Multi-sink | |second |authority; consume-once state |deployments | |acquirer/PSP |keyed by digest and authority ID|sharing consume | | | |state incorrectly | | | |(out of scope) | +---------------+--------------------------------+------------------+ |T8 Idempotency-|Consume table keyed by |Non-conformant | |key reuse with |instruction digest and authority|implementation | |new body |ID, not client string |that still trusts | | | |a client | | | |idempotency key | | | |alone | +---------------+--------------------------------+------------------+ |T9 Mandate used|Purpose/mandate ID load-bearing;|Compromised | |off-purpose |PED mandate predicate |mandate policy | Das Expires 13 March 2027 [Page 31] Internet-Draft Payment Execution Finality September 2026 | | |data itself | +---------------+--------------------------------+------------------+ |T10 Payroll |One-row-equals-one-Candidate-Act|Batch/manifest | |file row |model; per-row digest |profile for | |injection | |partial settlement| | | |not yet specified | | | |(Section 7) | +---------------+--------------------------------+------------------+ |T11 FX-leg |FX fields load-bearing where |Current profile | |split to move |modeled; linked-act requirement |models one leg | |value cheaply | |only, no atomic | | | |cross-sink | | | |settlement | | | |(Section 7) | +---------------+--------------------------------+------------------+ |T12 Risk-list |Risk-list epoch bound into |Compromise of the | |epoch rollback |authority; stale epoch |epoch source | | |invalidates unused authority |itself | +---------------+--------------------------------+------------------+ |T13 Checker UI |Dual-control predicate enforced |PED misconfigured | |bypass via API |at the PED, not only at the UI |to treat the API | | | |path as pre- | | | |approved | +---------------+--------------------------------+------------------+ |T14 Agent A |Agent/workload identity bound |Shared credential | |authority used |into digest and authority; sink |material between | |by agent B |checks holder match |agents (identity- | | | |issuance flaw, out| | | |of scope) | +---------------+--------------------------------+------------------+ |T15 Refund used|Act type (capture vs. refund) |Incorrect act-type| |as origination |load-bearing; distinct Candidate|classification at | | |Acts |construction time | +---------------+--------------------------------+------------------+ Table 1 18. Payment Threat Catalog * T1 Stolen PSP or core API token * T2 Stolen enterprise agent seat with payout tools * T3 Injected invoice or vendor-change mail * T4 Amount substitution after UI approval * T5 Beneficiary substitution / BEC Das Expires 13 March 2027 [Page 32] Internet-Draft Payment Execution Finality September 2026 * T6 Rail substitution (on-us to instant) * T7 Replay on a second acquirer or PSP * T8 Idempotency-key reuse with new body * T9 Mandate used off-purpose * T10 Payroll file row injection * T11 FX-leg split to move value cheaply * T12 Risk-list epoch rollback * T13 Checker UI bypass via API * T14 Agent A authority used by agent B * T15 Refund used as origination The protocol does not require the model to label these attacks. It requires post_to_rail() to be unreachable when the corresponding bind fails. 19. Additional Worked Denials { "scenario": "BEC_BENEFICIARY_SWAP", "authorized": { "amount": "150.00", "currency": "EUR", "beneficiary_id": "vendor-441" }, "live": { "amount": "150.00", "currency": "EUR", "beneficiary_id": "attacker-992" }, "sink": { "decision": "DENY", "code": "EF_BENEFICIARY_MISMATCH", "posted": false } } Das Expires 13 March 2027 [Page 33] Internet-Draft Payment Execution Finality September 2026 { "scenario": "REPLAY_SECOND_PSP", "authority_id": "pfa-88c0", "first_sink": { "sink_id": "core-post-eu-1", "status": "CONSUMED" }, "second_sink": { "sink_id": "psp-alt-2", "decision": "DENY", "code": "EF_SINK_MISMATCH" } } { "scenario": "AGENT_AMOUNT_ENVELOPE", "hot_ceiling": "500.00", "requested": "5000.00", "decision": "DENY", "code": "EF_AMOUNT_ENVELOPE", "remediation": "ESCALATE_TO_CHECKER" } 20. Regulatory and Operational Notes This document does not claim to satisfy PSD2, SCA, PCI DSS, AML, or sanctions-screening obligations. Those systems produce inputs (SCA result, screening epoch, card-data scope) that the PED MAY require. A clean screening result is not settlement authority for a substituted beneficiary. Operations staff SHOULD log authority_id, instruction_digest, consume time, and settlement_ref together. That tuple is what a scheme or correspondent will ask for after a dispute. Logging the model prompt instead of the digest is not a substitute. 21. Failure Codes and Denial Behavior Illustrative codes, not IANA assignments: EF-002 NO_FINALITY_AUTHORITY, EF-005 AUTHORITY_ALREADY_USED, EF-006 REPLAY_DETECTED, EF-023 INSTRUCTION_SUBSTITUTION, EF-024 AMOUNT_MISMATCH, EF-025 BENEFICIARY_MISMATCH, EF-026 RAIL_MISMATCH, EF-027 MANDATE_MISS, EF-028 PAYEE_BLOCKED, EF-029 AMOUNT_ENVELOPE, EF-040 SINK_MISMATCH, EF-070 ESCALATION_REQUIRED, EF-080 FAIL_CLOSED. A denial MAY name a remediation (re-quote amount, escalate checker, refresh risk list) but MUST NOT post. Timeout MUST NOT post. Das Expires 13 March 2027 [Page 34] Internet-Draft Payment Execution Finality September 2026 22. Combined Agent Tool Call and Payment Act When the instruction is born as a model tool call, two objects SHOULD be created from the same canonical arguments: { "agent_candidate_act": { "object_type": "agent_candidate_act", "act_type": "TOOL_CALL", "tool": { "tool_id": "payout.create", "function_id": "create", "tool_protocol": "MCP" }, "arguments_digest": { "algorithm": "SHA-256", "value": "base64url-args" }, "consequence_class": "FINANCIAL", "finality_sink": { "sink_id": "mcp-dispatch-1", "sink_type": "TOOL_DISPATCH" } }, "payment_candidate_act": { "object_type": "payment_candidate_act", "act_type": "PAYOUT", "amount": "150.00", "currency": "EUR", "beneficiary": { "beneficiary_id": "vendor-441" }, "rail": { "rail_id": "SEPA_INSTANT" }, "instruction_digest": { "algorithm": "SHA-256", "value": "base64url-ins-digest" }, "finality_sink": { "sink_id": "core-post-eu-1", "sink_type": "CORE_POST" } }, "rule": "dispatch sink may run the tool handler; posting sink may move funds; neither check replaces the other" } If only the tool dispatcher checks, a handler bug can still post. If only the posting sink checks, a different tool (raw HTTP to the PSP) can still fire. Alternate-path closure requires both for agent- originated value movement. Das Expires 13 March 2027 [Page 35] Internet-Draft Payment Execution Finality September 2026 23. Security Considerations Threats the sink is intended to make non-completable without current authority include: amount and payee substitution, rail laundering, replay across PSP and core, stolen agent seat, injected invoice, mandate over-use, risk-list staleness, and a second path (manual file drop) that posts the same funds. If the Settlement Sink holds unrestricted posting rights and skips verification, the profile collapses for that path. High-assurance deployments SHOULD keep authority-signing keys off the agent host and SHOULD treat payment class as cold-path default above a ceiling. Idempotency keys supplied by the client are not consume-once authority. An attacker who can change the body and keep the key, or who can mint a new key for the same digest after consume, is out of scope for "we already have idempotency." The consume table MUST be keyed by instruction digest and authority_id, not only by a client string. Sanctions and AML screens are necessary and insufficient. A clean screen of beneficiary-441 does not authorize a post to attacker-992. Screen results SHOULD be bound into PED evidence as an epoch or list identifier so a later list update invalidates unused authority. 24. Privacy Considerations Instruction objects carry account references and payee identifiers. Implementations SHOULD hash account numbers in logs and SHOULD prefer account_digest in authority objects that leave the posting host. Cross-border acts MUST treat beneficiary jurisdiction as a load- bearing field, not as telemetry. 25. Relevance to IETF Working Groups No current IETF working group owns settlement-sink admission control for payment instructions specifically, so this document is filed as an individual submission pending a dispatch decision. The following existing groups and their outputs bound adjacent, but distinct, parts of the problem: * SECDISPATCH: the appropriate routing venue for a new security problem statement that does not have an obvious home. This document is a candidate for a SECDISPATCH presentation asking whether payment-side execution finality should become chartered work, and if so, in which group. Das Expires 13 March 2027 [Page 36] Internet-Draft Payment Execution Finality September 2026 * GNAP (Grant Negotiation and Authorization Protocol): GNAP delegates and negotiates authorization grants between a client and a resource; it is the closest existing analog to scoped, non- bearer authority issuance. It does not specify a digest-bound, single-use capability that a settlement sink independently reconstructs and verifies against a live instruction, which is the gap this document addresses. * OAUTH: bearer and sender-constrained tokens (RFC 8693, DPoP, mTLS- bound tokens) authenticate a client or session. Section 5 explains why token possession is not equivalent to act-specific, amount-bound authority at the point funds actually move. * SCITT (Supply Chain Integrity, Transparency, and Trust): SCITT's transparency-service and signed- statement model is structurally close to this document's evidence-before-authority ordering (Section 9). A SCITT-style receipt could serve as the durable evidence artifact the Protected Enforcement Domain commits before issuing authority; this document does not currently depend on SCITT and notes the alignment for future harmonization. * RATS (Remote ATtestation procedureS): where the Protected Enforcement Domain or Settlement Sink runs in an attested environment, RATS conceptual messages (Evidence, Endorsement, Attestation Result) can supply one input predicate to the finality decision. This document treats attestation as an optional predicate, not a substitute for digest-bound, consume-once authority; see also [I-D.das-6g-finality] for the companion attestation-adjacent profile. * STIR/SHAKEN and related identity-assurance work: provide caller and channel identity assurance in adjacent telecom signaling contexts. They are cited here only to distinguish channel- identity assurance from act-specific, amount-bound settlement authority, which is this document's subject. This document does not ask any of the above groups to adopt it as-is. It is offered as an input problem statement so that chairs and area directors can decide whether the work belongs in an existing group, a new SECDISPATCH-routed effort, or remains an informational individual submission. 26. Implementation Checklist A deployment may call itself aligned with this profile when all of the following are true on the covered rail: Das Expires 13 March 2027 [Page 37] Internet-Draft Payment Execution Finality September 2026 1. Every post has an authority_id that was consumed atomically with the post. 2. Instruction digest covers amount, currency, beneficiary, and rail. 3. Amount, payee, or rail mismatch is a deny, not a log line. 4. Replay at a second sink fails. 5. Timeout does not post. 6. Agent payout tools cannot reach the PSP SDK without the sink function. 7. Added hot-path latency is measured and sits in the 1-10 ms class or is explained. 8. Legacy paths that can emit the same clearing message are inventoried; those not yet gated are listed as known alternate paths with a closure date. 27. IANA Considerations This document requests no IANA actions. 28. Intellectual Property and Licensing Concepts in this profile are associated with the DAS Protocols family, including International Application PCT/IB2026/055615. IETF disclosure should follow BCP 79 [RFC8179]. By default, the reference-implementation repository accompanying this document (Section 29) is licensed under the Creative Commons Attribution-NonCommercial 4.0 International (CC BY-NC 4.0) licence. Attribution is required, and commercial use is not permitted without separate written permission. Associated patent rights, including those relating to the DAS Protocols family and PCT/IB2026/055615, are not licensed under CC BY- NC 4.0. Commercial implementation of the profile described in this document may require a separate patent licence. Should this specification, or a specification derived from it, become IETF-standardized work (see Section 25), the default patent licensing basis for that standardized specification is Fair, Reasonable, and Non-Discriminatory (FRAND) terms, consistent with the disclosure obligations of BCP 79 [RFC8179]. Any commercial patent licence Das Expires 13 March 2027 [Page 38] Internet-Draft Payment Execution Finality September 2026 offered for implementations of an IETF-standardized version of this specification will be offered on FRAND terms. The CC BY-NC 4.0 licence governs copyrightable material only, namely the text of this document and the reference-implementation source code; it does not itself constitute, extend, or limit any patent licence, and it does not alter the FRAND commitment applicable to an IETF-standardized version of this specification. 29. Reference Implementation A runnable, vendor-neutral reference implementation of this profile is maintained outside this document. Full architecture notes, source layout, cryptographic and canonicalization choices, test coverage, benchmark methodology, failure codes, and stated limitations are documented at the GitHub implementation reference summary URL below (https://github.com/sangmdas/Payment-Execution-Finality-for-Agentic- API-and-Automated-Payments-Runnable-Reference-Implementation (https://github.com/sangmdas/Payment-Execution-Finality-for-Agentic- API-and-Automated-Payments-Runnable-Reference-Implementation)); readers should consult that repository, not this section, for implementation-level detail. In summary, the reference implementation: * is written in Python 3.10 or newer and reproduces the Payment Candidate Act, Protected Enforcement Domain, scoped non-bearer authority, and Settlement-Sink verify-and-consume flow defined in this document; * uses HMAC-SHA-256 behind a replaceable authenticator interface, SQLite for durable consume-once state, and a restricted canonicalization profile (EF-JCS-SUBSET-1) for the load-bearing payment projection and instruction digest; * ships a cross-language test vector (test-vectors/ef-pay-1.json) so independent language ports can verify digest interoperability before claiming conformance; * includes 52 executable tests covering amount normalization, instruction substitution, replay and concurrency, epoch and expiration freshness, and rail failure classification (definite vs. uncertain); * reports a local reference benchmark (p50/p95/p99 per stage) consistent with the target latency class in Section 14, measured on an in-memory store and a simulated, non-effecting rail adapter; and Das Expires 13 March 2027 [Page 39] Internet-Draft Payment Execution Finality September 2026 * is explicitly not a certified payment system: it does not integrate a live rail, does not claim HSM-grade key isolation, and does not claim regulatory or PCI DSS compliance. See the repository's own limitations documentation for the full list. The repository is licensed under CC BY-NC 4.0 by default, per Section 28. Patent rights are addressed separately from the copyright licence; see Section 28 for the FRAND commitment applicable if this specification becomes IETF-standardized work. This document is part of a related family of execution-finality Internet-Drafts by the same author, applying the same Candidate Act / Protected Enforcement Domain / Finality Sink architecture to other domains. Readers evaluating this profile may also find the following relevant: * draft-das-agentic-tool-binding (https://datatracker.ietf.org/doc/ draft-das-agentic-tool-binding/) — binds execution finality to tool_use/function-calling and MCP dispatch; * draft-das-execution-finality-protocol-layer (https://datatracker.ietf.org/doc/draft-das-execution-finality- protocol-layer/) — umbrella/synthesis draft formalizing the shared vocabulary (Candidate Act, Non-Effective State, Protected Enforcement Domain, Finality Sink) used across the family; * draft-das-eu-ai-act-execution-enforcement (https://datatracker.ietf.org/doc/draft-das-eu-ai-act-execution- enforcement/); * draft-das-global-privacy-execution-enforcement (https://datatracker.ietf.org/doc/draft-das-global-privacy- execution-enforcement/); * draft-das-digital-sovereignty-finality (https://datatracker.ietf.org/doc/draft-das-digital-sovereignty- finality/); * draft-das-ntn-rf-execution-finality (https://datatracker.ietf.org/doc/draft-das-ntn-rf-execution- finality/); * draft-das-payment-execution-finality (https://datatracker.ietf.org/doc/draft-das-payment-execution- finality/) — this document's own datatracker entry, listed here for completeness of the series; Das Expires 13 March 2027 [Page 40] Internet-Draft Payment Execution Finality September 2026 * draft-das-agentic-execution-finality (https://datatracker.ietf.org/doc/draft-das-agentic-execution- finality/); * draft-das-ot-actuation-finality (https://datatracker.ietf.org/doc/ draft-das-ot-actuation-finality/); * draft-das-protocols-candidate-act-finality (https://datatracker.ietf.org/doc/draft-das-protocols-candidate- act-finality/); * draft-agentic-ai-tool-execution-finality (https://datatracker.ietf.org/doc/draft-agentic-ai-tool-execution- finality/) (no "das-" prefix); and * draft-das-hardware-enforced-execution-finality (https://datatracker.ietf.org/doc/draft-das-hardware-enforced- execution-finality/). Links above point to each draft's datatracker overview page, which always resolves to the current revision, rather than to a specific dash-numbered version. 30. Conclusion Rails move money. Agents and APIs now write the instruction. A signature on the channel, a token on the worker, or a mandate on the vendor is not authority for this amount to settle toward this beneficiary on this rail now. Bind the digest. Commit evidence. Consume at the posting sink. A signed instruction is not settlement. 31. Normative References [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997, . [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, May 2017, . [RFC8179] Bradner, S. and J. Contreras, "Intellectual Property Rights in IETF Technology", BCP 79, RFC 8179, May 2017, . 32. Informative References Das Expires 13 March 2027 [Page 41] Internet-Draft Payment Execution Finality September 2026 [I-D.das-6g-finality] Das, S., "Execution-Finality for AI-Native 5G/6G and O-RAN", Work in Progress, Internet-Draft, draft-das-ai- native-6g-execution-finality-01, August 2026, . [I-D.das-agentic] Das, S., "Tool Selection Is Not Execution: Finality for Agentic Tool Dispatch", Work in Progress, Internet-Draft, draft-das-agentic-execution-finality-01, August 2026, . Author's Address Sangam Das Independent Inventor Balasore 756001 Odisha India Email: info@sangamdas.com Das Expires 13 March 2027 [Page 42]