> 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/apns.md).

# Apple Push Notification service

Connect Apple Push Notification service as a Push integration provider.

> Deliver push notifications to iPhone, iPad, Apple Watch, Apple TV and Mac apps.

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

## Why it exists

Apple does not let anyone push to an iPhone without proof that the message comes from the app's owner. That proof is a signing key created in your Apple developer account and tied to your team and your app. Once Norbix holds the key, it can sign each request to Apple on your behalf.

## When you'd use it

* Your iOS app notifies a customer that their order has shipped.
* A macOS app tells the user a long export has finished.
* You keep a sandbox integration for TestFlight builds and a production one for the App Store build.

## Where to find it

Push → Integrations → **Add New Integration** → Apple Push Notification service · `/projects/<project>/push/integrations/new/apns`

## Before you start

Requires a role that carries `…:notifications:push:settings:manage` — normally **Owner** or **Admin**. Collect these first:

* An Apple Developer account with access to **Certificates, Identifiers & Profiles**.
* An **APNs Auth Key** (a `.p8` file). Apple shows the file **once** — download it and keep it safe.
* Your **Team Id**, your app's **Bundle Identifier**, and the **Key Id** of that auth key.

## How to connect it

1. Open **Push → Integrations → Add New Integration** and pick **Apple Push Notification service**.
2. Fill the fields below. Create and edit use the same form; editing loads the saved values, but secrets are never shown back.
3. Click **Create**.
4. Open the saved integration and choose **Set as default** if this provider should be used when a template names none. Defaults are per environment.
5. Choose **Test**. One real notification is sent; confirm you received it with **I received the push** so the test is recorded as passed.

**What "working" looks like:** the integration is listed as **Enabled**, carries the **Default for \<environment>** badge if you set it, and its last test is recorded as successful.

## Fields

| Field                      | What it means                                                                                                                               | Example                          |
| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------- |
| **Integration Name**       | The name in your integrations list.                                                                                                         | `iOS production`                 |
| **Team Id**                | Your Apple developer team, ten characters.                                                                                                  | `3VVDAGYR37`                     |
| **App Bundle Identifier**  | The app that receives the notifications.                                                                                                    | `com.mycompany.myapp`            |
| **Key Id**                 | The id Apple gave the auth key.                                                                                                             | `CSWUWZ6VUU`                     |
| **Auth Key (.p8)**         | The key file itself. Apple uses it to authenticate your push requests.                                                                      | the `AuthKey_CSWUWZ6VUU.p8` file |
| **Production environment** | On = Apple's production gateway (App Store and TestFlight builds). Off = the sandbox gateway, for builds signed with a development profile. | off while developing             |

## Good to know

* **The sandbox and production gateways are different worlds.** A token from a development build only works with the sandbox gateway, and the other way round. A correct key with the wrong toggle looks exactly like a broken key.
* Apple lets you download a `.p8` key once. Lose it and you create a new key rather than recovering the old one.
* One auth key can serve every app in the same team — you still create one integration per bundle id.
* The Bundle Identifier must match the app exactly, including case.

## Do it in code

{% tabs %}
{% tab title="JavaScript / TypeScript" %}

```ts
await norbix.hub.notifications.savePushIntegration({
  projectId: '<your-project-id>',
  integration: {
    provider: 'AppleApns',
    integrationName: 'iOS production',
    teamId: '3VVDAGYR37',
    bundleId: 'com.mycompany.myapp',
    keyId: 'CSWUWZ6VUU',
    isProduction: true,
  },
});
```

{% endtab %}

{% tab title="Python" %}

```python
norbix.notifications.save_push_integration(
    projectId="<your-project-id>",
    integration={"provider": "AppleApns", "integrationName": "iOS production"},
)
```

{% endtab %}

{% tab title="Go" %}

```go
var out map[string]any
err := c.Hub.Notifications.SavePushIntegration(ctx, map[string]any{
	"projectId":   "<your-project-id>",
	"integration": map[string]any{"provider": "AppleApns", "integrationName": "iOS production"},
}, &out)
```

{% endtab %}

{% tab title=".NET" %}
Not available yet — the .NET SDK has no push client methods. Call the REST endpoint below.
{% endtab %}
{% endtabs %}

The Python and Go snippets are shortened — the remaining credential fields are the same keys shown in the TypeScript one and in the table above.

Reference: [Save Push Integration](/sdks-and-cli/notifications/push/save-push-integration.md) · [Test](/sdks-and-cli/notifications/push/test-push-integration.md) · [Set as default](/sdks-and-cli/notifications/push/set-push-integration-as-default.md) CLI: no integration commands today.

## API reference

Endpoints: [Save Push Integration](/api-reference/notifications/push/save-push-integration.md), [Test Push Integration](/api-reference/notifications/push/test-push-integration.md), [Confirm human delivery](/api-reference/notifications/push/confirm-push-integration-human-delivery.md), [Push](/api-reference/notifications/push.md).

## Related

[Team ID](/other-topics/apple/team-id.md) · [Key ID](/other-topics/apple/key-id.md) · [Providers](/cloud/push/integrations/providers.md) · [Integrations](/cloud/push/integrations.md) · [Templates](/cloud/push/templates.md)
