---
title: "Record builder edit-telemetry events"
method: POST
path: "/org/content/{id}/edit-events/bulk"
tags: ["Builder"]
---

# Record builder edit-telemetry events

`POST /org/content/{id}/edit-events/bulk`

## Request

- Base URL: `https://apiv2.senso.ai/api/v1`
- URL: `https://apiv2.senso.ai/api/v1/org/content/{id}/edit-events/bulk`
- Auth: API key in header `X-API-Key`

Bulk-records edit-telemetry events for a piece of content. Events with a repeated `client_event_id` (org-wide) are skipped and counted as duplicates. Events are processed in order — on the first invalid event the request fails and earlier events remain recorded. Returns how many were inserted versus skipped. Requires the GEO product.

## Path parameters

- `id` string, uuid, required

## Request body

- BulkBuilderEditTelemetryRequest
  - `events` BuilderEditTelemetryEventInput[]: The edit-telemetry events to record.
    - `event_type` 'ai_patch_requested' | 'ai_patch_proposed' | 'ai_patch_accepted' | 'ai_patch_rejected' | 'ai_patch_failed' | 'manual_edit_session_closed' | 'draft_saved' | 'published', required: The kind of edit event.
    - `edit_source` 'manual' | 'ai' | 'system', required: What produced the edit.
    - `session_id` string, uuid: Optional builder session id this event belongs to.
    - `client_event_id` string, uuid: Client-generated id used to de-duplicate events; a repeat is counted as a duplicate and skipped.
    - `content_version_id` string, uuid: Optional content version the event applies to.
    - `generation_run_id` string, uuid: Optional generation run the event is associated with.
    - `payload` object: Free-form event payload.
    - `meta_data` object: Free-form event metadata.
    - `client_created_at` string, date-time: When the client recorded the event.

## Response `200`

Counts of inserted and duplicate (skipped) events.

- BulkBuilderEditTelemetryResponse
  - `inserted_count` integer, required: How many events were newly inserted.
  - `duplicate_count` integer, required: How many events were skipped as duplicates.

## Other responses

- `400`: The request was malformed — a bad path/query parameter or an invalid value.
- `401`: Missing or invalid credentials — supply a valid org API key in the `X-API-Key` header.
- `403`: The API key is authenticated but not permitted to access this resource.
- `404`: The requested resource does not exist or is not visible to this key.

---

[API](https://skmtc.dev/senso/apis/senso-org-api.md) - [All operations](https://skmtc.dev/senso/apis/senso-org-api/llms.txt) - [OpenAPI document](https://skmtc.dev/senso/apis/senso-org-api/revisions/d789b4fcbe84?raw)
