Skip to content

Character change notifications ​

Add a callback with purpose Character changes (PERSONA) in the console's Open API settings, verify it, then enable it. It is configured separately from message callbacks and has its own signing secret.

Payload ​

The platform sends a JSON POST with OC-Event-Type: persona.changed. OC-Event-Id and Idempotency-Key equal the payload's eventId. Verify the callback signature before processing.

json
{"eventId":"9001","type":"persona.changed","change":"published","source":"console","occurredAt":"2026-10-26T08:00:00Z","persona":{"personaId":"11","personaUid":"anchor-001","status":"ACTIVE","version":2,"nickname":"Snow","bio":"Enjoys travel","privateEnabled":true,"liveEnabled":false}}
changeTrigger
createdCharacter created through the console or API
publishedNew version published
paused / resumedCharacter paused or resumed
bindingUID bound, changed, or removed; persona.previousPersonaUid contains the old value, possibly null

source is console or api. API changes also generate notifications; you may ignore api notifications if you already handled the response. Saving a draft alone does not generate these notifications.

The summary uses published configuration when available. An unpublished new character uses its draft, with version=0. An unbound personaUid is null. Use Get to retrieve the complete configuration.

Reliable handling ​

  • Only while the callback is enabled, notification enqueueing shares the character mutation's transaction. A rollback does not enqueue a notification. Enqueueing does not guarantee delivery.
  • Changes while the callback is disabled are neither recorded nor replayed. An already queued notification is skipped if the callback is disabled when delivery is attempted.
  • Delivery is ordered per character. Later notifications wait while an earlier one retries; they proceed after its terminal failure.
  • 2xx acknowledges receipt. 4xx other than 408/429 stops retries. Timeouts, 5xx, and other uncertain responses use backoffs of 10 seconds, 30 seconds, 2 minutes, and 10 minutes, for at most 5 attempts. Redirects are not followed.
  • Deduplicate by eventId and return the saved outcome on retries. Use version and occurredAt to assess freshness, but do not deduplicate solely by published version: bindings and pauses may share that version.

On initial integration or re-enabling callbacks, query your known character UIDs to reconcile current state. There is currently no public replay or bulk character-list endpoint.

OmniChat · Let conversations happen naturally