Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -409,7 +409,7 @@ See [research/](./research/) for methodology.

## Vision

**AI agents can't pay for services.** Traditional payment rails require account creation, credit cards, and KYC verification - none of which agents can do.
**AI agents can't pay for services.** Traditional payment rails require account creation, credit cards, and identity verification - none of which agents can do.

But agents have something better: **wallets**.

Expand Down Expand Up @@ -473,7 +473,7 @@ ClawRouter is an open-source (MIT licensed) smart LLM router built for autonomou
BlockRun is agent-native — it uses wallet signatures for authentication instead of API keys, and USDC micropayments instead of credit cards. This means AI agents can operate autonomously without human intervention. BlockRun also includes ClawRouter for smart routing, third-party data & runtime services, and multi-chain support (Base + Solana).

### What is the x402 protocol?
The x402 protocol is an HTTP-native payment standard based on HTTP status code 402 ("Payment Required"). It allows any HTTP request to include a cryptographic USDC payment, enabling machine-to-machine payments without accounts, credit cards, or KYC verification. BlockRun is a leading implementation of x402.
The x402 protocol is an HTTP-native payment standard based on HTTP status code 402 ("Payment Required"). It allows any HTTP request to include a cryptographic USDC payment, enabling machine-to-machine payments without accounts, credit cards, or identity verification. BlockRun is a leading implementation of x402.

