meridian
Join the Waitlist →

API Reference

Full technical documentation — authentication, endpoints, request and response formats.

Setting up via API or integrating with existing systems?

View the full technical documentation — authentication, endpoints, request and response formats.

+
Authentication
POST /auth/login Get a JWT token

Authenticates a platform admin and returns a JWT valid for 8 hours. For automated or service-to-service calls, use the long-lived static MERIDIAN_API_TOKEN instead — pass it as Authorization: Bearer <token> on any protected endpoint.

Response 200
{
  "token":   "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…",
  "email":   "admin@acme.com",
  "expires": "2026-04-12 08:00 UTC"
}
Tenant Configuration
GET /tenants/{short-name}/config Fetch current config

Returns the full configuration for a tenant. The Plex API key and Azure client secret are always redacted (***) in responses — they can be set but never read back.

Response 200
{
  "tenant": "acme",
  "config": {
    "plex_base_url":    "https://acme.plex.cloud",
    "plex_consumer_key": "***",
    "azure_app_id":     "56b1c793-…",
    "azure_app_secret": "***",
    "app_name":         "Acme Assistant",
    "updated_at":       "2026-04-11T14:22:00Z"
  }
}
POST /tenants/{short-name}/config Create or update config

Creates or updates a tenant's configuration. All fields are optional — only the fields you include are changed. Omitted fields keep their current values.

Azure field names: In the Azure Portal, "Application (client) ID" maps to azure_app_id here. "Directory (tenant) ID" maps to azure_tenant_id. The client secret value maps to azure_app_secret.
FieldTypeWhat it is
plex_base_urlstringoptionalYour Plex Cloud URL
plex_consumer_keystringoptionalYour Plex API key
azure_tenant_idstringoptionalAzure "Directory (tenant) ID"
azure_app_idstringoptionalAzure "Application (client) ID"
azure_app_secretstringoptionalAzure client secret value
app_namestringoptionalDisplay name for the assistant
app_domainstringoptionalPublic domain for the bot
Chat
POST /tenants/{short-name}/chat Send a direct message

Sends a message to the assistant and returns its response. Used for testing and non-Teams integrations. Runs the full intent routing and Plex data lookup pipeline.

FieldTypeRequiredDescription
questionstringrequiredThe user's message
user_idstringrequiredUnique identifier for the user — used to maintain conversation history
aad_object_idstringoptionalAzure AD user object ID for automatic permission lookup
Response 200
{ "response": "PO #4821 from Atlas Steel is due Friday at $28,400. Currently in receiving." }
POST /tenants/{short-name}/api/messages Teams Bot Framework webhook

The Bot Framework webhook endpoint. Set this as your bot's messaging endpoint in the Azure Bot registration. Each tenant has its own URL so a single Meridian instance can serve multiple organizations.

Azure bot messaging endpoint
https://<your-domain>/tenants/<short-name>/api/messages
Prompts
PUT /tenants/{short-name}/prompts/{type} Update assistant instructions

Updates the assistant's instructions for this tenant. type is either system (the assistant's core behavior and persona) or router (how it classifies questions by department). Changes take effect immediately — no restart required.

FieldTypeRequiredDescription
contentstringrequiredThe full prompt text