What You Get
| Feature | Anonymous | Verified |
|---|---|---|
| Chat | ✅ | ✅ |
| Conversation history | ❌ | ✅ |
| Personalized by name | ❌ | ✅ |
| User-specific actions | ❌ | ✅ |
How It Works
This is not your app’s session JWT. It’s a separate Crow-scoped identity token that your backend mints specifically for Crow. Your app JWT stays private.
1. Get Your Secret
app.usecrow.ai/deploy → copy Verification Secret Add to your backend environment:2. Create Backend Endpoint
JWT Payload
| Field | Type | Required | Description |
|---|---|---|---|
user_id | string | Yes | Unique user identifier |
exp | number | Yes | Expiration (Unix timestamp) |
email | string | No | User’s email |
name | string | No | Display name |
3. Identify in Frontend
- React SDK (Recommended)
- Script Tag
Pass That’s it. No
getIdentityToken to CrowWidget or CrowCopilot. The SDK calls it on mount and auto-refreshes when the token expires — no manual polling needed.useEffect, no setInterval, no window.crow('identify') calls.4. Handle Logout
- React SDK
- Script Tag
Logout is handled automatically — when the component unmounts or the user navigates away, the session is cleared.
Troubleshooting
| Issue | Solution |
|---|---|
| User not identified | Check secret matches dashboard, user_id is string |
| Token invalid | Check exp is in future, algorithm is HS256 |
| History not persisting | Call identify() on page load, not just after login |
