OpenClaw Identity Guide
OpenClaw with a real phone number and email address.
Overview
OpenClaw Identity is the OpenClaw runtime plus a per-agent Inkbox identity: a real email address, an SMS-capable phone number, and a public tunnel hostname. Inbound email and SMS are bridged into the agent automatically.
Docker Image
Image: ghcr.io/openclaw/openclaw:2026.5.12
What Gets Provisioned
At create time Maritime calls Inkbox POST /api/v1/identities to atomically provision:
- An identity with handle
maritime-<agent-id-prefix> - A mailbox at
<handle>@inkboxmail.com - A public tunnel at
<handle>.inkboxwire.com - A local US phone number (sends and receives SMS, voice auto-reject)
- A scoped API key bound to that identity only
How It Works
The container starts a Python bridge (inkbox_bridge.py) that opens an outbound HTTP/2 tunnel and forwards POST /webhooks/email and POST /webhooks/textinto openclaw agent --message .... Replies go back through the Inkbox SDK.
# Env vars set on the container:
INKBOX_API_KEY=<scoped key, encrypted>
INKBOX_IDENTITY_ID=<uuid>
INKBOX_AGENT_HANDLE=maritime-<prefix>
INKBOX_EMAIL=<handle>@inkboxmail.com
INKBOX_PHONE_NUMBER=+1...
INKBOX_PHONE_NUMBER_ID=<uuid>
INKBOX_TUNNEL_HOST=<handle>.inkboxwire.comSMS Warm-up
New local numbers go through 10DLC campaign propagation, which takes ~10–15 minutes. During that window inbound SMS works immediately, but outbound returns 409 sender_sms_pending. The agent page surfaces this as "warming up" rather than an error. Recipients must reply START to any number in the org before they can receive outbound SMS.
Deploy
Select Template → OpenClaw Identity in the Create Agent modal. Identity provisioning happens during create, so the agent already has its phone and email by the time the container boots.