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

ValueWhat to provide
KITS_API_ORIGINThe operator-provided API origin. https://api.example.com is an example, not a service endpoint.
KITS_SERVER_KEYA test-environment server key. Inject it securely from secret storage and do not share terminal history or screen contents.
KITS_IDEMPOTENCY_KEYA unique 1–255 printable-ASCII key for this logical send. Preserve it when retrying the same send.
inst_REPLACE_WITH_TEST_INSTALLATIONReplace 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"