Skip to main content
Publishable keys (pk_live_...) are public credentials that the embeddable web widget uses from the browser. Unlike secret API keys, they are scoped to a specific agent (or a webhook that will dynamically resolve one) and gated to a list of allowed origins — safe to ship in your front-end code. Each key is associated with exactly one of:
  • mode = "agent": fixed binding to an agent id. Simplest setup.
  • mode = "webhook": the widget calls your call.incoming webhook to dynamically resolve an agent per visitor.

Endpoints

Publishable key object


List publishable keys

Returns an array of Publishable key objects.

Create a publishable key

Allowed-domain rules

  • An exact match: example.com
  • A wildcard match: *.example.com (matches api.example.com but not bare example.com)
  • localhost and 127.0.0.1 are always allowed during local dev, regardless of the list
  • Bare wildcards (* or *.*) are rejected with 400
  • At least one entry is required — passing an empty array returns 400 allowed_domains: "At least one allowed domain is required."
Returns 201 Created with the new Publishable key object. The key field is included on creation and is retrievable later via GET — publishable keys are public by design.

Update / delete

PATCH accepts any subset of name, allowed_domains, mode, agent_id, webhook_url, is_enabled. Switching between modes requires providing the new required field (agent_id or webhook_url). DELETE sets is_active=false — the key stops working but remains visible in list responses so you can audit prior deployments. There is no hard delete.

Transfer a publishable key


Widget overview

How the widget uses pk_live_ keys at runtime.

Dynamic webhook config

Shape the call.incoming webhook must respond with in webhook mode.