Send to people. PushFleet finds the device.
Rules pick the device and the channel, and fall back when nobody opens it.
Connect Apple and Android once. Reach every device with one API call, from your code or your coding agent.
First customer
StoreStockChecker
2,000 paying subscribers, built by the same founder.
SDKs for the stack you already ship on
Setup
PushFleet holds the keys, signs the tokens, prunes the dead ones and logs every send. You register a device and send.
What PushFleet handles
Usually a weekend.p8 and refreshes them before Apple's 60-minute limit410, FCM UNREGISTERED)429 and 5xxYou bring:a .p8 key from Apple's developer portal and a service account from Firebase.
Register a device from your app
PushFleet.configure(publishableKey: "pf_pub_test_…")
PushFleet.register(deviceToken: token, userId: "user_8f3k")PushFleet.configure(context, publishableKey = "pf_pub_test_…")
PushFleet.register(fcmToken = token, userId = "user_8f3k")await PushFleet.configure(publishableKey: "pf_pub_test_…");
await PushFleet.register(userId: "user_8f3k");import PushFleet from "@pushfleet/react-native";
PushFleet.configure({ publishableKey: "pf_pub_test_…" });
await PushFleet.register({ userId: "user_8f3k" });Send from your server
import { PushFleet } from "pushfleet";
const fleet = new PushFleet(process.env.PUSHFLEET_SECRET_KEY);
await fleet.send({
to: "user_8f3k",
title: "Your order shipped",
body: "Arriving Thursday",
});import os
from pushfleet import PushFleet
fleet = PushFleet(os.environ["PUSHFLEET_SECRET_KEY"])
fleet.send(
to="user_8f3k",
title="Your order shipped",
body="Arriving Thursday",
)fleet := pushfleet.New(os.Getenv("PUSHFLEET_SECRET_KEY"))
fleet.Send(ctx, pushfleet.SendParams{
To: "user_8f3k",
Title: "Your order shipped",
Body: "Arriving Thursday",
})let fleet = PushFleet::from_env()?;
fleet
.send()
.to("user_8f3k")
.title("Your order shipped")
.body("Arriving Thursday")
.await?;fleet = PushFleet::Client.new(ENV["PUSHFLEET_SECRET_KEY"])
fleet.push(
to: "user_8f3k",
title: "Your order shipped",
body: "Arriving Thursday"
)curl https://api.pushfleet.com/v1/send \
-H "Authorization: Bearer $PUSHFLEET_SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{"to":"user_8f3k","title":"Your order shipped","body":"Arriving Thursday"}'Built for agents
PushFleet speaks MCP, so your coding agent can set up push end to end, with only the permissions you give it.
1
Download a .p8 key from Apple and a service account from Firebase.
2
Give them to your agent, or drop them in the dashboard.
3
Over MCP it stores the keys, wires up your app and sends a test push.
storefront-agentTest mode
pf_rk_test_••••4k2q
Every agent gets its own key with granular permissions. Keep it in test mode until you trust it, and revoke it in one click.
Platform
Rules pick the device and the channel, and fall back when nobody opens it.
Every send on every channel, with status and latency as it happens.
Upload your .p8 key and Firebase service account once. PushFleet signs and rotates for you.
Flip between Apple's sandbox and production with one switch.
Send to user_8f3k. PushFleet knows every device they own.
Tokens Apple and Google reject are pruned automatically.
Paste a device token, hit send, and watch it land. No curl, no JWTs.
Web Push, email, Slack, Discord, SMS and Telegram come next, on the same API.
Early access opens for Apple and Android first.