Skip to main content

Overview

When the wallet paying a secure payment is an existing Gnosis Safe multisig, the payment cannot be broadcast in a single signature โ€” it has to be proposed on the Safe, signed by the required owners, and then executed. Request Network supports this flow directly: you ask the calldata endpoint for Safe-ready transactions, execute them on your Safe off-platform, and then hand the resulting Safe transaction hash back to the API so it can track settlement. This is distinct from the smart-account path on the hosted secure payment page, which derives its own ERC-4337 account automatically. Use the flow on this page when your own payer wallet is a Safe and you execute the transaction yourself.
Safe multisig payments are EVM-only. They are not supported on Tron โ€” requesting Safe calldata for a Tron network returns a 400.

How it works

1

Request Safe-ready calldata

Call GET /v2/secure-payments/:token/pay with isSafe=true and wallet set to the Safe address. The API returns calldata sized and priced for a Safe (it includes the required approval transactions and skips the EOA native-gas balance check).
curl -X GET "https://api.request.network/v2/secure-payments/01ABC123DEF456GHI789JKL/pay?wallet=0xSAFE_ADDRESS&isSafe=true" \
  -H "x-client-id: YOUR_CLIENT_ID"
isSafe=true is mutually exclusive with eoaWallet, and wallet is required. The wallet value must be the Safe address that will execute the payment.
2

Propose and execute on your Safe

Propose the returned transactions to your Safe, collect the required owner signatures, and execute. This happens entirely on your side using your Safe tooling โ€” Request Network does not custody keys or co-sign.
3

Record the Safe transaction

Once the Safe transaction is created, tell the API to start tracking it by calling POST /v2/secure-payments/:token/intent with safeTxHash (instead of txHash).
curl -X POST "https://api.request.network/v2/secure-payments/01ABC123DEF456GHI789JKL/intent" \
  -H "x-client-id: YOUR_CLIENT_ID" \
  -H "Content-Type: application/json" \
  -d '{
    "safeTxHash": "0xSAFE_TX_HASH",
    "chain": "POLYGON",
    "token": "USDC",
    "safePaymentDeadline": 1749760800
  }'
Exactly one of txHash or safeTxHash must be provided. safePaymentDeadline is optional (Unix seconds) and can only be sent alongside safeTxHash.
4

Poll for settlement

While the Safe transaction is pending execution, GET /v2/secure-payments/:token returns HTTP 423 (Locked) with the message Secure payment is in progress and a requestStatuses[] array carrying safeTxHash, chainId, and safePaymentDeadline. Request Network resolves the Safe transaction in the background: once executed it records the real on-chain transaction hash and confirms the payment; if it fails or the deadline passes, the payment is marked failed.

Request fields

GET /v2/secure-payments/:token/pay

wallet
string
required
The Safe address that will execute the payment. Used for balance and approval calculation.
isSafe
boolean
Set to true to prepare calldata for a Gnosis Safe multisig payer. Mutually exclusive with eoaWallet; wallet must be set to the Safe address.
chain
string
Source chain for cross-chain payments. Values: BASE, OPTIMISM, ARBITRUM, ETHEREUM, POLYGON, BNB. Provide together with token.
token
string
Source currency for cross-chain payments. Values: USDC, USDT. Provide together with chain.

POST /v2/secure-payments/:token/intent

safeTxHash
string
The Safe transaction hash to track. Provide either safeTxHash (Safe multisig flow) or txHash (already-broadcast on-chain hash) โ€” exactly one.
safePaymentDeadline
number
Unix timestamp (seconds) โ€” the hard on-chain execution deadline for the Safe + cross-chain route. Only valid alongside safeTxHash; the API stops tracking once this passes.
chain
string
required
Source chain. Values: BASE, OPTIMISM, ARBITRUM, ETHEREUM, POLYGON, BNB.
token
string
required
Source token. Values: USDC, USDT.
payerAddress
string
Optional address of the wallet making the payment. Echoed back on the response.
{
  "intentId": "01HXEXAMPLE123",
  "paymentReference": "0xb3581f0b0f74cc61",
  "safeTxHash": "0xSAFE_TX_HASH",
  "safePaymentDeadline": 1749760800,
  "isListening": true
}

Status while a Safe payment is in progress

{
  "message": "Secure payment is in progress",
  "status": "pending",
  "requestStatuses": [
    {
      "requestId": "01e273ecc29d4b526df3a0f1f05ffc59372af8752c2b678096e49ac270416a7cdb",
      "hasBeenPaid": false,
      "safeTxHash": "0xSAFE_TX_HASH",
      "chainId": 137,
      "safePaymentDeadline": 1749760800
    }
  ]
}
Treat 423 as โ€œkeep pollingโ€ โ€” the Safe transaction has been recorded but not yet executed on-chain. Once Request Network detects execution, the request flips to paid (and GET /v2/secure-payments/:token returns the completed state); a payment.confirmed webhook fires as usual.

Secure Payments API Reference

Full request/response schemas for the secure payment endpoints.

Smart account payments

The automatic ERC-4337 path on the hosted page (for EOA payers).