Application-scoped APIs for registering installations, sending push notifications, and tracking delivery events.
This documentation aims to provide all the information you need to work with our API.
<aside>As you scroll, you'll see code examples for working with the API in different programming languages in the dark area to the right (or as part of the content on mobile).
You can switch the language used with the tabs at the top right (or from the nav menu at the top left on mobile).</aside>
To authenticate requests, include an Authorization header with the value "Bearer {YOUR_APPLICATION_TOKEN}".
All authenticated endpoints are marked with a requires authentication badge in the documentation below.
Use an application-scoped Sanctum token with the ability required by the endpoint.
Report lifecycle events emitted by a client installation.
Idempotently records a received, displayed, or opened event.
curl --request POST \
"http://pushctl.test/api/v1/events" \
--header "Authorization: Bearer {YOUR_APPLICATION_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"event_id\": \"6ff8f7f6-1eb3-3525-be4a-3932c805afed\",
\"delivery_id\": \"architecto\",
\"installation_id\": \"n\",
\"type\": \"received\",
\"occurred_at\": \"2026-08-10T19:33:00+00:00\"
}"
Register and maintain mobile app installations.
Creates or replaces an installation and associates it with an optional external user.
curl --request PUT \
"http://pushctl.test/api/v1/installations/architecto" \
--header "Authorization: Bearer {YOUR_APPLICATION_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"user_id\": \"b\",
\"platform\": \"android\",
\"provider\": {
\"type\": \"apns_token\",
\"identifier\": \"b\"
},
\"permission\": \"ephemeral\",
\"device\": {
\"app_version\": \"n\",
\"os_version\": \"g\",
\"model\": \"z\",
\"locale\": \"en_CA\",
\"timezone\": \"America\\/Moncton\"
}
}"
Updates user association, permission state, or installation metadata.
curl --request PATCH \
"http://pushctl.test/api/v1/installations/architecto" \
--header "Authorization: Bearer {YOUR_APPLICATION_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"user_id\": \"b\",
\"permission\": \"ephemeral\"
}"
Returns an installation belonging to the authenticated application.
curl --request GET \
--get "http://pushctl.test/api/v1/installations/architecto" \
--header "Authorization: Bearer {YOUR_APPLICATION_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"message": "Unauthenticated."
}
Create notifications and inspect their delivery lifecycle.
Queues a notification for all eligible installations belonging to the specified external users.
curl --request POST \
"http://pushctl.test/api/v1/notifications" \
--header "Authorization: Bearer {YOUR_APPLICATION_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"recipients\": {
\"user_ids\": [
\"b\"
]
},
\"notification\": {
\"title\": \"b\",
\"body\": \"n\",
\"image_url\": \"http:\\/\\/crooks.biz\\/et-fugiat-sunt-nihil-accusantium\",
\"action_url\": \"http:\\/\\/tillman.com\\/\"
},
\"options\": {
\"ttl\": 14,
\"priority\": \"high\",
\"collapse_id\": \"w\",
\"sound\": \"a\",
\"badge\": 50,
\"android_channel_id\": \"k\",
\"ios_category\": \"c\"
}
}"
Returns a paginated notification history, optionally filtered by status.
curl --request GET \
--get "http://pushctl.test/api/v1/notifications" \
--header "Authorization: Bearer {YOUR_APPLICATION_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"status\": \"queued\",
\"per_page\": 1
}"
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"message": "Unauthenticated."
}
Returns aggregate lifecycle counts for a notification.
curl --request GET \
--get "http://pushctl.test/api/v1/notifications/architecto" \
--header "Authorization: Bearer {YOUR_APPLICATION_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"message": "Unauthenticated."
}