# Push notifications you can act on.

> Add action buttons to push notifications with Pocket Alert. Open a URL, fire an HTTP request, or copy text straight from the lock screen. Build one-tap approval workflows for deploys and AI agents.

<!-- source: https://pocketalert.app/features/action-buttons -->

Attach up to three buttons to any push. Open a link, fire an HTTP request, or copy a value — without unlocking your phone or opening a laptop.

Docs: https://info.pocketalert.app/features/action-buttons.html

## From plain alert to one-tap action

1. **Pick a type** — Decide what the button should do: open a URL, call an endpoint, or copy a value.
2. **Add it to the message** — Add an actions array to your message with up to three entries, each with a type, label and value.
3. **Tap it from your phone** — Send it. The buttons appear on the notification and inside the message in the app.

## Three kinds of button, one array

A notification that only tells you something is a notification you have to act on somewhere else. Buttons close that gap.

- **Jump straight to the thing** — A view button opens a URL — the failing build, the order, the dashboard — without you hunting for the tab.
- **Run a request in the background** — An http button fires a request with your method, headers and body. Restart a service or acknowledge an incident in one tap.
- **Copy without fumbling** — A copy button drops a value on the clipboard. One-time codes, incident IDs, and tokens without selecting text on a phone.
- **Approval workflows** — Two http buttons labelled Approve and Decline turn a push into a one-tap control panel for anything that blocks on a human.
- **They outlive the banner** — Buttons live inside the message, not only the banner. Swipe the notification away and they are still there later.
- **Buttons from webhooks** — Webhook templates fill button URLs from the incoming payload, so every alert links to its own issue, order, or build.

## How action buttons work

    
Add an `actions` array to any message you send through the API, a webhook, or the MCP server. Each entry has a `type`, a `label`, and a `value` whose meaning depends on the type: a URL for `view`, a JSON request description for `http`, and literal text for `copy`.

    
The buttons are delivered with the push and rendered by the operating system. When you tap one, the app handles it locally — `http` and `copy` run without opening anything, while `view` brings the browser forward.

    
## The approval pattern

    
The setup worth building first is two `http` buttons, Approve and Decline, pointing at two endpoints of your own. Anything that pauses waiting on a person fits: a deploy pipeline blocked on manual sign-off, a refund above a threshold, or an AI agent that should not touch production unsupervised.

    
Because the request goes from the phone to your endpoint directly, whatever you put behind those URLs is entirely yours — including the authentication.

    
## Limits worth knowing

    
Three buttons maximum. `view` and `http` require a valid http(s) URL, and anything else returns `400`. When a notification arrives while the app is backgrounded or terminated, the system renders its own banner without the buttons; open the message in the app and they are there.

## FAQ

### How many buttons can a notification have?

Three per message. They render in the order you send them, on both iOS and Android, and they stay available inside the message itself after the banner is dismissed.

### What can a button do?

Three types. `view` opens a URL, `http` sends an HTTP request in the background with your own method, headers and body, and `copy` puts a value on the clipboard. Only `view` brings an app to the foreground.

### Where does an HTTP button send its request?

Straight from your phone to your endpoint. Pocket Alert does not proxy the request and never sees the response body. Add whatever authentication header your endpoint expects and it travels with the button.

### Do my button labels show on iPhone?

Android shows the exact label you send. iOS registers notification categories when the app launches and cannot create labels on the fly, so it shows a generic label per type — Open, Run, or Copy.

### Can webhooks add buttons automatically?

Yes. A webhook can carry an action template with `%path%` placeholders filled from the incoming payload, so a Sentry alert arrives with an Open issue button pointing at that specific issue. Substituted values are JSON-escaped, so a payload cannot rewrite the URL.

### What happens if I tap a button twice?

Tapping twice sends the request twice — repeats are not blocked, deliberately. If firing twice is expensive, make the endpoint idempotent. Action buttons are a paid feature; on free plans they are stripped server-side and the message is delivered without them.
