{
  "id": "voice-call",
  "uiHints": {
    "provider": {
      "label": "Provider",
      "help": "Use twilio, telnyx, or mock for dev/no-network."
    },
    "fromNumber": {
      "label": "From Number",
      "placeholder": "+15550001234"
    },
    "toNumber": {
      "label": "Default To Number",
      "placeholder": "+15550001234"
    },
    "inboundPolicy": {
      "label": "Inbound Policy"
    },
    "allowFrom": {
      "label": "Inbound Allowlist"
    },
    "inboundGreeting": {
      "label": "Inbound Greeting",
      "advanced": true
    },
    "telnyx.apiKey": {
      "label": "Telnyx API Key",
      "sensitive": true
    },
    "telnyx.connectionId": {
      "label": "Telnyx Connection ID"
    },
    "telnyx.publicKey": {
      "label": "Telnyx Public Key",
      "sensitive": true
    },
    "twilio.accountSid": {
      "label": "Twilio Account SID"
    },
    "twilio.authToken": {
      "label": "Twilio Auth Token",
      "sensitive": true
    },
    "outbound.defaultMode": {
      "label": "Default Call Mode"
    },
    "outbound.notifyHangupDelaySec": {
      "label": "Notify Hangup Delay (sec)",
      "advanced": true
    },
    "serve.port": {
      "label": "Webhook Port"
    },
    "serve.bind": {
      "label": "Webhook Bind"
    },
    "serve.path": {
      "label": "Webhook Path"
    },
    "tailscale.mode": {
      "label": "Tailscale Mode",
      "advanced": true
    },
    "tailscale.path": {
      "label": "Tailscale Path",
      "advanced": true
    },
    "tunnel.provider": {
      "label": "Tunnel Provider",
      "advanced": true
    },
    "tunnel.ngrokAuthToken": {
      "label": "ngrok Auth Token",
      "sensitive": true,
      "advanced": true
    },
    "tunnel.ngrokDomain": {
      "label": "ngrok Domain",
      "advanced": true
    },
    "tunnel.allowNgrokFreeTier": {
      "label": "Allow ngrok Free Tier",
      "advanced": true
    },
    "streaming.enabled": {
      "label": "Enable Streaming",
      "advanced": true
    },
    "streaming.openaiApiKey": {
      "label": "OpenAI Realtime API Key",
      "sensitive": true,
      "advanced": true
    },
    "streaming.sttModel": {
      "label": "Realtime STT Model",
      "advanced": true
    },
    "streaming.streamPath": {
      "label": "Media Stream Path",
      "advanced": true
    },
    "tts.model": {
      "label": "TTS Model",
      "advanced": true
    },
    "tts.voice": {
      "label": "TTS Voice",
      "advanced": true
    },
    "tts.instructions": {
      "label": "TTS Instructions",
      "advanced": true
    },
    "publicUrl": {
      "label": "Public Webhook URL",
      "advanced": true
    },
    "skipSignatureVerification": {
      "label": "Skip Signature Verification",
      "advanced": true
    },
    "store": {
      "label": "Call Log Store Path",
      "advanced": true
    },
    "responseModel": {
      "label": "Response Model",
      "advanced": true
    },
    "responseSystemPrompt": {
      "label": "Response System Prompt",
      "advanced": true
    },
    "responseTimeoutMs": {
      "label": "Response Timeout (ms)",
      "advanced": true
    }
  },
  "configSchema": {
    "type": "object",
    "additionalProperties": false,
    "properties": {
      "enabled": {
        "type": "boolean"
      },
      "provider": {
        "type": "string",
        "enum": [
          "telnyx",
          "twilio",
          "plivo",
          "mock"
        ]
      },
      "telnyx": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "apiKey": {
            "type": "string"
          },
          "connectionId": {
            "type": "string"
          },
          "publicKey": {
            "type": "string"
          }
        }
      },
      "twilio": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "accountSid": {
            "type": "string"
          },
          "authToken": {
            "type": "string"
          }
        }
      },
      "plivo": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "authId": {
            "type": "string"
          },
          "authToken": {
            "type": "string"
          }
        }
      },
      "fromNumber": {
        "type": "string",
        "pattern": "^\\+[1-9]\\d{1,14}$"
      },
      "toNumber": {
        "type": "string",
        "pattern": "^\\+[1-9]\\d{1,14}$"
      },
      "inboundPolicy": {
        "type": "string",
        "enum": [
          "disabled",
          "allowlist",
          "pairing",
          "open"
        ]
      },
      "allowFrom": {
        "type": "array",
        "items": {
          "type": "string",
          "pattern": "^\\+[1-9]\\d{1,14}$"
        }
      },
      "inboundGreeting": {
        "type": "string"
      },
      "outbound": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "defaultMode": {
            "type": "string",
            "enum": [
              "notify",
              "conversation"
            ]
          },
          "notifyHangupDelaySec": {
            "type": "integer",
            "minimum": 0
          }
        }
      },
      "maxDurationSeconds": {
        "type": "integer",
        "minimum": 1
      },
      "silenceTimeoutMs": {
        "type": "integer",
        "minimum": 1
      },
      "transcriptTimeoutMs": {
        "type": "integer",
        "minimum": 1
      },
      "ringTimeoutMs": {
        "type": "integer",
        "minimum": 1
      },
      "maxConcurrentCalls": {
        "type": "integer",
        "minimum": 1
      },
      "serve": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "port": {
            "type": "integer",
            "minimum": 1
          },
          "bind": {
            "type": "string"
          },
          "path": {
            "type": "string"
          }
        }
      },
      "tailscale": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "mode": {
            "type": "string",
            "enum": [
              "off",
              "serve",
              "funnel"
            ]
          },
          "path": {
            "type": "string"
          }
        }
      },
      "tunnel": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "provider": {
            "type": "string",
            "enum": [
              "none",
              "ngrok",
              "tailscale-serve",
              "tailscale-funnel"
            ]
          },
          "ngrokAuthToken": {
            "type": "string"
          },
          "ngrokDomain": {
            "type": "string"
          },
          "allowNgrokFreeTier": {
            "type": "boolean"
          }
        }
      },
      "streaming": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "sttProvider": {
            "type": "string",
            "enum": [
              "openai-realtime"
            ]
          },
          "openaiApiKey": {
            "type": "string"
          },
          "sttModel": {
            "type": "string"
          },
          "silenceDurationMs": {
            "type": "integer",
            "minimum": 1
          },
          "vadThreshold": {
            "type": "number",
            "minimum": 0,
            "maximum": 1
          },
          "streamPath": {
            "type": "string"
          }
        }
      },
      "publicUrl": {
        "type": "string"
      },
      "skipSignatureVerification": {
        "type": "boolean"
      },
      "stt": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "provider": {
            "type": "string",
            "enum": [
              "openai"
            ]
          },
          "model": {
            "type": "string"
          }
        }
      },
      "tts": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "provider": {
            "type": "string",
            "enum": [
              "openai"
            ]
          },
          "model": {
            "type": "string"
          },
          "voice": {
            "type": "string"
          },
          "instructions": {
            "type": "string"
          }
        }
      },
      "store": {
        "type": "string"
      },
      "responseModel": {
        "type": "string"
      },
      "responseSystemPrompt": {
        "type": "string"
      },
      "responseTimeoutMs": {
        "type": "integer",
        "minimum": 1
      }
    }
  }
}
