Payer routes
Create a wallet challenge
POST/v1/payer/deposit-requests/{id}/wallet/challenge
Mints a one-time nonce and returns the EIP-712 attestation to sign.
Unauthenticated · Payday-Payer-Session unlocks gated content.
Request
curl -fsS -X POST "$API/v1/payer/deposit-requests/dr_0198f80c-…/wallet/challenge" \
-H "Payday-Payer-Session: $PAYER_SESSION" \
-H "Content-Type: application/json" \
-d '{ "wallet": "0x5aAeb6053F3E94C9b9A09f33669435E7Ef1BeAed", "chain_id": "143" }'Response
{
"payer_session": "…",
"expires_at": "2026-09-06T12:15:00Z",
"chain": { "id": "143", "name": "Monad" },
"typed_data": {
"domain": { "name": "Payday", "version": "1", "chainId": 143, "verifyingContract": "0x…" },
"primaryType": "PayerAttestation",
"types": { "EIP712Domain": [ "…" ], "PayerAttestation": [ "…" ] },
"message": {
"statement": "I will pay this Payday deposit request from this wallet.",
"attributionHash": "0x…",
"wallet": "0x5aAeb6053F3E94C9b9A09f33669435E7Ef1BeAed",
"nonce": "0x…",
"expiresAt": 1757160900
}
}
}Required for every request before an address exists. Gated modes require a session that satisfies the policy; permissionless requests without a session receive one. The payer chooses the network here: chain_id must be one of the request's networks (a single entry when the merchant pinned it), and the typed data's domain names that chain and its factory, so the wallet must be on it to sign. The attestation binds the wallet to that chain and the address exists only there. Pass typed_data to eth_signTypedData_v4 unmodified. Challenge validity: ten minutes.
Headers
Payday-Payer-Sessionstring- Required for gated modes.
Path parameters
iddr_ idrequired
Body
walletstringrequired- Paying wallet.
chain_idstringrequired- The chosen network. One of the request's networks[].chain.id.
Response
payer_sessionstringexpires_attimestampchainobject- { id, name }. The chosen network.
typed_dataobject- Domain { name: "Payday", version: "1", chainId, verifyingContract } for the chosen network. Primary type PayerAttestation. Message { statement, attributionHash, wallet, nonce, expiresAt }.
Status codes
- 401
verification_required / payer_session_invalidGated; session missing or unsatisfied. - 409
wallet_already_boundMessage names the bound wallet. - 410
deposit_request_not_payable - 422
unsupported_chainchain_id is not one of the request's networks.