Want to create reminders from your own app or script?
It's super easy! You just need two things:
Here's what you do:
Send a message to https://api.happymonday.com/functions/v1/create-event
with:
That's it! HappyMonday will understand your reminder with 95% name extraction accuracy and schedule it just like if you typed it on the website. Pushover notifications are handled automatically behind the scenes!
Include your 6-character API key in the Authorization header:
Authorization: Bearer YOUR_API_KEY
Note: Your API key is the first 6 characters of your user profile ID.
https://api.happymonday.com/functions/v1/
Create a new reminder using natural language with enhanced parsing.
Request Body (JSON):
{ "text": "get apples every tuesday at 4pm" }
Response:
{ "success": true, "event": { "id": "123e4567-e89b-12d3-a456-426614174000", "name": "get apples", "description": "get apples every tuesday at 4pm", "due_time": "2025-07-29T16:00:00.000Z", "status": "pending", "recurrence_pattern": "weekly", "recurrence_interval": 1, "recurrence_days": "tuesday" }, "user": { "email": "user@example.com" }, "parsing": { "input": "get apples every tuesday at 4pm", "extractedName": "get apples", "parsedDate": "2025-07-29T16:00:00.000Z" } }
Acknowledge a reminder time window.
Request Body (JSON):
{ "timeWindowId": "time-window-id-from-notification", "action": "acknowledge" // or "silence_event" or "mute_all" }
Response:
{ "success": true, "message": "Time window acknowledged successfully" }
Actions:
acknowledge
- Acknowledge this specific notificationsilence_event
- Silence all notifications for this eventmute_all
- Mute all notifications for your account# Create reminder with natural language curl -X POST https://api.happymonday.com/functions/v1/create-event \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"text": "doctor appointment tomorrow at 2pm"}' # Create recurring reminder curl -X POST https://api.happymonday.com/functions/v1/create-event \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"text": "take vitamins daily at 8am"}' # Acknowledge a reminder curl -X POST https://api.happymonday.com/functions/v1/acknowledge-window \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"timeWindowId": "time-window-id", "action": "acknowledge"}'
import requests # Your 6-character API key API_KEY = "YOUR_API_KEY" # Create a reminder with natural language response = requests.post( "https://api.happymonday.com/functions/v1/create-event", headers={"Authorization": f"Bearer {API_KEY}"}, json={ "text": "team meeting every friday at 10am" } ) if response.status_code == 200: result = response.json() print(f"Success! Created '{result['event']['name']}' due at {result['event']['due_time']}") if result['event']['recurrence_pattern']: print(f"Recurring: {result['event']['recurrence_pattern']} every {result['event']['recurrence_interval']} week(s)") else: print(f"Error: {response.text}") # You can also acknowledge reminders via API response = requests.post( "https://api.happymonday.com/functions/v1/acknowledge-window", headers={"Authorization": f"Bearer {API_KEY}"}, json={ "timeWindowId": "time-window-id-from-notification", "action": "acknowledge" } ) if response.status_code == 200: print("Reminder acknowledged successfully!") else: print(f"Error: {response.text}")
// Your 6-character API key const API_KEY = 'YOUR_API_KEY'; // Create a reminder with natural language fetch('https://api.happymonday.com/functions/v1/create-event', { method: 'POST', headers: { 'Authorization': `Bearer ${API_KEY}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ text: 'water plants every sunday at 9am' }) }) .then(response => response.json()) .then(data => { if (data.success) { console.log(`Success! Created '${data.event.name}' due at ${data.event.due_time}`); if (data.event.recurrence_pattern) { console.log(`Recurring: ${data.event.recurrence_pattern} on ${data.event.recurrence_days || 'schedule'}`); } } else { console.error('Error:', data.error); } }) .catch(error => console.error('Error:', error)); // Acknowledge a reminder via API fetch('https://api.happymonday.com/functions/v1/acknowledge-window', { method: 'POST', headers: { 'Authorization': `Bearer ${API_KEY}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ timeWindowId: 'time-window-id-from-notification', action: 'acknowledge' }) }) .then(response => response.json()) .then(data => { if (data.success) { console.log('Reminder acknowledged successfully!'); } else { console.error('Error:', data.error); } }) .catch(error => console.error('Error:', error));
The API understands natural language with 95% name extraction accuracy and supports recurring events:
"get apples every tuesday at 4pm"
→ "get apples" recurring weekly on Tuesdays"take vitamins daily at 8am"
→ "take vitamins" recurring daily"team meeting every friday at 10am"
→ "team meeting" recurring weekly on Fridays"doctor appointment tomorrow at 2pm"
→ "doctor appointment" one-time event"pay rent monthly on the 1st"
→ "pay rent" recurring monthly"remind me to call mom in 30 minutes"
→ "call mom" one-time event"Doctor appointment tomorrow at 2pm"
"Take medication in 30 minutes"
"Birthday party on July 20 at 6pm"
"Call mom in 2 hours"
"Dentist appointment next Tuesday at 3:30pm"
All successful responses include:
Status Code | Meaning | Example Response |
---|---|---|
200 | Success | {"success": true, ...} |
400 | Bad request (missing text, parsing error) | {"error": "Missing 'text' parameter"} |
401 | Invalid or missing API key | {"error": "Invalid API key"} |
403 | Unauthorized access | {"error": "Unauthorized: You can only acknowledge your own events"} |
500 | Server error | {"error": "Internal server error"} |
To find your API key:
💡 Your API key is just 6 characters - much shorter and easier than complex authentication tokens!
Why Use 6-Character API Keys:
You can check if the API is running with a simple GET request:
curl -X POST https://api.happymonday.com/functions/v1/create-event \ -H "Content-Type: application/json" \ -d '{"test": "connectivity"}'
A 401 error indicates the API is running (just missing auth).
There are no rate limits currently. Please be reasonable. 😊
Having trouble? The API works exactly like the web interface, so if you can create a reminder on the website, the same text will work via API! Just remember to use your 6-character API key for authentication.
curl -X POST https://api.happymonday.com/functions/v1/create-event -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" -d '{"text": "test reminder in 1 hour"}'