Aller au contenu

Équipes

Envoyez à toute une équipe depuis un seul compte d'organisation. Les membres la rejoignent avec leur propre identifiant Apple, et les groupes, les étiquettes d'appareil et les règles de routage déterminent qui reçoit quelle activité en direct et quelle notification.

ℹ Info

Free for 14 days. Organizations are in early access: we turn one on for your account when you ask, no card needed. A trial organization holds up to 5 members and has every feature on this page. After that, PushWard Team is $5 per seat per month billed yearly ($60 per seat per year) or $6 per seat billed monthly, from 3 seats, and each paid seat includes the member's PushWard Plan. Members need nothing but the PushWard app and their own Apple ID. Pricing and FAQ.

Demander un accès anticipé

How it works

An organization is its own PushWard account. It has members instead of devices, and its API keys send to the members' devices. Everything is managed in the web console at console.pushward.app, where you sign in with Apple.

  1. Ask for early access with the button above. Once it is on for your account, create the organization at console.pushward.app; its 14-day trial starts then. Invite people from Invites. An invite is a link, single-use or for several people, with an expiry.
  2. Members open the link, sign in with the Apple ID they use in the PushWard app, and join. Ongoing Live Activities of the organization start on their devices right away.
  3. Create an API key under API keys and use it like any hlk_ key. What it sends goes to every member the routing below allows.

Organization activities show up in the app as shared by the organization, also in app versions older than this feature, and count toward the member's own limit of Live Activities shown at once. Leaving one in the app mutes that slug for the member until they unmute it in the console.

Trial, seats and billing

The trial lasts 14 days, one per person, and holds up to 5 members. It has every organization feature, but members keep their own plan: the PushWard Plan comes only with paid seats. During the trial the organization can send up to 5,000 notifications a day.

A seat is one member, not a device. A subscription starts at 3 seats, the organization can have as many members as it has paid seats, and each paid seat gives that member the PushWard Plan while they hold it. Sending is pooled: 5,000 notifications a day per seat, shared by the whole organization. Seat changes are prorated.

The subscription is bought and managed in the console, never in the iOS app. Paddle.com sells it as our reseller and merchant of record, so the invoice comes from Paddle, which also handles VAT and sales tax. Refunds follow the refund policy.

WhenWhat happens
The trial ends without a subscriptionThe organization becomes read-only and its API keys are refused until someone subscribes. 30 days later it is deleted with its data.
A payment failsPaddle retries the charge and the organization keeps working meanwhile. If the payment never goes through, the subscription ends as below.
The subscription is canceledEverything works until the end of the paid period. Then the organization becomes read-only, its keys are refused and members lose the PushWard Plan of their seat. 60 days later it is deleted with its data.

Roles

RoleCan do
OwnerEverything, including adding owners and deleting the organization.
AdminInvites and removes members below admin and changes their roles, renames the organization, and manages groups, device tags, routing rules and API keys.
ViewerReads members, devices, routing and the audit log. Changes nothing of the organization.
Member, BillingSee the member list.

Every member receives what the organization sends and manages their own devices and mutes, whatever their role.

Every change made in the console lands in the Audit log, with who made it and when.

Devices and mutes

Under My devices every member decides which of their devices take part. A device switched off gets nothing from the organization: its Live Activities end, and notification pushes skip it (the inbox entry still arrives). Members can also mute slugs, such as ci-*, for themselves only.

Groups and device tags

A group is a set of members, such as oncall or backend. A device tag marks single devices, such as wall for the iPad on the office wall. Names are lowercase letters, digits, - and _, start with a letter or digit, and are up to 40 characters. An organization holds up to 50 groups and 50 tags.

Deleting a group or tag removes it from every routing rule, target and key limit. A rule or target left with nothing reaches nobody, so an ongoing Live Activity aimed only at a deleted group ends.

Routing rules

Rules decide who gets what. Each rule has a slug pattern (exact, or a prefix ending in *), applies to Live Activities, notifications, both, or widgets, and allows some groups and tags. Rules are checked in order, and the first one whose pattern matches and that applies to that kind of send decides:

  • A member in one of the rule's groups gets it on all their devices, and a device with one of the rule's tags gets it whoever owns it.
  • No rule matches: everyone gets it.
  • A rule that allows no group and no tag: nobody gets it.
  • Notifications match on activity_slug, or on source when they have no activity.

