---
title: "Ingest a usage event"
method: POST
path: "/api/events"
tags: ["Events"]
---

# Ingest a usage event

`POST /api/events`

Send a single usage event. Uses transactionId for idempotency - sending the same transactionId twice will return the existing event.

## Request body

- CreateEventDto
  - `transactionId` string, required — Unique transaction ID for idempotency
  - `subscriptionId` string, required — Subscription ID or external subscription ID
  - `code` string, required — Billable metric code
  - `timestamp` string — Event timestamp (defaults to now)
  - `properties` object — Event properties

## Response `201`

Event ingested successfully

- UsageEventResponse
  - `id` string, required
  - `transactionId` string, required
  - `subscriptionId` string, required
  - `code` string, required
  - `timestamp` string, required
  - `properties` object
  - `createdAt` string, required

## Other responses

- `404` — Subscription or metric not found

---

[API](https://skmtc.net/novabilling/apis/novabilling-api.md) · [All operations](https://skmtc.net/novabilling/apis/novabilling-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/novabilling/novabilling-api/versions/0e449a4e0dc8/schema)
