Récupérer l'accès
Updated:
Vous avez perdu le jeton d'accès d'une commande ? Prouvez que vous êtes bien le titulaire du portefeuille utilisé pour le paiement en signant un message à usage unique, et récupérez toutes les commandes associées à ce portefeuille avec de nouveaux jetons d'accès, les paiements encore en cours et le solde.
Les anciens jetons continuent de fonctionner tant que vous ne les révoquez pas.
Le déroulement
Relevez le défi
POST /wallet/challengeRenvoie un message texte (EIP-4361) pour votre portefeuille.
Signez le message
personal_sign(EIP-191) demessageexactement tel qu'il a été reçu. La signature n'entraîne aucun transfert de fonds.Récupérer
POST /wallet/recoverRenvoie les commandes du portefeuille avec de nouveaux jetons d'accès.
Relevez le défi
Corps de la requête
Nom | Type | Description |
|---|---|---|
adresse | Chaîne de caractères | Obligatoire. Adresse de portefeuille, |
objectif | Chaîne de caractères |
|
Une requête est envoyée à n'importe quelle adresse : la réponse n'indique pas si l'adresse a des commandes.
Exemple
POST https://proxy-seller.com/api/x402/v1/wallet/challenge
{
"address": "0x1111111111111111111111111111111111111111",
"purpose": "recover"
}Réponse
200 : OK
{
"challenge_id": "chl_01JZ9E5F7G9H1J3K5M7N9P1Q3R",
"address": "0x1111111111111111111111111111111111111111",
"purpose": "recover",
"message": "proxy-seller.com wants you to sign in with your Ethereum account:\n0x1111111111111111111111111111111111111111\n\nRecover access to orders paid from this wallet at Proxy-Seller. Signing does not move funds.\n\nURI: https://proxy-seller.com/api/x402/v1/wallet/recover\nVersion: 1\nChain ID: 8453\nNonce: sDYRsY6sbhBxxPSC\nIssued At: 2026-11-02T12:00:00Z\nExpiration Time: 2026-11-02T12:05:00Z\nRequest ID: chl_01JZ9E5F7G9H1J3K5M7N9P1Q3R",
"expires_at": "2026-11-02T12:05:00Z",
"signature": {
"type": "eip191_personal_sign",
"contract_wallets": "eip1271"
}
}Un défi a une durée de vie de 5 minutes et ne peut être utilisé qu'une seule fois. Les portefeuilles de contrats intelligents sont pris en charge via l'EIP-1271 lorsque contract_wallets est eip1271.
Récupérer
Corps de la requête
Nom | Type | Description |
|---|---|---|
challenge_id | Chaîne de caractères | Obligatoire. Identifiant d'un défi avec |
signature | Chaîne de caractères | Obligatoire. Signature de |
limite | Nombre entier | Nombre d'entrées par page : 1 à 200, 50 par défaut |
offset | Nombre entier | Décalage de page, à partir de 0 |
revoke_existing | Booléen | Révoquez tous les jetons de ce portefeuille émis avant la création de ce défi. |
Chaque page doit présenter un nouveau défi. Envoyer revoke_existing: true Uniquement sur la première page : sur une page suivante, cela annulerait les jetons que vous venez de recevoir sur les pages précédentes.
Exemple
POST https://proxy-seller.com/api/x402/v1/wallet/recover
{
"challenge_id": "chl_01JZ9E5F7G9H1J3K5M7N9P1Q3R",
"signature": "0x9a7c…1c",
"limit": 50,
"offset": 0
}Réponse
200 : OK
{
"wallet": "0x1111111111111111111111111111111111111111",
"network": "eip155:8453",
"account": {
"type": "wallet",
"exists": true,
"status": "active",
"balance_usd": "6.40",
"email_attached": false,
"topup_url": "https://proxy-seller.com/api/x402/v1/topup",
"withdraw_url": "https://proxy-seller.com/api/x402/v1/wallet/withdraw"
},
"orders": [
{
"order_id": "ord_01JZ8Q7K5N2R4T6V8X0Z2B4D6F",
"status": "active",
"payment_state": "settled",
"summary": "2x IPv4 US, 30 days",
"amount_usd": "3.60",
"created_at": "2026-11-02T10:01:12Z",
"expires_at": "2026-12-02T23:59:59Z",
"url": "https://proxy-seller.com/api/x402/v1/orders/ord_01JZ8Q7K5N2R4T6V8X0Z2B4D6F",
"access_token": "x402_Nf5gT2hY8jU4kI1oL7pA3sD9fG6hJ0kL2zX5cV8bN4m",
"token_type": "Bearer"
}
],
"pending_payments": [],
"topups": [
{
"id": "tup_01JZ9D4E6F8G0H2J4K6M8N0P2Q",
"status": "credited",
"payment_state": "settled",
"amount_usd": "10.00",
"created_at": "2026-11-02T11:20:31Z",
"url": "https://proxy-seller.com/api/x402/v1/topup/tup_01JZ9D4E6F8G0H2J4K6M8N0P2Q",
"access_token": "x402_Rt6yU1iO7pA2sD8fG3hJ9kL4zX0cV5bN6mQ1wE7rT2y",
"token_type": "Bearer"
}
],
"withdrawals": [
{
"id": "wdr_01JZ9E8H0J2K4M6N8P0Q2R4S6T",
"status": "done",
"amount_usd": "6.40",
"address": "0x1111111111111111111111111111111111111111",
"network": "eip155:8453",
"created_at": "2026-12-03T09:14:22Z",
"tx_hash": "0x5c3e8a1f0b7d4e2c9a6f1b8d3e0c7a4f2b9e6d1c8a5f3e0b7d4c1a9f6e3b8d2c",
"sent_at": "2026-12-03T15:40:05Z",
"confirmed_at": "2026-12-03T15:43:10Z"
}
],
"pagination": {
"limit": 50,
"offset": 0,
"total": 1
}
}Nom | Description |
|---|---|
compte |
|
commandes | Commandes du portefeuille, les plus récentes en premier, avec de nouveaux jetons. Aucun jeton n'est émis lorsque la période d'accès à la commande est terminée (90 jours après son expiration). |
pending_payments | Paiements dont l'issue n'est pas encore connue ou qui sont en cours d'examen : |
recharges | Jusqu’à 20 derniers recharges avec de nouveaux jetons |
retraits | Jusqu'à 20 dernières demandes de retrait du portefeuille, les plus récentes en premier : |
pagination |
|
Remarque | Uniquement pour un portefeuille bloqué : les commandes sont répertoriées sans jetons |
401 : Accès non autorisé — la signature ne provient pas de l'adresse du défi.
404 : Page introuvable
{
"error": "not_found",
"message": "Challenge not found",
"retryable": false,
"retry_action": "abandon",
"detail": "challenge is unknown, expired or already used"
}Le défi est inconnu, a expiré, a déjà été utilisé ou a été attribué pour withdraw. En choisir un autre.