Skip to content

[intent] authorize intent (auth and capture)#226

Open
brendanjryan wants to merge 6 commits into
mainfrom
brendanryan-auth-intent
Open

[intent] authorize intent (auth and capture)#226
brendanjryan wants to merge 6 commits into
mainfrom
brendanryan-auth-intent

Conversation

@brendanjryan

@brendanjryan brendanjryan commented Apr 8, 2026

Copy link
Copy Markdown
Collaborator

Summary

Adds the authorize intent as a full authorization-and-capture lifecycle for HTTP Payment Authentication, with method-specific capture, void, and refund-request semantics.

Key design decisions

  • Supports escrowed auth and capture flows, common with cards and many other payment methods
  • Allows for multi-capture as well as single-capture
  • Supports "voiding" a transaction, but not partial refunds

Notes on implementations

Tempo Implementation

Leverages the same underlying "escrow" contract as the tempo session method, with the server as an authorized signer

Stripe Implementation

Leverages shared payment token, with restrictions on what parameters and shapes of payment methods can be used.

Open questions

  • should we allow partial refunds?
  • are there any other efficiencies that we could get from the tempo contract?

@brendanjryan brendanjryan changed the title Tighten authorize intent and Tempo semantics [draft] Authorization Intent Apr 8, 2026
@github-actions

github-actions Bot commented Apr 8, 2026

Copy link
Copy Markdown

Spec Preview

Spec Changed Artifacts
draft-card-charge-00 Yes HTML · TXT · XML · PDF
draft-evm-charge-00 Yes HTML · TXT · XML · PDF
draft-httpauth-payment-00 Yes HTML · TXT · XML · PDF
draft-lightning-charge-00 Yes HTML · TXT · XML · PDF
draft-lightning-session-00 Yes HTML · TXT · XML · PDF
draft-payment-discovery-00 Yes HTML · TXT · XML · PDF
draft-payment-intent-authorize-00 New HTML · TXT · XML · PDF
draft-payment-intent-charge-00 Yes HTML · TXT · XML · PDF
draft-payment-transport-mcp-00 Yes HTML · TXT · XML · PDF
draft-solana-charge-00 Yes HTML · TXT · XML · PDF
draft-stellar-charge-00 Yes HTML · TXT · XML · PDF
draft-stripe-authorize-00 New HTML · TXT · XML · PDF
draft-stripe-charge-00 Yes HTML · TXT · XML · PDF
draft-tempo-authorize-00 New HTML · TXT · XML · PDF
draft-tempo-charge-00 Yes HTML · TXT · XML · PDF
draft-tempo-session-00 Yes HTML · TXT · XML · PDF

Browse preview release assets

- Fix IPR to noModificationTrust200902
- Remove citations from abstracts (RFC 7322)
- Remove TK placeholders
- Tighten amount field format (base-10 integer string)
- Add authorizationExpires > expires ordering constraint
- Add error responses section (402 for expired/exhausted/revoked)
- Add Idempotency-Key normative reference
- Replace undefined Payment-Authorization header mention
- Use definition list markup instead of markdown bold
- Normalize org: vs organization: in author blocks
- Make recipient conditionality explicit per fulfillment type
- Add ABNF appendix to method spec
- Add IANA per-method intent registration table
- Make chainId default normative
- Add did:pkh guidance matching charge spec
- Add caching guidance to security considerations
- Add EIP-20 informative reference
- Add informational caveat to recommended max windows
@brendanjryan brendanjryan marked this pull request as ready for review April 8, 2026 20:14

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 235f8c82c7

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

| Authorization expired | 402 Payment Required | Issue new challenge |
| Spending limit exhausted | 402 Payment Required | Issue new challenge |
| Authorization revoked | 402 Payment Required | Issue new challenge |
| Invalid credential | 401 Unauthorized | Reject credential |

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Use 402 for invalid payment credentials

The authorize intent error table assigns 401 Unauthorized to invalid credentials, but the base Payment auth scheme defines payment-credential validation failures as 402 with a fresh WWW-Authenticate: Payment challenge (and reserves 401 for non-payment auth failures). Implementations following this row will produce non-interoperable behavior where clients cannot properly retry payment challenges.

Useful? React with 👍 / 👎.

@evchip

evchip commented Apr 22, 2026

Copy link
Copy Markdown
  1. Funds availability: With authorization keys on tempo, this method just gives users the "right" to capture funds, but does not guarantee funds can be captured (requires simulation). This makes this not a true auth+capture flow. To address this we could use a similar (same?) contract to what we use for sessions

Simulation is not a complete guarantee of funds availability. Escrow contract is needed to enable the 'without immediate payment' feature, else it must be capture-first-deliver-after, but that forces per-charge onchain settlement. It also negates the delayed fulfillment use case (server should not start provisioning unless payment is guaranteed).

  1. Authorize is functionally different from charge and session in that there is nothing preventing servers from overcharging. Charge and session intents both require client signatures for each transaction/voucher, but authorize allows servers to charge anything up to the cap, regardless of actual resource consumption. IMO best to explicitly note the loss of per-charge consent so implementers understand what guarantees authorize is/isn't giving them.

@brendanjryan

brendanjryan commented Apr 22, 2026

Copy link
Copy Markdown
Collaborator Author

@evchip

Escrow contract is needed to enable the 'without immediate payment' feature, else it must be capture-first-deliver-after, but that forces per-charge onchain settlement.

Correct -- this is one tradeoff with this design and something we do not like either. We are going to do another rev of this which uses an escrow, which also allows for partial + multi-capture flows -- an ask we have seen from users in the last few weeks.

We expect to have a new update to this in ~2 weeks!

@brendanjryan brendanjryan changed the title [draft] Authorization Intent Add authorize intent with capture methods May 13, 2026
@brendanjryan brendanjryan changed the title Add authorize intent with capture methods [intent] auth + capture May 14, 2026
ins: J. Moxey
email: jake@tempo.xyz
org: Tempo Labs
- name: Brendan Ryan

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

authors TBD

~~~

The core intent deliberately does not expose payment method capture
capabilities, such as whether the method performs one capture or multiple

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

important note!


## Refund Requests

Refunds are out of scope for the core authorize lifecycle. Clients MAY

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

note

ins: J. Moxey
email: jake@tempo.xyz
org: Tempo Labs
- name: Brendan Ryan

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

authors TBD

consensus: true

author:
- name: Brendan Ryan

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

authors tbd!

@brendanjryan brendanjryan changed the title [intent] auth + capture Add authorize intent drafts May 14, 2026
@brendanjryan brendanjryan changed the title Add authorize intent drafts [intent] authorize intent May 14, 2026
@brendanjryan brendanjryan changed the title [intent] authorize intent [intent] authorize intent (auth and capture) May 14, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants