# Push projects

Source: https://kirora.io/docs/api/reference/push-projects

A push project is a product whose iOS, Android and web apps receive push, with whether each can send. Push to a contact goes through their installations on a project that can send. See [Push notifications](https://kirora.io/docs/api/push).

## Endpoints

- [List push projects](https://kirora.io/docs/api/reference/listPushProjects): `GET /v1/push-projects`

## The PushProject object

```json
{
  "id": "018f2a4e-6b1c-7d3e-9f40-37386ae05a6b",
  "name": "name_example",
  "environment": "sandbox",
  "ready": true,
  "installationCount": 1,
  "lastRegisteredAt": "2030-03-14T09:30:00Z",
  "apps": [
    {
      "id": "018f2a4e-6b1c-7d3e-9f40-37386ae05a6b",
      "name": "name_example",
      "platform": "ios",
      "ready": true,
      "credential": {
        "kind": "apns",
        "keyId": "018f2a4e-6b1c-7d3e-9f40-3c9ae5415a6b",
        "teamId": "018f2a4e-6b1c-7d3e-9f40-3c35d4215a6b",
        "bundleId": "018f2a4e-6b1c-7d3e-9f40-4cfa7a405a6b"
      },
      "credentialRefusal": {
        "reason": "reason_example",
        "refusedAt": "2030-03-14T09:30:00Z"
      },
      "vapidPublicKey": "vapidPublicKey_example",
      "createdAt": "2030-03-14T09:30:00Z",
      "installationCount": 1,
      "lastRegisteredAt": "2030-03-14T09:30:00Z",
      "updatedAt": "2030-03-14T09:30:00Z"
    }
  ],
  "createdAt": "2030-03-14T09:30:00Z",
  "updatedAt": "2030-03-14T09:30:00Z"
}
```

- `id` (string, required, uuid)
- `name` (string, required)
- `environment` (string, required, one of `sandbox`, `production`)
- `ready` (boolean, required) — At least one app can send; the others' devices are skipped until they can.
- `installationCount` (integer, required) — Across its apps: devices that can receive now.
- `lastRegisteredAt` (string | null, required, date-time) — Across its apps: when a device last registered; null until the first one.
- `apps` (PushProjectApp[], required) — Its iOS, Android and web apps, each with whether it can send.
  - `id` (string, required, uuid)
  - `name` (string, required)
  - `platform` (string, required, one of `ios`, `android`, `web`)
  - `ready` (boolean, required) — Whether the app can send: web apps, and native apps with a credential Apple or Google has not refused.
  - `credential` (object | null, required) — A native app's credential, without its key. Null until an admin uploads one.
    - One of: **APNs (iOS)**
      - `kind` ("apns", required)
      - `keyId` (string, required)
      - `teamId` (string, required)
      - `bundleId` (string, required)
    - One of: **FCM (Android)**
      - `kind` ("fcm", required)
      - `projectId` (string, required) — The Firebase project ID.
      - `clientEmail` (string, required) — The service account's email.
  - `credentialRefusal` (object | null, required) — Set when Apple or Google refused the credential while sending (a revoked key, a wrong team ID, a service account that lost permission). Sends stop until a new credential is uploaded.
    - `reason` (string, required) — The provider's own explanation.
    - `refusedAt` (string, required, date-time)
  - `vapidPublicKey` (string | null, required) — A web app's public key, passed to the browser when it subscribes; null for native apps.
  - `createdAt` (string, required, date-time)
  - `installationCount` (integer, required) — Devices that can receive now: registered, active, permission granted.
  - `lastRegisteredAt` (string | null, required, date-time) — When a device that can receive last registered or refreshed; null until then.
  - `updatedAt` (string, required, date-time)
- `createdAt` (string, required, date-time)
- `updatedAt` (string, required, date-time)
