Skip to content

docs(api): document payer EOA address in payment reconciliation#105

Open
aimen74 wants to merge 1 commit into
mainfrom
07-14-docs_api_document_payer_eoa_address_in_payment_reconciliation
Open

docs(api): document payer EOA address in payment reconciliation#105
aimen74 wants to merge 1 commit into
mainfrom
07-14-docs_api_document_payer_eoa_address_in_payment_reconciliation

Conversation

@aimen74

@aimen74 aimen74 commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

TL;DR

Added documentation for the new payerEoaAddress field across API responses and webhook payloads.

What changed?

A new payerEoaAddress field is now documented in the query requests reference, webhooks events overview, webhooks reference (including payload examples), and release notes. This field exposes the payer's connected wallet (EOA) address and is distinct from payerAddress, which reflects the on-chain sender. The two values can differ when a smart account is used to make a payment. Both fields return null when the respective address cannot be determined.

The release notes entry for payer wallet reconciliation was also updated to reflect that both payerAddress and payerEoaAddress are now included, replacing the previous description that only mentioned payerAddress.

How to test?

  • Trigger a payment using a smart account (e.g., ERC-4337 or Safe) and verify that the payment.confirmed or payment.partial webhook payload contains both payerAddress (the smart contract address) and payerEoaAddress (the connected EOA).
  • Query a request after payment and confirm payerEoaAddress appears in the response fields alongside payerAddress.
  • For a standard EOA payment, confirm both fields are present and may hold the same value.

Why make this change?

Smart account usage means the on-chain sender (payerAddress) is often a contract rather than the user's actual wallet. Exposing payerEoaAddress gives integrators a reliable way to identify the human-controlled wallet behind a payment, which is important for reconciliation, compliance, and customer identification workflows.

Document payerEoaAddress alongside payerAddress across Request API request
status and payment webhook documentation.

- Add payerEoaAddress to payment.confirmed and payment.partial webhook
  payload examples.
- Explain that payerAddress is the address used to make the payment, while
  payerEoaAddress is the payer's connected wallet address.
- Clarify that the addresses may differ when a smart account is used and that
  either value can be null when unavailable.
- Update the Webhooks & Events overview, Query Requests guide, and existing
  reconciliation release note.

Validation:
- Parsed all webhook JSON examples.
- Ran mint broken-links.
- Ran git diff --check.
@aimen74 aimen74 self-assigned this Jul 14, 2026

aimen74 commented Jul 14, 2026

Copy link
Copy Markdown
Contributor Author

This stack of pull requests is managed by Graphite. Learn more about stacking.

@mintlify

mintlify Bot commented Jul 14, 2026

Copy link
Copy Markdown

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated (UTC)
request-network 🟢 Ready View Preview Jul 14, 2026, 9:07 AM

💡 Tip: Enable Workflows to automatically generate PRs for you.

@mintlify

mintlify Bot commented Jul 14, 2026

Copy link
Copy Markdown

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated (UTC)
request-network 🟡 Building Jul 14, 2026, 9:06 AM

💡 Tip: Enable Workflows to automatically generate PRs for you.

@greptile-apps

greptile-apps Bot commented Jul 14, 2026

Copy link
Copy Markdown

Greptile Summary

This PR documents the new payerEoaAddress field across the API response reference, webhook event overview, webhook payload reference, and release notes. The field exposes the payer's connected EOA when a smart account (ERC-4337/Safe) is used, filling a reconciliation gap where payerAddress reflects the smart contract rather than the human-controlled wallet.

  • api-reference/webhooks.mdx: payerEoaAddress added to the common fields description and both payload examples; however, the pre-existing payerAddress description for ERC-4337/Safe flows ("resolved payer") contradicts the PR's stated semantics.
  • api-features/query-requests.mdx / webhooks-events.mdx: payerEoaAddress added consistently with minor inconsistency in null-condition phrasing.
  • release-notes/request-api.mdx: Entry updated accurately to reflect both fields.

Confidence Score: 4/5

Safe to merge after clarifying the payerAddress description for ERC-4337/Safe flows in the webhook reference.

The payerAddress description in api-reference/webhooks.mdx still says it is the 'resolved payer' for ERC-4337/Safe flows, implying it already resolves to the human EOA — directly undercutting the rationale for payerEoaAddress. A developer reading both descriptions would be unsure when the two fields actually differ for smart-account payments. All other changes are accurate and consistent.

api-reference/webhooks.mdx — the payerAddress common-fields description needs a targeted update to align with the smart-account semantics introduced by this PR.

Important Files Changed

