> For the complete documentation index, see [llms.txt](https://docs.codemash.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.codemash.io/cloud/push/integrations/providers.md).

# Providers

All providers you can connect as Push integrations.

> The eight delivery services Push can connect to, and what each one asks for.

*Last updated 2026-09-11 · Applies to any project with the Push module enabled*

## Why it exists

Every platform guards its own users. Apple wants a signing key tied to your Apple developer team, Google wants a Firebase service account, browsers want a VAPID key pair that proves the same sender each time. This page is the map: pick the platforms your users are on, and open the page for each to see exactly what to bring.

## When you'd use it

* Deciding which providers a new mobile + web product needs (usually APNs, FCM and one web-push entry).
* Checking what to collect from a client before setting up their project.

## Where to find it

Push → Integrations → **Add New Integration** · `/projects/<project>/push/integrations/pick`

In the app the same catalogue appears as a gallery of cards; providers you already connected are marked.

## The catalogue

| Provider                                                                       | What it is                                                      | What it asks for                                                              |
| ------------------------------------------------------------------------------ | --------------------------------------------------------------- | ----------------------------------------------------------------------------- |
| [Apple Push Notification service](/cloud/push/integrations/providers/apns.md)  | Apple's delivery service for iOS, watchOS, tvOS and macOS apps. | Team Id, App Bundle Identifier, Key Id, the `.p8` auth key, production toggle |
| [Firebase Cloud Messaging](/cloud/push/integrations/providers/fcm.md)          | Google's cross-platform messaging service, free to use.         | Firebase project id, service account client email, service account JSON       |
| [Safari Push Notifications](/cloud/push/integrations/providers/safari-push.md) | Notifications to macOS Safari users.                            | Website Push Id, `.p12` certificate as base64, certificate password           |
| [Chrome Plugin Push](/cloud/push/integrations/providers/chrome-plugin.md)      | Notifications to a Chrome extension you publish.                | Chrome extension id, VAPID public and private key, subject                    |
| [Chrome Web Push](/cloud/push/integrations/providers/chrome-web.md)            | VAPID web push for Chrome.                                      | VAPID public and private key, subject                                         |
| [Firefox Web Push](/cloud/push/integrations/providers/firefox-web.md)          | VAPID web push for Firefox.                                     | VAPID public and private key, subject                                         |
| [Edge Web Push](/cloud/push/integrations/providers/edge-web.md)                | VAPID web push for Microsoft Edge.                              | VAPID public and private key, subject                                         |
| [Fake Push (Test Me)](/cloud/push/integrations/providers/fake.md)              | The built-in sandbox that delivers nothing.                     | Nothing at all                                                                |

## How to choose

Adding any of them requires a role that carries `…:notifications:push:settings:manage` — normally **Owner** or **Admin**.

1. List the platforms your users are actually on — an iOS app, an Android app, a website, a browser extension.
2. Add one provider per platform. A single project can hold all of them.
3. Set one as the **default** per environment; a template can still override it.
4. On test projects, start with [Fake](/cloud/push/integrations/providers/fake.md) so you can rehearse the whole flow before touching Apple or Firebase.

## Good to know

* The three web-push entries (Chrome, Firefox, Edge) are the same standard with different browsers behind them. The key pair can be shared, but each browser gets its own integration so you can enable or disable them separately.
* Credentials are write-only. Reopening a saved integration shows the other fields but never shows a secret back.
* Create and edit use the same form.

## Do it in code

Every provider is created through the same call — `savePushIntegration`, with the provider name and that provider's own fields. The snippets in all four languages are on each provider's page; the simplest one is [Fake](/cloud/push/integrations/providers/fake.md), which needs no fields at all.

Reference: [Save Push Integration](/sdks-and-cli/notifications/push/save-push-integration.md) CLI: no integration commands today.

## API reference

Endpoints: [Push](/api-reference/notifications/push.md), [Save Push Integration](/api-reference/notifications/push/save-push-integration.md).

## Related

[Integrations](/cloud/push/integrations.md) · [Templates](/cloud/push/templates.md) · [Push home](/cloud/push.md)
