---
title: "POST /SurgicalRecords/{id}/events"
method: POST
path: "/SurgicalRecords/{id}/events"
tags: ["SurgicalRecords"]
---

# POST /SurgicalRecords/{id}/events

`POST /SurgicalRecords/{id}/events`

## Request

- Base URL: `https://api.clinicos.vet/backend/business`
- URL: `https://api.clinicos.vet/backend/business/SurgicalRecords/{id}/events`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1/docs/SurgicalRecords/:id/events/post.ts> (a function with typed inputs; its response is checked against the schema)

## Path parameters

- `id` string, required

## Request body

- CreateSurgicalTimelineEventRequest
  - `title` string, required
  - `details` string, nullable
  - `type` string, required
  - `color` string, nullable
  - `isPinned` boolean
  - `occurredAt` string, date-time, nullable: When the step actually happened, UTC. Omit to stamp "now" (the common live-charting case). Setting it at create time does NOT append an amendment — the amendment trail records corrections to a stamp, not the stamp itself. Validated against the same window as a correction.
  - `createdByAi` boolean: True when the event was proposed by AI transcript extraction and accepted by the user.
  - `milestoneKind` string, nullable: Marks this event as a surgical-record milestone rather than a log entry: "cut_start" or "cut_end" (ITE-785). Stamping one mirrors its time onto the matching column on the record. If a marker of that kind already exists, it is MOVED to the new time as an audited correction (returned with its amendments), never replaced. Null for an ordinary event; an unrecognised value is rejected.
  - `implicit` boolean: ITE-1330 PR2: the stamp comes from an existing console signal (entering Induction, a checklist tick, the Intubation gas entry) rather than a deliberate press. An implicit stamp only ever CREATES a marker: when one of the kind exists it is returned unchanged (200), so a repeated signal can never overwrite a time a human corrected (ITE-792). Ignored without string? CreateSurgicalTimelineEventRequest.MilestoneKind.
  - `inventoryItemId` string, nullable: Drug events only (ignored on any other type): the inventory item administered. An id that does not resolve is dropped rather than refused — the chart entry is kept.
  - `doseAmount` union: Drug events only: the amount given, as a number. Must be positive.
    - number, double
    - string, double
  - `doseUnit` string, nullable: Drug events only: unit of decimal? CreateSurgicalTimelineEventRequest.DoseAmount ("mg", "mL", "tablet"). Max 20 chars.
  - `route` string, nullable: Drug events only: route as charted ("IV", "IM", "SQ", "CRI", "PO"). Max 20 chars.

## Response `201`

Created

- SurgicalTimelineEventDto
  - `id` string
  - `surgicalRecordId` string
  - `title` string
  - `details` string, nullable
  - `type` string
  - `color` string, nullable
  - `isPinned` boolean
  - `occurredAt` string, date-time
  - `sortOrder` union
    - integer
    - string, int32
  - `createdByAi` boolean: True when the event came from AI transcript extraction (human-accepted).
  - `milestoneKind` string, nullable: "cut_start" / "cut_end" when this event IS a surgical milestone, else null (ITE-785). The console draws a distinct marker on these rather than the ordinary event card, and the record's cut columns mirror their stamps.
  - `inventoryItemId` string, nullable: Drug events: the administered inventory item, when the entry named one (ITE-870).
  - `doseAmount` union: Drug events: the amount given, in string? SurgicalTimelineEventDto.DoseUnit.
    - number, double
    - string, double
  - `doseUnit` string, nullable
  - `route` string, nullable: Drug events: route of administration as charted.
  - `createdAt` string, date-time
  - `amendments` SurgicalTimelineEventAmendmentDto[]: Corrections made to DateTime SurgicalTimelineEventDto.OccurredAt, oldest first. Empty for the overwhelming majority of events; a non-empty list is what the UI keys off to mark a stamp as edited.
    - `id` string
    - `originalOccurredAt` string, date-time
    - `amendedOccurredAt` string, date-time
    - `reason` string, nullable
    - `amendedById` string, nullable
    - `amendedByName` string, nullable
    - `createdAt` string, date-time

## Other responses

- `409`: Conflict

## Changes

- **2026-10-21** `85ee96c0bb96`: 3 info
  - added the new optional request property `implicit` (media type: application/json)
  - added the new optional request property `implicit` (media type: text/json)
  - added the new optional request property `implicit` (media type: application/*+json)
- **2026-09-30** `d58b40cfca93`: 24 info
  - added the new optional request property `doseAmount` (media type: application/json)
  - added the new optional request property `doseAmount` (media type: text/json)
  - added the new optional request property `doseAmount` (media type: application/*+json)
  - added the new optional request property `doseUnit` (media type: application/json)
  - …20 more
- **2026-09-17** `d4ae30be0619`: 6 info
  - added the new optional request property `milestoneKind` (media type: application/json)
  - added the new optional request property `milestoneKind` (media type: text/json)
  - added the new optional request property `milestoneKind` (media type: application/*+json)
  - added the optional property `milestoneKind` to the response with the `201` status (media type: text/plain)
  - …2 more
- …earlier changes not shown

[Operation history](https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1/changes/SurgicalRecords/:id/events/post.md)

---

[API](https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1.md) - [All operations](https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1/llms.txt) - [OpenAPI document](https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1/revisions/099cf36186e0?raw)
