PUSH API · v1a
Send your first test
1. Check prerequisites
- Confirm the app environment has a ready push service connection and dispatch is not paused.
- Confirm SDK server synchronization and obtain your own test installation_id registered in that environment. Do not copy the device token.
- Use the server key only from a trusted development backend or terminal with API network access. You need messages:send and messages:read for inspection.
2. Replace the example values
| Value | What to provide |
|---|---|
KITS_API_ORIGIN | The operator-provided API origin. https://api.example.com is an example, not a service endpoint. |
KITS_SERVER_KEY | A test-environment server key. Inject it securely from secret storage and do not share terminal history or screen contents. |
KITS_IDEMPOTENCY_KEY | A unique 1–255 printable-ASCII key for this logical send. Preserve it when retrying the same send. |
inst_REPLACE_WITH_TEST_INSTALLATION | Replace this in the body with your own actual test installation ID. The placeholder is not a valid identifier. |
3. Submit one notification
curl --include --request POST "${KITS_API_ORIGIN}/v1/messages" \
--header "Authorization: Bearer ${KITS_SERVER_KEY}" \
--header "Kits-Idempotency-Key: ${KITS_IDEMPOTENCY_KEY}" \
--header "Content-Type: application/json" \
--data-binary '{
"target": {
"installation_id": "inst_REPLACE_WITH_TEST_INSTALLATION"
},
"send_purpose": "TEST",
"classification": "SERVICE",
"display_path": "OS_DISPLAY",
"priority": "HIGH",
"title": "Kits test message",
"body": "Hello from your test environment"
}'This example uses SERVICE classification and v1a OS_DISPLAY. Do not label marketing traffic as SERVICE to bypass consent. The target is one installation_id; do not combine it with another target field.
4. Read the acceptance response
Initial successful acceptance returns HTTP 202. This illustrative response contains no real customer data.
{
"id": "msg_EXAMPLE_ONLY",
"origin": "TRANSACTIONAL_API",
"accepted_at": "2026-01-01T00:00:00.000Z",
"idempotency": {
"replayed": false
},
"targeted_subscriptions": 1,
"ignored_fields": [],
"deliveries_url": "/v1/messages/msg_EXAMPLE_ONLY/deliveries"
}- Keep id and deliveries_url for result inspection. accepted_at is the server acceptance time.
- targeted_subscriptions is the number of targeted subscriptions, not device receipts. If it is zero, inspect the target, permission and preference state.
- idempotency.replayed=true means the result of the same earlier request, not a new send.
- ignored_fields lists recognized fields not used for the platform. Inspect them rather than assuming they were delivered.
5. Inspect delivery and the device
Set KITS_MESSAGE_ID to the response id, then inspect deliveries. If there is another page, use the returned next_cursor unchanged.
curl --include \
--header "Authorization: Bearer ${KITS_SERVER_KEY}" \
"${KITS_API_ORIGIN}/v1/messages/${KITS_MESSAGE_ID}/deliveries?limit=50"