Authentication

Everything the dashboard does is available over the API. It is a plain REST service, so any language that can make an HTTP request can use it.

Base URL

https://api.glytos.com/api/v1

API keys

Create a key under API keys in the dashboard. It is shown once, at creation - it is stored hashed and cannot be retrieved afterwards. If you lose it, create another and delete the old one.

Send it in the X-API-Key header:

curl https://api.glytos.com/api/v1/workflows \
  -H "X-API-Key: $GLYTOS_API_KEY"

An API key is only accepted in X-API-Key. The Authorization: Bearer header is reserved for signed-in dashboard sessions, so an API key sent as a bearer token is rejected with 401.

An API key belongs on your server, never in a browser, a mobile app or a public repository. For voice in a browser, mint a short-lived web-call token server-side instead - see Web calls.

Scope and expiry

A key belongs to one organization, and requests act within it. To work across organizations, use a key from each.

Two optional limits, both set when the key is created and neither changeable afterwards:

FieldEffect
expires_in_daysThe key stops working that many days after creation (1 to 3650). Omit it and the key never expires.
scopesThe permissions the key may use, as a list. Omit it and the key inherits whoever created it.

Scopes are permission names:

ScopeAllows
workflow:readView agents, sessions, calls and analytics
workflow:writeCreate and edit agents
workflow:publishPublish and promote agents
workflow:runRun agents: start calls and sessions, mint web-call and chat tokens
knowledge_base:readView the knowledge base
knowledge_base:writeEdit the knowledge base
org:readView phone numbers, tools, campaigns, the do-not-call list, integrations, automations and webhook endpoints
org:manageChange those, and organization settings, API keys and billing
member:readView members, the audit trail, API keys and API request logs
member:manageInvite and manage members
role:manageManage roles

Give a key scopes if it will outlive the person who made it. An unscoped key is evaluated against its creator's current permissions, so it loses access when they leave the organization or are demoted. A scoped key carries its own permissions and keeps working; creating one with a permission its author does not hold is refused with 400 (invalid_scope).

Omitting both is exactly the behaviour keys have always had, so existing keys are unaffected.

A few account endpoints - creating and switching organizations - need a signed-in dashboard session and refuse an API key with 403 (user_session_required).

Environments

A request acts in one environment. Name it with the X-Environment-Id header - dev, staging, prod, or an environment uuid. Without the header, requests use the organization's default environment. An unrecognised value is not an error: it silently falls back to the default too, so check the spelling if a list comes back empty.

Starting a conversation

Open a text session against an agent, seeding any variables it should know:

curl -X POST https://api.glytos.com/api/v1/workflows/$AGENT_UUID/sessions \
  -H "X-API-Key: $GLYTOS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"variables": {"customer_name": "Ada"}}'

Then read the reference for everything else, or use an SDK and skip the plumbing.