NNarya Developers

Report events

POST
/device/v1/events

Reports a batch of events. Collect events and send them together rather than one per request.

A 202 answers every event in the batch, in order: accepted, duplicate, or refused with a reason. An invalid event never causes the others to fail, so a batch in which every event was refused is still a 202. Accepted events are stored shortly afterwards.

After a 500 or 503, or if the connection drops, resend the same batch unchanged: events already accepted are answered duplicate.

By default each terminal may send 2 batches in quick succession, and the allowance refills at 2 batches a minute. A batch beyond the allowance is answered 429.

Authorization

DeviceAuth
headerAuthorizationBearer <dvc_<prefix>_<secret>>

The terminal's device token, returned once by POST /device/v1/activations. Send it as Authorization: Bearer <token> on every request except activation.

Request Body

application/json
  1. body

By default, a batch holds 1 to 200 events in a body of at most 256 KiB. A batch over either limit is refused with 400, and none of its events is stored.

events*array<>

The events. Narya checks each event on its own: an invalid event is refused in the 202 response and never causes the rest of the batch to fail.

Items1 <= items

Response Body

Every event answered. Accepted events are stored shortly afterwards.

application/json
  1. response
received_at*string

When Narya received the batch.

Formatdate-time
results*array<>

One result per submitted event, in the order sent.

Example Request
curl -X POST 'https://device-narya-staging.pmadvisors.my/device/v1/events' \  -H 'Content-Type: application/json' \  -d '{  "events": [    {      "id": "01927c3e-5b7a-7c1e-9d2f-3a4b5c6d7e8f",      "type": "printer.paper.jam",      "application": "com.acme.pos",      "occurred_at": "2026-09-27T08:15:02+08:00",      "severity": "warning",      "subject": "receipt-printer",      "attributes": {        "tray": 1,        "retries": 2      }    },    {      "id": "01927c3e-5b7b-7a00-8c11-2b3c4d5e6f70",      "type": "payment.host.timeout",      "application": "com.acme.pos",      "occurred_at": "2026-09-27T08:15:40Z",      "severity": "error",      "correlation_id": "7f1c2a"    }  ]}'
Example Response
{  "received_at": "2026-09-27T00:15:41.203Z",  "results": [    {      "id": "01927c3e-5b7a-7c1e-9d2f-3a4b5c6d7e8f",      "status": "accepted"    },    {      "id": "01927c3e-5b7b-7a00-8c11-2b3c4d5e6f70",      "status": "duplicate"    }  ]}