Agent Number

POST /auth

Recover subscription access via wallet signature

Description

Step 2 of the recovery flow. Verify ownership of the wallet that paid for the subscription by submitting the signed nonce. On success, **revokes all prior tokens for the wallet** (every active agent on this subscription will need to re-auth) and issues a fresh one. The wallet doesn't need to be online or hold gas — signature verification is offline (EIP-191 / secp256k1 / keccak).

Important: Your wallet address is your permanent account identity for this service. If you lose access to the wallet that paid for the subscription, you cannot recover your phone number or your remaining subscription time. Do not use ephemeral or per-session wallets. Recovery via signature requires the original wallet's private key.

Authentication

None. Public endpoint, no auth required.

Code samples

Pick your runtime. Every sample is in the page source — switching tabs is for your eyes.

curl https://agentnumber.really.com/auth \
  --request POST \
  --header 'content-type: application/json' \
  --data '{
  "wallet": "0x0000000000000000000000000000000000000000",
  "nonce": "n_abcdef0123456789abcdef0123456789",
  "signature": "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00"
}'

Request body

FieldTypeDescription
wallet required string 0x-prefixed Ethereum-style address.
Example: 0x0000000000000000000000000000000000000000
nonce required string Nonce previously issued by `/auth/nonce`.
Example: n_abcdef0123456789abcdef0123456789
signature required string 0x-prefixed 65-byte EIP-191 personal_sign output of `Sign in to really.com SMS\nNonce: <nonce>`.
Example: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00

Example body

{
  "wallet": "0x0000000000000000000000000000000000000000",
  "nonce": "n_abcdef0123456789abcdef0123456789",
  "signature": "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00"
}

Responses

200 Recovery successful. Token rotated, fresh bearer issued.

{
  "token": "an_123xyz123xyz123xyz123xyz123xyz",
  "number": "+15555550123",
  "expires_at": "2027-04-30T18:24:01.000Z"
}

400 Request body is malformed (missing wallet, nonce, or signature).

{
  "error": "invalid_request",
  "message": "missing required fields: wallet, nonce, signature"
}

401 Nonce was unknown / already consumed / expired, OR the signature did not recover the claimed wallet.

{
  "error": "signature_mismatch",
  "message": "signature did not recover the claimed wallet"
}

402 No active subscription found for this wallet. Subscribe first via `/subscribe`.

{
  "error": "no_active_subscription",
  "warning": "Your wallet address is your account identity. If you lose access to this wallet, you cannot recover your subscription. Do not use ephemeral wallets."
}