ONBOARDING_STEPS
01
Get Test
USDC
02
Sign &
Submit
03
Poll for
Results
STEP 01: GET FREE TEST USDC

Get Test USDC

The x402 scraper runs on Base Sepolia testnet. Get free test USDC from the Circle Faucet — no cost, no credit card required. You need ~0.10 USDC per crawl request.

Open Circle Faucet
step_01_faucet.sh Base Sepolia
# 1. Get free test USDC from Circle Faucet (Base Sepolia)
open https://faucet.circle.com
# Select "Base Sepolia" + paste your wallet address
# You'll receive 10 USDC for testing

# USDC contract on Base Sepolia:
USDC_ADDRESS=0x036CbD53842c5426634e7929541eC2318f3dCF7e
STEP 02: SIGN EIP-712 PAYLOAD & SUBMIT

Sign & Submit

First POST without payment to receive the 402 challenge. Sign the EIP-712 transferWithAuthorization payload with your wallet, base64-encode it, and include it as the X-PAYMENT header on your second request.

step_02_sign_submit.sh EIP-712
# 2. Build X-PAYMENT header (EIP-712 transferWithAuthorization)
# First, call POST /api/crawl without payment to get 402 body:
curl -X POST https://api.scrvo.com/api/crawl \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com"}'
# Response: 402 with accepts[] containing scheme, payTo, maxAmountRequired

# Sign EIP-712 payload, base64-encode, and submit with X-PAYMENT header:
curl -X POST https://api.scrvo.com/api/crawl \
  -H "Content-Type: application/json" \
  -H "X-PAYMENT: <base64-encoded-signed-payload>" \
  -d '{"url":"https://example.com","formats":["markdown","html"]}'

# 202 response body contains jobId and pollUrl
[ AWAITING AGENT SIGNATURE ]
PENDING HANDSHAKE WITH DISTRIBUTED EDGE NETWORK
STEP 03: POLL FOR RESULTS

Poll for Results

After a 202 response, use the jobId to poll GET /api/crawl/:jobId. The first 30-60 seconds may return 404 due to database replication lag — this is expected. Poll until status is completed.

step_03_poll.sh GET /api/crawl/:jobId
# 3. Poll for results using jobId from 202 response
# Note: First 30-60s may return 404 (D1 eventual consistency -- expected)
curl https://api.scrvo.com/api/crawl/YOUR_JOB_ID

# Keep polling until status = "completed":
# {
#   "jobId": "...",
#   "status": "completed",
#   "total": 1,
#   "finished": 1,
#   "records": [{ "url": "...", "markdown": "...", "html": "..." }]
# }

# Cancel a running job:
curl -X DELETE https://api.scrvo.com/api/crawl/YOUR_JOB_ID
View Full Protocol Docs