---
title: "Create a trace note"
method: POST
path: "/v1/trace_notes"
tags: ["traces"]
---

# Create a trace note

`POST /v1/trace_notes`

Add a note annotation to a trace. By default each call appends a new note with an auto-generated UUIDv4 identifier, so multiple notes accumulate on the same trace. Callers may supply a non-empty `identifier` to upsert on (trace_id, name='note', identifier) — repeated calls with the same identifier overwrite the existing note, matching the semantics of structured annotations.

## Request body

- CreateTraceNoteRequestBody
  - `data` TraceNoteData, required
    - `trace_id` string, required — OpenTelemetry Trace ID (hex format w/o 0x prefix)
    - `note` string, required — The note text to add to the trace
    - `identifier` string — Optional caller-supplied identifier. When non-empty, the note is upserted on (trace_id, name='note', identifier) — repeated calls with the same identifier overwrite the existing note. When omitted or empty, the server stamps a unique 'px-trace-note:<uuid>' identifier so each call appends a new note.

## Response `200`

Trace note created successfully

- CreateTraceNoteResponseBody
  - `data` InsertedTraceAnnotation, required
    - `id` string, required — The ID of the inserted trace annotation

## Other responses

- `403` — Forbidden
- `404` — Trace not found
- `422` — Validation Error

---

[API](https://skmtc.net/arize-ai/apis/arize-phoenix-rest-api.md) · [All operations](https://skmtc.net/arize-ai/apis/arize-phoenix-rest-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/arize-ai/arize-phoenix-rest-api/versions/5339b2afd3a2/schema)
