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", "chain_id": "143" }'

Response

200 OK
{
  "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_sessionstring
expires_attimestamp
chainobject
{ 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

  • 401verification_required / payer_session_invalid Gated; session missing or unsatisfied.
  • 409wallet_already_bound Message names the bound wallet.
  • 410deposit_request_not_payable
  • 422unsupported_chain chain_id is not one of the request's networks.