Authentication
| Method | Endpoint | Description |
|---|
| POST | /api/auth/device/ | Request a device code for CLI login |
| POST | /api/auth/device/token/ | Poll for access token (device-code flow) |
| POST | /api/auth/token/refresh/ | Refresh an expired access token |
| POST | /api/auth/login/ | Login with credentials |
| POST | /api/auth/logout/ | Invalidate tokens |
| GET | /api/auth/user/ | Get current user info |
Identities
All Identity endpoints require Bearer authentication.
| Method | Endpoint | Description |
|---|
| GET | /api/identities/ | List all Identities for the authenticated user |
| POST | /api/identities/ | Create a new Identity |
| GET | /api/identities/<uuid>/ | Get a specific Identity |
| PUT | /api/identities/<uuid>/ | Update an Identity |
| DELETE | /api/identities/<uuid>/ | Delete an Identity |
Create Identity request
{
"name": "my-agent"
}
Identity response
{
"uuid": "abc-123",
"name": "my-agent",
"inbox": "my-agent@in.ravi.app",
"phone": "+15551234567",
"created_dt": "2026-02-25T10:30:00Z"
}
Email inbox
Requires X-Ravi-Identity header.
| Method | Endpoint | Description |
|---|
| GET | /api/email-inbox/ | List email threads |
| GET | /api/email-inbox/<thread-id>/ | Get a specific thread with messages |
Query parameters: unread=true
Email messages
| Method | Endpoint | Description |
|---|
| GET | /api/email-messages/ | List all email messages |
| GET | /api/email-messages/<id>/ | Get a specific email message |
| POST | /api/email-messages/compose/ | Compose and send a new email |
| POST | /api/email-messages/<id>/reply/ | Reply to an email |
| POST | /api/email-messages/<id>/reply-all/ | Reply to all recipients |
Compose request
{
"to": "recipient@example.com",
"subject": "Hello",
"body": "<p>HTML content</p>",
"cc": "",
"bcc": "",
"attachment_uuids": []
}
Email attachments
| Method | Endpoint | Description |
|---|
| POST | /api/email-attachments/presign/ | Get a presigned upload URL |
The client uploads the file directly to cloud storage using the presigned URL, then includes the returned attachment UUID in the compose request.
SMS inbox
Requires X-Ravi-Identity header.
| Method | Endpoint | Description |
|---|
| GET | /api/sms-inbox/ | List SMS conversations |
| GET | /api/sms-inbox/<conversation-id>/ | Get a specific conversation |
Query parameters: unread=true
SMS messages
| Method | Endpoint | Description |
|---|
| GET | /api/messages/ | List all SMS messages |
| GET | /api/messages/<id>/ | Get a specific SMS message |
Passwords
Requires X-Ravi-Identity header. All password fields are E2E-encrypted ("e2e::<base64>").
| Method | Endpoint | Description |
|---|
| GET | /api/passwords/ | List all password entries |
| POST | /api/passwords/ | Create a new password entry |
| GET | /api/passwords/<uuid>/ | Get a specific entry (with ciphertext) |
| PUT | /api/passwords/<uuid>/ | Update a password entry |
| DELETE | /api/passwords/<uuid>/ | Delete a password entry |
| GET | /api/passwords/generate_password/ | Generate a random password |
Create request (with encrypted fields)
{
"domain": "example.com",
"username": "e2e::<base64>",
"password": "e2e::<base64>",
"notes": "e2e::<base64>"
}
Vault secrets
Requires X-Ravi-Identity header. Secret values are E2E-encrypted.
| Method | Endpoint | Description |
|---|
| GET | /api/vault/ | List all secrets (values redacted) |
| POST | /api/vault/ | Create or update a secret |
| GET | /api/vault/<uuid>/ | Get a specific secret |
| DELETE | /api/vault/<uuid>/ | Delete a secret |
Encryption
| Method | Endpoint | Description |
|---|
| GET | /api/encryption/ | Get encryption metadata (salt, public key, verifier) |
| POST | /api/encryption/ | Upload public key and verifier after first-time PIN setup |
Phone
| Method | Endpoint | Description |
|---|
| GET | /api/phone/ | Get phone numbers for the active Identity |
Events (SSE)
| Method | Endpoint | Description |
|---|
| GET | /api/events/stream/ | Server-Sent Events stream for real-time email and SMS |
Supports Last-Event-ID header for resuming after disconnection. The server sends keepalive events every 30 seconds.
Billing
| Method | Endpoint | Description |
|---|
| GET | /api/subscription/ | Get current subscription status |
Returns 402 on endpoints that require an active subscription.