##  Overview

Webhooks enable real-time notifications for memory events in your Mem0 project. Webhooks are configured at the project level, meaning each webhook is tied to a specific project and receives events solely from that project. You can configure webhooks to send HTTP POST requests to your specified URLs whenever memories are created, updated, deleted, or categorized.

##  Managing Webhooks

###  Create Webhook

Create a webhook for your project. It will receive events only from that project:

Python

```python
import os
from mem0 import MemoryClient

os.environ["MEM0_API_KEY"] = "your-api-key"

client = MemoryClient()

# Create webhook in a specific project
webhook = client.create_webhook(
    url="https://your-app.com/webhook",
    name="Memory Logger",
    project_id="proj_123",
    event_types=["memory_add", "memory_categorize"]
)
print(webhook)
```

JavaScript

```javascript
const { MemoryClient } = require('mem0ai');
const client = new MemoryClient({ apiKey: 'your-api-key' });

// Create webhook in a specific project
const webhook = await client.createWebhook({
    url: "https://your-app.com/webhook",
    name: "Memory Logger",
    projectId: "proj_123",
    eventTypes: ["memory_add", "memory_categorize"]
});
console.log(webhook);
```

Output

```json
{
  "webhook_id": "wh_123",
  "name": "Memory Logger",
  "url": "https://your-app.com/webhook",
  "event_types": ["memory_add"],
  "project": "default-project",
  "is_active": true,
  "created_at": "2025-02-18T22:59:56.804993-08:00",
  "updated_at": "2025-02-18T23:06:41.479361-08:00"
}
```

###  Get Webhooks

Retrieve all webhooks for your project:

Python

```python
# Get webhooks for a specific project
webhooks = client.get_webhooks(project_id="proj_123")
print(webhooks)
```

JavaScript

```javascript
// Get webhooks for a specific project
const webhooks = await client.getWebhooks({projectId: "proj_123"});
console.log(webhooks);
```

Output

```json
[
    {
        "webhook_id": "wh_123",
        "url": "https://mem0.ai",
        "name": "mem0",
        "owner": "john",
        "event_types": ["memory_add"],
        "project": "default-project",
        "is_active": true,
        "created_at": "2025-02-18T22:59:56.804993-08:00",
        "updated_at": "2025-02-18T23:06:41.479361-08:00"
    }
]
```

###  Update Webhook

Update an existing webhook’s configuration by specifying its `webhook_id`:

Python

```python
# Update webhook for a specific project
updated_webhook = client.update_webhook(
    name="Updated Logger",
    url="https://your-app.com/new-webhook",
    event_types=["memory_update", "memory_add"],
    webhook_id="wh_123"
)
print(updated_webhook)
```

JavaScript

```javascript
// Update webhook for a specific project
const updatedWebhook = await client.updateWebhook({
    name: "Updated Logger",
    url: "https://your-app.com/new-webhook",
    eventTypes: ["memory_update", "memory_add"],
    webhookId: "wh_123"
});
console.log(updatedWebhook);
```

Output

```json
{
  "message": "Webhook updated successfully"
}
```

###  Delete Webhook

Delete a webhook by providing its `webhook_id`:

Python

```python
# Delete webhook from a specific project
response = client.delete_webhook(webhook_id="wh_123")
print(response)
```

JavaScript

```javascript
// Delete webhook from a specific project
const response = await client.deleteWebhook({webhookId: "wh_123"});
console.log(response);
```

Output

```json
{
  "message": "Webhook deleted successfully"
}
```

##  Event Types

Mem0 supports the following event types for webhooks:

- `memory_add`: Triggered when a memory is added.
- `memory_update`: Triggered when an existing memory is updated.
- `memory_delete`: Triggered when a memory is deleted.
- `memory_categorize`: Triggered when a memory is categorized.

##  Webhook Payload

When a memory event occurs, Mem0 sends an HTTP POST request to your webhook URL with the following payload:**Memory add/update/delete payload:**

```json
{
    "event_details": {
        "id": "a1b2c3d4-e5f6-4g7h-8i9j-k0l1m2n3o4p5",
            "data": {
            "memory": "Name is Alex"
            },
        "event": "ADD"
    }
}
```

**Memory categorize payload:**

```json
{
    "event_details": {
        "event": "CATEGORIZE",
        "memory_id": "a1b2c3d4-e5f6-4g7h-8i9j-k0l1m2n3o4p5",
        "categories": ["hobbies", "travel"]
    }
}
```

##  Best Practices

1. **Implement Retry Logic**: Ensure your webhook endpoint can handle temporary failures.
2. **Verify Webhook Source**: Implement security measures to verify that webhook requests originate from Mem0.
3. **Process Events Asynchronously**: Process webhook events asynchronously to avoid timeouts and ensure reliable handling.
4. **Monitor Webhook Health**: Regularly review your webhook logs to ensure functionality and promptly address delivery failures.
