Reference
The standard Blue document for governing one transaction — payer, payee, guarantor; secure / complete / cancel / reverse; deferred recipient selection, final-amount resolution, and control locks.
A PayNote is a standard Blue document that attaches to exactly one transaction and governs what should happen with that transaction.
It is not the payment rail itself.
Instead, it is the shared document that describes and controls the payment process around that rail:
A PayNote may be attached:
By modeling payment logic as a verifiable, event-driven document, a PayNote creates a chain of evidence for the full lifecycle of a transaction. All participants can independently verify what was requested, what was accepted, and what the trusted payment operator actually did.
This is the key invariant:
A PayNote always governs exactly one transaction.
That transaction may be:
If a PayNote later triggers another transaction, that new transaction is independent and may have its own PayNote.
This replaces the older "child PayNote" idea with a cleaner model:
Every PayNote has three conceptual core roles:
The party providing the funds or value.
The party intended to receive the funds or value.
The trusted entity that controls or executes the underlying transaction.
Examples:
The Guarantor is the source of truth for what actually happened on the underlying rail.
A PayNote may be accepted by the Guarantor before the full underlying transaction is fully described or completed.
This distinction matters.
The Guarantor agrees that this PayNote will govern a particular transaction flow.
The underlying rail-specific transaction has actually been started, and the Guarantor now confirms transaction attachment details.
A PayNote can be accepted before all transactional details are known.
That is useful for scenarios like:
So a PayNote must support:
At the conceptual level, a PayNote should use the following action vocabulary:
These are intentionally more universal than rail-specific words such as:
Different rails can map their own terminology onto these concepts.
Card
Bank transfer
Internal ledger
Many payment flows begin with an expected amount and later need the final amount to be resolved.
Examples:
That is why PayNote should support final amount resolution.
This is better than older "settlement amount" wording, because it focuses on:
not
A PayNote may need to override or temporarily restrict actions that the Guarantor's rail would otherwise allow.
Examples:
So PayNote should support control-lock operations such as:
These are powerful because they let the PayNote shape the real payment lifecycle rather than just observe it.
A PayNote may trigger new transactions.
Examples:
Each triggered transaction is:
This is the foundational provider-neutral Blue definition.
The base type should stay minimal and general.
Provider-specific packages such as JPM/... or Adyen/... may extend or overwrite parts of the transaction detail model with stronger rail-specific shapes.
1name: PayNote2description: >3 A document attached to exactly one transaction that governs what4 should happen with that transaction.5status:6 type: Text7 description: >8 Current lifecycle state of this PayNote.9 Expected values include:10 Pending, Accepted, Initiated, Secured, Completed,11 Cancelled, Reversed, Rejected, Failed.12 value: Pending13currency:14 type: Text15 description: ISO 4217 currency code.16amount:17 description: Amount values associated with this PayNote.18 expectedTotal:19 type: Integer20 description: >21 The initially expected total amount in minor units.22 finalResolved:23 type: Integer24 description: >25 The final resolved amount for completion, if known.26 value: 027 finalAmountResolved:28 type: Boolean29 description: >30 Whether the final amount has been explicitly resolved.31 value: false32 secured:33 type: Integer34 description: >35 Amount currently secured / under guarantor control.36 value: 037 completed:38 type: Integer39 description: >40 Amount already completed / finalized.41 value: 042 reversed:43 type: Integer44 description: >45 Amount already reversed after completion.46 value: 047transactionDetails:48 description: >49 Transaction attachment information confirmed by the Guarantor.50controls:51 completionLocked:52 type: Boolean53 value: false54 reversalLocked:55 type: Boolean56 value: false57 transactionDetailsUpdateLocked:58 type: Boolean59 value: false60payNoteInitialStateDescription:61 summary:62 type: Text63 description: >64 Short explanation of what this PayNote is for.65 details:66 type: Text67 description: >68 Full explanation of the process, conditions, and special rules.69 Markdown recommended.70contracts:71 payerChannel:72 type: MyOS Timeline73 payeeChannel:74 type: MyOS Timeline75 # May remain unbound initially if payee/recipient is unresolved.76 guarantorChannel:77 type: MyOS Timeline7879 # --- Guarantor operations ---80 acceptPayNote:81 type: Operation82 channel: guarantorChannel83 rejectPayNote:84 type: Operation85 channel: guarantorChannel86 recordTransactionInitiated:87 type: Operation88 channel: guarantorChannel89 recordTransactionInitiationFailed:90 type: Operation91 channel: guarantorChannel92 confirmPayeeAssignment:93 type: Operation94 channel: guarantorChannel95 rejectPayeeAssignment:96 type: Operation97 channel: guarantorChannel98 confirmTransactionDetailsUpdated:99 type: Operation100 channel: guarantorChannel101 rejectTransactionDetailsUpdate:102 type: Operation103 channel: guarantorChannel104 failTransactionDetailsUpdate:105 type: Operation106 channel: guarantorChannel107 secureFunds:108 type: Operation109 channel: guarantorChannel110 declineSecureFunds:111 type: Operation112 channel: guarantorChannel113 failSecureFunds:114 type: Operation115 channel: guarantorChannel116 completePayment:117 type: Operation118 channel: guarantorChannel119 declineCompletePayment:120 type: Operation121 channel: guarantorChannel122 failCompletePayment:123 type: Operation124 channel: guarantorChannel125 cancelBeforeCompletion:126 type: Operation127 channel: guarantorChannel128 declineCancelBeforeCompletion:129 type: Operation130 channel: guarantorChannel131 failCancelBeforeCompletion:132 type: Operation133 channel: guarantorChannel134 reverseAfterCompletion:135 type: Operation136 channel: guarantorChannel137 declineReverseAfterCompletion:138 type: Operation139 channel: guarantorChannel140 failReverseAfterCompletion:141 type: Operation142 channel: guarantorChannel143 resolveFinalAmount:144 type: Operation145 channel: guarantorChannel146 request:147 type: Integer148 rejectFinalAmountResolution:149 type: Operation150 channel: guarantorChannel151 lockPaymentCompletion:152 type: Operation153 channel: guarantorChannel154 unlockPaymentCompletion:155 type: Operation156 channel: guarantorChannel157 failPaymentCompletionLockChange:158 type: Operation159 channel: guarantorChannel160 lockPaymentReversal:161 type: Operation162 channel: guarantorChannel163 unlockPaymentReversal:164 type: Operation165 channel: guarantorChannel166 failPaymentReversalLockChange:167 type: Operation168 channel: guarantorChannel169 lockTransactionDetailsUpdate:170 type: Operation171 channel: guarantorChannel172 unlockTransactionDetailsUpdate:173 type: Operation174 channel: guarantorChannel175 failTransactionDetailsUpdateLockChange:176 type: Operation177 channel: guarantorChannel
These are the standard participant-to-guarantor requests.
Most concrete PayNote documents may expose participant-friendly wrapper operations that emit these requests, but the canonical semantics live here.
1name: PayNote Acceptance Requested2type: Request3description: >4 A participant requests that the Guarantor accept this PayNote5 as governing the referenced transaction.
1name: Transaction Details Update Requested2type: Request3description: >4 A participant requests that the Guarantor update transaction-specific5 details.
This request is especially useful for:
1name: Secure Funds Requested2type: Request3description: >4 A participant requests that the Guarantor secure value for this transaction.5amount:6 type: Integer
1name: Complete Payment Requested2type: Request3description: >4 A participant requests that the Guarantor finalize the payment.5amount:6 type: Integer
1name: Cancel Before Completion Requested2type: Request3description: >4 A participant requests that the Guarantor cancel the transaction before completion.5reason:6 type: Text
1name: Reverse After Completion Requested2type: Request3description: >4 A participant requests that the Guarantor reverse value after completion.5amount:6 type: Integer7reason:8 type: Text
1name: Final Amount Resolution Requested2type: Request3description: >4 A participant proposes the final amount this PayNote should complete for.5finalAmount:6 type: Integer7reason:8 type: Text
1name: Payment Completion Lock Requested2type: Request3description: >4 Request that the Guarantor reject subsequent completion attempts5 for the governed transaction.6reason:7 type: Text
1name: Payment Completion Unlock Requested2type: Request3description: >4 Request that the Guarantor allow subsequent completion attempts5 for the governed transaction.6reason:7 type: Text
1name: Payment Reversal Lock Requested2type: Request3description: >4 Request that the Guarantor reject subsequent reversal attempts5 for the governed transaction.6reason:7 type: Text
1name: Payment Reversal Unlock Requested2type: Request3description: >4 Request that the Guarantor allow subsequent reversal attempts5 for the governed transaction.6reason:7 type: Text
1name: Transaction Details Update Lock Requested2type: Request3description: >4 Request that the Guarantor reject subsequent transaction-details updates5 for the governed transaction.6reason:7 type: Text
1name: Transaction Details Update Unlock Requested2type: Request3description: >4 Request that the Guarantor allow subsequent transaction-details updates5 for the governed transaction.6reason:7 type: Text
These are the authoritative lifecycle responses emitted by the Guarantor.
1name: PayNote Accepted2type: Response3description: >4 The Guarantor accepted this PayNote as governing the referenced transaction.
1name: PayNote Rejected2type: Response3description: >4 The Guarantor rejected this PayNote for the referenced transaction.5reason:6 type: Text
1name: Transaction Details Updated2type: Response3description: >4 The Guarantor accepted and recorded updated transaction details.5payeeRef:6 type: Text7recipientTargetRef:8 type: Text9merchantReference:10 type: Text11displayLabel:12 type: Text
1name: Transaction Details Update Rejected2type: Response3description: >4 The Guarantor rejected the proposed transaction details update.5reason:6 type: Text
1name: Transaction Details Update Failed2type: Response3description: >4 The Guarantor attempted to apply the transaction details update,5 but a technical or provider-level failure occurred.6reason:7 type: Text
1name: Transaction Initiated2type: Response3description: >4 The Guarantor confirms that the underlying transaction was initiated5 and records how this PayNote was attached to it.6railType:7 type: Text8attachmentPoint:9 type: Text10providerReference:11 type: Text12initiatedAmount:13 type: Integer
1name: Transaction Initiation Failed2type: Response3description: >4 The Guarantor attempted to initiate the transaction, but it failed.5reason:6 type: Text
1name: Funds Secured2type: Response3description: >4 The Guarantor confirms that value is now secured / under its control.5amountSecured:6 type: Integer
1name: Funds Securing Declined2type: Response3description: >4 The Guarantor declined the request to secure the funds.5reason:6 type: Text
1name: Funds Securing Failed2type: Response3description: >4 The Guarantor attempted to secure the funds, but a technical or5 provider-level failure occurred.6reason:7 type: Text
1name: Payment Completed2type: Response3description: >4 The Guarantor confirms that the payment was finalized.5amountCompleted:6 type: Integer
1name: Payment Completion Declined2type: Response3description: >4 The Guarantor declined the request to complete the payment.5reason:6 type: Text
1name: Payment Completion Failed2type: Response3description: >4 The Guarantor attempted to complete the payment, but it failed.5reason:6 type: Text
1name: Payment Cancelled Before Completion2type: Response3description: >4 The Guarantor confirms that the transaction was cancelled before completion.
1name: Payment Cancellation Declined2type: Response3description: >4 The Guarantor declined the request to cancel before completion.5reason:6 type: Text
1name: Payment Cancellation Failed2type: Response3description: >4 The Guarantor attempted to cancel before completion, but it failed.5reason:6 type: Text
1name: Payment Reversed After Completion2type: Response3description: >4 The Guarantor confirms that value was reversed after completion.5amountReversed:6 type: Integer
1name: Payment Reversal Declined2type: Response3description: >4 The Guarantor declined the request to reverse after completion.5reason:6 type: Text
1name: Payment Reversal Failed2type: Response3description: >4 The Guarantor attempted to reverse after completion, but it failed.5reason:6 type: Text
1name: Final Amount Resolved2type: Response3description: >4 The Guarantor confirms the final amount this PayNote should complete for.5finalAmount:6 type: Integer
1name: Final Amount Resolution Rejected2type: Response3description: >4 The Guarantor rejected the proposed final amount.5reason:6 type: Text
1name: Payment Completion Locked2type: Response3description: >4 Payment completion was locked. Subsequent completion attempts5 must be rejected until explicitly unlocked.6lockedAt:7 type: Common/Timestamp
1name: Payment Completion Unlocked2type: Response3description: >4 Payment completion was unlocked. Subsequent completion attempts5 may now be processed again.6unlockedAt:7 type: Common/Timestamp
1name: Payment Completion Lock Change Failed2type: Response3description: >4 The requested completion-lock change failed.5reason:6 type: Text
1name: Payment Reversal Locked2type: Response3description: >4 Payment reversal was locked. Subsequent reversal attempts5 must be rejected until explicitly unlocked.6lockedAt:7 type: Common/Timestamp
1name: Payment Reversal Unlocked2type: Response3description: >4 Payment reversal was unlocked. Subsequent reversal attempts5 may now be processed again.6unlockedAt:7 type: Common/Timestamp
1name: Payment Reversal Lock Change Failed2type: Response3description: >4 The requested reversal-lock change failed.5reason:6 type: Text
1name: Transaction Details Update Locked2type: Response3description: >4 Transaction-details updates were locked. Subsequent details changes5 must be rejected until explicitly unlocked.6lockedAt:7 type: Common/Timestamp
1name: Transaction Details Update Unlocked2type: Response3description: >4 Transaction-details updates were unlocked. Subsequent details changes5 may now be processed again.6unlockedAt:7 type: Common/Timestamp
1name: Transaction Details Update Lock Change Failed2type: Response3description: >4 The requested transaction-details-update lock change failed.5reason:6 type: Text
Yes — this is a very good scenario and worth making first-class.
This is useful for:
This is exactly why PayNote needs:
Without these, agentic pre-approval flows become awkward.
Scenario
Alice wants to send Bob $250. The transfer should complete immediately once initiated.
1name: Payment for Invoice Q3-SERVICES2type: PayNote3currency: USD4amount:5 expectedTotal: 250006payNoteInitialStateDescription:7 summary: |8 Direct payment of **$250.00 USD** from Alice to Bob.9 details: |10 This PayNote governs a simple direct payment.11 The Guarantor initiates and completes it immediately if possible.12contracts:13 bootstrap:14 type: Sequential Workflow15 event:16 type: Document Processing Initiated17 steps:18 - name: RequestCompletion19 type: Trigger Event20 event:21 type: Complete Payment Requested22 amount: ${document('/amount/expectedTotal')}23 payerChannel:24 type: MyOS Timeline25 payeeChannel:26 type: MyOS Timeline27 guarantorChannel:28 type: MyOS Timeline
Typical outcome
Scenario
A customer pays a merchant €120. The card is authorized now, but the payment should complete only after DHL confirms delivery.
1name: Delivery-Protected Payment #SH-4815162type: PayNote3currency: EUR4amount:5 expectedTotal: 120006contracts:7 payerChannel:8 type: MyOS Timeline9 payeeChannel:10 type: MyOS Timeline11 guarantorChannel:12 type: MyOS Timeline13 shipmentCompanyChannel:14 type: MyOS Timeline15 bootstrap:16 type: Sequential Workflow17 event:18 type: Document Processing Initiated19 steps:20 - name: RequestSecureFunds21 type: Trigger Event22 event:23 type: Secure Funds Requested24 amount: ${document('/amount/expectedTotal')}25 shipmentConfirmed:26 type: Operation27 channel: shipmentCompanyChannel28 shipmentConfirmedImpl:29 type: Sequential Workflow Operation30 operation: shipmentConfirmed31 steps:32 - name: RequestCompletion33 type: Trigger Event34 event:35 type: Complete Payment Requested36 amount: ${document('/amount/finalResolved') || document('/amount/expectedTotal')}
Typical outcome
If needed, the system can also lock completion before delivery:
Scenario
Alice secures $1,000 with her bank but does not yet know which merchant will be used. Her agent shops around and later supplies the recipient details.
1name: Shopping Budget with Deferred Recipient2type: PayNote3currency: USD4amount:5 expectedTotal: 1000006contracts:7 payerChannel:8 type: MyOS Timeline9 guarantorChannel:10 type: MyOS Timeline11 agentChannel:12 type: MyOS Timeline13 proposeRecipient:14 type: Operation15 channel: agentChannel16 request:17 type: Text18 proposeRecipientImpl:19 type: Sequential Workflow Operation20 operation: proposeRecipient21 steps:22 - name: RequestDetailsUpdate23 type: Trigger Event24 event:25 type: Transaction Details Update Requested26 recipientTargetRef: ${event.request}
Typical outcome
This is a very strong scenario for safe agentic shopping.
Scenario
Alice secures $1,000 for travel. The PayNote governs the top-level budget transaction. As travel choices are made, new transactions are triggered independently.
1Top-level transaction: card hold / account hold ($1,000)2└── PayNote A: "Agent may trigger approved travel transactions within this budget"3 ├── Transaction B: Flight auth ($400)4 │ └── PayNote B: "Complete immediately if ticket issued"5 ├── Transaction C: Hotel auth ($500)6 │ └── PayNote C: "Complete at check-in, cancel if trip cancelled"7 └── Transaction D: Restaurant auth ($60)8 └── Optional PayNote D
Key point
There are no child PayNotes here.
There is:
Scenario
A courier flow starts with an estimate, but the final amount depends on actual mileage.
1name: Mileage-Based Courier Payment2type: PayNote3currency: USD4amount:5 expectedTotal: 15006 finalResolved: 07 finalAmountResolved: false
Typical outcome
This version makes the following improvements:
A PayNote is a document attached to one transaction that governs what should happen with that transaction.
Its canonical concepts are:
Each triggered transaction is independent and may have its own PayNote.
That makes PayNote: