> Fetch clean Markdown by appending `.md` to any page URL under https://signalwire.com/docs or requesting it with the HTTP header `Accept: text/markdown`. The root index at https://signalwire.com/docs/llms.txt lists the available documentation indexes. # SWMLService > Lightweight HTTP service for non-AI SWML documents. [agentbase]: /docs/server-sdks/reference/typescript/agents/agent-base [swml]: /docs/swml/reference/calling/ai [swml-reference]: /docs/swml/reference/calling/ai [swmlbuilder]: /docs/server-sdks/reference/typescript/agents/swml-builder [addverb]: /docs/server-sdks/reference/typescript/agents/swml-service/add-verb [getapp]: /docs/server-sdks/reference/typescript/agents/swml-service/get-app [renderswml]: /docs/server-sdks/reference/typescript/agents/swml-service/render-swml [run]: /docs/server-sdks/reference/typescript/agents/swml-service/run [setonrequestcallback]: /docs/server-sdks/reference/typescript/agents/swml-service/set-on-request-callback SWMLService is a lightweight HTTP service for serving non-AI SWML documents. Unlike [`AgentBase`][agentbase] (which always produces an AI block), SWMLService generates pure SWML call-flow documents: IVR menus, voicemail, call recording, etc. It uses a [`SwmlBuilder`][swmlbuilder] internally for verb construction and [Hono](https://hono.dev) for HTTP serving. > **Note** > > [`AgentBase`][agentbase] extends `SWMLService`. The SWAIG tool registry and > SWAIG hosting (the `/swaig` endpoint) live on `SWMLService`, so any service — > including standalone SWAIG hosts and sidecars that do not emit an AI block — can > register and dispatch tools. The SWAIG methods below are inherited by > `AgentBase`. > **Info** > > SWMLService generates and serves [SWML][swml] documents over HTTP. > See the [SWML reference][swml-reference] for the full document specification. ## **Constructor** **`opts`** `SWMLServiceOptions` — required Configuration object. --- **`opts.name`** `string` — required Service display name used in logging and startup messages. Required to match the Python SDK, where `name` is a positional required parameter. --- **`opts.route`** `string` — default: / HTTP route path where the service is accessible. --- **`opts.host`** `string` — default: 0.0.0.0 Host the HTTP server binds to. --- **`opts.port`** `number` Port the HTTP server binds to. Defaults to the `PORT` environment variable, falling back to `3000`. --- **`opts.basicAuth`** `[string, string]` Basic auth credentials as `[username, password]`. Unlike `AgentBase`, `SWMLService` does not fall back to environment variables — credentials must be provided explicitly. --- **`opts.schemaPath`** `string` Path to a JSON Schema file for verb validation. --- **`opts.configFile`** `string` Path to a security configuration file for SSL, CORS, and host allowlist settings. --- **`opts.schemaValidation`** `boolean` — default: true Enable schema validation. Can also be disabled via the `SWML_SKIP_SCHEMA_VALIDATION=true` environment variable. --- ## **Properties** **`name`** `string` Service display name. --- **`route`** `string` HTTP route path where this service is accessible. --- **`host`** `string` Host address the HTTP server binds to. --- **`port`** `number` Port the HTTP server binds to. --- **`log`** `Logger` Structured logger bound to this service name. Exposed for subclass access. --- **`security`** `SecurityConfig` Unified security configuration loaded from environment variables and optional config file. Controls SSL, CORS, and host allowlist settings. --- **`sslEnabled`** `boolean` Whether SSL/HTTPS is enabled. Mirrors `security.sslEnabled`. --- **`sslCertPath`** `string | undefined` Path to the SSL certificate file. --- **`sslKeyPath`** `string | undefined` Path to the SSL private key file. --- **`domain`** `string | undefined` Domain name for SSL certificates. --- **`schemaUtils`** `SchemaUtils` Schema validation utilities for SWML documents. --- **`verbRegistry`** `VerbHandlerRegistry` Registry of custom verb handlers for specialized SWML verb processing. --- ## **Methods** #### [addVerb](/docs/server-sdks/reference/typescript/agents/swml-service/add-verb) Add a SWML verb to the document. #### [addSection](/docs/server-sdks/reference/typescript/agents/swml-service/add-section) Add a new named section to the document. #### [addVerbToSection](/docs/server-sdks/reference/typescript/agents/swml-service/add-verb-to-section) Add a verb to a specific named section. #### [resetDocument](/docs/server-sdks/reference/typescript/agents/swml-service/reset-document) Reset the document to an empty state. #### [renderSwml](/docs/server-sdks/reference/typescript/agents/swml-service/render-swml) Render the SWML document as an object. #### [getDocument](/docs/server-sdks/reference/typescript/agents/swml-service/get-document) Get the SWML document as an object (Python-compat alias). #### [renderDocument](/docs/server-sdks/reference/typescript/agents/swml-service/render-document) Render the SWML document as a JSON string. #### [setOnRequestCallback](/docs/server-sdks/reference/typescript/agents/swml-service/set-on-request-callback) Set a per-request callback for dynamic SWML generation. #### [registerVerbHandler](/docs/server-sdks/reference/typescript/agents/swml-service/register-verb-handler) Register a custom verb handler. #### [registerRoutingCallback](/docs/server-sdks/reference/typescript/agents/swml-service/register-routing-callback) Register a routing callback at a given path. #### [extractSipUsername](/docs/server-sdks/reference/typescript/agents/swml-service/extract-sip-username) Extract the username from a SIP URI (static). #### [getBasicAuthCredentials](/docs/server-sdks/reference/typescript/agents/swml-service/get-basic-auth-credentials) Retrieve HTTP Basic Auth credentials. #### [manualSetProxyUrl](/docs/server-sdks/reference/typescript/agents/swml-service/manual-set-proxy-url) Manually set the proxy URL for webhook generation. #### [getApp](/docs/server-sdks/reference/typescript/agents/swml-service/get-app) Get the Hono app for mounting or testing. #### [asRouter](/docs/server-sdks/reference/typescript/agents/swml-service/as-router) Get the Hono app (Python-compat alias for getApp). #### [getBuilder](/docs/server-sdks/reference/typescript/agents/swml-service/get-builder) Get the underlying SwmlBuilder instance. #### [run](/docs/server-sdks/reference/typescript/agents/swml-service/run) Start the HTTP server. #### [serve](/docs/server-sdks/reference/typescript/agents/swml-service/serve) Start the HTTP server (Python-compat alias for run). #### [stop](/docs/server-sdks/reference/typescript/agents/swml-service/stop) Stop the HTTP server. ### SWAIG tool registry #### [defineTool](/docs/server-sdks/reference/typescript/agents/swml-service/define-tool) Define a SWAIG tool with a handler. #### [registerSwaigFunction](/docs/server-sdks/reference/typescript/agents/swml-service/register-swaig-function) Register a pre-built SwaigFunction or raw descriptor. #### [onFunctionCall](/docs/server-sdks/reference/typescript/agents/swml-service/on-function-call) Dispatch a SWAIG function call to its handler. #### [getRegisteredTools](/docs/server-sdks/reference/typescript/agents/swml-service/get-registered-tools) Get summaries of all registered tools. #### [getTool](/docs/server-sdks/reference/typescript/agents/swml-service/get-tool) Look up a registered SwaigFunction by name. #### [hasTool](/docs/server-sdks/reference/typescript/agents/swml-service/has-tool) Check whether a tool is registered. #### [hasFunction](/docs/server-sdks/reference/typescript/agents/swml-service/has-function) Check whether a function is registered. #### [getFunction](/docs/server-sdks/reference/typescript/agents/swml-service/get-function) Get a registered function entry by name. #### [getAllFunctions](/docs/server-sdks/reference/typescript/agents/swml-service/get-all-functions) Get all registered functions keyed by name. #### [removeFunction](/docs/server-sdks/reference/typescript/agents/swml-service/remove-function) Remove a registered function. #### [listToolNames](/docs/server-sdks/reference/typescript/agents/swml-service/list-tool-names) List registered tool names. #### [validateBasicAuth](/docs/server-sdks/reference/typescript/agents/swml-service/validate-basic-auth) Validate basic-auth credentials (constant-time). ## **Example** ```typescript {3} import { SWMLService } from '@signalwire/sdk'; const service = new SWMLService({ name: 'my-ivr', route: '/' }); service.addVerb('answer', {}); service.addVerb('play', { url: 'https://example.com/greeting.mp3' }); service.addVerb('hangup', {}); await service.run(); ``` > Lightweight HTTP service for non-AI SWML documents. ## Docs - [addSection](https://signalwire.com/docs/server-sdks/reference/typescript/agents/swml-service/add-section.md): Add a new empty section to the SWML document. - [addVerb](https://signalwire.com/docs/server-sdks/reference/typescript/agents/swml-service/add-verb.md): Add a SWML verb to the main section of the document. - [addVerbToSection](https://signalwire.com/docs/server-sdks/reference/typescript/agents/swml-service/add-verb-to-section.md): Add a SWML verb to a specific named section of the document. - [asRouter](https://signalwire.com/docs/server-sdks/reference/typescript/agents/swml-service/as-router.md): Get the underlying Hono app (Python-compat alias for getApp). - [defineTool](https://signalwire.com/docs/server-sdks/reference/typescript/agents/swml-service/define-tool.md): Define a SWAIG tool on a SWMLService instance. - [extractSipUsername](https://signalwire.com/docs/server-sdks/reference/typescript/agents/swml-service/extract-sip-username.md): Static utility that extracts the username portion from a SIP URI in a request body. - [getAllFunctions](https://signalwire.com/docs/server-sdks/reference/typescript/agents/swml-service/get-all-functions.md): Get a snapshot of all registered SWAIG functions keyed by name. - [getApp](https://signalwire.com/docs/server-sdks/reference/typescript/agents/swml-service/get-app.md): Get the Hono application for mounting or testing. - [getBasicAuthCredentials](https://signalwire.com/docs/server-sdks/reference/typescript/agents/swml-service/get-basic-auth-credentials.md): Retrieve the HTTP Basic Auth credentials for the service. - [getBuilder](https://signalwire.com/docs/server-sdks/reference/typescript/agents/swml-service/get-builder.md): Get the underlying SwmlBuilder for direct manipulation. - [getDocument](https://signalwire.com/docs/server-sdks/reference/typescript/agents/swml-service/get-document.md): Get the current SWML document as a plain object. - [getFunction](https://signalwire.com/docs/server-sdks/reference/typescript/agents/swml-service/get-function.md): Get a registered SWAIG function entry by name. - [getRegisteredTools](https://signalwire.com/docs/server-sdks/reference/typescript/agents/swml-service/get-registered-tools.md): Get a summary of all registered tools with their names, descriptions, and parameter schemas. - [getTool](https://signalwire.com/docs/server-sdks/reference/typescript/agents/swml-service/get-tool.md): Look up a registered SwaigFunction by name. - [hasFunction](https://signalwire.com/docs/server-sdks/reference/typescript/agents/swml-service/has-function.md): Check whether a SWAIG function with the given name is registered. - [hasTool](https://signalwire.com/docs/server-sdks/reference/typescript/agents/swml-service/has-tool.md): Check whether a tool with the given name is registered. - [listToolNames](https://signalwire.com/docs/server-sdks/reference/typescript/agents/swml-service/list-tool-names.md): List the names of all registered SWAIG tools. - [manualSetProxyUrl](https://signalwire.com/docs/server-sdks/reference/typescript/agents/swml-service/manual-set-proxy-url.md): Manually set the proxy URL base for webhook callback generation. - [onFunctionCall](https://signalwire.com/docs/server-sdks/reference/typescript/agents/swml-service/on-function-call.md): Dispatch a SWAIG function call to its registered handler. - [registerRoutingCallback](https://signalwire.com/docs/server-sdks/reference/typescript/agents/swml-service/register-routing-callback.md): Register routing callbacks for dynamic request handling and SIP routing. - [registerSwaigFunction](https://signalwire.com/docs/server-sdks/reference/typescript/agents/swml-service/register-swaig-function.md): Register a pre-built SwaigFunction instance or a raw function descriptor. - [registerVerbHandler](https://signalwire.com/docs/server-sdks/reference/typescript/agents/swml-service/register-verb-handler.md): Register custom verb handlers for specialized SWML verb processing. - [removeFunction](https://signalwire.com/docs/server-sdks/reference/typescript/agents/swml-service/remove-function.md): Remove a registered SWAIG function by name. - [renderDocument](https://signalwire.com/docs/server-sdks/reference/typescript/agents/swml-service/render-document.md): Render the current SWML document as a JSON string. - [renderSwml](https://signalwire.com/docs/server-sdks/reference/typescript/agents/swml-service/render-swml.md): Render the current SWML document as a JSON object. - [resetDocument](https://signalwire.com/docs/server-sdks/reference/typescript/agents/swml-service/reset-document.md): Reset the SWML document to an empty state. - [run](https://signalwire.com/docs/server-sdks/reference/typescript/agents/swml-service/run.md): Start the HTTP server. - [serve](https://signalwire.com/docs/server-sdks/reference/typescript/agents/swml-service/serve.md): Start the HTTP server (Python-compat alias for run). - [setOnRequestCallback](https://signalwire.com/docs/server-sdks/reference/typescript/agents/swml-service/set-on-request-callback.md): Set a per-request callback for dynamic SWML generation. - [stop](https://signalwire.com/docs/server-sdks/reference/typescript/agents/swml-service/stop.md): Stop the HTTP server started by run() or serve(). - [validateBasicAuth](https://signalwire.com/docs/server-sdks/reference/typescript/agents/swml-service/validate-basic-auth.md): Validate basic-auth credentials against the configured ones (constant-time).