### How much does BlockRun cost?
BlockRun uses pay-per-request pricing with no subscriptions. Per-token chat is billed at provider cost with no platform margin — only a flat $0.001 transaction fee is added per request; media generation and Live Search carry a 5% margin. Prices start at $0.002 per request for the cheapest data endpoints. $5 in USDC is enough for thousands of requests.
Expand Down
4 changes: 2 additions & 2 deletions VISION.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ The AI agent economy is growing exponentially, but there's a fundamental problem
Traditional payment rails require:
- Account creation (agents can't fill forms)
- Credit cards (agents don't have bank accounts)
- KYC verification (agents have no identity)
- Identity verification (agents have no legal identity)
- API key management (agents lose keys, keys get leaked)

But agents have something better: **wallets**.
Expand Down Expand Up @@ -60,7 +60,7 @@ Route any x402 service through BlockRun:
We believe the future is:

1. **Agents as economic actors** - Agents earn, save, and spend
2. **Wallet as identity** - No accounts, no passwords, no KYC
2. **Wallet as identity** - No accounts, no passwords, no API keys
3. **Micropayments at scale** - Pay per request, not per month
4. **Trust through transparency** - Open ratings, open data

Expand Down
2 changes: 1 addition & 1 deletion docs/api-reference/models.md
Original file line number Diff line number Diff line change
Expand Up @@ -280,7 +280,7 @@ Seedance defaults to **720p with synced audio** for text-to-video; pass `resolut
| `bytedance/seedance-2.5` | Seedance 2.5 | ~$0.315/sec ($1.58 / 5s clip) | 30s |
| `azure/sora-2` | Sora 2 | $0.10/sec (4s = $0.42) | 12s |

For character consistency across multiple Seedance videos, enroll a [Virtual Portrait](virtual-portrait.md) ($0.011 one-time, no KYC) for AI characters, or a [RealFace](realface.md) ($0.011 one-time, no KYC, requires brief on-phone liveness check) for real people. Pass the returned `ta_xxx` as `real_face_asset_id`.
For character consistency across multiple Seedance videos, enroll a [Virtual Portrait](virtual-portrait.md) ($0.011 one-time, no government ID) for AI characters, or a [RealFace](realface.md) ($0.011 one-time, no government ID, requires brief on-phone liveness check) for real people. Pass the returned `ta_xxx` as `real_face_asset_id`.

## Model Categories

Expand Down
6 changes: 3 additions & 3 deletions docs/api-reference/realface.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
---
title: RealFace Enrollment
description: Enroll a real person's face (no KYC, ~1-min on-phone liveness) as a ta_xxx asset for consistent likeness across Seedance 2.0 / 2.0 Fast / 2.0 Mini videos.
description: Enroll a real person's face (no government ID, ~1-min on-phone liveness) as a ta_xxx asset for consistent likeness across Seedance 2.0 / 2.0 Fast / 2.0 Mini videos.
---

# RealFace Enrollment

Enroll a real person's face as a `ta_xxxxxxxx` asset you can pass as `real_face_asset_id` on any Seedance 2.0 / 2.0 Fast / 2.0 Mini call. Use this when you want **a real person to appear consistently across multiple videos** (talking head, spokesperson, character continuity).

:::note{title="No KYC required"}
:::note{title="Liveness check only"}
No government ID, no account login, no name verification. Just a brief on-phone liveness check (nod + blink, ~1 minute) that proves the person enrolling is the same as the person in the photo. The biometric data is processed by the upstream identity service — BlockRun never sees it. For purely AI-generated characters (no real person involved), use [Virtual Portrait](virtual-portrait.md) instead ($0.011, no liveness step).
:::

Expand Down Expand Up @@ -296,7 +296,7 @@ The video playground reads this same list and shows it in the `real_face_asset_i
| Price | $0.011 USDC | $0.011 USDC |
| Liveness check | Not required | Required (~1 minute on phone) |
| Upstream verification | None | Biometric match against H5 live face |
| KYC / government ID | Not required | Not required |
| Government ID | Not required | Not required |
| Compatible models | Seedance 2.0 / 2.0 Fast / 2.0 Mini | Seedance 2.0 / 2.0 Fast / 2.0 Mini |

## What's next?
Expand Down
20 changes: 11 additions & 9 deletions docs/api-reference/video-generation.md
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ Whether you can seed generation from an image — and how — depends on the sub

- **Non-human subject** (product, scene, animal, object): pass `image_url` (a public `https` URL to the first frame, or an inline `data:image/...;base64,` URI) on **`azure/sora-2`**, **Grok**, or any **Seedance** model. For `azure/sora-2` the gateway resizes the seed image server-side to Sora's exact required dimensions (1280×720 / 720×1280). Seedance image-to-video is billed at the same per-token rate as text-to-video.
- **A specific real person**: you cannot upload a face to Sora (see the note below), and Seedance rejects a seed image that contains a real face (`400`, `code: "INPUT_IMAGE_REAL_PERSON"`). Use **Seedance 2.0 / 2.0-fast / 2.0-mini + a RealFace `ta_xxxx` asset** — enroll the person once *with their consent* ([RealFace](realface.md), ~1-min on-phone liveness, $0.011), then pass `real_face_asset_id`. Details in [Character consistency](#character-consistency-seedance-20-mini--fast--pro) below.
- **An AI character / mascot**: same flow with a [Virtual Portrait](virtual-portrait.md) asset (no KYC, $0.011).
- **An AI character / mascot**: same flow with a [Virtual Portrait](virtual-portrait.md) asset (no liveness step, $0.011).

:::warning{title="Sora reference images cannot contain human faces"}
`azure/sora-2` **rejects reference images that contain human faces** — a moderation pipeline blocks any recognizable person to prevent deepfakes, and there is no general human-likeness image-upload path. So on BlockRun: **`azure/sora-2` does image-to-video for non-human subjects** (`image_url`, resized server-side to Sora's exact dimensions); and **real-person video goes through Seedance 2.0 + RealFace** (the consent-based route above).
Expand Down Expand Up @@ -168,8 +168,8 @@ All prices below are the amounts quoted in the `402` challenge and actually bill

| Action | Endpoint | Price |
|---|---|---|
| Virtual Portrait enrollment | [`POST /v1/portrait/enroll`](virtual-portrait.md) | $0.011 USDC per asset (no KYC) |
| RealFace enrollment | [`POST /v1/realface/enroll`](realface.md) | $0.011 USDC per asset (no KYC, requires ~1-min on-phone liveness) |
| Virtual Portrait enrollment | [`POST /v1/portrait/enroll`](virtual-portrait.md) | $0.011 USDC per asset (no government ID) |
| RealFace enrollment | [`POST /v1/realface/enroll`](realface.md) | $0.011 USDC per asset (no government ID, requires ~1-min on-phone liveness) |

---

Expand Down Expand Up @@ -410,10 +410,12 @@ Pass a `ta_xxxx` asset from a Virtual Portrait or RealFace enrollment to keep th
}
```

| Asset type | Use when | KYC? | Liveness? | Cost | Enroll via |
|---|---|---|---|---|---|
| [**Virtual Portrait**](virtual-portrait.md) | AI character, mascot, avatar | No | No | $0.011 USDC | [`POST /v1/portrait/enroll`](virtual-portrait.md) · [studio/portrait](https://blockrun.ai/studio/portrait) |
| [**RealFace**](realface.md) | Real person you have rights to | No | Yes (~1 min on phone) | $0.011 USDC (promo) | [`POST /v1/realface/init`](realface.md) + `/enroll` · [studio/realface](https://blockrun.ai/studio/realface) |
| Asset type | Use when | Liveness? | Cost | Enroll via |
|---|---|---|---|---|
| [**Virtual Portrait**](virtual-portrait.md) | AI character, mascot, avatar | No | $0.011 USDC | [`POST /v1/portrait/enroll`](virtual-portrait.md) · [studio/portrait](https://blockrun.ai/studio/portrait) |
| [**RealFace**](realface.md) | Real person you have rights to | Yes (~1 min on phone) | $0.011 USDC (promo) | [`POST /v1/realface/init`](realface.md) + `/enroll` · [studio/realface](https://blockrun.ai/studio/realface) |

Neither needs a government ID.

---

Expand Down Expand Up @@ -450,11 +452,11 @@ Set your HTTP client timeout to at least 60s per request (the poll that complete
::::cards

:::card{title="Virtual Portrait" href="virtual-portrait.md" icon="Boxes"}
Zero-KYC `ta_xxx` enrollment for AI-character consistency across clips.
`ta_xxx` enrollment for AI-character consistency across clips — no government ID, no liveness.
:::

:::card{title="RealFace Enrollment" href="realface.md" icon="Image"}
Real-person likeness with on-phone liveness — still no KYC.
Real-person likeness with on-phone liveness — no government ID.
:::

:::card{title="Image Generation" href="image-generation.md" icon="Image"}
Expand Down
10 changes: 5 additions & 5 deletions docs/api-reference/virtual-portrait.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
---
title: Virtual Portrait Enrollment
description: Enroll an AI-generated character (no KYC, no liveness) as a ta_xxx asset for consistent likeness across Seedance 2.0 / 2.0 Fast / 2.0 Mini videos — $0.011 USDC.
description: Enroll an AI-generated character (no government ID, no liveness) as a ta_xxx asset for consistent likeness across Seedance 2.0 / 2.0 Fast / 2.0 Mini videos — $0.011 USDC.
---

# Virtual Portrait Enrollment

Enroll an AI-generated character image as a Virtual Portrait and get back a `ta_xxxxxxxx` id you can pass as `real_face_asset_id` on any Seedance 2.0 / 2.0 Fast / 2.0 Mini call. Use this when you want **the same character across multiple videos** without dealing with KYC.
Enroll an AI-generated character image as a Virtual Portrait and get back a `ta_xxxxxxxx` id you can pass as `real_face_asset_id` on any Seedance 2.0 / 2.0 Fast / 2.0 Mini call. Use this when you want **the same character across multiple videos** without a liveness check.

:::note{title="No KYC required"}
Use this for AI-generated personas, mascots, avatars, virtual spokespeople — no liveness step needed because the asset is understood to be a synthetic character. For **real-person likeness**, use [RealFace](realface.md) (also no KYC, but requires a brief liveness check on the rights-holder's phone to prove consent).
:::note{title="No liveness check"}
Use this for AI-generated personas, mascots, avatars, virtual spokespeople — no liveness step needed because the asset is understood to be a synthetic character. For **real-person likeness**, use [RealFace](realface.md) (also no government ID, but requires a brief liveness check on the rights-holder's phone to prove consent).
:::

| | |
Expand Down Expand Up @@ -198,7 +198,7 @@ Pass the `ta_xxx` you just enrolled as `real_face_asset_id` on a Seedance call.
:::

:::card{title="RealFace Enrollment" href="realface.md" icon="Boxes"}
Same `ta_xxx` mechanic but for a real person — requires liveness, still no KYC.
Same `ta_xxx` mechanic but for a real person — requires liveness, still no government ID.
:::

:::card{title="x402 Payment Flow" href="../x402/payment-flow.md" icon="Zap"}
Expand Down
2 changes: 1 addition & 1 deletion docs/sdks/python.md
Original file line number Diff line number Diff line change
Expand Up @@ -539,7 +539,7 @@ status = voice.get_status(call["call_id"]) # free; transcript + recording_url
```python
from blockrun_llm import PortraitClient, RealFaceClient

# Virtual Portrait — AI character, no KYC, $0.011 one-time
# Virtual Portrait — AI character, no liveness check, $0.011 one-time
portrait = PortraitClient()
p = portrait.enroll("My Spokesperson", "https://example.com/character.jpg")
print(p.asset_id) # ta_xxxxxxxx → pass to VideoClient(real_face_asset_id=...)
Expand Down
Loading