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" }'Response
{
"payer_session": "…",
"expires_at": "2026-09-06T12:15:00Z",
"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. 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.
Response
payer_sessionstringexpires_attimestamptyped_dataobject- Domain { name: "Payday", version: "1", chainId, verifyingContract }. 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