---
title: "Publish Spine Event"
method: POST
path: "/api/events/publish"
---

# Publish Spine Event

`POST /api/events/publish`

Publish ONE event onto the unified-events spine.

Server-stamped: org_id from the auth context, actor=('user', user_id) ALWAYS,
source='user'. Client-supplied actor fields are ignored by construction (this
endpoint never reads one). Rejects the app.page.* clickstream namespace, caps
payload size (~8KB) and links length (≤5), then calls emit_event.

## Query parameters

- `user_id` string
- `org_id` string

## Request body

- SpinePublishRequest — Request model for the unified-events spine publish endpoint.
  - `event_type` string, required — Namespaced canonical (e.g. 'contact.created') or legacy name
  - `subject` EventSubject, required — The ONE subject of the event (fills legacy entity_type/entity_id; the DB fanout trigger emits the subject link).
    - `type` string, required — Subject entity type, e.g. 'contact', 'deal', 'client'
    - `id` string, required — Subject entity id
  - `message` string, nullable — Human-readable event_message
  - `payload` object, nullable — Stored in events.metadata (≤8KB)
  - `occurred_at` string, date-time, nullable — Occurred time; defaults to now
  - `links` EventLink[], nullable — Related-entity links (≤5)
    - `role` string — Link role: contact|client|deal|thread|related
    - `type` string, required — Related entity type
    - `id` string, required — Related entity id

## Response `200`

Successful Response

- unknown

## Other responses

- `422` — Validation Error

---

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