---
title: "Ingest a batch of first-party product events"
method: POST
path: "/v1/events"
tags: ["events"]
---

# Ingest a batch of first-party product events

`POST /v1/events`

## Request

- Base URL: `https://api.patricia.app` (the document declares no server; this is the origin it was published from)
- URL: `https://api.patricia.app/v1/events`
- Auth: HTTP bearer

Validate + persist a batch of dashboard events for the authenticated tenant.

## Headers

- `X-Tenant-Id` string, nullable

## Request body

- IngestEventsRequest: A batch of events to ingest.
  - `events` IncomingEvent[], required
    - `event_id` string, required
    - `name` string, required
    - `schema_version` integer, nullable
    - `occurred_at` string, date-time, nullable
    - `properties` object

## Response `200`

Successful Response

- IngestEventsResponse: Per-batch outcome.
  - `accepted` integer, required
  - `dropped` integer, required
  - `drops` EventDrop[]
    - `event_id` string, required
    - `reason` string, required

## Other responses

- `400`: Bad request
- `401`: Unauthorized
- `403`: Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)
- `409`: Conflict
- `422`: Validation error

---

[API](https://skmtc.dev/patricia/apis/patricia-api.md) · [All operations](https://skmtc.dev/patricia/apis/patricia-api/llms.txt) · [OpenAPI document](https://skmtc.dev/patricia/apis/patricia-api/revisions/0dfb44495ea1?raw)
