Skip to content

Central Points

Stable aliases that resolve to orchestrator instances for chat — creation, visibility, and resolution.

Intended audience: Stakeholders, Business analysts, Solution architects, Developers, Testers

Learning outcomes by role

Stakeholders

  • Explain stable aliases as product-facing routing names independent of internal IDs.

Business analysts

  • Document creation, visibility, and resolution rules for central points.

Solution architects

  • Place central points in DNS or API gateway patterns for clients.

Developers

  • Implement alias CRUD and resolution logic against documented APIs.

Testers

  • Verify resolution order, visibility flags, and negative cases.

Every orchestrator instance has a UUID that changes when you recreate it. A central point solves this by giving a stable, human-readable alias to an orchestrator — clients send X-CENTRAL-ID in requests instead of X-INSTANCE-ID, and the server resolves the backing instance at request time. Swapping the underlying orchestrator (for a blue/green deploy or a configuration update) requires changing one database row, not every client integration.

Without central points, every client integration must track which running instance id currently serves a product feature. Instance ids change when you recreate orchestrators or scale deployments. Any mobile app, browser client, or partner API that hardcodes an instance id breaks on the next swap.

A central point decouples the public-facing identifier from the internal instance id. Product teams publish one stable id (for example X-CENTRAL-ID: public-support) to clients; operators change the backing orchestrator in the database whenever needed, with no client-side releases required.

Blue/green deployments use this directly: create the new orchestrator, load it into the pool, update the central point to reference the new id, confirm the cut-over, then unload the old instance.

  1. Create the orchestrator instance and load it into the pool.
  2. Create a central point with POST /api/orgs/{org_id}/central-points, specifying the orchestrator_id and visibility.
  3. Clients replace X-INSTANCE-ID with X-CENTRAL-ID (using the central point’s id) in chat completion requests, keeping X-ORG-ID unchanged.
  4. To swap the backing orchestrator, update the central point’s orchestrator_id. Load the new instance first; the old one continues serving until the update commits.

Every central point has a visibility field that controls who may send chat through it.

A private central point requires the caller to have an authenticated session with cadence:chat:use for the organization. This is the default for internal product features.

A public central point accepts requests without a named user session. The server assigns an ANONYMOUS_USER_ID for downstream processing instead of reading user_id from a session. Use public central points for unauthenticated endpoints such as embedded chat widgets — but apply rate limiting and abuse monitoring at your infrastructure layer before exposing them externally.

Org isolation is always enforced regardless of visibility: the central point’s org_id must match the X-ORG-ID header, or the request fails with 400.

cadence/api/tenant/central_point.py
if str(resolved.org_id) != org_id:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail="Central point does not belong to the specified organization",
)
if resolved.visibility == "private":
session = require_session(request)
oid = str(resolved.org_id)
if not session.has_permission(CHAT_USE, oid):
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail="Missing permission to use chat for this organization",
)
user_id = session.user_id
else:
user_id = ANONYMOUS_USER_ID
FieldTypeNotes
idUUIDStable identifier sent as X-CENTRAL-ID
org_idUUIDOrganization this central point belongs to
orchestrator_idUUIDBacking orchestrator instance — update to swap
namestringHuman-readable display name
descriptionstringOptional description
visibilityprivate | publicControls authentication requirement (see above)
statusstringOperational status of the central point
created_atISO 8601Creation timestamp
updated_atISO 8601Last modification timestamp
SymptomCauseFix
400 org mismatchCentral point belongs to a different org than the X-ORG-ID headerVerify the org alignment between client and central point
403 on private central pointCaller lacks cadence:chat:use for the orgCheck role assignment in that org
Instance errors after swapNew orchestrator not loaded in poolLoad the new instance before updating the central point mapping