Prerequisites
- A modern browser (Chrome, Firefox, Safari, Edge)
- A device that supports WebAuthn (biometric sensor, security key, or platform authenticator)
OpenKey uses passkeys for authentication. Most modern devices support passkeys through Touch ID, Face ID, Windows Hello, or hardware security keys.
Create Your Account
Go to OpenKey
Navigate to openkey.so and click Get Started.
Verify your identity
Choose one of two registration methods:
- Email OTP
- Google
Enter your email address. You will receive a 6-digit verification code. Enter the code to verify your email.
Register a passkey
After email or Google verification, you will be prompted to register a passkey. This is required — all future logins use your passkey.Follow your browser’s prompt to create the passkey (Touch ID, Face ID, Windows Hello, or a hardware security key).
Your Dashboard
Once signed in, the dashboard shows:- Your keys: Ethereum addresses managed by OpenKey, with labels
- Key details: Click a key to see its address, creation date, and signing options
- Settings: Account management and passkey settings
Generate an Additional Key
You can create multiple Ethereum keys under your account.- Dashboard
- API
Click Generate New Key on the dashboard. The new key is generated inside the TEE and appears immediately.
Sign a Message
Sign a message using one of your keys.- personal_sign (default)
- Raw signing
Signs with the EIP-191 personal message prefix. This is the standard format used by wallets.Response:
Sign Typed Data (EIP-712)
Sign structured data following the EIP-712 standard.API Reference
Here is a summary of the key management endpoints. All endpoints require an authenticated session.| Method | Endpoint | Description |
|---|---|---|
GET | /api/keys | List your keys (add ?archived=true to include archived) |
POST | /api/keys/generate | Generate a new Ethereum key |
GET | /api/keys/:keyId | Get key details |
PATCH | /api/keys/:keyId | Update key label |
POST | /api/keys/:keyId/sign | Sign a message |
POST | /api/keys/:keyId/sign-typed-data | Sign EIP-712 typed data |
GET | /api/keys/:keyId/quote | Get TEE attestation quote for a key |
POST | /api/keys/:keyId/archive | Archive a key (soft delete) |
POST | /api/keys/:keyId/unarchive | Unarchive a key |
TEE Attestation
You can verify that a key is managed inside a TEE by requesting an attestation quote.inTee field confirms the API is running inside a TEE. The quote can be independently verified against the TEE platform’s attestation service.