Markdown Formatting
Messages in Notifer support Markdown for rich text formatting.
What is Markdown?
Markdown is a lightweight markup language that lets you format text using simple syntax. It's used widely in GitHub, Discord, Slack, and many other platforms.
Example:
**Bold text**, *italic text*, and `code`
Renders as: Bold text, italic text, and code
Automatic Markdown Rendering
Markdown is automatically recognized and rendered in both the web app and mobile app. All messages are passed through a Markdown renderer on the client side — if your message contains Markdown syntax, it will be detected and formatted automatically. No special headers or configuration needed.
curl -d "**Server is down!** Check `prod-web-01`" \
https://app.notifer.io/alerts
This works the same way regardless of how you publish: via cURL, the web dashboard, the API, or any HTTP client.
Supported Syntax
Text Formatting
| Syntax | Result |
|---|---|
**bold** | bold |
*italic* | italic |
***bold italic*** | bold italic |
~~strikethrough~~ | |
`code` | code |
Example:
curl -d "**CRITICAL:** Database connection failed on \`prod-db-01\`" \
https://app.notifer.io/alerts
Headers
# Heading 1
## Heading 2
### Heading 3
Example:
curl -d "## Deploy Summary
- **Version**: v2.1.0
- **Status**: Success ✅
- **Duration**: 3m 45s" \
https://app.notifer.io/deployments
Lists
Unordered lists:
- Item 1
- Item 2
- Nested item
- Item 3
Ordered lists:
1. First step
2. Second step
3. Third step
Example:
curl -d "Deployment checklist:
1. Run tests ✅
2. Build application ✅
3. Deploy to production ✅
4. Verify health checks ✅" \
https://app.notifer.io/deployments
Links
[Link text](https://example.com)
Example:
curl -d "Deploy succeeded! View logs: [Jenkins Build #456](https://jenkins.example.com/build/456)" \
https://app.notifer.io/deployments
Code Blocks
Inline code:
Use `npm install` to install dependencies
Code blocks:
```
code block
multiple lines
```
Code blocks with syntax highlighting:
```javascript
function hello() {
console.log("Hello World");
}
```
Example:
curl -d 'Error in API handler:
```python
def process_order(order_id):
# This line is failing
order = Order.objects.get(id=order_id)
```' \
https://app.notifer.io/errors
Blockquotes
> This is a quoted text
> Multiple lines supported
Example:
curl -d "> **Warning:** Disk usage at 95%
>
> Cleanup required immediately" \
https://app.notifer.io/monitoring
Horizontal Rules
---
Example:
curl -d "## Deploy Summary
**Status**: Success ✅
---
**Details:**
- Version: v2.1.0
- Duration: 3m 45s" \
https://app.notifer.io/deployments
Tables
| Column 1 | Column 2 |
|----------|----------|
| Value 1 | Value 2 |
| Value 3 | Value 4 |
Example:
curl -d "## Server Status
| Server | CPU | Memory | Status |
|--------|-----|--------|--------|
| web-01 | 45% | 67% | ✅ OK |
| web-02 | 89% | 92% | ⚠️ High |
| api-01 | 23% | 45% | ✅ OK |" \
https://app.notifer.io/monitoring
Emojis
Use Unicode emojis directly:
✅ Success
❌ Failed
⚠️ Warning
🚀 Deploy
📊 Stats
Example:
curl -d "Deploy Status:
✅ Tests passed
✅ Build succeeded
✅ Deploy completed
🚀 Application live!" \
https://app.notifer.io/deployments
Real-World Examples
Server Monitoring Alert
curl -d "## ⚠️ High CPU Usage
**Server:** \`prod-web-01\`
**CPU:** 95%
**Memory:** 78%
**Actions:**
1. Check running processes
2. Review recent deployments
3. Scale if needed
[View Metrics Dashboard](https://grafana.example.com/server/prod-web-01)" \
-H "X-Priority: 2" \
-H "X-Tags: monitoring,cpu,prod-web-01" \
https://app.notifer.io/alerts
Deployment Summary
curl -d "## 🚀 Deploy v2.1.0
**Status:** ✅ Success
**Environment:** Production
**Duration:** 3m 45s
---
**Changes:**
- Added user authentication
- Fixed payment gateway bug
- Updated dependencies
**Links:**
- [Release Notes](https://github.com/example/repo/releases/v2.1.0)
- [CI Build](https://ci.example.com/build/456)" \
-H "X-Priority: 3" \
https://app.notifer.io/deployments
Error Report
curl -d "## ❌ Payment Processing Error
**Error:** Database connection timeout
**Endpoint:** \`POST /api/payments\`
**Count:** 15 failures in last 5 minutes
**Stack Trace:**
\`\`\`python
File \"/app/payments.py\", line 45, in process_payment
conn = db.connect(timeout=5)
TimeoutError: Connection timeout after 5s
\`\`\`
**Next Steps:**
1. Check database status
2. Review connection pool
3. Investigate network issues" \
-H "X-Priority: 1" \
-H "X-Tags: error,payment,database" \
https://app.notifer.io/errors
Daily Summary Report
curl -d "## 📊 Daily Report - $(date +%Y-%m-%d)
### Application Stats
| Metric | Value | Change |
|--------|-------|--------|
| Users | 1,234 | +5.2% ↗️ |
| Orders | 456 | +12.1% ↗️ |
| Revenue | \$12,345 | +8.7% ↗️ |
| Errors | 23 | -15.3% ↘️ |
---
### Top Performing Pages
1. Homepage - 5,432 views
2. Products - 3,210 views
3. Checkout - 1,890 views
### Issues
- ⚠️ Slow API response on checkout (avg 2.1s)
- ✅ Database backup completed
- ✅ SSL certificate renewed" \
-H "X-Priority: 2" \
https://app.notifer.io/reports
Backup Status
curl -d "## ✅ Backup Completed
**Type:** Full database backup
**Size:** 2.3 GB
**Duration:** 12m 34s
**Location:** \`s3://backups/db-2025-11-22.sql.gz\`
**Details:**
- Tables backed up: 42
- Compression ratio: 6.2:1
- Verification: ✅ Passed
[View Backup Logs](https://console.aws.amazon.com/s3/backups/)" \
-H "X-Priority: 2" \
https://app.notifer.io/backups
Best Practices
1. Keep It Simple
❌ Over-formatted:
***~~VERY~~ **IMPORTANT** *MESSAGE*!!!***
✅ Clear and readable:
**Important:** Database backup failed
2. Use Structure for Long Messages
Break up long messages with headers and lists:
## Summary
Brief overview here
## Details
- Point 1
- Point 2
## Next Steps
1. Action 1
2. Action 2
3. Combine with Priority and Tags
curl -d "## 🚨 CRITICAL: Database Down
**Status:** All write operations failing
**Impact:** High - affecting all users
**Action Required:**
1. Restart primary database
2. Failover to replica if needed" \
-H "X-Priority: 1" \
-H "X-Tags: critical,database,production" \
https://app.notifer.io/alerts
4. Test Formatting
Send test messages to verify formatting:
curl -d "**Test** *message* with \`code\` and [link](https://example.com)" \
https://app.notifer.io/test
Markdown in Different Clients
Web Dashboard
Full Markdown rendering with:
- All text formatting
- Links (clickable)
- Code blocks with syntax highlighting
- Tables
- Lists
- Blockquotes
Mobile Apps (iOS/Android)
Full Markdown rendering in message detail view:
- Text formatting (bold, italic, code)
- Links (tappable)
- Code blocks
- Lists
- Tables (scrollable)
Push notification preview: Limited to plain text (no formatting).
Escaping Special Characters
If you need to show literal Markdown characters:
Use \* for asterisks instead of *italic*
Use \` for backticks instead of `code`
Use \# for hash instead of headers
Example:
curl -d "Run \`npm install\` to install packages" \
https://app.notifer.io/docs
Renders as: Run npm install to install packages
Limitations
- Max message length: 4,000 characters (including Markdown syntax)
- Nested formatting: Limited depth (e.g., bold inside italic inside code may not work)
- Custom HTML: Not supported for security reasons
- Images: Not supported in message body (use links instead)
API Response
Markdown messages are stored with the original Markdown syntax:
{
"id": "uuid",
"topic": "alerts",
"message": "**CRITICAL:** Server down on `prod-web-01`",
"title": "Alert",
"priority": 1,
"timestamp": "2025-11-22T10:30:00Z"
}
The rendering happens client-side (web/mobile apps).
Next Steps
- Priority - Message priority levels
- Tags - Organize messages with tags
- Publishing Guide - Send formatted messages
Pro Tip: Use Markdown for important alerts and summaries, but keep quick notifications as plain text for faster scanning! 📝