EvoHub Docs Sign in

On-Call API › Message templates

Preview a voice-call template

Use with AI
View as MarkdownThis page as plain text, for pasting into an AI tool Open in ClaudeAsk Claude questions about this page Open in ChatGPTAsk ChatGPT questions about this page
Connect to Cursor / VS Code / ClaudeSearch and read these docs from your AI tool (MCP server)

MCP server URL

https://docs-dev.evohub.io/mcp

Claude Code

claude mcp add --transport http evohub-docs-docs https://docs-dev.evohub.io/mcp

Claude (claude.ai and Claude Desktop): Settings → Connectors → Add custom connector, and paste the URL above.

Claude Desktop — claude_desktop_config.json

{
  "mcpServers": {
    "evohub-docs-docs": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://docs-dev.evohub.io/mcp"
      ]
    }
  }
}

Cursor — ~/.cursor/mcp.json

{
  "mcpServers": {
    "evohub-docs-docs": {
      "url": "https://docs-dev.evohub.io/mcp"
    }
  }
}

VS Code — .vscode/mcp.json

{
  "servers": {
    "evohub-docs-docs": {
      "type": "http",
      "url": "https://docs-dev.evohub.io/mcp"
    }
  }
}
POST/api/v1/voice-template/preview

Renders a template without saving it: spoken is the whole call script, rendered the template's own part (cut at 200 characters, truncated). The fields are filled from sample values the organization's alerts have carried. It also reports names no alert has ever sent (unknown_fields, likely typos), which integrations send each name, the integrations whose alerts carry every name (complete_on), and names that were empty in this sample.

Permission (API-key scope): oncall:settings:write.

Authorization

Any one of:

Request body required

Content type: application/json

Type: VoiceTemplateWrite

  • body string
    Placeholders in braces, e.g. {alert.title} or {service}.
    Max length: 1000

Responses

200

The preview.

Content type: application/json

Type: object

  • data VoicePreview required
    Show VoicePreview properties
    • spoken string
    • rendered string
    • truncated boolean
    • alert_title string
    • unknown_fields array of string
    • field_sources object
      Other keys: array of string
    • complete_on array of string
    • blank_fields array of string
  • success boolean required
    Value: true

400

The body is not valid JSON (INVALID_BODY).

Content type: application/json

Type: Error

  • error object required
    • code string required
      Machine-readable code. Branch on this.
    • message string required
      Human-readable explanation.

401

No API key was sent, or it is unknown, revoked or expired (UNAUTHORIZED).

Content type: application/json

Type: Error

  • error object required
    • code string required
      Machine-readable code. Branch on this.
    • message string required
      Human-readable explanation.

403

The key lacks the scope this endpoint needs (FORBIDDEN).

Content type: application/json

Type: Error

  • error object required
    • code string required
      Machine-readable code. Branch on this.
    • message string required
      Human-readable explanation.

429

Too many requests (RATE_LIMITED). Wait Retry-After seconds.

Headers

  • Retry-After integer
    Seconds to wait.

Content type: application/json

Type: Error

  • error object required
    • code string required
      Machine-readable code. Branch on this.
    • message string required
      Human-readable explanation.

500

Something went wrong on EvoHub's side (INTERNAL_ERROR). Retry later.

Content type: application/json

Type: Error

  • error object required
    • code string required
      Machine-readable code. Branch on this.
    • message string required
      Human-readable explanation.

Example request

curl -X POST 'https://evohub.io/api/v1/voice-template/preview' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer <TOKEN>' \
  -d '{
  "body": "Service {service} in {env}: {alert.title}."
}'

Last updated