Skip to content

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

Enabling Markdown

Via HTTP Header

Add the X-Markdown header:

curl -d "**Server is down!** Check `prod-web-01`" \
  -H "X-Markdown: true" \
  https://app.notifer.io/alerts

Via Web App

Markdown is automatically enabled when publishing from the dashboard.

Default Behavior

If you don't specify X-Markdown, the message is treated as plain text (no formatting).

Supported Syntax

Text Formatting

Syntax Result
**bold** bold
*italic* italic
***bold italic*** bold italic
~~strikethrough~~ strikethrough
`code` code

Example:

curl -d "**CRITICAL:** Database connection failed on \`prod-db-01\`" \
  -H "X-Markdown: true" \
  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" \
  -H "X-Markdown: true" \
  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 ✅" \
  -H "X-Markdown: true" \
  https://app.notifer.io/deployments

[Link text](https://example.com)

Example:

curl -d "Deploy succeeded! View logs: [Jenkins Build #456](https://jenkins.example.com/build/456)" \
  -H "X-Markdown: true" \
  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)
```' \
  -H "X-Markdown: true" \
  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" \
  -H "X-Markdown: true" \
  https://app.notifer.io/monitoring

Horizontal Rules

---

Example:

curl -d "## Deploy Summary

**Status**: Success ✅

---

**Details:**
- Version: v2.1.0
- Duration: 3m 45s" \
  -H "X-Markdown: true" \
  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  |" \
  -H "X-Markdown: true" \
  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!" \
  -H "X-Markdown: true" \
  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-Markdown: true" \
  -H "X-Priority: 4" \
  -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-Markdown: true" \
  -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-Markdown: true" \
  -H "X-Priority: 5" \
  -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-Markdown: true" \
  -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-Markdown: true" \
  -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-Markdown: true" \
  -H "X-Priority: 5" \
  -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)" \
  -H "X-Markdown: true" \
  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).

Email Notifications

Markdown is converted to HTML for email: - Text formatting preserved - Links clickable - Code blocks styled - Lists and tables formatted

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" \
  -H "X-Markdown: true" \
  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": 5,
  "timestamp": "2025-11-22T10:30:00Z"
}

The rendering happens client-side (web/mobile apps).

Next Steps


Pro Tip: Use Markdown for important alerts and summaries, but keep quick notifications as plain text for faster scanning! 📝