Know Your
Agent.

SMS-based human verification for AI agents. Your agent registers a human's phone, requests approval for actions via SMS. The human replies YES or NO. Approved actions return a signed JWT attestation.

Your agents act. Your humans approve. Every action cryptographically attested.

# Register a human phone to your agent wallet
curl -X POST https://api.babble.to/v1/register \
  -H "Payment-Signature: <x402-payment>" \
  -d '{"phone": "+14155552671"}'
# => { "message": "OTP sent" }

# Request human approval for an action
curl -X POST https://api.babble.to/v1/verify \
  -H "Payment-Signature: <x402-payment>" \
  -d '{"action": "Transfer $500 to Alice"}'
# => { "id": "ver_abc123" }

# Long-poll for the human's decision
curl https://api.babble.to/v1/verify/ver_abc123
# => { "status": "approved", "jwt": "eyJ..." }

Human oversight for autonomous agents

POST /v1/register

Phone Registration

Link a human's phone number to your agent's wallet address. OTP verification ensures the human consents to receiving approval requests.

POST /v1/verify

Action Approval

Send the human a plain-text description of the action your agent wants to take. They reply YES or NO from their phone.

GET /v1/verify/:id

Signed Attestations

Approved actions return a signed JWT attesting the human approved the action. Validate anytime with the public endpoint.

HTTP 402

x402 Payments

No API keys, no accounts. Pay per request with USDC. Your agent's wallet is its identity — and its payment method.

When agents need human approval

Financial Actions

Transfers, purchases, and payments above thresholds require a human YES before execution.

Irreversible Operations

Deleting data, sending emails to large lists, or publishing content — confirm before proceeding.

Access Grants

Agents requesting elevated permissions or sharing sensitive data get human sign-off first.

Audit Trails

Keep a cryptographic record of which actions were approved by which humans and when.

Six endpoints. That's it.

POST /v1/register $0.10 / request

Link a human's phone number to the calling agent's wallet. Sends an OTP via SMS to the provided phone number.

Request Body

{
  "phone": "+14155552671"   // E.164 phone number
}

Response 200

{
  "message": "OTP sent"
}
POST /v1/register/confirm free

Confirm the OTP code received by the human. Completes registration and links the phone to the agent wallet.

Request Body

{
  "phone": "+14155552671",
  "code": "847291"
}

Response 200

{
  "message": "Registration confirmed"
}
POST /v1/verify $0.05 / request

Request human approval for an action. Sends the action description via SMS to the registered human. Returns immediately with a verification ID.

Request Body

{
  "action": "Transfer $500 USDC to 0xabc..."
}

Response 200

{
  "id": "ver_d4e5f6a7b8c90123"
}
GET /v1/verify/:id free

Long-poll for the human's decision. Waits up to 30 seconds, returns immediately when the human replies YES or NO.

Response — approved 200

{
  "status": "approved",
  "jwt": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}

Response — rejected 200

{
  "status": "rejected"
}

Response — pending (timeout) 200

{
  "status": "pending"
}
GET /v1/verify/validate free

Validate a JWT attestation. Pass the JWT as a query parameter. Returns the decoded claims if valid.

Query Parameters

?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

Response 200

{
  "valid": true,
  "claims": {
    "wallet": "0xabc...",
    "phone": "+14155552671",
    "action": "Transfer $500 USDC to 0xabc...",
    "approvedAt": "2026-03-05T10:30:00Z"
  }
}
GET /v1/agent free

Check registration status for the calling agent wallet. Returns the registered phone number if found.

Response 200

{
  "registered": true,
  "phone": "+14155552671"
}

Pay with HTTP, not API keys

Babble uses the x402 protocol for payments. No accounts, no API keys, no subscriptions. Your agent pays per request with USDC stablecoins. The wallet is the authentication.

1

Request

Agent sends a request to a Babble endpoint.

2

402 Response

Server responds with HTTP 402 and payment instructions in headers.

3

Pay & Retry

Agent signs a USDC payment and retries with the payment proof header.

# First request returns 402 with payment instructions
curl -i -X POST https://api.babble.to/v1/register \
  -d '{"phone": "+14155552671"}'

HTTP/1.1 402 Payment Required
Payment-Required: {"accepts":[{"scheme":"exact","price":"$0.10","network":"eip155:84532"}]}

# Agent constructs payment, retries with proof
curl -X POST https://api.babble.to/v1/register \
  -H "Payment-Signature: <signed-payment-proof>" \
  -d '{"phone": "+14155552671"}'

HTTP/1.1 200 OK
{"message": "OTP sent"}
$0.10 to register · $0.05 per verification · confirmation and reads free
NETWORK
Base Sepolia (testnet)
CURRENCY
USDC
PROTOCOL
x402
CLIENT SDK
x402 Buyer SDK

Put humans in the loop

Register once. Verify any action. No sign up required.

Read the API Docs