---
title: "Send Test Push"
method: POST
path: "/v1/push-transport/{provider}/test"
tags: ["push-transport"]
---

# Send Test Push

`POST /v1/push-transport/{provider}/test`

## Request

- Base URL: `https://api.elaan.io` (the document declares no server; this is the origin it was published from)
- URL: `https://api.elaan.io/v1/push-transport/{provider}/test`
- Auth: none declared

## Path parameters

- `provider` 'fcm' | 'apns' | 'expo' | 'onesignal' | 'webpush', required: The service a push subscription is delivered *through* — the routing key that ties a contact's `PushSubscription` to the tenant's configured `PushTransportConfig` and selects which sender adapter delivers it. Cross-cutting vocabulary (like `Channel`): it lives in `shared` because both `contact` (the destination side) and `push_transport` / `outbound_push` (the sending side) reference the same members, and they must not drift apart. Covers direct transports (FCM / APNs / Web Push) and aggregators that fan out to the native platforms themselves (Expo, OneSignal). Subclassing `str` keeps JSON and dict keys clean.

## Headers

- `authorization` string, nullable

## Request body

- SendTestPushRequest: A destination to probe the tenant's configured transport with. `token` is the device token for the token-based providers and the browser's subscription `endpoint` for Web Push, which also needs `auth`/`p256dh` — the same flattening the contact API uses for `PushSubscriptionDTO`, so an operator can paste one subscription into either.
  - `token` string, required
  - `auth` string, nullable
  - `p256dh` string, nullable

## Response `200`

Successful Response

- SendTestPushResponse
  - `provider` string, required
  - `ticket_id` string, nullable, required

## Other responses

- `422`: Validation Error

---

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