Action Buttons
Add clickable action buttons to your messages that open URLs, trigger webhooks, or launch apps.
Two Methods
Notifer supports two ways to add action buttons:
| Method | Use Case | Headers |
|---|---|---|
| Simple | Single link button | X-URL, X-URL-Title |
| Advanced | Multiple buttons, custom actions | X-Actions or JSON body |
Simple Method (Single Link)
For a single action button, use the X-URL header:
curl -d "Build #1234 completed successfully" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "X-URL: https://ci.example.com/builds/1234" \
-H "X-URL-Title: View Build" \
https://app.notifer.io/ci-notifications
Headers
| Header | Required | Max Length | Description |
|---|---|---|---|
X-URL | Yes | 512 chars | URL to open when button is clicked |
X-URL-Title | No | 100 chars | Button label (defaults to "Open Link") |
Supported URL Schemes
https://- Web links (recommended)http://- Unencrypted web linkstel:- Phone numbers (tel:+1234567890)mailto:- Email addresses (mailto:support@example.com)slack://- Slack deep linkssms:- SMS messages
Examples
Link to dashboard:
curl -d "New order received: #12345" \
-H "X-URL: https://dashboard.example.com/orders/12345" \
-H "X-URL-Title: View Order" \
https://app.notifer.io/orders
Phone call action:
curl -d "Urgent: Server room temperature critical!" \
-H "X-Priority: 1" \
-H "X-URL: tel:+1555123456" \
-H "X-URL-Title: Call On-Call Engineer" \
https://app.notifer.io/alerts
Email action:
curl -d "Weekly report is ready" \
-H "X-URL: mailto:team@example.com?subject=Weekly%20Report" \
-H "X-URL-Title: Email Team" \
https://app.notifer.io/reports
Advanced Method (Multiple Actions)
For multiple buttons or advanced actions, use the X-Actions header or JSON body.
Action Types
| Type | Description | Example |
|---|---|---|
view | Opens URL in browser/app | Open dashboard, view logs |
http | Sends HTTP request | Approve/reject, trigger webhook |
broadcast | Android broadcast intent | Android app integration |
X-Actions Header Format
action, label, url[, param=value]...
Multiple actions separated by semicolon (;):
curl -d "Deployment ready for review" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "X-Actions: view, View Changes, https://github.com/org/repo/pull/123; view, Open Jenkins, https://jenkins.example.com/job/123" \
https://app.notifer.io/deployments
JSON Body Format
For complex actions, use JSON:
curl -X POST https://app.notifer.io/deployments \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"message": "Deployment ready for approval",
"title": "Deploy v2.1.0",
"actions": [
{
"action": "view",
"label": "View Changes",
"url": "https://github.com/org/repo/pull/123"
},
{
"action": "view",
"label": "Approve",
"url": "https://deploy.example.com/approve/123"
},
{
"action": "view",
"label": "Reject",
"url": "https://deploy.example.com/reject/123"
}
]
}'
Action Object Properties
| Property | Required | Description |
|---|---|---|
action | Yes | Action type: view, http, or broadcast |
label | Yes | Button text (max 40 chars) |
url | Yes | Target URL (max 512 chars) |
method | No | HTTP method for http type (GET, POST, etc.) |
headers | No | Custom headers for http type |
body | No | Request body for http type |
clear | No | Clear notification after action (boolean) |
HTTP Action Example
Trigger a webhook when button is clicked:
curl -X POST https://app.notifer.io/approvals \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"message": "PR #456 needs approval",
"actions": [
{
"action": "http",
"label": "Approve PR",
"url": "https://api.example.com/pr/456/approve",
"method": "POST",
"headers": {
"Authorization": "Bearer webhook_token"
},
"body": "{\"approved\": true}",
"clear": true
},
{
"action": "view",
"label": "View PR",
"url": "https://github.com/org/repo/pull/456"
}
]
}'
Real-World Examples
CI/CD Pipeline
curl -d "Build failed on main branch" \
-H "X-Priority: 2" \
-H "X-Actions: view, View Logs, https://ci.example.com/builds/789/logs; view, Retry Build, https://ci.example.com/builds/789/retry; view, View Commit, https://github.com/org/repo/commit/abc123" \
https://app.notifer.io/ci-alerts
E-commerce Order
curl -X POST https://app.notifer.io/orders \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"message": "New order #12345 - $299.00",
"title": "New Order",
"priority": 3,
"actions": [
{
"action": "view",
"label": "View Order",
"url": "https://admin.shop.com/orders/12345"
},
{
"action": "view",
"label": "Customer Profile",
"url": "https://admin.shop.com/customers/678"
}
]
}'
Incident Response
curl -d "CRITICAL: Database connection pool exhausted" \
-H "X-Priority: 1" \
-H "X-Title: Database Alert" \
-H "X-Actions: view, Grafana Dashboard, https://grafana.example.com/d/db-metrics; view, Restart Service, https://ops.example.com/restart/db-pool; tel, Call DBA, tel:+1555987654" \
https://app.notifer.io/incidents
Approval Workflow
curl -X POST https://app.notifer.io/approvals \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"message": "Expense report from John Smith - $1,250.00",
"title": "Expense Approval Required",
"actions": [
{
"action": "http",
"label": "Approve",
"url": "https://api.company.com/expenses/999/approve",
"method": "POST",
"clear": true
},
{
"action": "http",
"label": "Reject",
"url": "https://api.company.com/expenses/999/reject",
"method": "POST",
"clear": true
},
{
"action": "view",
"label": "View Details",
"url": "https://expenses.company.com/reports/999"
}
]
}'
Display
Action buttons appear in:
- Web Dashboard - Message detail view and preview panel
- Mobile Apps - Message detail screen
- Push Notifications - As interactive buttons (iOS/Android)
Buttons are displayed horizontally and wrap to next line if needed.
Best Practices
1. Keep Labels Short
Button labels should be concise (2-3 words):
- Good: "View Logs", "Approve", "Open Dashboard"
- Bad: "Click here to view the build logs"
2. Limit Number of Actions
Recommend 2-4 actions maximum. Too many buttons can be overwhelming.
3. Order by Importance
Place the most important/common action first (leftmost).
4. Use Clear Action Names
Use verbs that describe the action:
- "View", "Open", "Approve", "Reject", "Call", "Email"
5. Consider Mobile Users
- Buttons should be tappable on mobile
- Test URLs work on both desktop and mobile
- Use
tel:andmailto:for phone/email actions
Response Format
When you publish a message with actions, they're included in the response:
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"topic": "deployments",
"message": "Deployment ready",
"title": "Deploy v2.1.0",
"priority": 3,
"actions": [
{
"action": "view",
"label": "View Changes",
"url": "https://github.com/org/repo/pull/123"
},
{
"action": "view",
"label": "Approve",
"url": "https://deploy.example.com/approve/123"
}
],
"url": null,
"url_title": null,
"timestamp": "2025-01-31T10:30:00Z"
}
If you use both X-URL and X-Actions, the actions array takes precedence and url/url_title are ignored.
Next Steps
- Publishing via HTTP - Complete publishing guide
- Priority Levels - Set message urgency
- Tags - Organize messages with tags
- Mobile App - Receive notifications with action buttons