A rule change applies to ongoing Live Activities at once: they end on devices that lost them and start on devices that gained them. An organization holds up to 100 rules.

Example rules
1. deploy-*   activities and notifications   group oncall, tag wall
2. billing-*  notifications                  group finance
3. noisy-*    notifications                  nobody
   everything else                           everyone

Targeting a send

An organization key can narrow a single send with target. It works on POST /activities, PATCH /activities/{slug}, POST /notifications and POST /notifications/scheduled. A target narrows what the routing rules allow; it never reaches anyone a rule keeps out.

FieldTypeDescription
groupsstring[]Group names, up to 20. Members of any of them get it.
tagsstring[]Device tag names, up to 20. Devices with any of them get it.
membersstring[]User ids, up to 100 (the copy button next to each member on the console's Members page). They get it on all their devices.
Page the on-call group
curl -X POST https://api.pushward.app/notifications \
  -H "Authorization: Bearer hlk_YOUR_ORG_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "db-1 disk at 95%",
    "body": "Paging on-call",
    "level": "time-sensitive",
    "target": {"groups": ["oncall"]}
  }'
  • Names are matched without regard to case. An unknown name fails the whole request with 422 org.target_unknown, which lists every unknown name.
  • A Live Activity keeps its target. A later PATCH with a new target replaces it and "target": null sends it back to everyone the rules allow; devices that lose it end it and devices that gain it start it. A POST to an existing slug without target keeps the stored one.
  • A scheduled notification resolves the names when you schedule it, so renaming a group later does not matter. Who is in a group is read when it is sent, and a group deleted by then reaches nobody. Once every group, tag and member the target names is gone, the schedule fails with target_deleted instead of being sent, without counting toward your quota. A repeating one stops, unless its target names a member who can be invited back: then only that send is skipped.
  • A notification that nobody receives is still stored, and the response says "pushed": false with "delivery": "none" and "reason": "no_apns_token", as for an account with no devices.

The CLI takes --target-groups, --target-tags and --target-members, and --no-target on activity update (see CLI). In the MCP server, create_activity, update_activity, create_notification and create_scheduled_notification take a target argument, and update_activity takes clear_target.

Keys limited to groups and tags

When you create a key in the console, Reaches can limit it to some groups and tags, for example a key for a team's own tooling. The limit is set once; to change it, create a new key. Such a key:

  • sends only inside its groups and tags. A send with no target goes to all of them, a target outside them is refused with 403 integration_key.target_denied, and it cannot name members or clear a target;
  • sees only activities sent inside its groups and tags. GET /activities leaves the others out, and reading, changing or ending one of them answers 404, exactly as for a slug that does not exist. Activities sent to everyone are outside every limit, and so are activities whose groups and tags were all deleted, so a limited key does not see those either;
  • cannot reuse a slug taken by an activity it cannot see. Slugs are unique per organization, so creating one answers 403 integration_key.target_denied. A notification naming such an activity in activity_slug gets 422 notification.activity_not_found.

If all of a limited key's groups and tags are deleted, it sees nothing and every send is refused with 403; create a new key.

The activity_slugs limit of a key (see permissions) still applies on top.

Widgets and email

A key made in the console can also carry widget and email permissions, as on a personal account.

Bientôt dans la version 1.17.0 de l'app

Cette section décrit une fonctionnalité d'une mise à jour de l'app en attente de validation par l'App Store. Elle se déverrouille ici automatiquement dès que la mise à jour est disponible.

Email goes to recipients the organization manages. A key with email permission that is not limited to groups and tags adds and removes them through /emails/recipients; each recipient confirms their address before the first message, and sends count toward the organization's email quota.

Errors

CodeStatusWhen
org.target_unavailable422A target sent with a personal key. Personal sends always reach all of your devices.
org.target_invalid422The target names nothing or a member by something other than a user id, or (on PATCH) more than the limits above. On the other requests an oversized list fails schema validation with a plain 422.
org.target_unknown422A group, tag or member that the organization does not have.
integration_key.target_denied403A limited key sending outside its groups and tags, clearing a target, creating a slug held outside them, or sending without a target after all its groups and tags were deleted.
org.billing_inactive403An organization key, or joining an organization, while the organization is not active because its trial or subscription ended. An owner can reactivate it in the console.