Filename Overview
api-reference/webhooks.mdx Added payerEoaAddress to common fields and both payment.confirmed/partial JSON examples; the existing payerAddress description for ERC-4337/Safe flows ("resolved payer") contradicts the PR's stated semantics where payerAddress is the on-chain contract sender.
api-features/webhooks-events.mdx Updated Note callout to mention both payerAddress and payerEoaAddress with their distinction for smart account flows; change is accurate and clear.
api-features/query-requests.mdx Added payerEoaAddress to the typical fields list; minor inconsistency in null-condition wording compared to payerAddress.
release-notes/request-api.mdx Updated release note to reflect both payerAddress and payerEoaAddress; wording is accurate and consistent with the feature description.

Sequence Diagram

%%{init: {'theme': 'neutral'}}%%
sequenceDiagram
    participant Payer as Payer (EOA)
    participant SA as Smart Account (ERC-4337 / Safe)
    participant Chain as Blockchain
    participant API as Request Network API
    participant Dev as Integrator Webhook

    Payer->>SA: Initiate payment
    SA->>Chain: "Submit on-chain transaction (sender = contract address)"
    Chain-->>API: Payment detected
    Note over API: payerAddress = SA contract address<br/>payerEoaAddress = Payer EOA address
    API->>Dev: payment.confirmed webhook
    Dev-->>Dev: Reconcile using payerEoaAddress for human-controlled wallet identity
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
sequenceDiagram
    participant Payer as Payer (EOA)
    participant SA as Smart Account (ERC-4337 / Safe)
    participant Chain as Blockchain
    participant API as Request Network API
    participant Dev as Integrator Webhook

    Payer->>SA: Initiate payment
    SA->>Chain: "Submit on-chain transaction (sender = contract address)"
    Chain-->>API: Payment detected
    Note over API: payerAddress = SA contract address<br/>payerEoaAddress = Payer EOA address
    API->>Dev: payment.confirmed webhook
    Dev-->>Dev: Reconcile using payerEoaAddress for human-controlled wallet identity
Loading

Reviews (1): Last reviewed commit: "docs(api): document payer EOA address in..." | Re-trigger Greptile

@@ -199,6 +199,7 @@ All payment events include an `explorer` field linking to [Request Scan](https:/
- `timestamp`: ISO 8601 formatted event timestamp
- `paymentProcessor`: Either `request-network` (crypto) or `request-tech` (fiat)
- `payerAddress`: Resolved payer wallet — the on-chain sender for plain direct payments, or the resolved payer for recurring and intent-based flows (Secure Payment Page, LiFi, Safe, ERC-4337, multicall). `null` when it cannot be determined. Included on `payment.confirmed` and `payment.partial` events (and their `.client_id` / `.checkout` variants).

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 payerAddress description contradicts new payerEoaAddress semantics for ERC-4337/Safe flows

The existing payerAddress description states it is the resolved payer for "Safe, ERC-4337, multicall" flows. If it is already resolved to the human-controlled address in those flows, payerEoaAddress would always equal payerAddress for those cases — defeating the field's purpose. The PR description and webhooks-events.mdx instead say payerAddress is the on-chain sender (which is a smart contract for ERC-4337/Safe), and payerEoaAddress provides the connected EOA. The phrase "or the resolved payer for recurring and intent-based flows (Secure Payment Page, LiFi, Safe, ERC-4337, multicall)" should be clarified to reflect that payerAddress is the contract address for smart-account flows and resolution to EOA is what payerEoaAddress provides.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Comment on lines 32 to +33
- `payerAddress` — the resolved payer wallet address for the payment (`null` when it can't be determined, e.g. for some contract-mediated flows)
- `payerEoaAddress` — the payer's connected wallet address (`null` when unavailable). It can differ from `payerAddress` when a smart account is used.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 The null conditions for payerAddress and payerEoaAddress use different wording ("it can't be determined" vs "unavailable"), which is inconsistent given the PR description states both return null under the same condition. The AGENTS.md style guide requires consistent terminology throughout documentation.

Suggested change
- `payerAddress` — the resolved payer wallet address for the payment (`null` when it can't be determined, e.g. for some contract-mediated flows)
- `payerEoaAddress` — the payer's connected wallet address (`null` when unavailable). It can differ from `payerAddress` when a smart account is used.
- `payerAddress` — the resolved payer wallet address for the payment (`null` when it cannot be determined, e.g. for some contract-mediated flows)
- `payerEoaAddress` — the payer's connected wallet address (`null` when it cannot be determined). It can differ from `payerAddress` when a smart account is used.

Context Used: AGENTS.md (source)

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