Skip to content

Registration fails with 'Expected 402 response' despite valid 402 — api.strale.io/x402/iban-validate #735

@petterlindstrom79

Description

@petterlindstrom79

Problem

Registering https://api.strale.io/x402/iban-validate on x402scan.com/resources/register fails with:

Registration Failed — Failed to register all 1 resources
URL: https://api.strale.io/x402/iban-validate
Error: Expected 402 response

This happens with both "Add Server" and "Register This URL Only" buttons.

The endpoint returns a valid 402

Verified via curl:

$ curl -s -w "\nHTTP_STATUS: %{http_code}\n" "https://api.strale.io/x402/iban-validate"

{"x402Version":1,"paymentRequirements":[{"scheme":"exact","network":"eip155:8453","maxAmountRequired":"10000","resource":"https://api.strale.io/x402/iban-validate","description":"Validate IBAN numbers","mimeType":"application/json","payTo":"0x66D7C2F952362BFB24FD7F02a9beC9c754ea83bC","maxTimeoutSeconds":300,"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}],"error":"Payment required","accepts":[{"network":"eip155:8453","asset":"USDC","amount":"$0.01"}]}
HTTP_STATUS: 402

Full response headers:

HTTP/1.1 402 Payment Required
Content-Type: application/json
Payment-Required: eyJ4NDAyVmVyc2lvbiI6MSwi...  (base64 v1 payload)
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: Payment-Required,X-Payment-Response

What we have

  • HTTP 402 status ✅
  • Payment-Required header with base64 v1 payload ✅
  • JSON body with paymentRequirements array (v2 format) ✅
  • scheme: "exact"
  • network: "eip155:8453" (Base mainnet) ✅
  • asset: USDC contract on Base ✅
  • payTo: valid wallet address ✅
  • Both GET and POST return 402 ✅

Environment

  • Server: Hono on Railway (europe-west4)
  • Agent card at /.well-known/agent-card.json
  • TLS: Railway edge handles TLS, curl shows a renegotiation during handshake

Question

Is there something specific about the 402 response format that x402scan expects beyond the standard x402 spec? For example:

  • Does x402scan require the header to be PAYMENT-REQUIRED (all-caps) instead of Payment-Required?
  • Does it need a specific x402Version value (2 instead of 1)?
  • Does it validate against a registered facilitator?
  • Could TLS renegotiation be causing the probe to fail?

Happy to adjust our response format if needed. Thanks!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions