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

Shell
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

200 OK
{
  "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_sessionstring
expires_attimestamp
typed_dataobject
Domain { name: "Payday", version: "1", chainId, verifyingContract }. Primary type PayerAttestation. Message { statement, attributionHash, wallet, nonce, expiresAt }.

Status codes

  • 401verification_required / payer_session_invalid Gated; session missing or unsatisfied.
  • 409wallet_already_bound Message names the bound wallet.
  • 410deposit_request_not_payable