---
title: "Receive a push from Extendy and fire it at the install"
method: POST
path: "/api/v1/extendy/push"
tags: ["Extendy"]
---

# Receive a push from Extendy and fire it at the install

`POST /api/v1/extendy/push`

## Request

- Base URL: `https://api.pwapps.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.pwapps.com/api/v1/extendy/push`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/pwapps/apis/curie-api/docs/api/v1/extendy/push/post.ts> (a function with typed inputs; its response is checked against the schema)

Extendy calls this with the push content to deliver, keyed by click_uuid (the bare install ID returned from getInstall). We resolve the install and publish a push-send request for push-service to deliver.

Same gating as getInstall: requires the `extendy_integration` flag on, the owning account (company, or the tracker's own user for solo/individual trackers) to have `extendy_enabled`, and the install's stream (tracker) to have `extendy_enabled`. Note this does **not** currently check whether the install completed registration (`app_events.lead`) or was flagged as blocked traffic (`app_events.is_black`) — any resolved, feature-flagged install can receive a push.

## Request body

- ExtendyPushRequestDTO
  - `header` string, required
  - `content` string, required
  - `click_uuid` string, required
  - `chrome_web_image` string, nullable
  - `url` string, required

## Response `202`

Successful Response

- object

## Other responses

- `401`: Authentication required.
- `404`: The requested resource was not found.
- `422`: Validation Error

## Changes

- **2026-10-09** `2e36b261303f`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/pwapps/apis/curie-api/changes/api/v1/extendy/push/post.md)

---

[API](https://skmtc.dev/pwapps/apis/curie-api.md) - [All operations](https://skmtc.dev/pwapps/apis/curie-api/llms.txt) - [OpenAPI document](https://skmtc.dev/pwapps/apis/curie-api/revisions/e8c43917ce17?raw)
