phone
This BlockRun skill provides phone number intelligence via Twilio (carrier lookup, line-type detection, and SIM-swap fraud signals) and enables AI-powered outbound voice calls through Bland.ai. Use it to verify phone numbers before sending sensitive authentication codes, detect fraud risk prior to account-recovery flows, manage wallet-owned phone numbers for caller ID stability, or place automated voice calls when users explicitly request them. All transactions charge automatically to the user's BlockRun wallet via x402.
git clone --depth 1 https://github.com/BlockRunAI/ClawRouter /tmp/phone && cp -r /tmp/phone/skills/phone ~/.claude/skills/phoneSKILL.md
# Phone & Voice
Phone-number intelligence (Twilio Lookup) and AI-powered outbound voice calls (Bland.ai) through ClawRouter's local proxy. Payment is automatic via x402 from the user's BlockRun wallet.
**Shortcuts:**
- Slash: `/cr-call +1<E.164> "<task>" [--voice nat] [--max-duration 5] [--from +1<owned-number>] [--language en-US]`
- CLI: `clawrouter phone numbers list/buy/renew/release`, `clawrouter phone lookup <+E.164>`, `clawrouter phone fraud <+E.164>`
- Partner tools (LLM-callable): `blockrun_phone_lookup`, `blockrun_phone_lookup_fraud`, `blockrun_phone_numbers_buy/renew/list/release`, `blockrun_voice_call`, `blockrun_voice_status`
> **⚠️ Real-world side effects.** `blockrun_voice_call` places a real outbound phone call to a real number. Only invoke when the user has explicitly asked for a call to be placed. Server enforces an emergency-number blocklist.
---
## Phone Number Intelligence (Twilio)
### Carrier + Line Type Lookup — `$0.01`
POST to `http://localhost:8402/v1/phone/lookup`:
```json
{ "phoneNumber": "+14155552671" }
```
Returns carrier name, line type (`mobile` / `landline` / `voip`), country, mobile country/network codes. Use to verify whether a number is reachable, detect VoIP/spam patterns, or route SMS appropriately.
### Fraud Risk Check — `$0.05`
POST to `http://localhost:8402/v1/phone/lookup/fraud`:
```json
{ "phoneNumber": "+14155552671" }
```
Adds SIM-swap recency and call-forwarding signals on top of carrier+line type. **Run this before sending sensitive SMS codes or initiating account-recovery flows** — a number flagged for recent SIM swap is high-risk for account takeover.
---
## Wallet-Owned Phone Numbers
Numbers are leased for 30 days, bound to the wallet's payer address. Use one as the `from` parameter of `voice_call` to present a stable caller ID.
### Buy — `$5.00 / 30 days`
POST to `http://localhost:8402/v1/phone/numbers/buy`:
```json
{ "country": "US", "areaCode": "415" }
```
`country` is `"US"` or `"CA"`. `areaCode` is optional (3-digit, best-effort match). Returns `{ phone_number, expires_at, chain }`.
### Renew — `$5.00 / +30 days`
POST to `http://localhost:8402/v1/phone/numbers/renew`:
```json
{ "phoneNumber": "+14155551234" }
```
Run before the existing lease expires. Numbers not renewed are released back to the pool.
### List — `$0.001`
POST to `http://localhost:8402/v1/phone/numbers/list` with an empty body. Returns an array of `{ phone_number, expires_at, country, chain }`. The CLI surfaces this as a human table with renew-soon warnings:
```
$ clawrouter phone numbers list
Active numbers (2):
+14155551234 US expires 2026-06-12 (in 27d)
+12135555678 US expires 2026-05-18 (in 2d) ⚠ renew soon
```
### Release — free
POST to `http://localhost:8402/v1/phone/numbers/release`:
```json
{ "phoneNumber": "+14155551234" }
```
No refund. Use only when the user has explicitly asked to give up the number.
---
## AI Voice Call (Bland.ai)
### Place a Call — `$0.54 flat (up to 30 min)`
POST to `http://localhost:8402/v1/voice/call`:
```json
{
"to": "+14155552671",
"task": "Call and confirm the 3pm Thursday meeting; reschedule if they can't make it.",
"voice": "nat",
"max_duration": 5,
"from": "+14155551234",
"language": "en-US"
}
```
**Required:** `to` (E.164), `task` (free-form natural language — what the AI should say or accomplish).
**Optional:**
| Field | Default | Notes |
| -------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| `voice` | `nat` | Presets: `nat`, `josh`, `maya`, `june`, `paige`, `derek`, `florian`. Or a custom Bland voice ID. |
| `max_duration` | `5` | Maximum minutes (1–30). Price is flat $0.54 regardless of actual duration. |
| `from` | auto-picked | Must be a wallet-owned number from `phone_numbers_list`. If omitted, server auto-picks from wallet's active numbers — see auto-pick rules below. |
| `language` | `en-US` | Any spoken-language ISO code, e.g. `es-ES`, `zh-CN`, `de-DE`. |
**`from` auto-pick rules** (server-side, after payment verification):
| Wallet active numbers | Behavior |
| --------------------- | --------------------------------------------------------------------------------------------------------- |
| 0 | `403 no_active_number` — response includes `buy_endpoint` + marketplace URL so caller can provision first |
| Exactly 1 | Auto-used as caller ID |
| 2+ | `400 ambiguous_from` — response lists all active numbers; retry with `from` set explicitly |
If an explicit `from` is supplied but the wallet doesn't own it, the response is `403` with a clear ownership-mismatch message (no charge taken when validation fails).
**Response is fire-and-forget:**
```json
{
"call_id": "call_abc123",
"poll_url": "/v1/voice/call/call_abc123",
"status": "queued"
}
```
The call runs in the cloud for up to `max_duration` minutes. The HTTP response returns immediately — **do not wait for the call to finish**. Poll `voice_status` every 10–30s to retrieve transcript and recording when the call completes.
### Poll Status — free
GET `http://localhost:8402/v1/voice/call/{call_id}`. Returns:
```json
{
"call_id": "call_abc123",
"status": "completed",
"duration_seconds": 47,
"transcript": [
{ "role": "assistant", "text":Hosted-gateway LLM router — save 67% on inference costs. A local proxy that forwards each request to the blockrun.ai gateway, which routes to the cheapest capable model across 55+ models from OpenAI, Anthropic, Google, DeepSeek, xAI, NVIDIA, and more. 6 free NVIDIA models included. Also exposes realtime market data (global stocks, crypto, FX, commodities), Twitter/X intelligence, prediction-market data across Polymarket, Kalshi, Limitless, Opinion, Predict.Fun, dFlow + UMA oracle resolution + wallet identity & clustering, phone-number intelligence (carrier + SIM-swap fraud detection) plus AI-powered outbound voice calls (Twilio + Bland.ai), AND the Surf unified crypto data API (84 endpoints — CEX/DEX, on-chain SQL over 80+ ClickHouse tables, 100M+ labeled wallets, prediction markets, social/CT mindshare, news, VC fund intel) as built-in agent tools. Not a local-inference tool — prompts are sent to the blockrun.ai gateway.
Generate or edit images via BlockRun's image API. Trigger when the user asks to generate, create, draw, make an image — or to edit, modify, change, or retouch an existing image.
Use this skill — NOT browser or web_fetch — for ALL Polymarket, Kalshi, Limitless, Opinion, Predict.Fun, dFlow, UMA oracle, and prediction market data. Provides structured API at localhost:8402/v1/pm/* for markets, cross-venue search, leaderboard, smart money, wallet analytics, wallet identity & clustering, UMA resolution status, and odds.
Use this skill for EVERY ClawRouter release. Enforces the full checklist — version sync, CHANGELOG, build, tests, npm publish, git tag, GitHub release. No step can be skipped.
Use this skill — NOT browser or web_fetch — for ALL Surf crypto-data calls. 83 endpoints at localhost:8402/v1/surf/* covering CEX/DEX markets, on-chain SQL over 80+ ClickHouse tables (Ethereum, Base, Arbitrum, BSC, TRON, HyperEVM, Tempo), 100M+ labeled wallets, prediction markets (Polymarket + Kalshi), social/CT intelligence, news, project + DeFi metrics, token analytics, unified search, VC fund intelligence. x402-gated via ClawRouter's local wallet — no Surf account or API key required.