From 22db7221555ee68f84f9d6974d052f2fc08f34c3 Mon Sep 17 00:00:00 2001 From: August Date: Sun, 6 Sep 2026 03:13:24 +0000 Subject: [PATCH 01/38] docs(server-sdks): remove TypeScript compat REST reference Co-Authored-By: Claude Fable 5.1 --- fern/docs.yml | 7 + .../guides/manage-resources/overview.mdx | 34 ++--- .../typescript/core/security/index.mdx | 11 +- .../core/security/validate-request.mdx | 13 +- .../typescript/rest/client/index.mdx | 87 +++++++------ .../rest/compat/accounts/create.mdx | 29 ----- .../typescript/rest/compat/accounts/get.mdx | 29 ----- .../typescript/rest/compat/accounts/index.mdx | 46 ------- .../typescript/rest/compat/accounts/list.mdx | 29 ----- .../rest/compat/accounts/update.mdx | 29 ----- .../rest/compat/applications/create.mdx | 33 ----- .../rest/compat/applications/delete.mdx | 25 ---- .../rest/compat/applications/get.mdx | 29 ----- .../rest/compat/applications/index.mdx | 50 ------- .../rest/compat/applications/list.mdx | 29 ----- .../rest/compat/applications/update.mdx | 31 ----- .../typescript/rest/compat/calls/create.mdx | 34 ----- .../typescript/rest/compat/calls/delete.mdx | 25 ---- .../typescript/rest/compat/calls/get.mdx | 29 ----- .../typescript/rest/compat/calls/index.mdx | 78 ----------- .../typescript/rest/compat/calls/list.mdx | 29 ----- .../rest/compat/calls/start-recording.mdx | 29 ----- .../rest/compat/calls/start-stream.mdx | 31 ----- .../rest/compat/calls/stop-stream.mdx | 29 ----- .../rest/compat/calls/update-recording.mdx | 29 ----- .../typescript/rest/compat/calls/update.mdx | 29 ----- .../compat/conferences/delete-recording.mdx | 25 ---- .../compat/conferences/get-participant.mdx | 29 ----- .../rest/compat/conferences/get-recording.mdx | 29 ----- .../rest/compat/conferences/get.mdx | 29 ----- .../rest/compat/conferences/index.mdx | 100 -------------- .../compat/conferences/list-participants.mdx | 29 ----- .../compat/conferences/list-recordings.mdx | 29 ----- .../rest/compat/conferences/list.mdx | 29 ----- .../compat/conferences/remove-participant.mdx | 25 ---- .../rest/compat/conferences/start-stream.mdx | 32 ----- .../rest/compat/conferences/stop-stream.mdx | 29 ----- .../compat/conferences/update-participant.mdx | 29 ----- .../compat/conferences/update-recording.mdx | 29 ----- .../rest/compat/conferences/update.mdx | 29 ----- .../typescript/rest/compat/faxes/create.mdx | 33 ----- .../rest/compat/faxes/delete-media.mdx | 25 ---- .../typescript/rest/compat/faxes/delete.mdx | 25 ---- .../rest/compat/faxes/get-media.mdx | 29 ----- .../typescript/rest/compat/faxes/get.mdx | 29 ----- .../typescript/rest/compat/faxes/index.mdx | 70 ---------- .../rest/compat/faxes/list-media.mdx | 29 ----- .../typescript/rest/compat/faxes/list.mdx | 29 ----- .../typescript/rest/compat/faxes/update.mdx | 29 ----- .../typescript/rest/compat/index.mdx | 123 ------------------ .../rest/compat/laml-bins/create.mdx | 34 ----- .../rest/compat/laml-bins/delete.mdx | 25 ---- .../typescript/rest/compat/laml-bins/get.mdx | 29 ----- .../rest/compat/laml-bins/index.mdx | 50 ------- .../typescript/rest/compat/laml-bins/list.mdx | 29 ----- .../rest/compat/laml-bins/update.mdx | 34 ----- .../rest/compat/messages/create.mdx | 42 ------ .../rest/compat/messages/delete-media.mdx | 25 ---- .../rest/compat/messages/delete.mdx | 25 ---- .../rest/compat/messages/get-media.mdx | 29 ----- .../typescript/rest/compat/messages/get.mdx | 29 ----- .../typescript/rest/compat/messages/index.mdx | 68 ---------- .../rest/compat/messages/list-media.mdx | 29 ----- .../typescript/rest/compat/messages/list.mdx | 29 ----- .../rest/compat/messages/update.mdx | 29 ----- .../rest/compat/phone-numbers/delete.mdx | 24 ---- .../rest/compat/phone-numbers/get.mdx | 28 ---- .../compat/phone-numbers/import-number.mdx | 31 ----- .../rest/compat/phone-numbers/index.mdx | 78 ----------- .../list-available-countries.mdx | 28 ---- .../rest/compat/phone-numbers/list.mdx | 28 ---- .../rest/compat/phone-numbers/purchase.mdx | 31 ----- .../compat/phone-numbers/search-local.mdx | 28 ---- .../compat/phone-numbers/search-toll-free.mdx | 28 ---- .../rest/compat/phone-numbers/update.mdx | 30 ----- .../typescript/rest/compat/queues/create.mdx | 32 ----- .../typescript/rest/compat/queues/delete.mdx | 25 ---- .../rest/compat/queues/dequeue-member.mdx | 32 ----- .../rest/compat/queues/get-member.mdx | 29 ----- .../typescript/rest/compat/queues/get.mdx | 29 ----- .../typescript/rest/compat/queues/index.mdx | 69 ---------- .../rest/compat/queues/list-members.mdx | 29 ----- .../typescript/rest/compat/queues/list.mdx | 29 ----- .../typescript/rest/compat/queues/update.mdx | 29 ----- .../rest/compat/recordings/delete.mdx | 24 ---- .../typescript/rest/compat/recordings/get.mdx | 28 ---- .../rest/compat/recordings/index.mdx | 41 ------ .../rest/compat/recordings/list.mdx | 28 ---- .../typescript/rest/compat/tokens/create.mdx | 32 ----- .../typescript/rest/compat/tokens/delete.mdx | 25 ---- .../typescript/rest/compat/tokens/index.mdx | 44 ------- .../typescript/rest/compat/tokens/update.mdx | 29 ----- .../rest/compat/transcriptions/delete.mdx | 24 ---- .../rest/compat/transcriptions/get.mdx | 28 ---- .../rest/compat/transcriptions/index.mdx | 41 ------ .../rest/compat/transcriptions/list.mdx | 28 ---- .../reference/typescript/rest/overview.mdx | 61 ++++++++- 97 files changed, 136 insertions(+), 3186 deletions(-) delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/accounts/create.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/accounts/get.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/accounts/index.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/accounts/list.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/accounts/update.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/applications/create.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/applications/delete.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/applications/get.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/applications/index.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/applications/list.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/applications/update.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/calls/create.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/calls/delete.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/calls/get.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/calls/index.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/calls/list.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/calls/start-recording.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/calls/start-stream.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/calls/stop-stream.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/calls/update-recording.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/calls/update.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/delete-recording.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/get-participant.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/get-recording.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/get.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/index.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/list-participants.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/list-recordings.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/list.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/remove-participant.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/start-stream.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/stop-stream.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/update-participant.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/update-recording.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/update.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/faxes/create.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/faxes/delete-media.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/faxes/delete.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/faxes/get-media.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/faxes/get.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/faxes/index.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/faxes/list-media.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/faxes/list.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/faxes/update.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/index.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/laml-bins/create.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/laml-bins/delete.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/laml-bins/get.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/laml-bins/index.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/laml-bins/list.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/laml-bins/update.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/messages/create.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/messages/delete-media.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/messages/delete.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/messages/get-media.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/messages/get.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/messages/index.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/messages/list-media.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/messages/list.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/messages/update.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/phone-numbers/delete.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/phone-numbers/get.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/phone-numbers/import-number.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/phone-numbers/index.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/phone-numbers/list-available-countries.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/phone-numbers/list.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/phone-numbers/purchase.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/phone-numbers/search-local.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/phone-numbers/search-toll-free.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/phone-numbers/update.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/queues/create.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/queues/delete.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/queues/dequeue-member.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/queues/get-member.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/queues/get.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/queues/index.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/queues/list-members.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/queues/list.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/queues/update.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/recordings/delete.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/recordings/get.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/recordings/index.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/recordings/list.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/tokens/create.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/tokens/delete.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/tokens/index.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/tokens/update.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/transcriptions/delete.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/transcriptions/get.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/transcriptions/index.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/compat/transcriptions/list.mdx diff --git a/fern/docs.yml b/fern/docs.yml index 48c3fd1571..3bd944b7f9 100644 --- a/fern/docs.yml +++ b/fern/docs.yml @@ -222,6 +222,13 @@ redirects: - source: /docs/browser-sdk/click-to-call/:slug* destination: /docs/browser-sdk/v3/click-to-call/:slug* + # The TypeScript SDK removed the Twilio-compatible LAML REST namespace + # (client.compat); point its old reference pages at the REST client overview. + - source: /docs/server-sdks/reference/typescript/rest/compat + destination: /docs/server-sdks/reference/typescript/rest + - source: /docs/server-sdks/reference/typescript/rest/compat/:slug* + destination: /docs/server-sdks/reference/typescript/rest + # The SWMLService `onRequest` override hook is now protected (renamed # `buildSwmlForRequest`) and no longer documented; point its old page URL at # the public equivalent, `setOnRequestCallback`. diff --git a/fern/products/server-sdks/pages/guides/manage-resources/overview.mdx b/fern/products/server-sdks/pages/guides/manage-resources/overview.mdx index 4098db383c..c112941258 100644 --- a/fern/products/server-sdks/pages/guides/manage-resources/overview.mdx +++ b/fern/products/server-sdks/pages/guides/manage-resources/overview.mdx @@ -62,7 +62,7 @@ const agents = await client.fabric.aiAgents.list(); console.log(agents); // Search for available phone numbers -const available = await client.phoneNumbers.search({ areaCode: '512' }); +const available = await client.phoneNumbers.search({ areacode: '512' }); console.log(available); ``` @@ -257,7 +257,6 @@ client.calling # REST-based call control (37 commands) client.phone_numbers # Search, purchase, manage numbers client.video # Rooms, sessions, recordings, conferences client.datasphere # Document management and semantic search -client.compat # Twilio-compatible LAML API client.logs # Message, voice, fax, conference logs client.registry # 10DLC brand/campaign management client.queues # Call queue management @@ -485,28 +484,6 @@ order = client.registry.campaigns.create_order( ) ``` -### Compatibility (LAML) Namespace - -Twilio-compatible REST API for migrating existing applications: - -```python -# List calls -calls = client.compat.calls.list() - -# Send an SMS -msg = client.compat.messages.create( - To="+15559876543", - From="+15551234567", - Body="Hello from SignalWire!", -) - -# Manage phone numbers -numbers = client.compat.phone_numbers.list() - -# Start call recording -client.compat.calls.start_recording("call-sid") -``` - ### Other Resources ```python @@ -551,6 +528,15 @@ for number in PaginatedIterator( The iterator automatically follows `links.next` URLs to fetch subsequent pages. +In TypeScript, every list resource has a `paginate()` method that returns an +async iterator over all pages: + +```typescript +for await (const number of client.phoneNumbers.paginate()) { + console.log(number.name, number.number); +} +``` + ### Error Handling REST errors raise `SignalWireRestError`: diff --git a/fern/products/server-sdks/pages/reference/typescript/core/security/index.mdx b/fern/products/server-sdks/pages/reference/typescript/core/security/index.mdx index ac70974445..cf58384ce9 100644 --- a/fern/products/server-sdks/pages/reference/typescript/core/security/index.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/core/security/index.mdx @@ -8,6 +8,7 @@ max-toc-depth: 3 [agentbase]: /docs/server-sdks/reference/typescript/agents/agent-base [validate-webhook-signature]: /docs/server-sdks/reference/typescript/core/security/validate-webhook-signature [validate-request]: /docs/server-sdks/reference/typescript/core/security/validate-request +[validate]: /docs/server-sdks/reference/typescript/core/security/validate [webhook-validation-middleware]: /docs/server-sdks/reference/typescript/core/security/webhook-validation-middleware SignalWire signs the webhook requests it sends to your endpoints. These @@ -18,6 +19,7 @@ All are imported directly from `@signalwire/sdk`. import { validateWebhookSignature, validateRequest, + validate, webhookValidationMiddleware, SIGNALWIRE_SIGNATURE_HEADER, TWILIO_COMPAT_SIGNATURE_HEADER, @@ -38,7 +40,10 @@ for you. Verify a signature against a raw request body. - Legacy compatibility-api drop-in accepting parsed form params. + Verify a signature against a raw body or pre-parsed form params. + + + Framework-free validator that returns a rejection triple or null. Hono middleware that validates and rejects unsigned requests. @@ -52,6 +57,6 @@ for you. - The Twilio-compatible signature header name: `'x-twilio-signature'`, - recognized on the compatibility surface. + The legacy signature header name, `'x-twilio-signature'`. The validators + accept it as an alias of `SIGNALWIRE_SIGNATURE_HEADER`. diff --git a/fern/products/server-sdks/pages/reference/typescript/core/security/validate-request.mdx b/fern/products/server-sdks/pages/reference/typescript/core/security/validate-request.mdx index 6f3d9e348f..ae68ada313 100644 --- a/fern/products/server-sdks/pages/reference/typescript/core/security/validate-request.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/core/security/validate-request.mdx @@ -1,16 +1,16 @@ --- title: "validateRequest" slug: /reference/typescript/core/security/validate-request -description: "Legacy compatibility-api drop-in for webhook signature validation." +description: "Verify a webhook signature from a raw body or pre-parsed form params." max-toc-depth: 3 --- [validate-webhook-signature]: /docs/server-sdks/reference/typescript/core/security/validate-webhook-signature Verify a SignalWire webhook signature, accepting either a raw body string or -pre-parsed form params. This is the drop-in replacement for the legacy -`@signalwire/compatibility-api` `validateRequest`. For new code that has access -to the raw body, prefer [`validateWebhookSignature()`][validate-webhook-signature]. +pre-parsed form params. Use it when your framework has already parsed the form +body and the raw bytes are gone. When you have the raw body, prefer +[`validateWebhookSignature()`][validate-webhook-signature]. ```typescript {1} validateRequest(signingKey: string, signature: string, url: string, paramsOrRawBody: string | Record | Array<[string, unknown]> | null | undefined): boolean @@ -38,14 +38,15 @@ validateRequest(signingKey: string, signature: string, url: string, paramsOrRawB ## **Returns** `boolean` -- `true` when the signature matches; `false` otherwise. The -comparison is constant-time. +comparison is constant-time. Throws a `TypeError` when `paramsOrRawBody` is +neither a string nor a record, `Map`, or array of tuples. ## **Example** ```typescript {6} import { validateRequest } from '@signalwire/sdk'; -// Pre-parsed form params (compat surface) +// Pre-parsed form params const params = { From: '+15551234567', To: '+15559876543' }; const ok = validateRequest( diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/client/index.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/client/index.mdx index b9129645c2..151d59ecfe 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/client/index.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/client/index.mdx @@ -25,7 +25,9 @@ max-toc-depth: 3 [project]: /docs/server-sdks/reference/typescript/rest/project [pubsub]: /docs/server-sdks/reference/typescript/rest/pubsub [chat]: /docs/server-sdks/reference/typescript/rest/chat -[compatibility]: /docs/server-sdks/reference/typescript/rest/compat +[messages]: /docs/server-sdks/reference/typescript/rest/messages +[projects]: /docs/server-sdks/reference/typescript/rest/projects +[request-options]: /docs/server-sdks/reference/typescript/rest/request-options The `RestClient` is the entry point for all SignalWire REST API operations. It authenticates with your project credentials and exposes every API namespace @@ -45,13 +47,25 @@ call control, video rooms, datasphere documents, logs, and more. - SignalWire space hostname (e.g., `your-space.signalwire.com`). Falls back to the - `SIGNALWIRE_SPACE` environment variable when not provided. + SignalWire space hostname (e.g., `your-space.signalwire.com`) or a full + `https://` base URL. When not provided, falls back to the + `SIGNALWIRE_REST_BASE_URL` environment variable (a full URL), then to + `SIGNALWIRE_SPACE` (a bare hostname). + + + + Client-wide default timeout, retry, backoff, and abort settings applied to + every request. A per-request `requestOptions` argument overrides individual + fields for that call. See [`RequestOptions`][request-options]. + + + + Custom `fetch` implementation. Defaults to the global `fetch`. -All three parameters are required. If any is missing from both the constructor -arguments and environment variables, an `Error` is thrown. +`project`, `token`, and `host` are required. If any is missing from both the +constructor arguments and environment variables, an `Error` is thrown. ## **Namespace Properties** @@ -61,62 +75,62 @@ arguments and environment variables, an `Error` is thrown. See [`Fabric`][fabric]. - + REST-based call control with 37+ commands dispatched via POST. See [`Calling`][calling]. - + Search, purchase, and manage phone numbers. See [`Phone Numbers`][phone-numbers]. - + Manage regulatory addresses. See [`Addresses`][addresses]. - + Manage call queues and queue members. See [`Queues`][queues]. - + List, retrieve, and delete call recordings. See [`Recordings`][recordings]. - + Manage number groups and their memberships. See [`Number Groups`][number-groups]. - + Manage and verify caller IDs. See [`Verified Callers`][verified-callers]. - + Get and update the project SIP profile. See [`SIP Profile`][sip-profile]. - + Phone number carrier and CNAM lookup. See [`Lookup`][lookup]. - + Manage short codes. See [`Short Codes`][short-codes]. - + Import externally-hosted phone numbers. See [`Imported Numbers`][imported-numbers]. - + Multi-factor authentication via SMS and voice. See [`MFA`][mfa]. @@ -142,23 +156,28 @@ arguments and environment variables, an `Error` is thrown. - Project-level API token management. + API token management for the current project (`client.project.tokens`). See [`Project`][project]. - + PubSub token generation. See [`PubSub`][pubsub]. - + Chat token generation. See [`Chat`][chat]. - - Twilio-compatible LAML API for migration. - See [`Compatibility`][compatibility]. + + Send SMS and MMS messages and redact message bodies. + See [`Messages`][messages]. + + + + Create, update, and delete projects, and rotate a project's signing key. + See [`Projects`][projects]. ## **Examples** @@ -185,35 +204,29 @@ import { RestClient } from "@signalwire/sdk"; // With SIGNALWIRE_PROJECT_ID, SIGNALWIRE_API_TOKEN, and SIGNALWIRE_SPACE set const client = new RestClient(); -const available = await client.phoneNumbers.search({ areaCode: "512" }); +const available = await client.phoneNumbers.search({ areacode: "512" }); ``` ## **Factory function** The top-level `restClient()` factory is a thin wrapper around -`new RestClient(...)`, provided for parity with the Python SDK's -`RestClient(*args, **kwargs)` call form. +`new RestClient(...)`. Both forms construct the same client. ```typescript {1} -restClient(args?: string[], kwargs?: Record): RestClient +restClient(opts?: ClientOptions): RestClient ``` - - Positional credentials, a compatibility shim for ports that pass - project/token/host positionally. Usually empty in TypeScript. - - - - Keyword-style credentials (`project`, `token`, `host`). When omitted, the same + + The same options the constructor accepts: `project`, `token`, `host`, + `requestOptions`, and `fetchImpl`. When omitted, the `SIGNALWIRE_PROJECT_ID`, `SIGNALWIRE_API_TOKEN`, and `SIGNALWIRE_SPACE` environment variables are read. -```typescript {3-4,7} +```typescript {3-7,10} import { restClient } from "@signalwire/sdk"; -// Explicit credentials -const client = restClient([], { +const client = restClient({ project: "your-project-id", token: "your-api-token", host: "your-space.signalwire.com", diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/accounts/create.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/accounts/create.mdx deleted file mode 100644 index ab13a501cb..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/accounts/create.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "create" -slug: /reference/typescript/rest/compat/accounts/create -description: Create a new subproject (sub-account). -max-toc-depth: 3 ---- - - -Create a new subproject (sub-account). - - - -## **Response Example** - - - -## **Example** - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -const sub = await client.compat.accounts.create({ FriendlyName: "Marketing Team" }); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/accounts/get.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/accounts/get.mdx deleted file mode 100644 index e61c01980e..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/accounts/get.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "get" -slug: /reference/typescript/rest/compat/accounts/get -description: Retrieve a single account by SID. -max-toc-depth: 3 ---- - - -Retrieve a single account by its SID. - - - -## **Response Example** - - - -## **Example** - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -const account = await client.compat.accounts.get("account-sid"); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/accounts/index.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/accounts/index.mdx deleted file mode 100644 index 605c174ab0..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/accounts/index.mdx +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: "Accounts" -slug: /reference/typescript/rest/compat/accounts -description: Manage accounts and subprojects via the Compat API. -max-toc-depth: 3 ---- - -[restclient]: /docs/server-sdks/reference/typescript/rest/client -[list]: /docs/server-sdks/reference/typescript/rest/compat/accounts/list -[create]: /docs/server-sdks/reference/typescript/rest/compat/accounts/create -[get]: /docs/server-sdks/reference/typescript/rest/compat/accounts/get -[update]: /docs/server-sdks/reference/typescript/rest/compat/accounts/update - -Manage accounts and subprojects. The base path is -`/api/laml/2010-04-01/Accounts` (not scoped to a specific account SID). - -Access via `client.compat.accounts` on a [`RestClient`][restclient] instance. - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -const accounts = await client.compat.accounts.list(); -``` - -## **Methods** - - - - List accounts in the project. - - - Create a new subproject (sub-account). - - - Retrieve a single account by SID. - - - Update an account. - - diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/accounts/list.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/accounts/list.mdx deleted file mode 100644 index 2bac3a537b..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/accounts/list.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "list" -slug: /reference/typescript/rest/compat/accounts/list -description: List accounts in the project. -max-toc-depth: 3 ---- - - -List accounts. - - - -## **Response Example** - - - -## **Example** - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -const accounts = await client.compat.accounts.list(); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/accounts/update.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/accounts/update.mdx deleted file mode 100644 index e1e53794cc..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/accounts/update.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "update" -slug: /reference/typescript/rest/compat/accounts/update -description: Update an account. -max-toc-depth: 3 ---- - - -Update an account. Uses POST (Twilio convention). - - - -## **Response Example** - - - -## **Example** - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -await client.compat.accounts.update("account-sid", { FriendlyName: "Sales Team" }); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/applications/create.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/applications/create.mdx deleted file mode 100644 index 8bd65fb32b..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/applications/create.mdx +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: "create" -slug: /reference/typescript/rest/compat/applications/create -description: Create a new application. -max-toc-depth: 3 ---- - - -Create a new application. - - - -## **Response Example** - - - -## **Example** - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -const app = await client.compat.applications.create({ - FriendlyName: "My App", - VoiceUrl: "https://example.com/voice", - SmsUrl: "https://example.com/sms", -}); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/applications/delete.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/applications/delete.mdx deleted file mode 100644 index 37a303c5b3..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/applications/delete.mdx +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: "delete" -slug: /reference/typescript/rest/compat/applications/delete -description: Delete an application. -max-toc-depth: 3 ---- - - -Delete an application. - - - -## **Example** - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -await client.compat.applications.delete("AP..."); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/applications/get.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/applications/get.mdx deleted file mode 100644 index 1b94ef98f8..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/applications/get.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "get" -slug: /reference/typescript/rest/compat/applications/get -description: Retrieve a single application by SID. -max-toc-depth: 3 ---- - - -Retrieve a single application by SID. - - - -## **Response Example** - - - -## **Example** - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -const app = await client.compat.applications.get("AP..."); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/applications/index.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/applications/index.mdx deleted file mode 100644 index 8a5319dbc6..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/applications/index.mdx +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: "Applications" -slug: /reference/typescript/rest/compat/applications -description: Manage applications with CRUD operations. -max-toc-depth: 3 ---- - -[restclient]: /docs/server-sdks/reference/typescript/rest/client -[list]: /docs/server-sdks/reference/typescript/rest/compat/applications/list -[create]: /docs/server-sdks/reference/typescript/rest/compat/applications/create -[get]: /docs/server-sdks/reference/typescript/rest/compat/applications/get -[update]: /docs/server-sdks/reference/typescript/rest/compat/applications/update -[delete]: /docs/server-sdks/reference/typescript/rest/compat/applications/delete - -Manage applications with CRUD operations. Applications define voice and messaging -URL endpoints for handling incoming calls and messages. - -Access via `client.compat.applications` on a [`RestClient`][restclient] instance. - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -const apps = await client.compat.applications.list(); -``` - -## **Methods** - - - - List applications in the account. - - - Create a new application. - - - Retrieve a single application by SID. - - - Update an application. - - - Delete an application. - - diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/applications/list.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/applications/list.mdx deleted file mode 100644 index 99c17664d5..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/applications/list.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "list" -slug: /reference/typescript/rest/compat/applications/list -description: List applications in the account. -max-toc-depth: 3 ---- - - -List applications in the account. - - - -## **Response Example** - - - -## **Example** - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -const apps = await client.compat.applications.list({ PageSize: 20 }); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/applications/update.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/applications/update.mdx deleted file mode 100644 index 0e7c957cd4..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/applications/update.mdx +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: "update" -slug: /reference/typescript/rest/compat/applications/update -description: Update an application. -max-toc-depth: 3 ---- - - -Update an application's configuration. Uses POST (Twilio convention). - - - -## **Response Example** - - - -## **Example** - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -await client.compat.applications.update("AP...", { - VoiceUrl: "https://example.com/new-voice", -}); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/calls/create.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/calls/create.mdx deleted file mode 100644 index 38981868e2..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/calls/create.mdx +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: "create" -slug: /reference/typescript/rest/compat/calls/create -description: Initiate a new outbound call. -max-toc-depth: 3 ---- - - -Initiate a new outbound call. - - - -## **Response Example** - - - -## **Example** - -```typescript {8} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -const call = await client.compat.calls.create({ - To: "+15559876543", - From: "+15551234567", - Url: "https://example.com/voice", -}); -console.log(call.sid); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/calls/delete.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/calls/delete.mdx deleted file mode 100644 index fc952e1591..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/calls/delete.mdx +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: "delete" -slug: /reference/typescript/rest/compat/calls/delete -description: Delete a call record. -max-toc-depth: 3 ---- - - -Delete a call record. - - - -## **Example** - -```typescript {8} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -await client.compat.calls.delete("CA..."); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/calls/get.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/calls/get.mdx deleted file mode 100644 index ae15e68b76..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/calls/get.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "get" -slug: /reference/typescript/rest/compat/calls/get -description: Retrieve a single call by SID. -max-toc-depth: 3 ---- - - -Retrieve a single call by SID. - - - -## **Response Example** - - - -## **Example** - -```typescript {8} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -const call = await client.compat.calls.get("CA..."); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/calls/index.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/calls/index.mdx deleted file mode 100644 index e5a236a96f..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/calls/index.mdx +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: "Calls" -slug: /reference/typescript/rest/compat/calls -description: Manage calls with CRUD operations, in-call recording, and media streaming. -max-toc-depth: 3 ---- - -[restclient]: /docs/server-sdks/reference/typescript/rest/client -[list]: /docs/server-sdks/reference/typescript/rest/compat/calls/list -[create]: /docs/server-sdks/reference/typescript/rest/compat/calls/create -[get]: /docs/server-sdks/reference/typescript/rest/compat/calls/get -[update]: /docs/server-sdks/reference/typescript/rest/compat/calls/update -[delete]: /docs/server-sdks/reference/typescript/rest/compat/calls/delete -[startrecording]: /docs/server-sdks/reference/typescript/rest/compat/calls/start-recording -[updaterecording]: /docs/server-sdks/reference/typescript/rest/compat/calls/update-recording -[startstream]: /docs/server-sdks/reference/typescript/rest/compat/calls/start-stream -[stopstream]: /docs/server-sdks/reference/typescript/rest/compat/calls/stop-stream - -Manage calls with CRUD operations, plus sub-resources for in-call recording -and streaming. Uses POST for updates (Twilio convention). - -Access via `client.compat.calls` on a [`RestClient`][restclient] instance. - -```typescript {8} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -const calls = await client.compat.calls.list(); -``` - -## **Methods** - -### Call CRUD - - - - List calls in the account. - - - Initiate a new outbound call. - - - Retrieve a single call by SID. - - - Update an active call. - - - Delete a call record. - - - -### Recording - - - - Start recording an active call. - - - Update a call recording (pause, resume, or stop). - - - -### Streaming - - - - Start a media stream on an active call. - - - Stop a media stream on a call. - - diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/calls/list.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/calls/list.mdx deleted file mode 100644 index beee1431d4..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/calls/list.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "list" -slug: /reference/typescript/rest/compat/calls/list -description: List calls in the account. -max-toc-depth: 3 ---- - - -List calls in the account. - - - -## **Response Example** - - - -## **Example** - -```typescript {8} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -const calls = await client.compat.calls.list({ Status: "completed", PageSize: 20 }); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/calls/start-recording.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/calls/start-recording.mdx deleted file mode 100644 index ef17b61124..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/calls/start-recording.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "startRecording" -slug: /reference/typescript/rest/compat/calls/start-recording -description: Start recording an active call. -max-toc-depth: 3 ---- - - -Start recording an active call. - - - -## **Response Example** - - - -## **Example** - -```typescript {8} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -const recording = await client.compat.calls.startRecording("CA..."); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/calls/start-stream.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/calls/start-stream.mdx deleted file mode 100644 index 64301128d9..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/calls/start-stream.mdx +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: "startStream" -slug: /reference/typescript/rest/compat/calls/start-stream -description: Start a media stream on an active call. -max-toc-depth: 3 ---- - - -Start a media stream on an active call, sending real-time audio to a WebSocket URL. - - - -## **Response Example** - - - -## **Example** - -```typescript {8} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -const stream = await client.compat.calls.startStream("CA...", { - Url: "wss://stream.example.com", -}); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/calls/stop-stream.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/calls/stop-stream.mdx deleted file mode 100644 index f2605c1421..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/calls/stop-stream.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "stopStream" -slug: /reference/typescript/rest/compat/calls/stop-stream -description: Stop a media stream on a call. -max-toc-depth: 3 ---- - - -Stop a media stream on a call. - - - -## **Response Example** - - - -## **Example** - -```typescript {8} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -await client.compat.calls.stopStream("CA...", "ST...", { Status: "stopped" }); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/calls/update-recording.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/calls/update-recording.mdx deleted file mode 100644 index d124efd54a..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/calls/update-recording.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "updateRecording" -slug: /reference/typescript/rest/compat/calls/update-recording -description: Update a call recording (pause, resume, or stop). -max-toc-depth: 3 ---- - - -Update a call recording (e.g., pause, resume, or stop). - - - -## **Response Example** - - - -## **Example** - -```typescript {8} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -await client.compat.calls.updateRecording("CA...", "RE...", { Status: "paused" }); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/calls/update.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/calls/update.mdx deleted file mode 100644 index b1e249d7bc..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/calls/update.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "update" -slug: /reference/typescript/rest/compat/calls/update -description: Update an active call. -max-toc-depth: 3 ---- - - -Update an active call (e.g., redirect to new LAML, end the call). Uses POST (Twilio convention). - - - -## **Response Example** - - - -## **Example** - -```typescript {8} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -await client.compat.calls.update("CA...", { Status: "completed" }); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/delete-recording.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/delete-recording.mdx deleted file mode 100644 index 3d08bfbbeb..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/delete-recording.mdx +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: "deleteRecording" -slug: /reference/typescript/rest/compat/conferences/delete-recording -description: Delete a conference recording. -max-toc-depth: 3 ---- - - -Delete a conference recording. - - - -## **Example** - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com" -}); - -await client.compat.conferences.deleteRecording("CF...", "RE..."); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/get-participant.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/get-participant.mdx deleted file mode 100644 index 9fed34087d..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/get-participant.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "getParticipant" -slug: /reference/typescript/rest/compat/conferences/get-participant -description: Retrieve a specific participant in a conference. -max-toc-depth: 3 ---- - - -Retrieve a specific participant in a conference. - - - -## **Response Example** - - - -## **Example** - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com" -}); - -const participant = await client.compat.conferences.getParticipant("CF...", "CA..."); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/get-recording.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/get-recording.mdx deleted file mode 100644 index 1ad6485904..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/get-recording.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "getRecording" -slug: /reference/typescript/rest/compat/conferences/get-recording -description: Retrieve a specific conference recording. -max-toc-depth: 3 ---- - - -Retrieve a specific conference recording. - - - -## **Response Example** - - - -## **Example** - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com" -}); - -const recording = await client.compat.conferences.getRecording("CF...", "RE..."); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/get.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/get.mdx deleted file mode 100644 index c334da00f0..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/get.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "get" -slug: /reference/typescript/rest/compat/conferences/get -description: Retrieve a single conference by SID. -max-toc-depth: 3 ---- - - -Retrieve a single conference by SID. - - - -## **Response Example** - - - -## **Example** - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com" -}); - -const conf = await client.compat.conferences.get("CF..."); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/index.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/index.mdx deleted file mode 100644 index b9f8e38746..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/index.mdx +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: "Conferences" -slug: /reference/typescript/rest/compat/conferences -description: Manage conferences with participants, recordings, and media streams. -max-toc-depth: 3 ---- - -[restclient]: /docs/server-sdks/reference/typescript/rest/client -[list]: /docs/server-sdks/reference/typescript/rest/compat/conferences/list -[get]: /docs/server-sdks/reference/typescript/rest/compat/conferences/get -[update]: /docs/server-sdks/reference/typescript/rest/compat/conferences/update -[listparticipants]: /docs/server-sdks/reference/typescript/rest/compat/conferences/list-participants -[getparticipant]: /docs/server-sdks/reference/typescript/rest/compat/conferences/get-participant -[updateparticipant]: /docs/server-sdks/reference/typescript/rest/compat/conferences/update-participant -[removeparticipant]: /docs/server-sdks/reference/typescript/rest/compat/conferences/remove-participant -[listrecordings]: /docs/server-sdks/reference/typescript/rest/compat/conferences/list-recordings -[getrecording]: /docs/server-sdks/reference/typescript/rest/compat/conferences/get-recording -[updaterecording]: /docs/server-sdks/reference/typescript/rest/compat/conferences/update-recording -[deleterecording]: /docs/server-sdks/reference/typescript/rest/compat/conferences/delete-recording -[startstream]: /docs/server-sdks/reference/typescript/rest/compat/conferences/start-stream -[stopstream]: /docs/server-sdks/reference/typescript/rest/compat/conferences/stop-stream - -Manage conferences with participants, recordings, and streams. Conferences are -list/get/update only (they are created implicitly when a participant dials in -via LAML). - -Access via `client.compat.conferences` on a [`RestClient`][restclient] instance. - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com" -}); - -const conferences = await client.compat.conferences.list(); -``` - -## **Methods** - -### Conference CRUD - - - - List conferences. - - - Retrieve a single conference by SID. - - - Update a conference (e.g., end it or set an announce URL). - - - -### Participants - - - - List participants in a conference. - - - Retrieve a specific participant in a conference. - - - Update a participant in a conference (mute or hold). - - - Remove a participant from a conference. - - - -### Recordings - - - - List recordings for a conference. - - - Retrieve a specific conference recording. - - - Update a conference recording (pause, resume, or stop). - - - Delete a conference recording. - - - -### Streaming - - - - Start a media stream on a conference. - - - Stop a media stream on a conference. - - diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/list-participants.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/list-participants.mdx deleted file mode 100644 index 27544fe9b2..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/list-participants.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "listParticipants" -slug: /reference/typescript/rest/compat/conferences/list-participants -description: List participants in a conference. -max-toc-depth: 3 ---- - - -List participants in a conference. - - - -## **Response Example** - - - -## **Example** - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com" -}); - -const participants = await client.compat.conferences.listParticipants("CF..."); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/list-recordings.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/list-recordings.mdx deleted file mode 100644 index 77d5e45919..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/list-recordings.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "listRecordings" -slug: /reference/typescript/rest/compat/conferences/list-recordings -description: List recordings for a conference. -max-toc-depth: 3 ---- - - -List recordings for a conference. - - - -## **Response Example** - - - -## **Example** - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com" -}); - -const recordings = await client.compat.conferences.listRecordings("CF..."); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/list.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/list.mdx deleted file mode 100644 index eac595fd21..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/list.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "list" -slug: /reference/typescript/rest/compat/conferences/list -description: List conferences. -max-toc-depth: 3 ---- - - -List conferences. - - - -## **Response Example** - - - -## **Example** - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com" -}); - -const conferences = await client.compat.conferences.list({ Status: "in-progress" }); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/remove-participant.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/remove-participant.mdx deleted file mode 100644 index 9b66c631d9..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/remove-participant.mdx +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: "removeParticipant" -slug: /reference/typescript/rest/compat/conferences/remove-participant -description: Remove a participant from a conference. -max-toc-depth: 3 ---- - - -Remove a participant from a conference, ending their call leg. - - - -## **Example** - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com" -}); - -await client.compat.conferences.removeParticipant("CF...", "CA..."); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/start-stream.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/start-stream.mdx deleted file mode 100644 index b0f93f880d..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/start-stream.mdx +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: "startStream" -slug: /reference/typescript/rest/compat/conferences/start-stream -description: Start a media stream on a conference. -max-toc-depth: 3 ---- - - -Start a media stream on a conference, sending real-time audio to a WebSocket URL. - - - -## **Response Example** - - - -## **Example** - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com" -}); - -const stream = await client.compat.conferences.startStream( - "CF...", - { Url: "wss://stream.example.com" } -); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/stop-stream.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/stop-stream.mdx deleted file mode 100644 index 7ed1dcca6a..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/stop-stream.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "stopStream" -slug: /reference/typescript/rest/compat/conferences/stop-stream -description: Stop a media stream on a conference. -max-toc-depth: 3 ---- - - -Stop a media stream on a conference. - - - -## **Response Example** - - - -## **Example** - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com" -}); - -await client.compat.conferences.stopStream("CF...", "ST...", { Status: "stopped" }); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/update-participant.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/update-participant.mdx deleted file mode 100644 index f6971c428e..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/update-participant.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "updateParticipant" -slug: /reference/typescript/rest/compat/conferences/update-participant -description: Update a participant in a conference (mute or hold). -max-toc-depth: 3 ---- - - -Update a participant in a conference (e.g., mute or hold). - - - -## **Response Example** - - - -## **Example** - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com" -}); - -await client.compat.conferences.updateParticipant("CF...", "CA...", { Muted: true }); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/update-recording.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/update-recording.mdx deleted file mode 100644 index 76e481957b..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/update-recording.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "updateRecording" -slug: /reference/typescript/rest/compat/conferences/update-recording -description: Update a conference recording (pause, resume, or stop). -max-toc-depth: 3 ---- - - -Update a conference recording (e.g., pause, resume, or stop). - - - -## **Response Example** - - - -## **Example** - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com" -}); - -await client.compat.conferences.updateRecording("CF...", "RE...", { Status: "paused" }); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/update.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/update.mdx deleted file mode 100644 index 8065b4df25..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/conferences/update.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "update" -slug: /reference/typescript/rest/compat/conferences/update -description: Update a conference (e.g., end it or set an announce URL). -max-toc-depth: 3 ---- - - -Update a conference (e.g., end it, or set the announce URL). Uses POST (Twilio convention). - - - -## **Response Example** - - - -## **Example** - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com" -}); - -await client.compat.conferences.update("CF...", { Status: "completed" }); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/faxes/create.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/faxes/create.mdx deleted file mode 100644 index 3eaaa60279..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/faxes/create.mdx +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: "create" -slug: /reference/typescript/rest/compat/faxes/create -description: Send a new fax. -max-toc-depth: 3 ---- - - -Send a new fax. - - - -## **Response Example** - - - -## **Example** - -```typescript {8} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -const fax = await client.compat.faxes.create({ - To: "+15559876543", - From: "+15551234567", - MediaUrl: "https://example.com/document.pdf", -}); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/faxes/delete-media.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/faxes/delete-media.mdx deleted file mode 100644 index ac48797ebc..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/faxes/delete-media.mdx +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: "deleteMedia" -slug: /reference/typescript/rest/compat/faxes/delete-media -description: Delete a media item from a fax. -max-toc-depth: 3 ---- - - -Delete a media item from a fax. - - - -## **Example** - -```typescript {8} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -await client.compat.faxes.deleteMedia("FX...", "ME..."); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/faxes/delete.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/faxes/delete.mdx deleted file mode 100644 index 5a8cebb682..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/faxes/delete.mdx +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: "delete" -slug: /reference/typescript/rest/compat/faxes/delete -description: Delete a fax record. -max-toc-depth: 3 ---- - - -Delete a fax record. - - - -## **Example** - -```typescript {8} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -await client.compat.faxes.delete("FX..."); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/faxes/get-media.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/faxes/get-media.mdx deleted file mode 100644 index b728e0646d..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/faxes/get-media.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "getMedia" -slug: /reference/typescript/rest/compat/faxes/get-media -description: Retrieve a specific media item from a fax. -max-toc-depth: 3 ---- - - -Retrieve a specific media item from a fax. - - - -## **Response Example** - - - -## **Example** - -```typescript {8} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -const item = await client.compat.faxes.getMedia("FX...", "ME..."); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/faxes/get.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/faxes/get.mdx deleted file mode 100644 index 18698ae1f1..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/faxes/get.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "get" -slug: /reference/typescript/rest/compat/faxes/get -description: Retrieve a single fax by SID. -max-toc-depth: 3 ---- - - -Retrieve a single fax by SID. - - - -## **Response Example** - - - -## **Example** - -```typescript {8} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -const fax = await client.compat.faxes.get("FX..."); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/faxes/index.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/faxes/index.mdx deleted file mode 100644 index 5582299a66..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/faxes/index.mdx +++ /dev/null @@ -1,70 +0,0 @@ ---- -title: "Faxes" -slug: /reference/typescript/rest/compat/faxes -description: Manage faxes with CRUD operations and media sub-resources. -max-toc-depth: 3 ---- - -[messages]: /docs/server-sdks/reference/typescript/rest/compat/messages -[restclient]: /docs/server-sdks/reference/typescript/rest/client -[list]: /docs/server-sdks/reference/typescript/rest/compat/faxes/list -[create]: /docs/server-sdks/reference/typescript/rest/compat/faxes/create -[get]: /docs/server-sdks/reference/typescript/rest/compat/faxes/get -[update]: /docs/server-sdks/reference/typescript/rest/compat/faxes/update -[delete]: /docs/server-sdks/reference/typescript/rest/compat/faxes/delete -[listmedia]: /docs/server-sdks/reference/typescript/rest/compat/faxes/list-media -[getmedia]: /docs/server-sdks/reference/typescript/rest/compat/faxes/get-media -[deletemedia]: /docs/server-sdks/reference/typescript/rest/compat/faxes/delete-media - -Manage faxes with CRUD operations and media sub-resources. The media sub-resource -pattern is identical to [`messages`][messages]. - -Access via `client.compat.faxes` on a [`RestClient`][restclient] instance. - -```typescript {8} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -const faxes = await client.compat.faxes.list(); -``` - -## **Methods** - -### Fax CRUD - - - - List faxes in the account. - - - Send a new fax. - - - Retrieve a single fax by SID. - - - Update a fax resource. - - - Delete a fax record. - - - -### Media - - - - List media items attached to a fax. - - - Retrieve a specific media item from a fax. - - - Delete a media item from a fax. - - diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/faxes/list-media.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/faxes/list-media.mdx deleted file mode 100644 index 888fcb5885..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/faxes/list-media.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "listMedia" -slug: /reference/typescript/rest/compat/faxes/list-media -description: List media items attached to a fax. -max-toc-depth: 3 ---- - - -List media items attached to a fax. - - - -## **Response Example** - - - -## **Example** - -```typescript {8} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -const media = await client.compat.faxes.listMedia("FX..."); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/faxes/list.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/faxes/list.mdx deleted file mode 100644 index edbd01d5af..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/faxes/list.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "list" -slug: /reference/typescript/rest/compat/faxes/list -description: List faxes in the account. -max-toc-depth: 3 ---- - - -List faxes in the account. - - - -## **Response Example** - - - -## **Example** - -```typescript {8} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -const faxes = await client.compat.faxes.list(); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/faxes/update.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/faxes/update.mdx deleted file mode 100644 index 9b96825725..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/faxes/update.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "update" -slug: /reference/typescript/rest/compat/faxes/update -description: Update a fax resource. -max-toc-depth: 3 ---- - - -Update a fax resource. Uses POST (Twilio convention). - - - -## **Response Example** - - - -## **Example** - -```typescript {8} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -await client.compat.faxes.update("FX...", { Status: "canceled" }); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/index.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/index.mdx deleted file mode 100644 index d86e8f2997..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/index.mdx +++ /dev/null @@ -1,123 +0,0 @@ ---- -title: "Compat" -slug: /reference/typescript/rest/compat -description: Twilio-compatible REST API for calls, messages, faxes, conferences, phone numbers, and more. -max-toc-depth: 3 ---- - -[restclient]: /docs/server-sdks/reference/typescript/rest/client -[accounts]: /docs/server-sdks/reference/typescript/rest/compat/accounts -[calls]: /docs/server-sdks/reference/typescript/rest/compat/calls -[messages]: /docs/server-sdks/reference/typescript/rest/compat/messages -[faxes]: /docs/server-sdks/reference/typescript/rest/compat/faxes -[conferences]: /docs/server-sdks/reference/typescript/rest/compat/conferences -[phone-numbers]: /docs/server-sdks/reference/typescript/rest/compat/phone-numbers -[applications]: /docs/server-sdks/reference/typescript/rest/compat/applications -[laml-bins]: /docs/server-sdks/reference/typescript/rest/compat/laml-bins -[queues]: /docs/server-sdks/reference/typescript/rest/compat/queues -[recordings]: /docs/server-sdks/reference/typescript/rest/compat/recordings -[transcriptions]: /docs/server-sdks/reference/typescript/rest/compat/transcriptions -[tokens]: /docs/server-sdks/reference/typescript/rest/compat/tokens - -The `CompatNamespace` provides a Twilio-compatible LAML REST API through the -[`RestClient`][restclient]. It implements the familiar -`/2010-04-01/Accounts/{AccountSid}/` URL structure with 12 sub-resources, making it -straightforward to migrate existing Twilio integrations to SignalWire. - -Access via `client.compat` on a [`RestClient`][restclient] instance. - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com" -}); - -const calls = await client.compat.calls.list(); -``` - - -The Compat namespace uses the same REST patterns as Twilio's API. If you are migrating -from Twilio, most code changes are limited to updating the client initialization to use -SignalWire credentials. Resource identifiers use SIDs (e.g., `CA...` for calls, `SM...` -for messages). - - -## **Sub-resources** - - - - Account and subproject management. - - - Call management with recording and stream sub-resources. - - - SMS/MMS messaging with media sub-resources. - - - Fax management with media sub-resources. - - - Conference management with participants, recordings, and streams. - - - Phone number management, search, and import. - - - Application configuration management. - - - LAML (cXML) script management. - - - Queue management with member operations. - - - Recording management. - - - Transcription management. - - - API token management. - - diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/laml-bins/create.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/laml-bins/create.mdx deleted file mode 100644 index 8a0c80e0f3..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/laml-bins/create.mdx +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: "create" -slug: /reference/typescript/rest/compat/laml-bins/create -description: Create a new LAML bin. -max-toc-depth: 3 ---- - - -Create a new LAML bin containing a cXML/LaML script. - - - -## **Response Example** - - - -## **Example** - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -const lamlBin = await client.compat.lamlBins.create({ - Name: "Greeting", - Contents: - '' + - "Hello!", -}); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/laml-bins/delete.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/laml-bins/delete.mdx deleted file mode 100644 index e5d78698f3..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/laml-bins/delete.mdx +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: "delete" -slug: /reference/typescript/rest/compat/laml-bins/delete -description: Delete a LAML bin. -max-toc-depth: 3 ---- - - -Delete a LAML bin. - - - -## **Example** - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -await client.compat.lamlBins.delete("LB..."); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/laml-bins/get.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/laml-bins/get.mdx deleted file mode 100644 index ed0327a748..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/laml-bins/get.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "get" -slug: /reference/typescript/rest/compat/laml-bins/get -description: Retrieve a single LAML bin by SID. -max-toc-depth: 3 ---- - - -Retrieve a single LAML bin by SID. - - - -## **Response Example** - - - -## **Example** - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -const lamlBin = await client.compat.lamlBins.get("LB..."); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/laml-bins/index.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/laml-bins/index.mdx deleted file mode 100644 index 5455ca3ee0..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/laml-bins/index.mdx +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: "LAML Bins" -slug: /reference/typescript/rest/compat/laml-bins -description: Manage LAML bins (cXML/LaML scripts) with CRUD operations. -max-toc-depth: 3 ---- - -[restclient]: /docs/server-sdks/reference/typescript/rest/client -[list]: /docs/server-sdks/reference/typescript/rest/compat/laml-bins/list -[create]: /docs/server-sdks/reference/typescript/rest/compat/laml-bins/create -[get]: /docs/server-sdks/reference/typescript/rest/compat/laml-bins/get -[update]: /docs/server-sdks/reference/typescript/rest/compat/laml-bins/update -[delete]: /docs/server-sdks/reference/typescript/rest/compat/laml-bins/delete - -Manage LAML bins with CRUD operations. LAML bins store reusable cXML/LaML scripts -that can be referenced by URL in call and message handling. - -Access via `client.compat.lamlBins` on a [`RestClient`][restclient] instance. - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -const bins = await client.compat.lamlBins.list(); -``` - -## **Methods** - - - - List LAML bins in the account. - - - Create a new LAML bin. - - - Retrieve a single LAML bin by SID. - - - Update a LAML bin. - - - Delete a LAML bin. - - diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/laml-bins/list.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/laml-bins/list.mdx deleted file mode 100644 index b952c9da74..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/laml-bins/list.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "list" -slug: /reference/typescript/rest/compat/laml-bins/list -description: List LAML bins in the account. -max-toc-depth: 3 ---- - - -List LAML bins in the account. - - - -## **Response Example** - - - -## **Example** - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -const bins = await client.compat.lamlBins.list({ PageSize: 20 }); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/laml-bins/update.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/laml-bins/update.mdx deleted file mode 100644 index 2350f173cf..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/laml-bins/update.mdx +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: "update" -slug: /reference/typescript/rest/compat/laml-bins/update -description: Update a LAML bin. -max-toc-depth: 3 ---- - - -Update a LAML bin's content or name. Uses POST (Twilio convention). - - - -## **Response Example** - - - -## **Example** - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -await client.compat.lamlBins.update("LB...", { - Name: "Greeting", - Contents: - '' + - "Goodbye!", -}); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/messages/create.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/messages/create.mdx deleted file mode 100644 index 7f9915cef5..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/messages/create.mdx +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: "create" -slug: /reference/typescript/rest/compat/messages/create -description: Send a new SMS or MMS message. -max-toc-depth: 3 ---- - - -Send a new SMS or MMS message. - - - -## **Response Example** - - - -## **Example** - -```typescript {9,16} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -// Send an SMS -const msg = await client.compat.messages.create({ - To: "+15559876543", - From: "+15551234567", - Body: "Hello from SignalWire!", -}); - -// Send an MMS with an image -const mms = await client.compat.messages.create({ - To: "+15559876543", - From: "+15551234567", - Body: "Check this out", - MediaUrl: ["https://example.com/image.jpg"], -}); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/messages/delete-media.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/messages/delete-media.mdx deleted file mode 100644 index 9ede121e0a..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/messages/delete-media.mdx +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: "deleteMedia" -slug: /reference/typescript/rest/compat/messages/delete-media -description: Delete a media item from a message. -max-toc-depth: 3 ---- - - -Delete a media item from a message. - - - -## **Example** - -```typescript {8} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -await client.compat.messages.deleteMedia("SM...", "ME..."); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/messages/delete.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/messages/delete.mdx deleted file mode 100644 index 6dceb9a2c3..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/messages/delete.mdx +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: "delete" -slug: /reference/typescript/rest/compat/messages/delete -description: Delete a message record. -max-toc-depth: 3 ---- - - -Delete a message record. - - - -## **Example** - -```typescript {8} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -await client.compat.messages.delete("SM..."); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/messages/get-media.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/messages/get-media.mdx deleted file mode 100644 index b7451b2cec..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/messages/get-media.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "getMedia" -slug: /reference/typescript/rest/compat/messages/get-media -description: Retrieve a specific media item from a message. -max-toc-depth: 3 ---- - - -Retrieve a specific media item from a message. - - - -## **Response Example** - - - -## **Example** - -```typescript {8} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -const item = await client.compat.messages.getMedia("SM...", "ME..."); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/messages/get.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/messages/get.mdx deleted file mode 100644 index e9e90a8f44..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/messages/get.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "get" -slug: /reference/typescript/rest/compat/messages/get -description: Retrieve a single message by SID. -max-toc-depth: 3 ---- - - -Retrieve a single message by SID. - - - -## **Response Example** - - - -## **Example** - -```typescript {8} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -const message = await client.compat.messages.get("SM..."); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/messages/index.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/messages/index.mdx deleted file mode 100644 index 5522400be3..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/messages/index.mdx +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: "Messages" -slug: /reference/typescript/rest/compat/messages -description: Manage SMS and MMS messages with media sub-resources. -max-toc-depth: 3 ---- - -[restclient]: /docs/server-sdks/reference/typescript/rest/client -[list]: /docs/server-sdks/reference/typescript/rest/compat/messages/list -[create]: /docs/server-sdks/reference/typescript/rest/compat/messages/create -[get]: /docs/server-sdks/reference/typescript/rest/compat/messages/get -[update]: /docs/server-sdks/reference/typescript/rest/compat/messages/update -[delete]: /docs/server-sdks/reference/typescript/rest/compat/messages/delete -[listmedia]: /docs/server-sdks/reference/typescript/rest/compat/messages/list-media -[getmedia]: /docs/server-sdks/reference/typescript/rest/compat/messages/get-media -[deletemedia]: /docs/server-sdks/reference/typescript/rest/compat/messages/delete-media - -Manage SMS and MMS messages with CRUD operations and media sub-resources. - -Access via `client.compat.messages` on a [`RestClient`][restclient] instance. - -```typescript {8} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -const messages = await client.compat.messages.list(); -``` - -## **Methods** - -### Message CRUD - - - - List messages in the account. - - - Send a new SMS or MMS message. - - - Retrieve a single message by SID. - - - Update a message (e.g., redact the body). - - - Delete a message record. - - - -### Media - - - - List media items attached to a message. - - - Retrieve a specific media item from a message. - - - Delete a media item from a message. - - diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/messages/list-media.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/messages/list-media.mdx deleted file mode 100644 index b99e6dc873..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/messages/list-media.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "listMedia" -slug: /reference/typescript/rest/compat/messages/list-media -description: List media items attached to a message. -max-toc-depth: 3 ---- - - -List media items (images, files) attached to a message. - - - -## **Response Example** - - - -## **Example** - -```typescript {8} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -const media = await client.compat.messages.listMedia("SM..."); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/messages/list.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/messages/list.mdx deleted file mode 100644 index 197628c2c7..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/messages/list.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "list" -slug: /reference/typescript/rest/compat/messages/list -description: List messages in the account. -max-toc-depth: 3 ---- - - -List messages in the account. - - - -## **Response Example** - - - -## **Example** - -```typescript {8} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -const messages = await client.compat.messages.list({ PageSize: 20 }); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/messages/update.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/messages/update.mdx deleted file mode 100644 index 6c3c0fe0a5..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/messages/update.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "update" -slug: /reference/typescript/rest/compat/messages/update -description: Update a message (e.g., redact the body). -max-toc-depth: 3 ---- - - -Update a message (e.g., redact the body of a sent message). Uses POST (Twilio convention). - - - -## **Response Example** - - - -## **Example** - -```typescript {8} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -await client.compat.messages.update("SM...", { Body: "" }); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/phone-numbers/delete.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/phone-numbers/delete.mdx deleted file mode 100644 index 598aa94919..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/phone-numbers/delete.mdx +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: "delete" -slug: /reference/typescript/rest/compat/phone-numbers/delete -description: Release a phone number. -max-toc-depth: 3 ---- - - -Release a phone number from the account. - - - -## **Example** - -```typescript {8} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com" -}); -await client.compat.phoneNumbers.delete("PN..."); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/phone-numbers/get.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/phone-numbers/get.mdx deleted file mode 100644 index 7a308f9f8a..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/phone-numbers/get.mdx +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: "get" -slug: /reference/typescript/rest/compat/phone-numbers/get -description: Retrieve a single phone number by SID. -max-toc-depth: 3 ---- - - -Retrieve a single phone number by SID. - - - -## **Response Example** - - - -## **Example** - -```typescript {8} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com" -}); -const number = await client.compat.phoneNumbers.get("PN..."); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/phone-numbers/import-number.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/phone-numbers/import-number.mdx deleted file mode 100644 index 9d056e6b21..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/phone-numbers/import-number.mdx +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: "importNumber" -slug: /reference/typescript/rest/compat/phone-numbers/import-number -description: Import an external phone number. -max-toc-depth: 3 ---- - - -Import an external phone number into the account. - - - -## **Response Example** - - - -## **Example** - -```typescript {8} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com" -}); -const number = await client.compat.phoneNumbers.importNumber({ - number: "+15559876543", - number_type: "longcode", -}); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/phone-numbers/index.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/phone-numbers/index.mdx deleted file mode 100644 index 482aabad61..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/phone-numbers/index.mdx +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: "Phone Numbers" -slug: /reference/typescript/rest/compat/phone-numbers -description: Manage phone numbers, search available inventory, and import numbers. -max-toc-depth: 3 ---- - -[restclient]: /docs/server-sdks/reference/typescript/rest/client -[list]: /docs/server-sdks/reference/typescript/rest/compat/phone-numbers/list -[purchase]: /docs/server-sdks/reference/typescript/rest/compat/phone-numbers/purchase -[get]: /docs/server-sdks/reference/typescript/rest/compat/phone-numbers/get -[update]: /docs/server-sdks/reference/typescript/rest/compat/phone-numbers/update -[delete]: /docs/server-sdks/reference/typescript/rest/compat/phone-numbers/delete -[importnumber]: /docs/server-sdks/reference/typescript/rest/compat/phone-numbers/import-number -[listavailablecountries]: /docs/server-sdks/reference/typescript/rest/compat/phone-numbers/list-available-countries -[searchlocal]: /docs/server-sdks/reference/typescript/rest/compat/phone-numbers/search-local -[searchtollfree]: /docs/server-sdks/reference/typescript/rest/compat/phone-numbers/search-toll-free - -Manage incoming phone numbers with CRUD operations, search available inventory -by country, and import external numbers. - -Access via `client.compat.phoneNumbers` on a [`RestClient`][restclient] instance. - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com" -}); - -const numbers = await client.compat.phoneNumbers.list(); -``` - -## **Methods** - -### Phone Number CRUD - - - - List incoming phone numbers in the account. - - - Purchase a new phone number. - - - Retrieve a single phone number by SID. - - - Update a phone number's configuration. - - - Release a phone number. - - - -### Import - - - - Import an external phone number. - - - -### Available Numbers - - - - List countries with available phone numbers. - - - Search for available local numbers in a country. - - - Search for available toll-free numbers in a country. - - diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/phone-numbers/list-available-countries.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/phone-numbers/list-available-countries.mdx deleted file mode 100644 index c9c853cca1..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/phone-numbers/list-available-countries.mdx +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: "listAvailableCountries" -slug: /reference/typescript/rest/compat/phone-numbers/list-available-countries -description: List countries with available phone numbers. -max-toc-depth: 3 ---- - - -List countries that have phone numbers available for purchase. - - - -## **Response Example** - - - -## **Example** - -```typescript {8} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com" -}); -const countries = await client.compat.phoneNumbers.listAvailableCountries(); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/phone-numbers/list.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/phone-numbers/list.mdx deleted file mode 100644 index 907ac49a22..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/phone-numbers/list.mdx +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: "list" -slug: /reference/typescript/rest/compat/phone-numbers/list -description: List incoming phone numbers in the account. -max-toc-depth: 3 ---- - - -List incoming phone numbers in the account. - - - -## **Response Example** - - - -## **Example** - -```typescript {8} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com" -}); -const numbers = await client.compat.phoneNumbers.list({ PageSize: 20 }); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/phone-numbers/purchase.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/phone-numbers/purchase.mdx deleted file mode 100644 index d1556938ad..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/phone-numbers/purchase.mdx +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: "purchase" -slug: /reference/typescript/rest/compat/phone-numbers/purchase -description: Purchase a new phone number. -max-toc-depth: 3 ---- - - -Purchase a new phone number for the account. - - - -## **Response Example** - - - -## **Example** - -```typescript {8} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com" -}); -const number = await client.compat.phoneNumbers.purchase({ - PhoneNumber: "+15551234567", - FriendlyName: "Main Line" -}); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/phone-numbers/search-local.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/phone-numbers/search-local.mdx deleted file mode 100644 index fabd9068c4..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/phone-numbers/search-local.mdx +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: "searchLocal" -slug: /reference/typescript/rest/compat/phone-numbers/search-local -description: Search for available local numbers in a country. -max-toc-depth: 3 ---- - - -Search for available local phone numbers in a specific country. - - - -## **Response Example** - - - -## **Example** - -```typescript {8} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com" -}); -const numbers = await client.compat.phoneNumbers.searchLocal("US", { AreaCode: "512" }); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/phone-numbers/search-toll-free.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/phone-numbers/search-toll-free.mdx deleted file mode 100644 index 81b70ddf20..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/phone-numbers/search-toll-free.mdx +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: "searchTollFree" -slug: /reference/typescript/rest/compat/phone-numbers/search-toll-free -description: Search for available toll-free numbers in a country. -max-toc-depth: 3 ---- - - -Search for available toll-free phone numbers in a specific country. - - - -## **Response Example** - - - -## **Example** - -```typescript {8} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com" -}); -const numbers = await client.compat.phoneNumbers.searchTollFree("US", { Contains: "800" }); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/phone-numbers/update.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/phone-numbers/update.mdx deleted file mode 100644 index d1b2821678..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/phone-numbers/update.mdx +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: "update" -slug: /reference/typescript/rest/compat/phone-numbers/update -description: Update a phone number's configuration. -max-toc-depth: 3 ---- - - -Update a phone number's configuration (e.g., change voice/SMS URLs). Uses POST (Twilio convention). - - - -## **Response Example** - - - -## **Example** - -```typescript {8} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com" -}); -await client.compat.phoneNumbers.update("PN...", { - VoiceUrl: "https://example.com/voice" -}); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/queues/create.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/queues/create.mdx deleted file mode 100644 index 1296506692..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/queues/create.mdx +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: "create" -slug: /reference/typescript/rest/compat/queues/create -description: Create a new queue. -max-toc-depth: 3 ---- - - -Create a new call queue. - - - -## **Response Example** - - - -## **Example** - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com" -}); - -const queue = await client.compat.queues.create({ - FriendlyName: "Support Queue", - MaxSize: 100 -}); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/queues/delete.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/queues/delete.mdx deleted file mode 100644 index 4f1c8fc607..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/queues/delete.mdx +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: "delete" -slug: /reference/typescript/rest/compat/queues/delete -description: Delete a queue. -max-toc-depth: 3 ---- - - -Delete a queue. - - - -## **Example** - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com" -}); - -await client.compat.queues.delete("QU..."); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/queues/dequeue-member.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/queues/dequeue-member.mdx deleted file mode 100644 index 2e565b857f..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/queues/dequeue-member.mdx +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: "dequeueMember" -slug: /reference/typescript/rest/compat/queues/dequeue-member -description: Dequeue a member from a queue. -max-toc-depth: 3 ---- - - -Dequeue a member from a queue, redirecting the call to a new LAML URL. - - - -## **Response Example** - - - -## **Example** - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com" -}); - -await client.compat.queues.dequeueMember( - "QU...", "CA...", - { Url: "https://example.com/dequeue" } -); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/queues/get-member.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/queues/get-member.mdx deleted file mode 100644 index 5e215f4f92..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/queues/get-member.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "getMember" -slug: /reference/typescript/rest/compat/queues/get-member -description: Retrieve a specific queue member. -max-toc-depth: 3 ---- - - -Retrieve a specific member from a queue by call SID. - - - -## **Response Example** - - - -## **Example** - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com" -}); - -const member = await client.compat.queues.getMember("QU...", "CA..."); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/queues/get.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/queues/get.mdx deleted file mode 100644 index d7ad7f7328..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/queues/get.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "get" -slug: /reference/typescript/rest/compat/queues/get -description: Retrieve a single queue by SID. -max-toc-depth: 3 ---- - - -Retrieve a single queue by SID. - - - -## **Response Example** - - - -## **Example** - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com" -}); - -const queue = await client.compat.queues.get("QU..."); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/queues/index.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/queues/index.mdx deleted file mode 100644 index 86cadadcac..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/queues/index.mdx +++ /dev/null @@ -1,69 +0,0 @@ ---- -title: "Queues" -slug: /reference/typescript/rest/compat/queues -description: Manage call queues with CRUD operations and member management. -max-toc-depth: 3 ---- - -[restclient]: /docs/server-sdks/reference/typescript/rest/client -[list]: /docs/server-sdks/reference/typescript/rest/compat/queues/list -[create]: /docs/server-sdks/reference/typescript/rest/compat/queues/create -[get]: /docs/server-sdks/reference/typescript/rest/compat/queues/get -[update]: /docs/server-sdks/reference/typescript/rest/compat/queues/update -[delete]: /docs/server-sdks/reference/typescript/rest/compat/queues/delete -[listmembers]: /docs/server-sdks/reference/typescript/rest/compat/queues/list-members -[getmember]: /docs/server-sdks/reference/typescript/rest/compat/queues/get-member -[dequeuemember]: /docs/server-sdks/reference/typescript/rest/compat/queues/dequeue-member - -Manage call queues with CRUD operations and member sub-resources for dequeuing -callers. - -Access via `client.compat.queues` on a [`RestClient`][restclient] instance. - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com" -}); - -const queues = await client.compat.queues.list(); -``` - -## **Methods** - -### Queue CRUD - - - - List queues in the account. - - - Create a new queue. - - - Retrieve a single queue by SID. - - - Update a queue. - - - Delete a queue. - - - -### Members - - - - List members in a queue. - - - Retrieve a specific queue member. - - - Dequeue a member from a queue. - - diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/queues/list-members.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/queues/list-members.mdx deleted file mode 100644 index 7679c8b32a..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/queues/list-members.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "listMembers" -slug: /reference/typescript/rest/compat/queues/list-members -description: List members in a queue. -max-toc-depth: 3 ---- - - -List members currently waiting in a queue. - - - -## **Response Example** - - - -## **Example** - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com" -}); - -const members = await client.compat.queues.listMembers("QU..."); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/queues/list.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/queues/list.mdx deleted file mode 100644 index e348cf3ed9..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/queues/list.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "list" -slug: /reference/typescript/rest/compat/queues/list -description: List queues in the account. -max-toc-depth: 3 ---- - - -List queues in the account. - - - -## **Response Example** - - - -## **Example** - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com" -}); - -const queues = await client.compat.queues.list({ PageSize: 20 }); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/queues/update.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/queues/update.mdx deleted file mode 100644 index 7509a74156..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/queues/update.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "update" -slug: /reference/typescript/rest/compat/queues/update -description: Update a queue. -max-toc-depth: 3 ---- - - -Update a queue's configuration. Uses POST (Twilio convention). - - - -## **Response Example** - - - -## **Example** - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com" -}); - -await client.compat.queues.update("QU...", { FriendlyName: "Support Queue", MaxSize: 200 }); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/recordings/delete.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/recordings/delete.mdx deleted file mode 100644 index ab10ff1c46..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/recordings/delete.mdx +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: "delete" -slug: /reference/typescript/rest/compat/recordings/delete -description: Delete a recording. -max-toc-depth: 3 ---- - - -Delete a recording. - - - -## **Example** - -```typescript {8} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com" -}); -await client.compat.recordings.delete("RE..."); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/recordings/get.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/recordings/get.mdx deleted file mode 100644 index 98438afffe..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/recordings/get.mdx +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: "get" -slug: /reference/typescript/rest/compat/recordings/get -description: Retrieve a single recording by SID. -max-toc-depth: 3 ---- - - -Retrieve a single recording by SID. - - - -## **Response Example** - - - -## **Example** - -```typescript {8} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com" -}); -const recording = await client.compat.recordings.get("RE..."); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/recordings/index.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/recordings/index.mdx deleted file mode 100644 index 55b49b4ce5..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/recordings/index.mdx +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: "Recordings" -slug: /reference/typescript/rest/compat/recordings -description: Manage call recordings. -max-toc-depth: 3 ---- - -[restclient]: /docs/server-sdks/reference/typescript/rest/client -[list]: /docs/server-sdks/reference/typescript/rest/compat/recordings/list -[get]: /docs/server-sdks/reference/typescript/rest/compat/recordings/get -[delete]: /docs/server-sdks/reference/typescript/rest/compat/recordings/delete - -Manage call recordings with list, get, and delete operations. - -Access via `client.compat.recordings` on a [`RestClient`][restclient] instance. - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com" -}); - -const recordings = await client.compat.recordings.list(); -``` - -## **Methods** - - - - List recordings in the account. - - - Retrieve a single recording by SID. - - - Delete a recording. - - diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/recordings/list.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/recordings/list.mdx deleted file mode 100644 index b952ecb08c..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/recordings/list.mdx +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: "list" -slug: /reference/typescript/rest/compat/recordings/list -description: List recordings in the account. -max-toc-depth: 3 ---- - - -List recordings in the account. - - - -## **Response Example** - - - -## **Example** - -```typescript {8} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com" -}); -const recordings = await client.compat.recordings.list({ PageSize: 20 }); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/tokens/create.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/tokens/create.mdx deleted file mode 100644 index c23becb271..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/tokens/create.mdx +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: "create" -slug: /reference/typescript/rest/compat/tokens/create -description: Create a new API token. -max-toc-depth: 3 ---- - - -Create a new API token. - - - -## **Response Example** - - - -## **Example** - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -const token = await client.compat.tokens.create({ - name: "my-token", - permissions: ["voice", "messaging"], -}); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/tokens/delete.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/tokens/delete.mdx deleted file mode 100644 index 1f9c4c5f07..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/tokens/delete.mdx +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: "delete" -slug: /reference/typescript/rest/compat/tokens/delete -description: Delete an API token. -max-toc-depth: 3 ---- - - -Delete an API token. - - - -## **Example** - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -await client.compat.tokens.delete("token-id"); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/tokens/index.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/tokens/index.mdx deleted file mode 100644 index 1c35f70092..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/tokens/index.mdx +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: "Tokens" -slug: /reference/typescript/rest/compat/tokens -description: Manage API tokens. -max-toc-depth: 3 ---- - -[restclient]: /docs/server-sdks/reference/typescript/rest/client -[create]: /docs/server-sdks/reference/typescript/rest/compat/tokens/create -[update]: /docs/server-sdks/reference/typescript/rest/compat/tokens/update -[delete]: /docs/server-sdks/reference/typescript/rest/compat/tokens/delete - -Manage API tokens with create, update, and delete operations. - -Access via `client.compat.tokens` on a [`RestClient`][restclient] instance. - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -const token = await client.compat.tokens.create({ - name: "my-token", - permissions: ["voice", "messaging"], -}); -``` - -## **Methods** - - - - Create a new API token. - - - Update an API token. - - - Delete an API token. - - diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/tokens/update.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/tokens/update.mdx deleted file mode 100644 index 2379ffc7e7..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/tokens/update.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "update" -slug: /reference/typescript/rest/compat/tokens/update -description: Update an API token. -max-toc-depth: 3 ---- - - -Update an API token. Uses PATCH. - - - -## **Response Example** - - - -## **Example** - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com", -}); - -await client.compat.tokens.update("token-id", { name: "updated-token" }); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/transcriptions/delete.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/transcriptions/delete.mdx deleted file mode 100644 index e2fcd00650..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/transcriptions/delete.mdx +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: "delete" -slug: /reference/typescript/rest/compat/transcriptions/delete -description: Delete a transcription. -max-toc-depth: 3 ---- - - -Delete a transcription. - - - -## **Example** - -```typescript {8} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com" -}); -await client.compat.transcriptions.delete("TR..."); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/transcriptions/get.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/transcriptions/get.mdx deleted file mode 100644 index d755394c5c..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/transcriptions/get.mdx +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: "get" -slug: /reference/typescript/rest/compat/transcriptions/get -description: Retrieve a single transcription by SID. -max-toc-depth: 3 ---- - - -Retrieve a single transcription by SID. - - - -## **Response Example** - - - -## **Example** - -```typescript {8} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com" -}); -const transcription = await client.compat.transcriptions.get("TR..."); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/transcriptions/index.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/transcriptions/index.mdx deleted file mode 100644 index a7e503405c..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/transcriptions/index.mdx +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: "Transcriptions" -slug: /reference/typescript/rest/compat/transcriptions -description: Manage call transcriptions. -max-toc-depth: 3 ---- - -[restclient]: /docs/server-sdks/reference/typescript/rest/client -[list]: /docs/server-sdks/reference/typescript/rest/compat/transcriptions/list -[get]: /docs/server-sdks/reference/typescript/rest/compat/transcriptions/get -[delete]: /docs/server-sdks/reference/typescript/rest/compat/transcriptions/delete - -Manage call transcriptions with list, get, and delete operations. - -Access via `client.compat.transcriptions` on a [`RestClient`][restclient] instance. - -```typescript {9} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com" -}); - -const transcriptions = await client.compat.transcriptions.list(); -``` - -## **Methods** - - - - List transcriptions in the account. - - - Retrieve a single transcription by SID. - - - Delete a transcription. - - diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/compat/transcriptions/list.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/compat/transcriptions/list.mdx deleted file mode 100644 index 83a3499bdc..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/rest/compat/transcriptions/list.mdx +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: "list" -slug: /reference/typescript/rest/compat/transcriptions/list -description: List transcriptions in the account. -max-toc-depth: 3 ---- - - -List transcriptions in the account. - - - -## **Response Example** - - - -## **Example** - -```typescript {8} -import { RestClient } from "@signalwire/sdk"; - -const client = new RestClient({ - project: "your-project-id", - token: "your-api-token", - host: "your-space.signalwire.com" -}); -const transcriptions = await client.compat.transcriptions.list({ PageSize: 20 }); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/overview.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/overview.mdx index 66960ec5bb..d19f31c319 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/overview.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/overview.mdx @@ -16,7 +16,10 @@ position: 0 [datasphere]: /docs/server-sdks/reference/typescript/rest/datasphere [logs]: /docs/server-sdks/reference/typescript/rest/logs [registry]: /docs/server-sdks/reference/typescript/rest/registry -[compat]: /docs/server-sdks/reference/typescript/rest/compat +[messages]: /docs/server-sdks/reference/typescript/rest/messages +[projects]: /docs/server-sdks/reference/typescript/rest/projects +[request-options]: /docs/server-sdks/reference/typescript/rest/request-options +[rest-error]: /docs/server-sdks/reference/typescript/rest/rest-error [mfa]: /docs/server-sdks/reference/typescript/rest/mfa The REST namespace provides an HTTP client for the SignalWire platform @@ -39,7 +42,7 @@ const client = new RestClient({ }); // Search for available numbers in area code 512 -const available = await client.phoneNumbers.search({ areaCode: "512", quantity: 3 }); +const available = await client.phoneNumbers.search({ areacode: "512", max_results: 3 }); for (const number of available.data ?? []) { console.log(`${number.number} - ${number.region}`); } @@ -55,7 +58,7 @@ for (const agent of response.data ?? []) { } // Query recent voice call logs -const logs = await client.logs.voice.list({ pageSize: 5 }); +const logs = await client.logs.voice.list({ page_size: 5 }); for (const log of logs.data ?? []) { console.log(`Call from ${log.from} to ${log.to}`); } @@ -67,9 +70,46 @@ All three constructor arguments can also be provided via environment variables: When those are set, you can instantiate with `new RestClient()` and no arguments. +## Pagination + +`list()` returns one page. `paginate()` returns an async iterator that follows +the server's next-page links and yields one item at a time, so you don't build +the page loop yourself. Query parameters apply to the first request only. + +```typescript {5} +import { RestClient } from "@signalwire/sdk"; + +const client = new RestClient(); + +for await (const address of client.fabric.addresses.paginate()) { + console.log(address.name); +} +``` + +## Timeouts, retries, and cancellation + +Every resource method accepts a trailing `requestOptions` object that sets the +timeout, retry count, backoff, and an `AbortSignal` for that one call. Pass the +same object to the constructor to set a client-wide default. See +[`RequestOptions`][request-options]. + +```typescript {3,7} +import { RestClient } from "@signalwire/sdk"; + +const client = new RestClient({ requestOptions: { timeout: 10, retries: 2 } }); + +const controller = new AbortController(); +const numbers = await client.phoneNumbers.list( + undefined, + { abortSignal: controller.signal }, +); +``` + ## Error Handling -REST errors throw `RestError`: +REST errors throw [`RestError`][rest-error]. A request that never reaches the +server, such as a DNS failure or a timeout, throws `RestTransportError`, a +subclass of `RestError` with a `null` status code, so one `catch` handles both: ```typescript {6} import { RestClient, RestError } from "@signalwire/sdk"; @@ -82,6 +122,7 @@ try { if (e instanceof RestError) { console.log(`HTTP ${e.statusCode}: ${e.body}`); console.log(`URL: ${e.method} ${e.url}`); + console.log(`Request ID: ${e.requestId}`); } } ``` @@ -138,10 +179,16 @@ try { 10DLC brand and campaign registration. + Send SMS and MMS messages and redact message bodies. + + - Twilio-compatible LAML API for migration. + Create and manage projects and rotate signing keys. Date: Sun, 6 Sep 2026 03:13:25 +0000 Subject: [PATCH 02/38] docs(server-sdks): update TypeScript REST calling and datasphere signatures Co-Authored-By: Claude Fable 5.1 --- .../typescript/rest/calling/ai-stop.mdx | 8 +++--- .../calling/collect-start-input-timers.mdx | 10 +++---- .../typescript/rest/calling/collect-stop.mdx | 2 +- .../typescript/rest/calling/detect-stop.mdx | 2 +- .../typescript/rest/calling/detect.mdx | 17 ++++++----- .../typescript/rest/calling/dial.mdx | 4 +-- .../typescript/rest/calling/index.mdx | 28 ++++++++++++++++++- .../rest/calling/live-transcribe.mdx | 12 ++++---- .../rest/calling/live-translate.mdx | 14 ++++------ .../typescript/rest/calling/play-pause.mdx | 2 +- .../typescript/rest/calling/play-resume.mdx | 2 +- .../typescript/rest/calling/play-stop.mdx | 2 +- .../typescript/rest/calling/play-volume.mdx | 2 +- .../typescript/rest/calling/play.mdx | 28 ++++++++++--------- .../rest/calling/receive-fax-stop.mdx | 2 +- .../typescript/rest/calling/record-pause.mdx | 2 +- .../typescript/rest/calling/record-resume.mdx | 2 +- .../typescript/rest/calling/record-stop.mdx | 2 +- .../typescript/rest/calling/refer.mdx | 3 +- .../typescript/rest/calling/send-fax-stop.mdx | 2 +- .../typescript/rest/calling/stream-stop.mdx | 2 +- .../typescript/rest/calling/stream.mdx | 4 +-- .../typescript/rest/calling/tap-stop.mdx | 2 +- .../reference/typescript/rest/calling/tap.mdx | 9 +++--- .../rest/calling/transcribe-stop.mdx | 2 +- .../typescript/rest/calling/transfer.mdx | 9 ++++-- .../typescript/rest/calling/update.mdx | 8 +----- .../typescript/rest/calling/user-event.mdx | 2 +- .../typescript/rest/datasphere/index.mdx | 2 +- .../typescript/rest/datasphere/search.mdx | 8 +++--- .../typescript/rest/logs/messages/index.mdx | 2 +- .../typescript/rest/logs/messages/list.mdx | 2 +- .../typescript/rest/logs/voice/index.mdx | 2 +- .../typescript/rest/logs/voice/list.mdx | 2 +- .../typescript/rest/recordings/list.mdx | 2 +- 35 files changed, 112 insertions(+), 92 deletions(-) diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/ai-stop.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/ai-stop.mdx index f36768c7da..cb53f9b9d0 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/ai-stop.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/ai-stop.mdx @@ -28,9 +28,9 @@ const client = new RestClient({ }); // Stop AI and then play a goodbye message -await client.calling.aiStop("call-id-xxx", { control_id: "ctrl-id" }); -await client.calling.play("call-id-xxx", { - play: [{ type: "tts", text: "Thank you for calling. Goodbye!" }] -}); +await client.calling.aiStop("call-id-xxx", "ctrl-id"); +await client.calling.play("call-id-xxx", [ + { type: "tts", params: { text: "Thank you for calling. Goodbye!" } }, +]); await client.calling.end("call-id-xxx", { reason: "hangup" }); ``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/collect-start-input-timers.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/collect-start-input-timers.mdx index 16424e21e8..21a5df4830 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/collect-start-input-timers.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/collect-start-input-timers.mdx @@ -37,12 +37,10 @@ const result = await client.calling.collect("call-id-xxx", { const controlId = result.control_id; // Play a prompt first -await client.calling.play("call-id-xxx", { - play: [{ type: "tts", text: "Please enter your 4-digit PIN." }] -}); +await client.calling.play("call-id-xxx", [ + { type: "tts", params: { text: "Please enter your 4-digit PIN." } }, +]); // Now start the input timers -await client.calling.collectStartInputTimers("call-id-xxx", { - control_id: controlId, -}); +await client.calling.collectStartInputTimers("call-id-xxx", controlId); ``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/collect-stop.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/collect-stop.mdx index 15f6af450a..0abf0799b7 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/collect-stop.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/collect-stop.mdx @@ -28,5 +28,5 @@ const client = new RestClient({ host: "your-space.signalwire.com" }); -await client.calling.collectStop("call-id-xxx", { control_id: "ctrl-id" }); +await client.calling.collectStop("call-id-xxx", "ctrl-id"); ``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/detect-stop.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/detect-stop.mdx index df8291fc88..b684fbd0b4 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/detect-stop.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/detect-stop.mdx @@ -28,5 +28,5 @@ const client = new RestClient({ host: "your-space.signalwire.com" }); -await client.calling.detectStop("call-id-xxx", { control_id: "ctrl-id" }); +await client.calling.detectStop("call-id-xxx", "ctrl-id"); ``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/detect.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/detect.mdx index da041665ce..9cbad237b7 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/detect.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/detect.mdx @@ -30,16 +30,17 @@ const client = new RestClient({ }); // Answering machine detection -const result = await client.calling.detect("call-id-xxx", { - detect: { +const result = await client.calling.detect( + "call-id-xxx", + { type: "machine", params: { initial_timeout: 4.5, end_silence_timeout: 1.0, - } + }, }, - timeout: 30.0, -}); + { timeout: 30.0 }, +); ``` ### Fax Detection @@ -54,7 +55,8 @@ const client = new RestClient({ }); const result = await client.calling.detect("call-id-xxx", { - detect: { type: "fax", params: { tone: "CED" } } + type: "fax", + params: { tone: "CED" }, }); ``` @@ -70,6 +72,7 @@ const client = new RestClient({ }); const result = await client.calling.detect("call-id-xxx", { - detect: { type: "digit", params: { digits: "0123456789#*" } } + type: "digit", + params: { digits: "0123456789#*" }, }); ``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/dial.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/dial.mdx index 4c11388e90..c57b4ba671 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/dial.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/dial.mdx @@ -27,9 +27,7 @@ const client = new RestClient({ host: "your-space.signalwire.com" }); -const result = await client.calling.dial({ - from: "+15551234567", - to: "+15559876543", +const result = await client.calling.dial("+15551234567", "+15559876543", { url: "https://example.com/call-handler", }); console.log(result); // { id: "call-id-xxx", ... } diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/index.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/index.mdx index cab86f333b..4e2c0c27c3 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/index.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/index.mdx @@ -6,14 +6,40 @@ max-toc-depth: 3 --- [restclient]: /docs/server-sdks/reference/typescript/rest/client +[request-options]: /docs/server-sdks/reference/typescript/rest/request-options -The `CallingNamespace` provides REST-based call control through the +The `Calling` resource provides REST-based call control through the [`RestClient`][restclient]. All 37 commands are dispatched as POST requests to a single endpoint (`/api/calling/calls`) with a `command` field identifying the operation. Access via `client.calling` on a [`RestClient`][restclient] instance. +Every method takes the call ID first, then any required command fields as +positional arguments, then an optional `options` object for the remaining +fields. The `options` object also accepts `extras`, a bag of additional fields +merged into the command as-is. A final optional +[`requestOptions`][request-options] argument sets the timeout, retries, and +abort signal for that one request. + +```typescript {9-11} +import { RestClient } from "@signalwire/sdk"; + +const client = new RestClient({ + project: "your-project-id", + token: "your-api-token", + host: "your-space.signalwire.com" +}); + +const call = await client.calling.dial("+15551234567", "+15559876543", { + url: "https://example.com/call-handler", +}); + +await client.calling.play(call.id, [{ type: "tts", params: { text: "Hello!" } }]); +await client.calling.playStop(call.id, "ctrl-id"); +await client.calling.end(call.id, { reason: "hangup" }); +``` + Unlike the Relay client which uses persistent WebSocket connections, the Calling namespace sends each command as an independent HTTP request. This is suitable for server-side diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/live-transcribe.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/live-transcribe.mdx index fb2bce1a6c..f522ea9390 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/live-transcribe.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/live-transcribe.mdx @@ -32,13 +32,11 @@ const client = new RestClient({ }); await client.calling.liveTranscribe("call-id-xxx", { - action: { - start: { - lang: "en-US", - direction: ["local-caller", "remote-caller"], - webhook: "https://example.com/transcription-events", - live_events: true, - } + start: { + lang: "en-US", + direction: ["local-caller", "remote-caller"], + webhook: "https://example.com/transcription-events", + live_events: true, }, }); ``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/live-translate.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/live-translate.mdx index dc1180e8d2..f04dc1f83f 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/live-translate.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/live-translate.mdx @@ -28,14 +28,12 @@ const client = new RestClient({ }); await client.calling.liveTranslate("call-id-xxx", { - action: { - start: { - from_lang: "en-US", - to_lang: "es-ES", - direction: ["local-caller", "remote-caller"], - from_voice: "elevenlabs.josh", - to_voice: "elevenlabs.josh", - } + start: { + from_lang: "en-US", + to_lang: "es-ES", + direction: ["local-caller", "remote-caller"], + from_voice: "elevenlabs.josh", + to_voice: "elevenlabs.josh", }, }); ``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/play-pause.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/play-pause.mdx index 854065e126..0089055d3c 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/play-pause.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/play-pause.mdx @@ -28,5 +28,5 @@ const client = new RestClient({ host: "your-space.signalwire.com" }); -await client.calling.playPause("call-id-xxx", { control_id: "ctrl-id" }); +await client.calling.playPause("call-id-xxx", "ctrl-id"); ``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/play-resume.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/play-resume.mdx index a7fd0c0a53..af7d30f229 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/play-resume.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/play-resume.mdx @@ -28,5 +28,5 @@ const client = new RestClient({ host: "your-space.signalwire.com" }); -await client.calling.playResume("call-id-xxx", { control_id: "ctrl-id" }); +await client.calling.playResume("call-id-xxx", "ctrl-id"); ``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/play-stop.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/play-stop.mdx index 8e7bd80f4f..5068290977 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/play-stop.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/play-stop.mdx @@ -28,5 +28,5 @@ const client = new RestClient({ host: "your-space.signalwire.com" }); -await client.calling.playStop("call-id-xxx", { control_id: "ctrl-id" }); +await client.calling.playStop("call-id-xxx", "ctrl-id"); ``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/play-volume.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/play-volume.mdx index 790e3e4c53..3700a11264 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/play-volume.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/play-volume.mdx @@ -28,5 +28,5 @@ const client = new RestClient({ host: "your-space.signalwire.com" }); -await client.calling.playVolume("call-id-xxx", { control_id: "ctrl-id", volume: 5.0 }); +await client.calling.playVolume("call-id-xxx", "ctrl-id", 5.0); ``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/play.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/play.mdx index f2f9a1c31e..60a112b216 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/play.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/play.mdx @@ -39,9 +39,9 @@ const client = new RestClient({ }); // Play TTS -const result = await client.calling.play("call-id-xxx", { - play: [{ type: "tts", text: "Hello from the REST API!" }] -}); +const result = await client.calling.play("call-id-xxx", [ + { type: "tts", params: { text: "Hello from the REST API!" } }, +]); const controlId = result.control_id; ``` @@ -56,9 +56,9 @@ const client = new RestClient({ host: "your-space.signalwire.com" }); -await client.calling.play("call-id-xxx", { - play: [{ type: "audio", url: "https://example.com/greeting.mp3" }] -}); +await client.calling.play("call-id-xxx", [ + { type: "audio", params: { url: "https://example.com/greeting.mp3" } }, +]); ``` ### Play Multiple Items @@ -72,11 +72,13 @@ const client = new RestClient({ host: "your-space.signalwire.com" }); -await client.calling.play("call-id-xxx", { - play: [ - { type: "tts", text: "Please hold while we connect you." }, - { type: "silence", duration: 1 }, - { type: "audio", url: "https://example.com/hold-music.mp3" }, - ] -}); +await client.calling.play( + "call-id-xxx", + [ + { type: "tts", params: { text: "Please hold while we connect you." } }, + { type: "silence", params: { duration: 1 } }, + { type: "audio", params: { url: "https://example.com/hold-music.mp3" } }, + ], + { loop: 2 }, +); ``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/receive-fax-stop.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/receive-fax-stop.mdx index e2193d0616..7ee3d1bf8c 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/receive-fax-stop.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/receive-fax-stop.mdx @@ -33,5 +33,5 @@ const client = new RestClient({ host: "your-space.signalwire.com" }); -await client.calling.receiveFaxStop("call-id-xxx", { control_id: "ctrl-id" }); +await client.calling.receiveFaxStop("call-id-xxx", "ctrl-id"); ``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/record-pause.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/record-pause.mdx index 9818e2f5ba..7f7829f6d0 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/record-pause.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/record-pause.mdx @@ -30,5 +30,5 @@ const client = new RestClient({ host: "your-space.signalwire.com" }); -await client.calling.recordPause("call-id-xxx", { control_id: "ctrl-id" }); +await client.calling.recordPause("call-id-xxx", "ctrl-id"); ``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/record-resume.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/record-resume.mdx index 5d8c07075f..6337566065 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/record-resume.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/record-resume.mdx @@ -28,5 +28,5 @@ const client = new RestClient({ host: "your-space.signalwire.com" }); -await client.calling.recordResume("call-id-xxx", { control_id: "ctrl-id" }); +await client.calling.recordResume("call-id-xxx", "ctrl-id"); ``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/record-stop.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/record-stop.mdx index 63b1724781..389b83efbd 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/record-stop.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/record-stop.mdx @@ -28,6 +28,6 @@ const client = new RestClient({ host: "your-space.signalwire.com" }); -const result = await client.calling.recordStop("call-id-xxx", { control_id: "ctrl-id" }); +const result = await client.calling.recordStop("call-id-xxx", "ctrl-id"); console.log(result); // Contains recording URL ``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/refer.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/refer.mdx index 1061f1e5e4..c7cb6371d4 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/refer.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/refer.mdx @@ -37,6 +37,7 @@ const client = new RestClient({ }); await client.calling.refer("call-id-xxx", { - device: { type: "sip", params: { to: "sip:sales@example.com" } }, + type: "sip", + params: { to: "sip:sales@example.com" }, }); ``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/send-fax-stop.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/send-fax-stop.mdx index 26cfe164c4..c760c96c80 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/send-fax-stop.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/send-fax-stop.mdx @@ -33,5 +33,5 @@ const client = new RestClient({ host: "your-space.signalwire.com" }); -await client.calling.sendFaxStop("call-id-xxx", { control_id: "ctrl-id" }); +await client.calling.sendFaxStop("call-id-xxx", "ctrl-id"); ``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/stream-stop.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/stream-stop.mdx index 3f17cff3e6..410cb36aad 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/stream-stop.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/stream-stop.mdx @@ -28,5 +28,5 @@ const client = new RestClient({ host: "your-space.signalwire.com" }); -await client.calling.streamStop("call-id-xxx", { control_id: "ctrl-id" }); +await client.calling.streamStop("call-id-xxx", "ctrl-id"); ``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/stream.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/stream.mdx index 5c11fe36de..65141ff80b 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/stream.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/stream.mdx @@ -28,8 +28,6 @@ const client = new RestClient({ host: "your-space.signalwire.com" }); -const result = await client.calling.stream("call-id-xxx", { - url: "wss://example.com/audio-stream", -}); +const result = await client.calling.stream("call-id-xxx", "wss://example.com/audio-stream"); const controlId = result.control_id; ``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/tap-stop.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/tap-stop.mdx index 7dbb23aefd..52b6b3eba2 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/tap-stop.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/tap-stop.mdx @@ -28,5 +28,5 @@ const client = new RestClient({ host: "your-space.signalwire.com" }); -await client.calling.tapStop("call-id-xxx", { control_id: "ctrl-id" }); +await client.calling.tapStop("call-id-xxx", "ctrl-id"); ``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/tap.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/tap.mdx index f735947d75..4d0d64b0fd 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/tap.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/tap.mdx @@ -28,9 +28,10 @@ const client = new RestClient({ host: "your-space.signalwire.com" }); -const result = await client.calling.tap("call-id-xxx", { - tap: { type: "audio", params: { direction: "both" } }, - device: { type: "ws", params: { uri: "wss://example.com/tap" } }, -}); +const result = await client.calling.tap( + "call-id-xxx", + { type: "audio", params: { direction: "both" } }, + { type: "ws", params: { uri: "wss://example.com/tap" } }, +); const controlId = result.control_id; ``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/transcribe-stop.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/transcribe-stop.mdx index 8d5f9aa2a1..7ca7fc4902 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/transcribe-stop.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/transcribe-stop.mdx @@ -28,5 +28,5 @@ const client = new RestClient({ host: "your-space.signalwire.com" }); -await client.calling.transcribeStop("call-id-xxx", { control_id: "ctrl-id" }); +await client.calling.transcribeStop("call-id-xxx", "ctrl-id"); ``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/transfer.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/transfer.mdx index 7bbeeec07b..b95a082c3c 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/transfer.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/transfer.mdx @@ -5,8 +5,8 @@ description: Transfer an active call to a new destination via REST. max-toc-depth: 3 --- -Transfer an active call to a new destination. The current call leg is replaced -by a new connection to the specified target. +Transfer an active call to a new destination. Pass a destination string, such +as a SIP address, or an inline SWML document that takes over the call. ## **Request** @@ -28,6 +28,9 @@ const client = new RestClient({ }); await client.calling.transfer("call-id-xxx", { - dest: { type: "phone", params: { to_number: "+15559876543" } } + version: "1.0.0", + sections: { + main: [{ connect: { to: "+15559876543" } }], + }, }); ``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/update.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/update.mdx index 79621977c8..9568dbc65a 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/update.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/update.mdx @@ -7,11 +7,6 @@ max-toc-depth: 3 Update parameters on an active call, such as the SWML document, URL, or status. - -Unlike most calling methods, `update()` does **not** take a positional `callId` -parameter. Pass all fields (including call identification) in a single object. - - ## **Request** @@ -31,8 +26,7 @@ const client = new RestClient({ host: "your-space.signalwire.com" }); -await client.calling.update({ - id: "call-id-xxx", +await client.calling.update("call-id-xxx", { url: "https://example.com/new-call-handler", }); ``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/user-event.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/user-event.mdx index c53f526beb..b64a936970 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/user-event.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/user-event.mdx @@ -30,6 +30,6 @@ const client = new RestClient({ }); await client.calling.userEvent("call-id-xxx", { - event: { action: "order.confirmed", order_id: "ORD-12345", amount: 49.99 }, + order: { action: "order.confirmed", order_id: "ORD-12345", amount: 49.99 }, }); ``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/datasphere/index.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/datasphere/index.mdx index b123080fe3..521ded9441 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/datasphere/index.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/datasphere/index.mdx @@ -32,7 +32,7 @@ const client = new RestClient({ host: "your-space.signalwire.com" }); -const results = await client.datasphere.documents.search({ query_string: "billing FAQ" }); +const results = await client.datasphere.documents.search("billing FAQ"); for (const doc of results.data ?? []) { console.log(doc.id, doc.title); } diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/datasphere/search.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/datasphere/search.mdx index d18cbac91a..679e0f296b 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/datasphere/search.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/datasphere/search.mdx @@ -26,10 +26,10 @@ const client = new RestClient({ host: "your-space.signalwire.com" }); -const results = await client.datasphere.documents.search({ - query_string: "How do I reset my password?", - count: 5, -}); +const results = await client.datasphere.documents.search( + "How do I reset my password?", + { count: 5 }, +); for (const chunk of results.data ?? []) { console.log(chunk.text, "score:", chunk.score); } diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/logs/messages/index.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/logs/messages/index.mdx index b6da0eb9b0..ab174d1098 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/logs/messages/index.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/logs/messages/index.mdx @@ -23,7 +23,7 @@ const client = new RestClient({ host: "your-space.signalwire.com" }); -const messages = await client.logs.messages.list({ pageSize: 20 }); +const messages = await client.logs.messages.list({ page_size: 20 }); for (const msg of messages.data ?? []) { console.log(msg.from, "->", msg.to, msg.status); } diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/logs/messages/list.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/logs/messages/list.mdx index b1e759b7fa..7a258d7cae 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/logs/messages/list.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/logs/messages/list.mdx @@ -24,7 +24,7 @@ const client = new RestClient({ host: "your-space.signalwire.com" }); -const messages = await client.logs.messages.list({ pageSize: 20 }); +const messages = await client.logs.messages.list({ page_size: 20 }); for (const msg of messages.data ?? []) { console.log(msg.from, "->", msg.to, msg.status); } diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/logs/voice/index.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/logs/voice/index.mdx index abd4b2ad7d..7736f8cdc6 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/logs/voice/index.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/logs/voice/index.mdx @@ -24,7 +24,7 @@ const client = new RestClient({ host: "your-space.signalwire.com" }); -const logs = await client.logs.voice.list({ pageSize: 5 }); +const logs = await client.logs.voice.list({ page_size: 5 }); for (const log of logs.data ?? []) { console.log(log.id, log.from, "->", log.to); } diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/logs/voice/list.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/logs/voice/list.mdx index 32638e5cad..80d9387b03 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/logs/voice/list.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/logs/voice/list.mdx @@ -24,7 +24,7 @@ const client = new RestClient({ host: "your-space.signalwire.com" }); -const calls = await client.logs.voice.list({ pageSize: 20 }); +const calls = await client.logs.voice.list({ page_size: 20 }); for (const call of calls.data ?? []) { console.log(call.from, "->", call.to, call.duration); } diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/recordings/list.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/recordings/list.mdx index c8d8297a53..eda5e8ce23 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/recordings/list.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/recordings/list.mdx @@ -24,7 +24,7 @@ const client = new RestClient({ host: "your-space.signalwire.com" }); -const result = await client.recordings.list({ pageSize: 20 }); +const result = await client.recordings.list({ page_size: 20 }); for (const rec of result.data ?? []) { console.log(rec.id, rec["duration"], rec["state"]); } From a9f1f869587dc9fd6a2f40b539d5933e0636c2ba Mon Sep 17 00:00:00 2001 From: August Date: Sun, 6 Sep 2026 03:13:25 +0000 Subject: [PATCH 03/38] docs(server-sdks): add TypeScript REST messages, projects, and request options Co-Authored-By: Claude Fable 5.1 --- .../typescript/rest/messages/create.mdx | 53 +++++++++ .../typescript/rest/messages/index.mdx | 43 ++++++++ .../typescript/rest/messages/update.mdx | 30 ++++++ .../typescript/rest/projects/create.mdx | 34 ++++++ .../typescript/rest/projects/delete.mdx | 24 +++++ .../typescript/rest/projects/get.mdx | 29 +++++ .../typescript/rest/projects/index.mdx | 58 ++++++++++ .../typescript/rest/projects/list.mdx | 31 ++++++ .../rest/projects/rotate-signing-key.mdx | 33 ++++++ .../typescript/rest/projects/update.mdx | 31 ++++++ .../typescript/rest/request-options.mdx | 101 ++++++++++++++++++ .../reference/typescript/rest/rest-error.mdx | 37 ++++++- 12 files changed, 499 insertions(+), 5 deletions(-) create mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/messages/create.mdx create mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/messages/index.mdx create mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/messages/update.mdx create mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/projects/create.mdx create mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/projects/delete.mdx create mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/projects/get.mdx create mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/projects/index.mdx create mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/projects/list.mdx create mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/projects/rotate-signing-key.mdx create mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/projects/update.mdx create mode 100644 fern/products/server-sdks/pages/reference/typescript/rest/request-options.mdx diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/messages/create.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/messages/create.mdx new file mode 100644 index 0000000000..5c6f7d29b3 --- /dev/null +++ b/fern/products/server-sdks/pages/reference/typescript/rest/messages/create.mdx @@ -0,0 +1,53 @@ +--- +title: "create" +slug: /reference/typescript/rest/messages/create +description: Send an SMS or MMS message. +max-toc-depth: 3 +--- + +Send an SMS or MMS message. Pass the destination and source numbers first, then +any other fields in `options`. A message with `media` is sent as MMS. + + + +## **Response Example** + + + +## **Examples** + +### Send an SMS + +```typescript {9-11} +import { RestClient } from "@signalwire/sdk"; + +const client = new RestClient({ + project: "your-project-id", + token: "your-api-token", + host: "your-space.signalwire.com" +}); + +const message = await client.messages.create("+15559876543", "+15551234567", { + body: "Your Bayview Taxi van is 5 minutes away.", +}); +console.log(message.id, message.status); +``` + +### Send an MMS with a status callback + +```typescript {9-14} +import { RestClient } from "@signalwire/sdk"; + +const client = new RestClient({ + project: "your-project-id", + token: "your-api-token", + host: "your-space.signalwire.com" +}); + +const message = await client.messages.create("+15559876543", "+15551234567", { + body: "Here is your receipt.", + media: ["https://example.com/receipts/4410.png"], + status_callback: "https://example.com/webhooks/message-status", + custom_variables: { ride_id: "ride-4410" }, +}); +``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/messages/index.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/messages/index.mdx new file mode 100644 index 0000000000..65b8656c64 --- /dev/null +++ b/fern/products/server-sdks/pages/reference/typescript/rest/messages/index.mdx @@ -0,0 +1,43 @@ +--- +title: "Messages" +slug: /reference/typescript/rest/messages +description: "Send SMS and MMS messages and redact message bodies." +max-toc-depth: 3 +--- + +[restclient]: /docs/server-sdks/reference/typescript/rest/client +[logs]: /docs/server-sdks/reference/typescript/rest/logs +[create]: /docs/server-sdks/reference/typescript/rest/messages/create +[update]: /docs/server-sdks/reference/typescript/rest/messages/update + +Send SMS and MMS messages from a phone number on your project, and redact the +body of a message you already sent. To read message history, use the read-only +message logs under [`client.logs.messages`][logs] instead. + +Access via `client.messages` on a [`RestClient`][restclient] instance. + +```typescript {9-11} +import { RestClient } from "@signalwire/sdk"; + +const client = new RestClient({ + project: "your-project-id", + token: "your-api-token", + host: "your-space.signalwire.com" +}); + +const message = await client.messages.create("+15559876543", "+15551234567", { + body: "Your Bayview Taxi van is 5 minutes away.", +}); +console.log(message.id, message.status); +``` + +## **Methods** + + + + Send an SMS or MMS message. + + + Redact the body of a sent message. + + diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/messages/update.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/messages/update.mdx new file mode 100644 index 0000000000..4111eee397 --- /dev/null +++ b/fern/products/server-sdks/pages/reference/typescript/rest/messages/update.mdx @@ -0,0 +1,30 @@ +--- +title: "update" +slug: /reference/typescript/rest/messages/update +description: Redact the body of a sent message. +max-toc-depth: 3 +--- + +Redact the body of a message you already sent. The only field that can be +changed is `body`, and it must be an empty string; any other value is rejected. + + + +## **Response Example** + + + +## **Example** + +```typescript {9} +import { RestClient } from "@signalwire/sdk"; + +const client = new RestClient({ + project: "your-project-id", + token: "your-api-token", + host: "your-space.signalwire.com" +}); + +const redacted = await client.messages.update("message-id", ""); +console.log(redacted.body); // "" +``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/projects/create.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/projects/create.mdx new file mode 100644 index 0000000000..dd2b52f105 --- /dev/null +++ b/fern/products/server-sdks/pages/reference/typescript/rest/projects/create.mdx @@ -0,0 +1,34 @@ +--- +title: "create" +slug: /reference/typescript/rest/projects/create +description: Create a subproject. +max-toc-depth: 3 +--- + +Create a subproject under the authenticated root project. Pass the typed body +first; the optional `extras` argument merges additional fields the body type +does not name yet. + + + +## **Response Example** + + + +## **Example** + +```typescript {9-12} +import { RestClient } from "@signalwire/sdk"; + +const client = new RestClient({ + project: "your-project-id", + token: "your-api-token", + host: "your-space.signalwire.com" +}); + +const project = await client.projects.create({ + name: "Bayview Taxi Staging", + protect_recordings: true, +}); +console.log(project.id); +``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/projects/delete.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/projects/delete.mdx new file mode 100644 index 0000000000..1b594133be --- /dev/null +++ b/fern/products/server-sdks/pages/reference/typescript/rest/projects/delete.mdx @@ -0,0 +1,24 @@ +--- +title: "delete" +slug: /reference/typescript/rest/projects/delete +description: Delete a subproject. +max-toc-depth: 3 +--- + +Delete a subproject. + + + +## **Example** + +```typescript {9} +import { RestClient } from "@signalwire/sdk"; + +const client = new RestClient({ + project: "your-project-id", + token: "your-api-token", + host: "your-space.signalwire.com" +}); + +await client.projects.delete("project-id"); +``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/projects/get.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/projects/get.mdx new file mode 100644 index 0000000000..89b0849c00 --- /dev/null +++ b/fern/products/server-sdks/pages/reference/typescript/rest/projects/get.mdx @@ -0,0 +1,29 @@ +--- +title: "get" +slug: /reference/typescript/rest/projects/get +description: Retrieve a project by ID. +max-toc-depth: 3 +--- + +Retrieve a project by ID. + + + +## **Response Example** + + + +## **Example** + +```typescript {9} +import { RestClient } from "@signalwire/sdk"; + +const client = new RestClient({ + project: "your-project-id", + token: "your-api-token", + host: "your-space.signalwire.com" +}); + +const project = await client.projects.get("project-id"); +console.log(project.name, project.region_preference); +``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/projects/index.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/projects/index.mdx new file mode 100644 index 0000000000..2cae3f4cf2 --- /dev/null +++ b/fern/products/server-sdks/pages/reference/typescript/rest/projects/index.mdx @@ -0,0 +1,58 @@ +--- +title: "Projects" +slug: /reference/typescript/rest/projects +description: "Create and manage projects in your project tree, and rotate signing keys." +max-toc-depth: 3 +--- + +[restclient]: /docs/server-sdks/reference/typescript/rest/client +[project]: /docs/server-sdks/reference/typescript/rest/project +[list]: /docs/server-sdks/reference/typescript/rest/projects/list +[get]: /docs/server-sdks/reference/typescript/rest/projects/get +[create]: /docs/server-sdks/reference/typescript/rest/projects/create +[update]: /docs/server-sdks/reference/typescript/rest/projects/update +[delete]: /docs/server-sdks/reference/typescript/rest/projects/delete +[rotate]: /docs/server-sdks/reference/typescript/rest/projects/rotate-signing-key + +List, create, update, and delete the projects in your project tree, and rotate +a project's signing key. All operations are scoped to the authenticated root +project and its subprojects. For API tokens of the current project, use the +singular [`client.project.tokens`][project] instead. + +Access via `client.projects` on a [`RestClient`][restclient] instance. + +```typescript {9} +import { RestClient } from "@signalwire/sdk"; + +const client = new RestClient({ + project: "your-project-id", + token: "your-api-token", + host: "your-space.signalwire.com" +}); + +const project = await client.projects.create({ name: "Bayview Taxi Staging" }); +console.log(project.id); +``` + +## **Methods** + + + + List the root project and its subprojects. + + + Retrieve a project by ID. + + + Create a subproject. + + + Update a project's name or protection settings. + + + Delete a subproject. + + + Issue a new signing key for a project. + + diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/projects/list.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/projects/list.mdx new file mode 100644 index 0000000000..2759545a3b --- /dev/null +++ b/fern/products/server-sdks/pages/reference/typescript/rest/projects/list.mdx @@ -0,0 +1,31 @@ +--- +title: "list" +slug: /reference/typescript/rest/projects/list +description: List the authenticated root project and its subprojects. +max-toc-depth: 3 +--- + +List the authenticated root project and its subprojects. Use `paginate()` to +iterate every project across pages. + + + +## **Response Example** + + + +## **Example** + +```typescript {9} +import { RestClient } from "@signalwire/sdk"; + +const client = new RestClient({ + project: "your-project-id", + token: "your-api-token", + host: "your-space.signalwire.com" +}); + +for await (const project of client.projects.paginate()) { + console.log(project.name, project.subproject ? "(subproject)" : "(root)"); +} +``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/projects/rotate-signing-key.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/projects/rotate-signing-key.mdx new file mode 100644 index 0000000000..dff0c5ec55 --- /dev/null +++ b/fern/products/server-sdks/pages/reference/typescript/rest/projects/rotate-signing-key.mdx @@ -0,0 +1,33 @@ +--- +title: "rotateSigningKey" +slug: /reference/typescript/rest/projects/rotate-signing-key +description: Issue a new signing key for a project. +max-toc-depth: 3 +--- + +[security]: /docs/server-sdks/reference/typescript/core/security + +Issue a new signing key for a project. The response includes the new key in +`signing_key`; store it and update every service that validates +[webhook signatures][security] with it. + + + +## **Response Example** + + + +## **Example** + +```typescript {9-10} +import { RestClient } from "@signalwire/sdk"; + +const client = new RestClient({ + project: "your-project-id", + token: "your-api-token", + host: "your-space.signalwire.com" +}); + +const rotated = await client.projects.rotateSigningKey("project-id"); +console.log(rotated.signing_key); +``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/projects/update.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/projects/update.mdx new file mode 100644 index 0000000000..47782fdc8e --- /dev/null +++ b/fern/products/server-sdks/pages/reference/typescript/rest/projects/update.mdx @@ -0,0 +1,31 @@ +--- +title: "update" +slug: /reference/typescript/rest/projects/update +description: Update a project's name or protection settings. +max-toc-depth: 3 +--- + +Update a project's name or protection settings. Pass the ID, then the typed +body; the optional `extras` argument merges additional fields. + + + +## **Response Example** + + + +## **Example** + +```typescript {9-11} +import { RestClient } from "@signalwire/sdk"; + +const client = new RestClient({ + project: "your-project-id", + token: "your-api-token", + host: "your-space.signalwire.com" +}); + +const project = await client.projects.update("project-id", { + force_https_requests: true, +}); +``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/request-options.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/request-options.mdx new file mode 100644 index 0000000000..6b18a693d8 --- /dev/null +++ b/fern/products/server-sdks/pages/reference/typescript/rest/request-options.mdx @@ -0,0 +1,101 @@ +--- +title: "RequestOptions" +slug: /reference/typescript/rest/request-options +description: Per-request timeout, retry, backoff, and cancellation settings for REST calls. +max-toc-depth: 3 +--- + +[restclient]: /docs/server-sdks/reference/typescript/rest/client +[rest-error]: /docs/server-sdks/reference/typescript/rest/rest-error + +Every REST resource method accepts a trailing `requestOptions` argument that +controls the transport for that one call: how long to wait, whether to retry, +how to back off, and an `AbortSignal` to cancel. Pass the same object as the +`requestOptions` option of the [`RestClient`][restclient] constructor to set a +client-wide default. A per-request value overrides the client default field by +field; an unset field inherits. + +Pass a plain object literal, typed as `RequestOptionsInit`. The `RequestOptions` +class is exported too and is accepted anywhere the plain object is. + +```typescript {1} +import type { RequestOptionsInit } from '@signalwire/sdk'; +``` + + +The REST transport envelope ships in the SDK's next major release. Check the +package changelog for the version that includes it. + + +## **Properties** + + + Maximum seconds per attempt. When exceeded, the request throws a + `RestTransportError` (see [`RestError`][rest-error]). + + + + Number of retry attempts after the first failure, so total attempts are + `retries + 1`. Retries are off by default. + + +"} toc={true}> + HTTP statuses that trigger a retry. Defaults to `429`, `500`, `502`, `503`, + and `504`. `GET`, `PUT`, and `DELETE` retry on any status in the set. + `POST` and `PATCH` retry only on `429` and `503`, which mean the request was + not processed, so a partially applied write is never replayed. + + + + Base seconds for exponential backoff between retries, doubling each attempt. + A `Retry-After` response header is honored when present. + + + + Cancels the request. The signal is passed straight to `fetch`, so an + in-flight request is interrupted, and it is checked again before every retry. + + +## **Examples** + +### Client-wide default + +```typescript {4} +import { RestClient } from '@signalwire/sdk'; + +const client = new RestClient({ + requestOptions: { timeout: 10, retries: 2 }, +}); + +const numbers = await client.phoneNumbers.list(); +``` + +### Per-request override with cancellation + +```typescript {6-8,11} +import { RestClient } from '@signalwire/sdk'; + +const client = new RestClient(); +const controller = new AbortController(); + +const agents = client.fabric.aiAgents.list(undefined, { + timeout: 5, + abortSignal: controller.signal, +}); + +setTimeout(() => controller.abort(), 2000); +await agents; +``` + +### Retries on every page of an iteration + +`paginate()` forwards the same `requestOptions` to every page fetch. + +```typescript {4} +import { RestClient } from '@signalwire/sdk'; + +const client = new RestClient(); +for await (const address of client.fabric.addresses.paginate(undefined, { retries: 3 })) { + console.log(address.name); +} +``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/rest-error.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/rest-error.mdx index 8cd7c7bc02..411a51e60a 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/rest-error.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/rest-error.mdx @@ -7,7 +7,8 @@ max-toc-depth: 3 Custom error class for REST API errors. Extends JavaScript's built-in `Error` class. Thrown when an HTTP request to the SignalWire REST API returns a non-success -status code. The `name` property is always `"RestError"`. +status code, or when the request never reaches the server. The `name` property is +`"RestError"`, or `"RestTransportError"` for the transport subclass below. Also exported as `SignalWireRestError` to match the Python SDK class name. @@ -17,8 +18,9 @@ import { RestError } from '@signalwire/sdk'; ## **Properties** - - HTTP status code returned by the API (e.g., `404`, `422`, `500`). + + HTTP status code returned by the API (e.g., `404`, `422`, `500`). `null` for + a `RestTransportError`, where no response was received. "} toc={true}> @@ -35,14 +37,38 @@ import { RestError } from '@signalwire/sdk'; The HTTP method used (`"GET"`, `"POST"`, `"PUT"`, `"PATCH"`, `"DELETE"`). + | null"} toc={true}> + Response headers from the failed request. `null` for a transport failure. + + + + The platform request ID read from the response headers, or `null` when + absent. Quote it when you contact support about a failed request. + + - Always `"RestError"`. + `"RestError"`, or `"RestTransportError"` for a transport failure. - Human-readable summary: `"{method} {url} returned {statusCode}: {body}"`. + Human-readable summary: `"{method} {url} returned {statusCode}: {body}"`, + followed by `(request-id: ...)` when a request ID is available. +## **RestTransportError** + +Thrown when a request never reaches a response: a connection refused, a DNS +failure, a TLS error, or a `RequestOptions` timeout. It extends `RestError`, so +one `catch (e instanceof RestError)` handles HTTP errors and transport failures +alike. `statusCode`, `headers`, and `requestId` are `null`, and `body` holds the +underlying transport error message. + +Also exported as `SignalWireRestTransportError`. + +```typescript {1} +import { RestTransportError } from '@signalwire/sdk'; +``` + ## **Example** ```typescript {9} @@ -60,6 +86,7 @@ try { if (e instanceof RestError) { console.log(`HTTP ${e.statusCode}: ${e.body}`); console.log(`Request: ${e.method} ${e.url}`); + console.log(`Request ID: ${e.requestId}`); } } ``` From 0e1eaea5fb80563ca344e4149fd05414860da320 Mon Sep 17 00:00:00 2001 From: August Date: Sun, 6 Sep 2026 03:13:25 +0000 Subject: [PATCH 04/38] docs(server-sdks): correct TypeScript skill and tool defaults Co-Authored-By: Claude Fable 5.1 --- .../guides/build-ai-agents/builtin-skills.mdx | 20 ++------ .../agents/agent-base/define-tool.mdx | 35 ++++++++++--- .../agents/agent-base/define-typed-tool.mdx | 6 ++- .../typescript/agents/skills/datasphere.mdx | 4 +- .../typescript/agents/skills/google-maps.mdx | 25 +++------ .../typescript/agents/skills/index.mdx | 5 +- .../typescript/agents/skills/joke.mdx | 5 +- .../typescript/agents/skills/mcp-gateway.mdx | 15 +++++- .../agents/skills/play-background-file.mdx | 51 ++++--------------- .../agents/swaig-function/index.mdx | 5 +- .../agents/swml-service/define-tool.mdx | 5 +- 11 files changed, 79 insertions(+), 97 deletions(-) diff --git a/fern/products/server-sdks/pages/guides/build-ai-agents/builtin-skills.mdx b/fern/products/server-sdks/pages/guides/build-ai-agents/builtin-skills.mdx index b09439ab89..dcccf355b7 100644 --- a/fern/products/server-sdks/pages/guides/build-ai-agents/builtin-skills.mdx +++ b/fern/products/server-sdks/pages/guides/build-ai-agents/builtin-skills.mdx @@ -284,7 +284,7 @@ Tell jokes to lighten the mood or entertain callers. Uses a curated joke databas **Functions:** -- `tell_joke` - Get a random joke +- `get_joke` - Get a random joke. Takes a required `type` argument, `jokes` or `dadjokes` **Requirements:** None @@ -292,7 +292,7 @@ Tell jokes to lighten the mood or entertain callers. Uses a curated joke databas | Parameter | Type | Description | Default | |-----------|------|-------------|---------| -| `tool_name` | string | Custom function name | "tell_joke" | +| `tool_name` | string | Custom function name | "get_joke" | ```python from signalwire import AgentBase @@ -323,22 +323,13 @@ Play audio files in the background during calls. Audio plays while conversation **Parameters:** -This skill supports two configuration styles: - -- **Catalog mode** — preload named files via `files`, caller selects by `key`: +Preload named files via `files`; the caller selects one by `key`: | Parameter | Type | Description | Default | |-----------|------|-------------|---------| | `tool_name` | string | Custom play function name | "play_background_file" | | `files` | array | List of `{ key, description, url, wait? }` entries | Required | -- **Free-form mode** — caller supplies a URL at call time (gated by `allowed_domains`): - -| Parameter | Type | Description | Default | -|-----------|------|-------------|---------| -| `default_file_url` | string | URL played when no argument is provided | Required | -| `allowed_domains` | array | Whitelisted domains for caller-supplied URLs | Required | - **Supported formats:** MP3, WAV, OGG ```python @@ -419,7 +410,7 @@ Search SignalWire DataSphere documents. |-----------|------|-------------|---------| | `space_name` | string | DataSphere space name | Required | | `project_id` | string | Project ID (falls back to `SIGNALWIRE_PROJECT_ID`) | Required | -| `token` | string | API token (falls back to `SIGNALWIRE_TOKEN`) | Required | +| `token` | string | API token (falls back to `SIGNALWIRE_API_TOKEN`) | Required | | `document_id` | string | Document ID to search within | Required | | `tool_name` | string | Custom function name | "search_knowledge" | | `count` | integer | Results to return (1-10) | 1 | @@ -570,9 +561,6 @@ Validate addresses and compute driving routes using Google Maps. Supports geocod | `api_key` | string | Google Maps API key (falls back to `GOOGLE_MAPS_API_KEY`) | Required | | `lookup_tool_name` | string | Address lookup function name | "lookup_address" | | `route_tool_name` | string | Route computation function name | "compute_route" | -| `geocode_tool_name` | string | Reverse-geocoding function name | "geocode_address" | -| `route_by_coords_tool_name` | string | Coord-based route function name | "compute_route_by_coords" | -| `default_mode` | string | `"driving"`, `"walking"`, `"bicycling"`, or `"transit"` | "driving" | ```python from signalwire import AgentBase diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/define-tool.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/define-tool.mdx index bec3e3dc48..e34ed31947 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/define-tool.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/define-tool.mdx @@ -9,6 +9,8 @@ max-toc-depth: 3 [swml-swaig-functions-reference]: /docs/swml/reference/ai/swaig/functions [functionresult]: /docs/server-sdks/reference/typescript/agents/function-result [ref-agentbase]: /docs/server-sdks/reference/typescript/agents/agent-base +[parameter-schema]: /docs/server-sdks/reference/typescript/agents/parameter-schema +[on-error]: /docs/server-sdks/reference/typescript/agents/agent-base/on-error Programmatically define a SWAIG function (tool) that the AI can invoke during a conversation. @@ -42,19 +44,25 @@ instead. when to call the tool. -"} toc={true}> - JSON Schema describing the tool's parameters. The AI generates arguments - conforming to this schema. + + JSON Schema describing the tool's parameters. Write it either as a flat map of + property name to schema (`{ city: { type: 'string' } }`) or as a wrapped + object schema (`{ type: 'object', properties: { ... } }`). With the flat form + the handler's `args` is typed from the schema, so `args.city` is a `string` + and an `enum` narrows to its literal union. You can also build the schema + with [`paramSchema()`][parameter-schema]. Callback invoked when the AI calls this tool. Receives - `(args: Record, rawData: Record)` and should - return a [`FunctionResult`][functionresult]. + `(args, rawData: SwaigRequest)` and returns a [`FunctionResult`][functionresult], + a plain object, or a string. - - Whether to require token validation on tool calls. Recommended for production. + + Whether to require token validation on tool calls. Tools are secure by + default: the rendered webhook URL carries a per-tool token. Pass `false` only + to expose the tool on the shared, unauthenticated webhook URL. "} toc={true}> @@ -84,6 +92,19 @@ instead. Additional fields merged into the SWAIG function definition. Equivalent to Python's `**swaig_fields` kwargs (e.g., `meta_data`). + + + Per-tool error hook, called when the handler throws. Return a + [`FunctionResult`][functionresult] to control what the caller hears, or + nothing to fall back to `errorMessage`. Runs before the agent-level + [`onError()`][on-error] hook. + + + + Message spoken to the caller when the handler throws and no error hook + supplies a response. Defaults to a generic apology asking the caller to try + again. + ## **Returns** diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/define-typed-tool.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/define-typed-tool.mdx index b19976d557..76c24113ae 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/define-typed-tool.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/define-typed-tool.mdx @@ -47,8 +47,10 @@ the args object. object. Parameter names must match the JSON Schema property names. - - Whether to require token validation on tool calls. Recommended for production. + + Whether to require token validation on tool calls. Tools are secure by + default: the rendered webhook URL carries a per-tool token. Pass `false` only + to expose the tool on the shared, unauthenticated webhook URL. "} toc={true}> diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/skills/datasphere.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/skills/datasphere.mdx index ecfd898540..998aa9ee3e 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/skills/datasphere.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/skills/datasphere.mdx @@ -16,7 +16,7 @@ required — `setup()` fails closed if any are missing. **Tools:** Custom per instance via `tool_name` (default `search_knowledge`) -**Env vars:** `SIGNALWIRE_PROJECT_ID`, `SIGNALWIRE_TOKEN`, `SIGNALWIRE_SPACE` +**Env vars:** `SIGNALWIRE_PROJECT_ID`, `SIGNALWIRE_API_TOKEN`, `SIGNALWIRE_SPACE` **Multi-instance:** yes @@ -35,7 +35,7 @@ required — `setup()` fails closed if any are missing. - SignalWire API token. Falls back to `SIGNALWIRE_TOKEN`. + SignalWire API token. Falls back to `SIGNALWIRE_API_TOKEN`. diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/skills/google-maps.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/skills/google-maps.mdx index 45e058a4f7..6b6be642ce 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/skills/google-maps.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/skills/google-maps.mdx @@ -1,18 +1,18 @@ --- title: "GoogleMapsSkill" slug: /reference/typescript/agents/skills/google-maps -description: Get driving/walking/transit directions and search for places using Google Maps APIs. +description: Validate addresses and compute driving routes using Google Maps APIs. --- [add-skill]: /docs/server-sdks/reference/typescript/agents/agent-base/add-skill -Get driving/walking/transit directions, find places, geocode addresses, and -compute routes by coordinates using Google Maps APIs. +Validate and geocode a street address or business name, and compute the +driving distance and travel time between two coordinates, using Google Maps +APIs. **Class:** `GoogleMapsSkill` -**Tools:** `compute_route`, `lookup_address`, `geocode_address`, -`compute_route_by_coords` (each tool name is configurable). +**Tools:** `lookup_address`, `compute_route` (each tool name is configurable). **Env vars:** `GOOGLE_MAPS_API_KEY` (required — the tool handlers read this directly and do not fall back to an `api_key` config value). @@ -23,11 +23,6 @@ directly and do not fall back to an `api_key` config value). value is not used as a fallback. - - Default travel mode for `compute_route`: `"driving"`, `"walking"`, - `"bicycling"`, or `"transit"`. - - Custom name for the route computation tool. @@ -36,14 +31,6 @@ directly and do not fall back to an `api_key` config value). Custom name for the address / place lookup tool. - - Custom name for the address-to-coordinates geocode tool. - - - - Custom name for the coordinate-based route computation tool. - - ```typescript {6-8} import { AgentBase, GoogleMapsSkill } from '@signalwire/sdk'; @@ -51,7 +38,7 @@ const agent = new AgentBase({ name: 'assistant', route: '/assistant' }); agent.setPromptText('You are a helpful assistant.'); await agent.addSkill(new GoogleMapsSkill({ - default_mode: 'transit', + route_tool_name: 'get_driving_time', })); agent.run(); diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/skills/index.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/skills/index.mdx index 5bc3957d5e..364c2929fc 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/skills/index.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/skills/index.mdx @@ -6,7 +6,6 @@ max-toc-depth: 3 --- [add-skill]: /docs/server-sdks/reference/typescript/agents/agent-base/add-skill -[sw-search]: /docs/server-sdks/reference/typescript/agents/cli/sw-search [infogathereragent]: /docs/server-sdks/reference/typescript/agents/prefabs#infogathereragent [skillbase]: /docs/server-sdks/reference/typescript/agents/skill-base [ref-datamap]: /docs/server-sdks/reference/typescript/agents/data-map @@ -46,8 +45,8 @@ agent.run(); | [`weather_api`](/docs/server-sdks/reference/typescript/agents/skills/weather-api) | `WeatherApiSkill` | 1 | Yes | No | | [`web_search`](/docs/server-sdks/reference/typescript/agents/skills/web-search) | `WebSearchSkill` | 1 | Yes | Yes | | [`wikipedia_search`](/docs/server-sdks/reference/typescript/agents/skills/wikipedia-search) | `WikipediaSearchSkill` | 1 | No | No | -| [`google_maps`](/docs/server-sdks/reference/typescript/agents/skills/google-maps) | `GoogleMapsSkill` | 4 | Yes | No | -| [`play_background_file`](/docs/server-sdks/reference/typescript/agents/skills/play-background-file) | `PlayBackgroundFileSkill` | 1-3 | No | Yes | +| [`google_maps`](/docs/server-sdks/reference/typescript/agents/skills/google-maps) | `GoogleMapsSkill` | 2 | Yes | No | +| [`play_background_file`](/docs/server-sdks/reference/typescript/agents/skills/play-background-file) | `PlayBackgroundFileSkill` | 1 | No | Yes | | [`swml_transfer`](/docs/server-sdks/reference/typescript/agents/skills/swml-transfer) | `SwmlTransferSkill` | 1-2 | No | Yes | | [`datasphere`](/docs/server-sdks/reference/typescript/agents/skills/datasphere) | `DataSphereSkill` | 1 | Yes | Yes | | [`datasphere_serverless`](/docs/server-sdks/reference/typescript/agents/skills/datasphere-serverless) | `DataSphereServerlessSkill` | 1 | Yes | Yes | diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/skills/joke.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/skills/joke.mdx index f12d37c476..5026ea0091 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/skills/joke.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/skills/joke.mdx @@ -12,11 +12,12 @@ categories. No external API required. **Class:** `JokeSkill` -**Tools:** `tell_joke` (configurable via `tool_name`) +**Tools:** `get_joke` (configurable via `tool_name`). Takes one required +argument, `type`, which is `jokes` or `dadjokes`. **Env vars:** None - + Custom name for the joke tool. Overrides the default SWAIG function name. diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/skills/mcp-gateway.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/skills/mcp-gateway.mdx index 0207ac481d..c31019660f 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/skills/mcp-gateway.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/skills/mcp-gateway.mdx @@ -69,9 +69,22 @@ cloud-metadata endpoints are rejected. Requests use retry semantics with - Whether to verify SSL certificates on outbound requests. + Whether to verify TLS certificates on outbound requests. Setting this to + `false` alone is ignored; verification stays on unless `allow_insecure_tls` + is also `true`. + + Explicit opt-in that, together with `verify_ssl: false`, disables TLS + certificate verification. + + + +With `verify_ssl: false` and `allow_insecure_tls: true`, outbound requests to +the gateway accept any certificate and are exposed to interception. Use it only +against a trusted self-signed gateway on a private network. + + ## Example ```typescript {6-13} diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/skills/play-background-file.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/skills/play-background-file.mdx index 6860da72cb..60de67da1f 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/skills/play-background-file.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/skills/play-background-file.mdx @@ -1,43 +1,32 @@ --- title: "PlayBackgroundFileSkill" slug: /reference/typescript/agents/skills/play-background-file -description: Control background audio/video playback during calls. Supports pre-configured file list or free-form URL playback. +description: Control background audio/video playback during calls from a pre-configured file list. --- [add-skill]: /docs/server-sdks/reference/typescript/agents/agent-base/add-skill Control background audio/video playback during calls using SWML playback -actions. Two configuration modes are supported: - -- **Pre-configured mode (matches Python)** — supply `files` and the skill - emits a single tool whose `action` enum includes `start_` for each - configured file plus `stop`. -- **Free-form mode (TypeScript-specific)** — omit `files` and supply - `default_file_url` and/or `allowed_domains`. The skill emits two tools, - `play_background` and `stop_background`, which accept arbitrary URLs (with - optional domain allowlist). +actions. Supply `files` and the skill emits a single tool whose `action` enum +includes `start_` for each configured file plus `stop`. The skill refuses +to load when `files` is empty. **Class:** `PlayBackgroundFileSkill` -**Tools (pre-configured mode):** `play_background_file` (configurable via -`tool_name`) - -**Tools (free-form mode):** `play_background`, `stop_background` +**Tools:** `play_background_file` (configurable via `tool_name`) **Env vars:** None **Multi-instance:** yes — set a distinct `tool_name` per instance. - Custom name for the generated SWAIG tool in pre-configured mode. Required - when registering multiple instances on the same agent. + Custom name for the generated SWAIG tool. Required when registering + multiple instances on the same agent. - + Array of pre-configured file entries that become selectable via the tool's - `action` enum. When supplied (and non-empty), the skill runs in - pre-configured mode; when omitted or empty, the skill falls back to - free-form mode. + `action` enum. Each entry has: @@ -50,18 +39,7 @@ actions. Two configuration modes are supported: file to finish playing. - - Default audio file URL for free-form mode. When set, the `file_url` - parameter on the `play_background` tool becomes optional. - - - - Allowlist of domains for audio file URLs in free-form mode. When set, only - URLs whose hostname matches or is a subdomain of one of these entries are - accepted. - - -## Example — pre-configured files +## Example ```typescript {6-14} import { AgentBase, PlayBackgroundFileSkill } from '@signalwire/sdk'; @@ -83,12 +61,3 @@ await agent.addSkill(new PlayBackgroundFileSkill({ agent.run(); ``` - -## Example — free-form URL - -```typescript {6-9} -await agent.addSkill(new PlayBackgroundFileSkill({ - default_file_url: 'https://example.com/hold-music.mp3', - allowed_domains: ['example.com', 'cdn.example.com'], -})); -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/swaig-function/index.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/swaig-function/index.mdx index 6b94b12e8d..150f9c5b7c 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/swaig-function/index.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/swaig-function/index.mdx @@ -67,8 +67,9 @@ const fn = new SwaigFunction(opts); JSON Schema `properties` object describing the tool's parameters. - - Whether the tool requires session token authentication. + + Whether the tool requires session token authentication. Pass `false` to + expose the tool on the shared, unauthenticated webhook URL. "} toc={true}> diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/swml-service/define-tool.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/swml-service/define-tool.mdx index d7a5fb2a62..d7666c7508 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/swml-service/define-tool.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/swml-service/define-tool.mdx @@ -48,8 +48,9 @@ specification. return a [`FunctionResult`][functionresult]. - - Whether to require token validation on tool calls. + + Whether to require token validation on tool calls. Pass `false` to expose + the tool on the shared, unauthenticated webhook URL. "} toc={true}> From 532015969e78500294184c63aa55fcab23de215d Mon Sep 17 00:00:00 2001 From: August Date: Sun, 6 Sep 2026 03:13:25 +0000 Subject: [PATCH 05/38] docs(server-sdks): add TypeScript AIChatClient, BedrockAgent, CLI, and ParameterSchema Co-Authored-By: Claude Fable 5.1 --- .../typescript/agents/ai-chat-client/chat.mdx | 92 +++++++++ .../agents/ai-chat-client/close.mdx | 39 ++++ .../ai-chat-client/create-conversation.mdx | 76 +++++++ .../agents/ai-chat-client/delete.mdx | 33 ++++ .../typescript/agents/ai-chat-client/end.mdx | 36 ++++ .../agents/ai-chat-client/index.mdx | 165 ++++++++++++++++ .../typescript/agents/ai-chat-client/log.mdx | 42 ++++ .../agents/ai-chat-client/summarize.mdx | 75 +++++++ .../typescript/agents/bedrock-agent/index.mdx | 168 ++++++++++++++++ .../bedrock-agent/set-inference-params.mdx | 43 ++++ .../agents/bedrock-agent/set-voice.mdx | 34 ++++ .../reference/typescript/agents/cli/index.mdx | 37 ++++ .../typescript/agents/cli/swaig-test.mdx | 185 ++++++++++++++++++ .../reference/typescript/agents/overview.mdx | 33 +++- .../typescript/agents/parameter-schema.mdx | 126 ++++++++++++ 15 files changed, 1179 insertions(+), 5 deletions(-) create mode 100644 fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/chat.mdx create mode 100644 fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/close.mdx create mode 100644 fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/create-conversation.mdx create mode 100644 fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/delete.mdx create mode 100644 fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/end.mdx create mode 100644 fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/index.mdx create mode 100644 fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/log.mdx create mode 100644 fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/summarize.mdx create mode 100644 fern/products/server-sdks/pages/reference/typescript/agents/bedrock-agent/index.mdx create mode 100644 fern/products/server-sdks/pages/reference/typescript/agents/bedrock-agent/set-inference-params.mdx create mode 100644 fern/products/server-sdks/pages/reference/typescript/agents/bedrock-agent/set-voice.mdx create mode 100644 fern/products/server-sdks/pages/reference/typescript/agents/cli/index.mdx create mode 100644 fern/products/server-sdks/pages/reference/typescript/agents/cli/swaig-test.mdx create mode 100644 fern/products/server-sdks/pages/reference/typescript/agents/parameter-schema.mdx diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/chat.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/chat.mdx new file mode 100644 index 0000000000..b8cfef3089 --- /dev/null +++ b/fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/chat.mdx @@ -0,0 +1,92 @@ +--- +title: "chat" +slug: /reference/typescript/agents/ai-chat-client/chat +description: Send a message to an AI agent and return its reply. +max-toc-depth: 3 +--- + +[ref-aichatclient]: /docs/server-sdks/reference/typescript/agents/ai-chat-client +[createconversation]: /docs/server-sdks/reference/typescript/agents/ai-chat-client/create-conversation +[swml-user-event]: /docs/server-sdks/reference/typescript/agents/function-result/swml-user-event + +Send a message and return the agent's reply. One call is one full turn, +including any tool calls the agent makes along the way, so expect seconds +rather than milliseconds. + +## **Parameters** + + + The conversation to send on. + + + + The message to send. + + + + Turn options. + + + + + + `user` or `system`. A `system` message steers the agent without appearing as + something the user said. + + + + Creates the conversation if it does not exist yet. Saves a call, at the cost + of never receiving `initialMessage`, so the agent does not speak first. + + +"} toc={true}> + Applies only when this call creates the conversation. + + + + Applies only when this call creates the conversation. + + + + Applies only when this call creates the conversation. + + + + +## **Returns** + +`Promise` -- carries `text`, `conversationId`, and `userEvent`. + +`userEvent` is `null` unless the turn produced one. Its contents are whatever +your tool passed to [`swmlUserEvent()`][swml-user-event], so the shape is yours. + +## **Throws** + +`ChatInProgressError` when a turn is already running on this conversation. That +is the contract rather than a transient failure, so wait for the first turn to +return instead of retrying. + +## **Example** + +```typescript {8-11} +import { AIChatClient, ChatInProgressError } from '@signalwire/sdk'; + +const CONFIG_URL = 'https://bayview-taxi.example.com/swml'; +const client = new AIChatClient({ space: 'your-space' }); +await client.createConversation('chat-8f21', { configUrl: CONFIG_URL }); + +try { + const reply = await client.chat( + 'chat-8f21', + 'How much is a van from 123 Gough Street to the airport?', + ); + console.log('Ada:', reply.text); + if (reply.userEvent) handle(reply.userEvent); +} catch (e) { + if (e instanceof ChatInProgressError) { + // a turn is already running; wait rather than retry + } else { + throw e; + } +} +``` diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/close.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/close.mdx new file mode 100644 index 0000000000..f201b4f34a --- /dev/null +++ b/fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/close.mdx @@ -0,0 +1,39 @@ +--- +title: "close" +slug: /reference/typescript/agents/ai-chat-client/close +description: Complete the client's lifecycle. +max-toc-depth: 3 +--- + +[ref-aichatclient]: /docs/server-sdks/reference/typescript/agents/ai-chat-client + +Complete the client's lifecycle. The client holds no pooled connection of its +own, so there is nothing to tear down and calling it more than once is safe. It +exists so code can treat `AIChatClient` like any other disposable resource. + +The client also implements `Symbol.asyncDispose`, so `await using client = new +AIChatClient(...)` calls `close()` for you when the scope exits. + +## **Parameters** + +None. + +## **Returns** + +`Promise` + +## **Example** + +Outside an `await using` block, close it yourself: + +```typescript {9} +import { AIChatClient } from '@signalwire/sdk'; + +const client = new AIChatClient({ space: 'your-space' }); +try { + const reply = await client.chat('chat-8f21', 'Where is my van?'); + console.log('Ada:', reply.text); +} finally { + await client.close(); +} +``` diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/create-conversation.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/create-conversation.mdx new file mode 100644 index 0000000000..b03019e1cf --- /dev/null +++ b/fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/create-conversation.mdx @@ -0,0 +1,76 @@ +--- +title: "createConversation" +slug: /reference/typescript/agents/ai-chat-client/create-conversation +description: Create a conversation with an AI agent, or reset an existing one. +max-toc-depth: 3 +--- + +[ref-aichatclient]: /docs/server-sdks/reference/typescript/agents/ai-chat-client +[chat]: /docs/server-sdks/reference/typescript/agents/ai-chat-client/chat + +Create a conversation, or reset an existing one when `reinit` is set. Calling +it for an id that already exists returns that conversation untouched. + +## **Parameters** + + + The conversation id. You choose it, and it is scoped to your project. + + + + Creation options. `configUrl` is required. + + + + + + The URL serving your agent's SWML. SignalWire fetches it server-to-server, so + it must be reachable from the public internet. + + + + An opening message from the user, sent as part of creating the conversation. + + + + Idle seconds before the conversation ends. Sent as `conversation_timeout`; + the service default is 3600. + + +"} toc={true}> + Arbitrary data about the user, echoed back on this conversation's webhooks. + Sent as `user_meta_data`. + + + + Reset an existing conversation instead of returning it as-is. + + + + +## **Returns** + +`Promise` -- carries `id`, `status` (`created`, +`reinitialized`, or `exists`), and `initialMessage`. + + + `initialMessage` is the agent's generated greeting. Create the conversation + when the visitor opens the chat rather than when the page loads. Use + [`chat()`][chat] with `configUrl` instead when you don't need the agent to + speak first. + + +## **Example** + +```typescript {6-9} +import { AIChatClient } from '@signalwire/sdk'; + +const CONFIG_URL = 'https://bayview-taxi.example.com/swml'; +const client = new AIChatClient({ space: 'your-space' }); + +const info = await client.createConversation('chat-8f21', { + configUrl: CONFIG_URL, + userMetadata: { customer_id: 'cust-4410' }, +}); +console.log(info.status, info.initialMessage); +``` diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/delete.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/delete.mdx new file mode 100644 index 0000000000..9592c884ec --- /dev/null +++ b/fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/delete.mdx @@ -0,0 +1,33 @@ +--- +title: "delete" +slug: /reference/typescript/agents/ai-chat-client/delete +description: Remove a conversation and its data. +max-toc-depth: 3 +--- + +[ref-aichatclient]: /docs/server-sdks/reference/typescript/agents/ai-chat-client +[end]: /docs/server-sdks/reference/typescript/agents/ai-chat-client/end + +Remove the conversation and its data. Nothing is post-processed and no webhook +fires, which is the difference from [`end()`][end]. Deleting an id that no +longer exists is not an error. + +## **Parameters** + + + The conversation to delete. + + +## **Returns** + +`Promise` -- `true` when the service reported the conversation deleted. + +## **Example** + +```typescript {5} +import { AIChatClient } from '@signalwire/sdk'; + +const client = new AIChatClient({ space: 'your-space' }); + +await client.delete('chat-8f21'); +``` diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/end.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/end.mdx new file mode 100644 index 0000000000..9ebd5d3a46 --- /dev/null +++ b/fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/end.mdx @@ -0,0 +1,36 @@ +--- +title: "end" +slug: /reference/typescript/agents/ai-chat-client/end +description: End a conversation and start post-processing. +max-toc-depth: 3 +--- + +[ref-aichatclient]: /docs/server-sdks/reference/typescript/agents/ai-chat-client +[delete]: /docs/server-sdks/reference/typescript/agents/ai-chat-client/delete + +End the conversation and start post-processing: the summary, and a request to +your `post_prompt_url` when your SWML sets one. The webhook is not instant, so +expect seconds. + +To remove a conversation without any of that, use [`delete()`][delete]. + +## **Parameters** + + + The conversation to end. + + +## **Returns** + +`Promise` -- `true` when the service reported the conversation ended. + +## **Example** + +```typescript {5} +import { AIChatClient } from '@signalwire/sdk'; + +const client = new AIChatClient({ space: 'your-space' }); + +const ended = await client.end('chat-8f21'); +console.log(ended ? 'Conversation ended' : 'No such conversation'); +``` diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/index.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/index.mdx new file mode 100644 index 0000000000..4c1ac73036 --- /dev/null +++ b/fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/index.mdx @@ -0,0 +1,165 @@ +--- +title: "AIChatClient" +slug: /reference/typescript/agents/ai-chat-client +description: Client for holding a text conversation with a SignalWire AI agent from your own server. +max-toc-depth: 3 +--- + +[chat-endpoint]: /docs/apis/rest/ai-chat/chat-methods +[error-codes]: /docs/apis/error-codes +[createconversation]: /docs/server-sdks/reference/typescript/agents/ai-chat-client/create-conversation +[chat]: /docs/server-sdks/reference/typescript/agents/ai-chat-client/chat +[end]: /docs/server-sdks/reference/typescript/agents/ai-chat-client/end +[delete]: /docs/server-sdks/reference/typescript/agents/ai-chat-client/delete +[log]: /docs/server-sdks/reference/typescript/agents/ai-chat-client/log +[summarize]: /docs/server-sdks/reference/typescript/agents/ai-chat-client/summarize +[close]: /docs/server-sdks/reference/typescript/agents/ai-chat-client/close + +`AIChatClient` sends messages to an AI agent and returns its replies. The agent +is the same one a phone call would reach, and each call to [`chat()`][chat] +runs one full turn. + +Every method returns a promise. A turn waits on a full model round trip, +measured in seconds, so don't block on it in a request handler that serves +other users. + +```bash +npm install @signalwire/sdk +``` + + + This class holds your API token, so it belongs on a server you control. Never + ship it to a browser. + + +## **Parameters** + + + Your project ID. Falls back to `SIGNALWIRE_PROJECT_ID`. The constructor throws + when neither is set. + + + + An API token with the `chat` scope. Falls back to `SIGNALWIRE_API_TOKEN`. + + + + Your Space name, used to build the service URL. Falls back to `SIGNALWIRE_SPACE`. + + + + The service URL, used verbatim. Overrides `space`. The constructor throws when + neither is available. + + + + Custom `fetch` implementation. Defaults to the global `fetch`. + + + + Seconds of silence on the connection before a request is abandoned. The + service sends keepalive bytes while a slow turn runs, so this bounds a dead + connection rather than total turn length. `0` disables it. + + +A configured environment needs no arguments at all. Identity travels in HTTP +Basic auth, never in the request body. + +## **Return types** + + + Returned by [`createConversation()`][createconversation]. Carries `id`, + `status`, and `initialMessage`. + + + + Returned by [`chat()`][chat]. Carries `text`, `conversationId`, and `userEvent`. + + + + Returned by [`log()`][log]. Carries `messages` and `callTimeline`. + + +## **Errors** + +All extend `AIChatError`, which carries `code` and `serverMessage`. Codes +without a specific class throw `AIChatError` itself. Documented codes are listed +under [AI chat errors][error-codes]. + + + A JSON-RPC `-32009` response. + + + + No conversation with that id exists in your project. + + + + The service returned a JSON-RPC rate-limit error. + + + + A turn is already running on this conversation. + + + + Summary generation failed. `code` is `null`, because this failure rides the + success envelope rather than arriving as a JSON-RPC error. + + +Success and failure are decided by the JSON-RPC body, not the HTTP status. A +response that isn't JSON throws `AIChatError` with the HTTP status as its `code`. + +## **Methods** + + + + Create a conversation, or reset an existing one. + + + Send a message and return the agent's reply. + + + End the conversation and start post-processing. + + + Remove the conversation and its data. + + + Read the conversation back. + + + Generate a summary of the conversation. + + + Complete the client's lifecycle. + + + +## **Example** + +```typescript {6,9,14} +import { AIChatClient } from '@signalwire/sdk'; + +const CONFIG_URL = 'https://bayview-taxi.example.com/swml'; + +async function main() { + await using client = new AIChatClient({ space: 'your-space' }); + + const info = await client.createConversation('chat-8f21', { configUrl: CONFIG_URL }); + console.log('Ada:', info.initialMessage); + + const reply = await client.chat( + 'chat-8f21', + 'How much is a van from 123 Gough Street to the airport?', + ); + console.log('Ada:', reply.text); + + await client.end('chat-8f21'); +} + +await main(); +``` + +The [AI chat endpoint][chat-endpoint] documents the wire protocol underneath +this class. diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/log.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/log.mdx new file mode 100644 index 0000000000..c25d93ac54 --- /dev/null +++ b/fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/log.mdx @@ -0,0 +1,42 @@ +--- +title: "log" +slug: /reference/typescript/agents/ai-chat-client/log +description: Read a conversation's message history and call timeline. +max-toc-depth: 3 +--- + +[ref-aichatclient]: /docs/server-sdks/reference/typescript/agents/ai-chat-client + +Read the conversation back. This changes nothing about the conversation. + +## **Parameters** + + + The conversation to read. + + +## **Returns** + +`Promise` -- carries `messages` and `callTimeline`. + +Messages contain the fields returned by the service. Code that displays a +transcript should not assume every entry has a timestamp. `callTimeline` +contains any structured timeline entries returned for the conversation. + + + `messages` can include your prompt and other non-dialogue entries. Filter to + `user` and `assistant` roles before displaying a transcript. + + +## **Example** + +```typescript {5-8} +import { AIChatClient } from '@signalwire/sdk'; + +const client = new AIChatClient({ space: 'your-space' }); + +const { messages } = await client.log('chat-8f21'); +for (const m of messages) { + if (m.role === 'user' || m.role === 'assistant') console.log(m.role, m.content); +} +``` diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/summarize.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/summarize.mdx new file mode 100644 index 0000000000..030866e607 --- /dev/null +++ b/fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/summarize.mdx @@ -0,0 +1,75 @@ +--- +title: "summarize" +slug: /reference/typescript/agents/ai-chat-client/summarize +description: Generate a summary of a conversation. +max-toc-depth: 3 +--- + +[ref-aichatclient]: /docs/server-sdks/reference/typescript/agents/ai-chat-client +[post-prompt]: /docs/server-sdks/reference/typescript/agents/agent-base/set-post-prompt + +Generate a summary of the conversation. The service rate limits this per +conversation. + +## **Parameters** + + + The conversation to summarize. + + + + Prompt and sampling controls. + + + + + + How to summarize. Overrides the [post-prompt][post-prompt] text in your SWML + for this call only. + + + + Sampling temperature. + + + + Nucleus-sampling top-p. + + + + Frequency penalty. + + + + Presence penalty. + + + + Maximum tokens for the summary. + + + + +## **Returns** + +`Promise` -- the generated summary. + +## **Throws** + +`SummaryError` when the service reports that generation failed. The service +returns exactly one of `summary` or `error`, both on the success envelope, so a +failed summary surfaces as an exception rather than reaching you as an empty +string. `RateLimitError` when you exceed the per-conversation limit. + +## **Example** + +```typescript {5-7} +import { AIChatClient } from '@signalwire/sdk'; + +const client = new AIChatClient({ space: 'your-space' }); + +const summary = await client.summarize('chat-8f21', { + summaryPrompt: 'Summarize the ride request in two sentences.', +}); +console.log(summary); +``` diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/bedrock-agent/index.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/bedrock-agent/index.mdx new file mode 100644 index 0000000000..3f2c575cc9 --- /dev/null +++ b/fern/products/server-sdks/pages/reference/typescript/agents/bedrock-agent/index.mdx @@ -0,0 +1,168 @@ +--- +title: "BedrockAgent" +slug: /reference/typescript/agents/bedrock-agent +description: "Amazon Bedrock voice-to-voice agent extending AgentBase." +max-toc-depth: 3 +--- + +[agentbase]: /docs/server-sdks/reference/typescript/agents/agent-base +[amazon-bedrock]: /docs/swml/reference/amazon-bedrock +[swml-bedrock-reference]: /docs/swml/reference/amazon-bedrock +[setvoice]: /docs/server-sdks/reference/typescript/agents/bedrock-agent/set-voice +[setinferenceparams]: /docs/server-sdks/reference/typescript/agents/bedrock-agent/set-inference-params + +`BedrockAgent` extends [`AgentBase`][agentbase] to use Amazon Bedrock's +voice-to-voice model as the AI backend. It renders SWML with the +`amazon_bedrock` verb instead of `ai`, and keeps every standard agent feature: +text and POM prompts, skills, SWAIG functions, post-prompt, and dynamic +configuration. + +Extends [`AgentBase`][agentbase] -- inherits all parent properties and methods. + + +BedrockAgent generates SWML with the [`amazon_bedrock`][amazon-bedrock] verb +instead of `ai`. See the [SWML bedrock reference][swml-bedrock-reference] for the +full specification. + + +## **Constructor** + +```typescript {3} +import { BedrockAgent } from '@signalwire/sdk'; + +const agent = new BedrockAgent({ + systemPrompt: 'You are a helpful voice assistant.', + voiceId: 'joanna', +}); +``` + +The `createBedrockAgent(config)` factory function returns the same instance as +`new BedrockAgent(config)`. + +### Constructor Parameters + + + Agent name. + + + + HTTP route for the agent endpoint. + + + + Initial system prompt. Can be overridden later with `setPromptText()`. + + + + Bedrock voice identifier (e.g., `"matthew"`, `"joanna"`). + + + + Generation temperature. Range: 0 to 1. + + + + Nucleus sampling parameter. Range: 0 to 1. + + + + Maximum tokens to generate per response. + + +"} toc={true}> + Additional [`AgentBase`][agentbase] constructor options (e.g., `host`, + `port`, `basicAuth`). + + +## **Methods** + + + + Set the Bedrock voice ID after construction. + + + Update Bedrock inference parameters. + + + +## **Overridden Behavior** + +BedrockAgent overrides several AgentBase methods to fit the Bedrock +voice-to-voice model: + +| Method | Behavior | +|--------|----------| +| `setLlmModel()` | Logs a warning and does nothing. Bedrock uses a fixed voice-to-voice model. | +| `setLlmTemperature()` | Redirects to `setInferenceParams(temperature)`. | +| `setPromptLlmParams()` | Logs a warning. Use `setInferenceParams()` instead. | +| `setPostPromptLlmParams()` | Logs a warning. The Bedrock post-prompt uses the LLM configured in the platform. | + + +Parameters specific to text-based LLMs (`barge_confidence`, `presence_penalty`, +`frequency_penalty`) are filtered out during SWML rendering and have no effect +on Bedrock agents. + + +Prompt methods (`setPromptText()`, `setPromptPom()`, `promptAddSection()`, and +so on) work normally. The prompt is built the same way as in AgentBase and then +placed in the `amazon_bedrock` verb along with `voice_id`, `temperature`, and +`top_p`. + +## **Examples** + +### Basic Bedrock agent with a tool + +```typescript {3-9} +import { BedrockAgent, FunctionResult } from '@signalwire/sdk'; + +const agent = new BedrockAgent({ + name: 'bedrock-assistant', + route: '/assistant', + systemPrompt: 'You are a helpful customer service representative.', + voiceId: 'joanna', + temperature: 0.5, +}); + +agent.promptAddSection('Guidelines', 'Be concise and professional.'); + +agent.defineTool({ + name: 'check_order', + description: 'Look up order status', + parameters: { + order_id: { type: 'string', description: 'Order ID' }, + }, + required: ['order_id'], + handler: async (args) => { + return new FunctionResult(`Order ${args.order_id} is shipped and arriving tomorrow.`); + }, +}); + +agent.setVoice('matthew'); +agent.setInferenceParams(0.3, 0.95); + +await agent.run(); +``` + +### Multi-agent server with Bedrock + +```typescript {8-13} +import { AgentBase, AgentServer, BedrockAgent } from '@signalwire/sdk'; + +// Standard agent +const standardAgent = new AgentBase({ name: 'standard', route: '/standard' }); +standardAgent.setPromptText('You are a general assistant.'); + +// Bedrock voice-to-voice agent +const bedrockAgent = new BedrockAgent({ + name: 'bedrock', + route: '/bedrock', + systemPrompt: 'You are a voice-optimized assistant.', + voiceId: 'matthew', +}); + +const server = new AgentServer(); +server.register(standardAgent); +server.register(bedrockAgent); + +await server.run(); +``` diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/bedrock-agent/set-inference-params.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/bedrock-agent/set-inference-params.mdx new file mode 100644 index 0000000000..9c98ce782a --- /dev/null +++ b/fern/products/server-sdks/pages/reference/typescript/agents/bedrock-agent/set-inference-params.mdx @@ -0,0 +1,43 @@ +--- +title: "setInferenceParams" +slug: /reference/typescript/agents/bedrock-agent/set-inference-params +description: "Update Bedrock inference parameters." +max-toc-depth: 3 +--- + +[ref-bedrockagent]: /docs/server-sdks/reference/typescript/agents/bedrock-agent + +Update Bedrock inference parameters. Only the arguments you pass are changed; +an argument left `undefined` keeps its current value. + +## **Parameters** + + + Generation temperature. Range: 0 to 1. + + + + Nucleus sampling parameter. Range: 0 to 1. + + + + Maximum tokens to generate. + + +## **Returns** + +[`BedrockAgent`][ref-bedrockagent] -- Returns `this` for method chaining. + +## **Example** + +```typescript {9} +import { BedrockAgent } from '@signalwire/sdk'; + +const agent = new BedrockAgent({ + name: 'bedrock-assistant', + route: '/assistant', + systemPrompt: 'You are a helpful assistant.', +}); + +agent.setInferenceParams(0.3, 0.95, 2048); +``` diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/bedrock-agent/set-voice.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/bedrock-agent/set-voice.mdx new file mode 100644 index 0000000000..01c9981fbd --- /dev/null +++ b/fern/products/server-sdks/pages/reference/typescript/agents/bedrock-agent/set-voice.mdx @@ -0,0 +1,34 @@ +--- +title: "setVoice" +slug: /reference/typescript/agents/bedrock-agent/set-voice +description: "Set the Bedrock voice ID after construction." +max-toc-depth: 3 +--- + +[ref-bedrockagent]: /docs/server-sdks/reference/typescript/agents/bedrock-agent + +Set the Bedrock voice ID after construction. + +## **Parameters** + + + Bedrock voice identifier (e.g., `"matthew"`, `"joanna"`). + + +## **Returns** + +[`BedrockAgent`][ref-bedrockagent] -- Returns `this` for method chaining. + +## **Example** + +```typescript {9} +import { BedrockAgent } from '@signalwire/sdk'; + +const agent = new BedrockAgent({ + name: 'bedrock-assistant', + route: '/assistant', + systemPrompt: 'You are a helpful assistant.', +}); + +agent.setVoice('joanna'); +``` diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/cli/index.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/cli/index.mdx new file mode 100644 index 0000000000..34d1237398 --- /dev/null +++ b/fern/products/server-sdks/pages/reference/typescript/agents/cli/index.mdx @@ -0,0 +1,37 @@ +--- +title: "CLI Tools" +slug: /reference/typescript/agents/cli +description: "Command-line tool for testing agents locally." +max-toc-depth: 3 +--- + +[swaig-test]: /docs/server-sdks/reference/typescript/agents/cli/swaig-test + +The TypeScript Server SDK ships one command-line tool, `swaig-test`, for local +development. It loads an agent file, renders its SWML, lists its SWAIG +functions, and executes a function with arguments you supply, all without +deploying or placing a call. The package's `bin` entry makes it available +through `npx` after installation. + +```bash +npm install @signalwire/sdk +``` + +## Available Tools + +| Command | Purpose | +|---------|---------| +| [`swaig-test`][swaig-test] | Test SWAIG functions and generate SWML output locally | + +## Local Development Workflow + +```bash +# 1. Inspect the generated SWML +npx swaig-test src/agent.ts --dump-swml + +# 2. List available tools +npx swaig-test src/agent.ts --list-tools + +# 3. Test a specific function +npx swaig-test src/agent.ts --exec get_info --arg topic=SignalWire +``` diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/cli/swaig-test.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/cli/swaig-test.mdx new file mode 100644 index 0000000000..7a5ea35d44 --- /dev/null +++ b/fern/products/server-sdks/pages/reference/typescript/agents/cli/swaig-test.mdx @@ -0,0 +1,185 @@ +--- +title: "swaig-test" +slug: /reference/typescript/agents/cli/swaig-test +description: "Test SWAIG functions and generate SWML documents locally without deploying." +max-toc-depth: 3 +--- + +[ref-datamap]: /docs/server-sdks/reference/typescript/agents/data-map + +The `swaig-test` command loads an agent file and lets you render its SWML, list +its SWAIG functions, execute a function, and simulate serverless environments, +all without deploying. It supports both webhook and [DataMap][ref-datamap] +functions. + +```bash +npx swaig-test [options] +``` + + +One action flag is required. A target with no action exits with +`Error: one of --dump-swml, --list-tools, or --exec is required`. The one +exception is `--simulate-serverless`, which renders SWML for the platform on +its own. + + +## Actions + +Choose one action per invocation: + + + List all SWAIG functions registered on the agent, with their parameters. + + + + List all agents exported from the file. Useful for multi-agent files. + + + + Generate and output the full SWML document. Combine with `--raw` for + machine-readable JSON. + + + + Execute a SWAIG function by name. Pass arguments with `--arg key=value`. + + + + Load the agent file and validate the arguments, then exit without running an + action. `--dry-run` is an alias. Accepted anywhere on the command line, + including after `--exec`. + + +## Common Options + + + Output raw JSON only, suppressing all logs. Designed for piping to `jq`. + + + + Enable verbose output with debug information. + + + + Format output as indented JSON. + + + + Name of the agent class to use when the file exports several. + + + + Override the agent's route. + + +## Function Execution Options + + + A function argument. Repeat for each argument. + + + + Override a field in the mock call data using dot-path notation (e.g., + `--override call.state=answered`). Repeatable. + + +## SWML Generation Options + + + Simulated call type: `sip` or `webrtc`. + + + + Simulated call direction: `inbound` or `outbound`. + + + + Simulated call state: `active`, `ringing`, or `hold`. + + + + Override the call ID in the mock data. + + + + Override the caller's number in the mock data. + + + + Override the destination extension in the mock data. + + +## Serverless Simulation + + + Render SWML as the agent would on a serverless platform. Valid values: + `lambda`, `gcf`, `azure`, and `cgi`. Any other value exits with an error + naming the supported set. + + + + Set an environment variable. Repeatable. Applied after `--env-file`. + + + + Load environment variables from a file (one `KEY=VALUE` per line). + + +## Examples + +### List tools and generate SWML + +```bash +# List all registered SWAIG functions +npx swaig-test src/agent.ts --list-tools + +# Generate the SWML document +npx swaig-test src/agent.ts --dump-swml + +# Generate raw JSON for piping +npx swaig-test src/agent.ts --dump-swml --raw | jq '.' + +# Check the file loads without running anything +npx swaig-test src/agent.ts --parse-only +``` + +### Execute functions + +```bash +# Execute with arguments +npx swaig-test src/agent.ts --exec search --arg query="AI agents" --arg limit=5 + +# Execute with verbose debug output and a realistic call state +npx swaig-test src/agent.ts --verbose --exec book_ride \ + --arg pickup="123 Gough Street" \ + --override call.state=answered +``` + +### Multi-agent files + +```bash +# Discover agents in the file +npx swaig-test src/agents.ts --list-agents + +# Target a specific agent by class name +npx swaig-test src/agents.ts --agent-class SalesAgent --list-tools +``` + +### Serverless simulation + +```bash +# AWS Lambda +npx swaig-test src/agent.ts --simulate-serverless lambda + +# Google Cloud Functions, with environment variables +npx swaig-test src/agent.ts --simulate-serverless gcf \ + --env SWML_BASIC_AUTH_USER=user \ + --env-file .env +``` + +## Exit Codes + +| Code | Meaning | +|------|---------| +| `0` | Success | +| `1` | Error (file not found, invalid arguments, execution failure) | diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/overview.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/overview.mdx index 8a24eb923b..78ba7977b4 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/overview.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/overview.mdx @@ -20,14 +20,13 @@ position: 0 [pom-builder]: /docs/server-sdks/reference/typescript/agents/pom-builder [agent-server]: /docs/server-sdks/reference/typescript/agents/agent-server [bedrock-agent]: /docs/server-sdks/reference/typescript/agents/bedrock-agent +[ai-chat-client]: /docs/server-sdks/reference/typescript/agents/ai-chat-client +[parameter-schema]: /docs/server-sdks/reference/typescript/agents/parameter-schema [prefabs]: /docs/server-sdks/reference/typescript/agents/prefabs [skills]: /docs/server-sdks/reference/typescript/agents/skills [cli]: /docs/server-sdks/reference/typescript/agents/cli [configuration]: /docs/server-sdks/reference/typescript/agents/configuration [livewire]: /docs/server-sdks/reference/typescript/agents/livewire -[search]: /docs/server-sdks/reference/typescript/agents/search -[mcp-gateway]: /docs/server-sdks/reference/typescript/agents/mcp-gateway -[web-service]: /docs/server-sdks/reference/typescript/agents/web-service [helpers]: /docs/server-sdks/reference/typescript/agents/helpers [ref-agentbase]: /docs/server-sdks/reference/typescript/agents/agent-base @@ -69,9 +68,9 @@ agent.defineTool({ }, }); -agent.addSkill('datetime'); +await agent.addSkillByName('datetime'); -agent.run(); +await agent.run(); ``` ## Classes @@ -137,6 +136,24 @@ agent.run(); > Host multiple agents on a single Hono process with route-based dispatch. + + Agent backed by the Amazon Bedrock voice-to-voice model. + + + Hold a text conversation with an AI agent from your own server. + + + Fluent builder for typed SWAIG tool parameter schemas. + Built-in skills catalog with 19 pluggable capabilities. + + Test SWAIG functions and render SWML locally with swaig-test. + + Add a property with an explicit JSON Schema `type` (`string`, `number`, + `integer`, `boolean`, `array`, or `object`). `extra` merges additional JSON + Schema keywords such as `enum`, `pattern`, `format`, or `items` into the + property. + + + + Add a `string` property. + + + + Add an `integer` property. + + + + Add a `number` property. + + + + Add a `boolean` property. + + + + Add an `array` property. `items` is the JSON Schema for each element, such as + `{ type: 'string' }`. Omit it for an untyped array. + + + + Add a property constrained to a closed set of values, emitted as `enum` in the + order given. `type` defaults to `string`. + + + + Add a `record_call` format property with `enum: ['wav', 'mp3', 'mp4']`. + + + + Add a `record_call` direction property with `enum: ['speak', 'listen', 'both']`. + + + + Add a `tap` direction property with `enum: ['speak', 'hear', 'both']`. + + + + Add a `tap` codec property with `enum: ['PCMU', 'PCMA']`. + + + + Mark already-added properties as required. Names are recorded in the order + given; duplicates are ignored. + + + + Return the plain `{ type: 'object', properties, required? }` object. `required` + is present only when at least one property was marked required. + + +## **Constants** + +The closed sets behind the typed helpers are exported as `as const` arrays, +each with a matching union type. + + + `['wav', 'mp3', 'mp4']` + + + + `['speak', 'listen', 'both']` + + + + `['speak', 'hear', 'both']` + + + + `['PCMU', 'PCMA']` + + +## **Example** + +```typescript {5-10} +import { AgentBase, FunctionResult, paramSchema } from '@signalwire/sdk'; + +const agent = new AgentBase({ name: 'dispatch', route: '/dispatch' }); + +const params = paramSchema() + .string('pickup', 'Street address for the pickup') + .enum('vehicle', ['sedan', 'van', 'wheelchair'], 'Vehicle type') + .integer('passengers', 'Number of riders') + .required('pickup', 'vehicle') + .build(); + +agent.defineTool({ + name: 'book_ride', + description: 'Book a taxi for the caller', + parameters: params, + handler: async (args) => { + return new FunctionResult(`Booked a ${args.vehicle} to ${args.pickup}.`); + }, +}); +``` From 5d9e386ebc1cee648f53cc02a81e82286c385571 Mon Sep 17 00:00:00 2001 From: August Date: Sun, 6 Sep 2026 03:13:25 +0000 Subject: [PATCH 06/38] docs(server-sdks): add new TypeScript AgentBase and context methods Co-Authored-By: Claude Fable 5.1 --- .../agents/agent-base/add-skill-by-name.mdx | 6 +- .../agents/agent-base/as-router.mdx | 6 +- .../agents/agent-base/handle-request.mdx | 67 +++++++++++++++++++ .../agents/agent-base/has-skill.mdx | 5 +- .../typescript/agents/agent-base/index.mdx | 20 ++++++ .../typescript/agents/agent-base/on-error.mdx | 45 +++++++++++++ .../agents/agent-base/on-summary.mdx | 4 +- .../agent-base/register-routing-callback.mdx | 53 +++++++++++++++ .../agents/agent-base/replace-global-data.mdx | 37 ++++++++++ .../agents/agent-base/set-multilingual.mdx | 50 ++++++++++++++ .../configuration/environment-variables.mdx | 40 ++++++++++- .../agents/configuration/logging.mdx | 7 +- .../agents/context-builder/context/index.mdx | 3 + .../context-builder/context/set-history.mdx | 36 ++++++++++ .../agents/context-builder/step/index.mdx | 3 + .../context-builder/step/set-history.mdx | 48 +++++++++++++ .../agents/function-result/record-call.mdx | 1 + .../agents/swml-builder/add-verb.mdx | 11 ++- .../agents/swml-service/as-router.mdx | 5 +- 19 files changed, 431 insertions(+), 16 deletions(-) create mode 100644 fern/products/server-sdks/pages/reference/typescript/agents/agent-base/handle-request.mdx create mode 100644 fern/products/server-sdks/pages/reference/typescript/agents/agent-base/on-error.mdx create mode 100644 fern/products/server-sdks/pages/reference/typescript/agents/agent-base/register-routing-callback.mdx create mode 100644 fern/products/server-sdks/pages/reference/typescript/agents/agent-base/replace-global-data.mdx create mode 100644 fern/products/server-sdks/pages/reference/typescript/agents/agent-base/set-multilingual.mdx create mode 100644 fern/products/server-sdks/pages/reference/typescript/agents/context-builder/context/set-history.mdx create mode 100644 fern/products/server-sdks/pages/reference/typescript/agents/context-builder/step/set-history.mdx diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/add-skill-by-name.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/add-skill-by-name.mdx index bb5174e748..5bf1048e91 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/add-skill-by-name.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/add-skill-by-name.mdx @@ -14,8 +14,10 @@ Look up a skill class by name in the global ## **Parameters** - - Registered skill name (read from the target class's `SKILL_NAME`). + + Registered skill name (read from the target class's `SKILL_NAME`). The + `SkillName` union lists the 19 built-in names for editor autocompletion; any + other string resolves against skills you registered yourself. diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/as-router.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/as-router.mdx index 9951c2f765..102915ace3 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/as-router.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/as-router.mdx @@ -16,8 +16,10 @@ None. ## **Returns** -`Hono` -- A Hono app with all agent endpoints (SWML delivery, SWAIG function -handling, post-prompt, debug events, health checks, etc.). +`HostAppRouter` -- The agent's Hono app, with all agent endpoints (SWML +delivery, SWAIG function handling, post-prompt, debug events, health checks, +etc.). `HostAppRouter` is a type alias for `Hono`, named for the host-app +mounting contract it fulfills. ## **Example** diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/handle-request.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/handle-request.mdx new file mode 100644 index 0000000000..e97375a662 --- /dev/null +++ b/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/handle-request.mdx @@ -0,0 +1,67 @@ +--- +title: "handleRequest" +slug: /reference/typescript/agents/agent-base/handle-request +description: Dispatch one inbound request from plain HTTP primitives, without a Hono app. +max-toc-depth: 3 +--- + +[as-router]: /docs/server-sdks/reference/typescript/agents/agent-base/as-router +[render-swml]: /docs/server-sdks/reference/typescript/agents/agent-base/render-swml + +Dispatch one inbound request from plain HTTP primitives and get back a +`[status, headers, body]` triple to write to the response. Use it to serve the +agent from a framework the SDK has no adapter for. It performs Basic Auth, +runs any routing callback, applies `onSwmlRequest` modifications, and renders +SWML with [`renderSwml()`][render-swml]. For Hono-based hosts, mount +[`asRouter()`][as-router] instead. + +## **Parameters** + + + HTTP method, such as `"GET"` or `"POST"`. + + + + The full request URL. + + +"} required={true} toc={true}> + Request headers as a plain object. + + + | null"} toc={true}> + The already-parsed JSON body for POST requests. Omit for GET. + + +## **Returns** + +`Promise<[number, Record, string]>` -- The status code, +response headers, and body string. A failed Basic Auth check returns `401` +with a `WWW-Authenticate` header; a routing callback that redirects returns +`307` with a `Location` header. + +## **Example** + +```typescript {8-13} +import { createServer } from 'node:http'; +import { AgentBase } from '@signalwire/sdk'; + +const agent = new AgentBase({ name: 'dispatch', route: '/' }); +agent.setPromptText('You are a taxi dispatcher.'); + +createServer(async (req, res) => { + const chunks: Buffer[] = []; + for await (const chunk of req) chunks.push(chunk as Buffer); + const raw = Buffer.concat(chunks).toString(); + const body = raw ? JSON.parse(raw) : null; + const url = `https://${req.headers.host}${req.url}`; + const [status, headers, text] = await agent.handleRequest( + req.method ?? 'GET', + url, + req.headers as Record, + body, + ); + res.writeHead(status, headers); + res.end(text); +}).listen(3000); +``` diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/has-skill.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/has-skill.mdx index 334b779a81..9e6afcc12e 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/has-skill.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/has-skill.mdx @@ -9,8 +9,9 @@ Check whether a skill with the given name is currently loaded. ## **Parameters** - - Skill name to check. + + Skill name to check. Built-in names autocomplete; any other string is + accepted. ## **Returns** diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/index.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/index.mdx index 557eaf6895..77dd7ef980 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/index.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/index.mdx @@ -177,6 +177,11 @@ const agent = new AgentBase({ Unique identifier for this agent instance. + + The Signing Key used for webhook signature validation, from the constructor + option or `SIGNALWIRE_SIGNING_KEY`. `null` when validation is disabled. + + ## **Static Members** @@ -516,4 +521,19 @@ await agent.run(); Read engine-specific params on an added language. + + Answer in whatever language the caller speaks. + + + Hook that runs when any tool handler throws. + + + Replace the global data object, discarding prior keys. + + + Route requests dynamically from the POST body. + + + Dispatch a request from plain HTTP primitives. + diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/on-error.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/on-error.mdx new file mode 100644 index 0000000000..95c7e6b1a7 --- /dev/null +++ b/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/on-error.mdx @@ -0,0 +1,45 @@ +--- +title: "onError" +slug: /reference/typescript/agents/agent-base/on-error +description: Register an agent-level hook that runs when any SWAIG tool handler throws. +max-toc-depth: 3 +--- + +[ref-agentbase]: /docs/server-sdks/reference/typescript/agents/agent-base +[functionresult]: /docs/server-sdks/reference/typescript/agents/function-result +[define-tool]: /docs/server-sdks/reference/typescript/agents/agent-base/define-tool + +Register an agent-level hook that runs when any SWAIG tool handler throws. Use +it to report the failure to your error tracker and, optionally, to decide what +the caller hears. The error is always contained: a thrown handler never breaks +the live call. + +The hook runs after the tool's own `onError` option, if one was set in +[`defineTool()`][define-tool]. + +## **Parameters** + + + Called with `(error, context)`. Return a [`FunctionResult`][functionresult] + to control the response, or return nothing to fall back to the tool's + `errorMessage` or the default message. Pass `undefined` to clear the hook. + + +## **Returns** + +[`AgentBase`][ref-agentbase] -- Returns `this` for method chaining. + +## **Example** + +```typescript {5-9} +import { AgentBase, FunctionResult } from '@signalwire/sdk'; + +const agent = new AgentBase({ name: 'dispatch', route: '/dispatch' }); + +agent.onError(async (error, context) => { + console.error('tool failed', { tool: context.functionName, error }); + return new FunctionResult( + "I couldn't reach the dispatch system. Let me connect you to an operator.", + ).connect('+15551234567'); +}); +``` diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/on-summary.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/on-summary.mdx index 79ee81b362..7e9a86d359 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/on-summary.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/on-summary.mdx @@ -24,12 +24,12 @@ to receive summaries at an external endpoint. ## **Parameters** - | null"} required={true} toc={true}> + The summary object generated by the AI based on your post-prompt instructions. `null` if no summary could be extracted from the response. -"} required={true} toc={true}> + The complete raw POST data from the post-prompt request, including metadata like `call_id` and the full AI response. diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/register-routing-callback.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/register-routing-callback.mdx new file mode 100644 index 0000000000..e9aefa1c12 --- /dev/null +++ b/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/register-routing-callback.mdx @@ -0,0 +1,53 @@ +--- +title: "registerRoutingCallback" +slug: /reference/typescript/agents/agent-base/register-routing-callback +description: Register a callback for dynamic request routing based on SIP URIs or POST data. +max-toc-depth: 3 +--- + +[enable-sip-routing]: /docs/server-sdks/reference/typescript/agents/agent-base/enable-sip-routing +[extract-sip-username]: /docs/server-sdks/reference/typescript/agents/agent-base/extract-sip-username +[ref-agentbase]: /docs/server-sdks/reference/typescript/agents/agent-base + +Register a callback for dynamic request routing. When a request arrives at +`path`, the callback inspects the POST body and decides whether to redirect the +request to a different route or let normal SWML serving continue. + +This is primarily used for SIP-based routing where the destination depends on +the incoming SIP URI. For routing on agent name alone, use +[`enableSipRouting()`][enable-sip-routing] instead. + +## **Parameters** + + + Receives the parsed request body. Return a route string to redirect the + request there (HTTP 307, preserving the POST body), or return `null` or + `undefined` to serve this agent's own SWML. + + + + HTTP path where the routing endpoint is registered. Normalized to start with + `/`, with trailing slashes stripped. + + +## **Returns** + +[`AgentBase`][ref-agentbase] -- Returns `this` for method chaining. + +## **Example** + +```typescript {6-11} +import { AgentBase } from '@signalwire/sdk'; + +const agent = new AgentBase({ name: 'router', route: '/' }); +agent.setPromptText('You are a helpful assistant.'); + +agent.registerRoutingCallback((body) => { + const username = AgentBase.extractSipUsername(body); + if (username === 'sales') return '/agents/sales'; + if (username === 'support') return '/agents/support'; + return null; +}, '/sip'); + +await agent.run(); +``` diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/replace-global-data.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/replace-global-data.mdx new file mode 100644 index 0000000000..64e322d22c --- /dev/null +++ b/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/replace-global-data.mdx @@ -0,0 +1,37 @@ +--- +title: "replaceGlobalData" +slug: /reference/typescript/agents/agent-base/replace-global-data +description: Replace the entire global data object, discarding every prior key. +max-toc-depth: 3 +--- + +[ref-agentbase]: /docs/server-sdks/reference/typescript/agents/agent-base +[set-global-data]: /docs/server-sdks/reference/typescript/agents/agent-base/set-global-data +[update-global-data]: /docs/server-sdks/reference/typescript/agents/agent-base/update-global-data + +Replace the entire `global_data` object available to the AI, discarding every +prior key. [`setGlobalData()`][set-global-data] and +[`updateGlobalData()`][update-global-data] merge into the existing object; this +method clears it first. A shallow copy of `data` is stored, so later changes to +your object don't leak into the agent. + +## **Parameters** + +"} required={true} toc={true}> + The new global data object. + + +## **Returns** + +[`AgentBase`][ref-agentbase] -- Returns `this` for method chaining. + +## **Example** + +```typescript {6} +import { AgentBase } from '@signalwire/sdk'; + +const agent = new AgentBase({ name: 'dispatch', route: '/dispatch' }); + +agent.setGlobalData({ region: 'bayview', fleet_size: 12 }); +agent.replaceGlobalData({ region: 'mission' }); // fleet_size is gone +``` diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/set-multilingual.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/set-multilingual.mdx new file mode 100644 index 0000000000..a1a89f67d5 --- /dev/null +++ b/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/set-multilingual.mdx @@ -0,0 +1,50 @@ +--- +title: "setMultilingual" +slug: /reference/typescript/agents/agent-base/set-multilingual +description: Configure recognizer-driven multilingual mode, where the agent answers in whatever language the caller speaks. +max-toc-depth: 3 +--- + +[ref-agentbase]: /docs/server-sdks/reference/typescript/agents/agent-base +[set-languages]: /docs/server-sdks/reference/typescript/agents/agent-base/set-languages +[swml-ai-multilingual]: /docs/swml/reference/calling/ai/multilingual + +Configure recognizer-driven multilingual mode. The speech recognizer runs in +code-switching mode and the agent answers in whatever language the caller +actually spoke, rather than the model choosing a language. The config is +emitted as the `multilingual` object on the SWML `ai` verb. + + +Mutually exclusive with [`setLanguages()`][set-languages]. If both are set, the +platform uses `multilingual` and ignores `languages`. + + +## **Parameters** + +"} required={true} toc={true}> + The multilingual configuration object, passed through as-is: `languages` + (required, one entry per language with a `voice`), `allowed`, + `start_language`, `min_switch_words`, and fillers. See the SWML + [`ai.multilingual`][swml-ai-multilingual] reference for every field. + + +## **Returns** + +[`AgentBase`][ref-agentbase] -- Returns `this` for method chaining. + +## **Example** + +```typescript {5-12} +import { AgentBase } from '@signalwire/sdk'; + +const agent = new AgentBase({ name: 'dispatch', route: '/dispatch' }); + +agent.setMultilingual({ + start_language: 'en', + allowed: ['en', 'es'], + languages: [ + { language: 'default', voice: 'elevenlabs.rachel' }, + { language: 'es', voice: 'elevenlabs.maria' }, + ], +}); +``` diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/configuration/environment-variables.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/configuration/environment-variables.mdx index 77e68b2e16..81b31c83b3 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/configuration/environment-variables.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/configuration/environment-variables.mdx @@ -103,6 +103,15 @@ for webhook URL generation. Useful for performance in production when you trust your SWML output. +## Webhook signature validation + + + Your SignalWire Signing Key. When set (or when the `signingKey` constructor + option is passed), the agent validates the signature on every inbound + webhook and rejects unsigned or mis-signed requests with HTTP 403. Treat it + as a secret. + + ## Security @@ -145,7 +154,7 @@ for webhook URL generation. - Log level. + Log level. Case-insensitive; an unrecognized value falls back to `"info"`. - `"debug"` -- verbose output for development and troubleshooting - `"info"` -- standard operational messages @@ -160,6 +169,11 @@ for webhook URL generation. - `"json"` -- structured JSON log lines for log aggregation systems + + Force colored text output on (`"true"`) or off (`"false"`). When unset, color + is enabled only when writing to a terminal. + + ## Skills @@ -187,6 +201,30 @@ These variables are shared between the Relay WebSocket client and the REST HTTP Space hostname used for Relay WebSocket connections and as the REST API base URL. + + Full base URL for REST requests (e.g., `https://your-space.signalwire.com`). + Takes precedence over `SIGNALWIRE_SPACE`; the `host` constructor option + takes precedence over both. + + + + Path to a PEM file of additional CA certificates trusted for REST + connections. Adds trust; it never disables certificate verification. + + + + Override the Relay WebSocket host. Defaults to `relay.signalwire.com`. + + + + WebSocket scheme for the Relay connection, `wss` or `ws`. + + + + Path to a PEM file of additional CA certificates trusted for the Relay + WebSocket connection. Adds trust; it never disables certificate verification. + + Maximum concurrent calls per [`RelayClient`][ref-relayclient] instance. diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/configuration/logging.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/configuration/logging.mdx index 271fe7f0d3..0c86a0c4c3 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/configuration/logging.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/configuration/logging.mdx @@ -236,7 +236,8 @@ None. ## **Returns** -`[string, 'off' | 'stderr' | 'default']` -- A tuple of `[environment_name, derived_log_mode]`. +`string` -- The detected environment name. The SDK derives the log mode from +it internally. | Environment | Detection | Log Mode | |-------------|-----------|----------| @@ -251,6 +252,6 @@ None. ```typescript {3} import { getExecutionMode } from '@signalwire/sdk'; -const [env, mode] = getExecutionMode(); -console.log(`Running in ${env} environment (log mode: ${mode})`); +const env = getExecutionMode(); +console.log(`Running in ${env} environment`); ``` diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/context-builder/context/index.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/context-builder/context/index.mdx index dc523e6a7c..d12d67ce55 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/context-builder/context/index.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/context-builder/context/index.mdx @@ -87,6 +87,9 @@ You obtain a Context by calling `addContext()` on a ContextBuilder or by calling Set all exit fillers at once. + + Set the default history visibility mode for every step. + Set whether to fully reset conversation history when entering this context. diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/context-builder/context/set-history.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/context-builder/context/set-history.mdx new file mode 100644 index 0000000000..5fa53b2a41 --- /dev/null +++ b/fern/products/server-sdks/pages/reference/typescript/agents/context-builder/context/set-history.mdx @@ -0,0 +1,36 @@ +--- +title: "setHistory" +slug: /reference/typescript/agents/context-builder/context/set-history +description: Set the default history visibility mode for every step in this context. +max-toc-depth: 3 +--- + +[ref-context]: /docs/server-sdks/reference/typescript/agents/context-builder/context +[step-set-history]: /docs/server-sdks/reference/typescript/agents/context-builder/step/set-history + +Set the default history visibility mode for every step in this context. A +step's own [`setHistory()`][step-set-history] overrides it. See that page for +what each mode does. + +## **Parameters** + + + History visibility mode: `"keep"`, `"default"`, or `"hide"`. + + +## **Returns** + +[`Context`][ref-context] -- Self for method chaining. Throws an `Error` if +`history` is not one of the three modes. + +## **Example** + +```typescript {5} +import { ContextBuilder } from '@signalwire/sdk'; + +const builder = new ContextBuilder(); +const ctx = builder.addContext('billing'); +ctx.setHistory('keep'); +ctx.addStep('verify').setText('Verify the account holder.'); +ctx.addStep('dispute').setText('Take the details of the disputed charge.'); +``` diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/context-builder/step/index.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/context-builder/step/index.mdx index 88845a281b..2af3c9adee 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/context-builder/step/index.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/context-builder/step/index.mdx @@ -59,6 +59,9 @@ return `this` for fluent method chaining. Set which SWAIG functions are available during this step. + + Control how much prior conversation the model sees at this step. + Enable structured info gathering for this step. diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/context-builder/step/set-history.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/context-builder/step/set-history.mdx new file mode 100644 index 0000000000..6cd45df047 --- /dev/null +++ b/fern/products/server-sdks/pages/reference/typescript/agents/context-builder/step/set-history.mdx @@ -0,0 +1,48 @@ +--- +title: "setHistory" +slug: /reference/typescript/agents/context-builder/step/set-history +description: Control how much of the prior conversation the model sees when this step begins. +max-toc-depth: 3 +--- + +[ref-step]: /docs/server-sdks/reference/typescript/agents/context-builder/step +[context-set-history]: /docs/server-sdks/reference/typescript/agents/context-builder/context/set-history + +Control how much of the prior conversation the model sees when this step +begins. The setting applies to everything that came before the step; the step's +own turns accumulate normally, and nothing is deleted from the call log. +Overrides the context-level default set with +[`Context.setHistory()`][context-set-history]. + +## **Parameters** + + + History visibility mode. + + - `"keep"` -- clear nothing. Every prior step's instructions and dialogue stay + visible to the model. + - `"default"` -- hide the prior steps' instructions but keep the user and + assistant dialogue. This is the behavior when unset. + - `"hide"` -- hide the prior instructions and pull the prior dialogue out of the + model's context. Reference `${step_history.*}` in this step's text to bring + back exactly what you need. + + +## **Returns** + +[`Step`][ref-step] -- Self for method chaining. Throws an `Error` if `history` is +not one of the three modes. + +## **Example** + +```typescript {8} +import { ContextBuilder } from '@signalwire/sdk'; + +const builder = new ContextBuilder(); +const ctx = builder.addContext('default'); + +ctx.addStep('collect_pickup').setText('Ask for the pickup address.'); +ctx.addStep('confirm_fare') + .setHistory('hide') + .setText('Quote the fare for the pickup at ${step_history.collect_pickup} and confirm.'); +``` diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/function-result/record-call.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/function-result/record-call.mdx index 1656070156..45decf813f 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/function-result/record-call.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/function-result/record-call.mdx @@ -38,6 +38,7 @@ silence. Use [`stopRecordCall()`][stop-record-call] to end continuous recordings - `"wav"` -- uncompressed WAV audio - `"mp3"` -- compressed MP3 audio + - `"mp4"` -- MP4 container diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/add-verb.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/add-verb.mdx index 481a6bb98f..74ccb189ca 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/add-verb.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/add-verb.mdx @@ -8,6 +8,13 @@ max-toc-depth: 3 Append a verb to the `main` section of the SWML document. Validates the verb config against the bundled schema when validation is enabled. + +Validation is strict. An unknown verb name, an unknown or misspelled key inside +the verb config, or a value of the wrong type throws a `SchemaValidationError` +instead of being dropped silently. Set `SWML_SKIP_SCHEMA_VALIDATION=true` to +disable validation. + + ## **Parameters** @@ -21,8 +28,8 @@ against the bundled schema when validation is enabled. ## **Returns** -`void` -- Throws an `Error` if the verb fails schema validation (when validation -is enabled and the verb is defined in the schema). +`void` -- Throws a `SchemaValidationError` if the verb fails schema validation +(when validation is enabled). ## **Example** diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/swml-service/as-router.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/swml-service/as-router.mdx index 9c1ace64f3..547567e906 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/swml-service/as-router.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/swml-service/as-router.mdx @@ -27,8 +27,9 @@ instance via [`AgentServer`][ref-agentserver]. ## **Returns** -`Hono` -- the configured Hono app with all routes registered (SWML document -endpoint plus any routing-callback paths). +`HostAppRouter` -- the configured Hono app with all routes registered (SWML +document endpoint plus any routing-callback paths). `HostAppRouter` is a type +alias for `Hono`. ## **Example** From c77276e9c6b23c8360b6505f54263d17e615b42b Mon Sep 17 00:00:00 2001 From: August Date: Sun, 6 Sep 2026 03:13:25 +0000 Subject: [PATCH 07/38] docs(server-sdks): add TypeScript Relay call helpers and typed states Co-Authored-By: Claude Fable 5.1 --- .../typescript/core/security/validate.mdx | 77 +++++++++++++++++ .../typescript/relay/call/connect.mdx | 6 +- .../relay/call/detect-answering-machine.mdx | 86 +++++++++++++++++++ .../typescript/relay/call/detect-digit.mdx | 65 ++++++++++++++ .../typescript/relay/call/detect-fax.mdx | 65 ++++++++++++++ .../reference/typescript/relay/call/index.mdx | 40 +++++++++ .../typescript/relay/call/play-audio.mdx | 64 ++++++++++++++ .../typescript/relay/call/play-ringtone.mdx | 67 +++++++++++++++ .../typescript/relay/call/play-silence.mdx | 60 +++++++++++++ .../typescript/relay/call/play-tts.mdx | 76 ++++++++++++++++ .../typescript/relay/call/prompt-audio.mdx | 72 ++++++++++++++++ .../typescript/relay/call/prompt-tts.mdx | 85 ++++++++++++++++++ .../relay/call/wait-for-answered.mdx | 50 +++++++++++ .../typescript/relay/call/wait-for-ending.mdx | 50 +++++++++++ .../relay/call/wait-for-ringing.mdx | 50 +++++++++++ .../typescript/relay/client/dial.mdx | 6 +- .../reference/typescript/relay/constants.mdx | 25 ++++++ 17 files changed, 941 insertions(+), 3 deletions(-) create mode 100644 fern/products/server-sdks/pages/reference/typescript/core/security/validate.mdx create mode 100644 fern/products/server-sdks/pages/reference/typescript/relay/call/detect-answering-machine.mdx create mode 100644 fern/products/server-sdks/pages/reference/typescript/relay/call/detect-digit.mdx create mode 100644 fern/products/server-sdks/pages/reference/typescript/relay/call/detect-fax.mdx create mode 100644 fern/products/server-sdks/pages/reference/typescript/relay/call/play-audio.mdx create mode 100644 fern/products/server-sdks/pages/reference/typescript/relay/call/play-ringtone.mdx create mode 100644 fern/products/server-sdks/pages/reference/typescript/relay/call/play-silence.mdx create mode 100644 fern/products/server-sdks/pages/reference/typescript/relay/call/play-tts.mdx create mode 100644 fern/products/server-sdks/pages/reference/typescript/relay/call/prompt-audio.mdx create mode 100644 fern/products/server-sdks/pages/reference/typescript/relay/call/prompt-tts.mdx create mode 100644 fern/products/server-sdks/pages/reference/typescript/relay/call/wait-for-answered.mdx create mode 100644 fern/products/server-sdks/pages/reference/typescript/relay/call/wait-for-ending.mdx create mode 100644 fern/products/server-sdks/pages/reference/typescript/relay/call/wait-for-ringing.mdx diff --git a/fern/products/server-sdks/pages/reference/typescript/core/security/validate.mdx b/fern/products/server-sdks/pages/reference/typescript/core/security/validate.mdx new file mode 100644 index 0000000000..625b5705f6 --- /dev/null +++ b/fern/products/server-sdks/pages/reference/typescript/core/security/validate.mdx @@ -0,0 +1,77 @@ +--- +title: "validate" +slug: /reference/typescript/core/security/validate +description: "Framework-free webhook validation that returns a rejection triple or null." +max-toc-depth: 3 +--- + +[validate-webhook-signature]: /docs/server-sdks/reference/typescript/core/security/validate-webhook-signature +[webhook-validation-middleware]: /docs/server-sdks/reference/typescript/core/security/webhook-validation-middleware + +Decide whether an inbound webhook is authentic from plain request primitives, +with no framework request or response objects. Returns `null` to let the +request through, or a `[status, headers, body]` triple to write back verbatim. +[`webhookValidationMiddleware()`][webhook-validation-middleware] is a thin Hono +wrapper over this function; use `validate()` directly from any other server. + +```typescript {1} +validate(method: string, url: string, headers: Record, body: string, signingKey: string): WebhookRejection | null +``` + +## **Parameters** + + + The HTTP method. Informational; the signature does not cover it. + + + + The full public URL SignalWire POSTed to, including scheme, host, path, and + query. Reconstruct it behind a proxy or tunnel before calling. + + +"} required={true} toc={true}> + Request headers. The signature header is looked up case-insensitively under + `X-SignalWire-Signature`, or the legacy `X-Twilio-Signature` alias. + + + + The raw request body as a string, before any JSON or form parsing. + + + + Your SignalWire Signing Key. An empty or non-string value throws an `Error`. + + +## **Returns** + +`WebhookRejection | null` -- `null` when the signature is valid. Otherwise a +`[403, {}, 'Forbidden']` triple, whether the header is missing, empty, or +wrong. The body never says which check failed. + +## **Example** + +```typescript {8-13} +import { createServer } from 'node:http'; +import { validate } from '@signalwire/sdk'; + +createServer(async (req, res) => { + const chunks: Buffer[] = []; + for await (const chunk of req) chunks.push(chunk as Buffer); + const body = Buffer.concat(chunks).toString(); + const rejection = validate( + req.method ?? 'POST', + `https://${req.headers.host}${req.url}`, + req.headers as Record, + body, + process.env.SIGNALWIRE_SIGNING_KEY!, + ); + if (rejection) { + const [status, headers, text] = rejection; + res.writeHead(status, headers); + res.end(text); + return; + } + // handle the authentic webhook + res.end('ok'); +}).listen(3000); +``` diff --git a/fern/products/server-sdks/pages/reference/typescript/relay/call/connect.mdx b/fern/products/server-sdks/pages/reference/typescript/relay/call/connect.mdx index 6efe2f9a8f..5fbd72d397 100644 --- a/fern/products/server-sdks/pages/reference/typescript/relay/call/connect.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/relay/call/connect.mdx @@ -32,8 +32,10 @@ This method corresponds to the SWML [`connect`][connect] verb. See the (all devices in the group ring simultaneously). Each device object contains: - - `"type"` -- Device type (`"phone"`, `"sip"`) - - `"params"` -- Type-specific parameters (`to_number`, `from_number`, etc.) + - `"type"` -- Device type (`"phone"`, `"sip"`, or `"fabric"` for a resource + address) + - `"params"` -- Type-specific parameters (`to_number` and `from_number` for + phone; `to`, optional `from`, and `timeout` for fabric) [] | undefined"} toc={true}> diff --git a/fern/products/server-sdks/pages/reference/typescript/relay/call/detect-answering-machine.mdx b/fern/products/server-sdks/pages/reference/typescript/relay/call/detect-answering-machine.mdx new file mode 100644 index 0000000000..c87370989d --- /dev/null +++ b/fern/products/server-sdks/pages/reference/typescript/relay/call/detect-answering-machine.mdx @@ -0,0 +1,86 @@ +--- +title: "detectAnsweringMachine" +slug: /reference/typescript/relay/call/detect-answering-machine +description: "Detect whether a human or an answering machine picked up." +max-toc-depth: 3 +--- + +[playaction]: /docs/server-sdks/reference/typescript/relay/actions +[collectaction]: /docs/server-sdks/reference/typescript/relay/actions +[detectaction]: /docs/server-sdks/reference/typescript/relay/actions +[relayevent]: /docs/server-sdks/reference/typescript/relay/events +[play]: /docs/server-sdks/reference/typescript/relay/call/play +[play-and-collect]: /docs/server-sdks/reference/typescript/relay/call/play-and-collect +[detect]: /docs/server-sdks/reference/typescript/relay/call/detect +[wait-for]: /docs/server-sdks/reference/typescript/relay/call/wait-for + +Detect whether a human or an answering machine picked up. A typed convenience +over [`detect()`][detect] with the `machine` detector. + +## **Parameters** + + + Detector options. Each maps to the matching snake_case field of the SWML + `machine` detector. + + + + + + Seconds to wait for initial voice before deciding. + + + + Seconds of silence that end the greeting. + + + + Seconds of continuous voice that indicate a machine. + + + + Word count that indicates a machine. + + + + Report interruptions during the greeting. + + + + Keep detecting until the machine's greeting ends, so you can leave a message. + + + + Maximum seconds to run the detector before stopping. + + + + Callback invoked when the operation reaches a terminal state. + + + + +## **Returns** + +`Promise<`[`DetectAction`][detectaction]`>` -- An action handle with `stop()` and `wait()` methods. It resolves on the first detection result. + +## **Example** + +```typescript {11} +import { RelayClient } from '@signalwire/sdk'; + +const client = new RelayClient({ + project: process.env.SIGNALWIRE_PROJECT_ID!, + token: process.env.SIGNALWIRE_API_TOKEN!, + contexts: ['default'] +}); + +client.onCall(async (call) => { + await call.answer(); + const action = await call.detectAnsweringMachine({ detectMessageEnd: true, timeout: 30 }); + const event = await action.wait(); + console.log(event.params); +}); + +await client.run(); +``` diff --git a/fern/products/server-sdks/pages/reference/typescript/relay/call/detect-digit.mdx b/fern/products/server-sdks/pages/reference/typescript/relay/call/detect-digit.mdx new file mode 100644 index 0000000000..2ea39eeea4 --- /dev/null +++ b/fern/products/server-sdks/pages/reference/typescript/relay/call/detect-digit.mdx @@ -0,0 +1,65 @@ +--- +title: "detectDigit" +slug: /reference/typescript/relay/call/detect-digit +description: "Detect DTMF digits on a call." +max-toc-depth: 3 +--- + +[playaction]: /docs/server-sdks/reference/typescript/relay/actions +[collectaction]: /docs/server-sdks/reference/typescript/relay/actions +[detectaction]: /docs/server-sdks/reference/typescript/relay/actions +[relayevent]: /docs/server-sdks/reference/typescript/relay/events +[play]: /docs/server-sdks/reference/typescript/relay/call/play +[play-and-collect]: /docs/server-sdks/reference/typescript/relay/call/play-and-collect +[detect]: /docs/server-sdks/reference/typescript/relay/call/detect +[wait-for]: /docs/server-sdks/reference/typescript/relay/call/wait-for + +Detect DTMF digits on the call. A typed convenience over [`detect()`][detect] +with the `digit` detector. + +## **Parameters** + + + Detector options. + + + + + + The digits to listen for, such as `"0123456789#*"`. + + + + Maximum seconds to run the detector before stopping. + + + + Callback invoked when the operation reaches a terminal state. + + + + +## **Returns** + +`Promise<`[`DetectAction`][detectaction]`>` -- An action handle with `stop()` and `wait()` methods. It resolves on the first detection result. + +## **Example** + +```typescript {11} +import { RelayClient } from '@signalwire/sdk'; + +const client = new RelayClient({ + project: process.env.SIGNALWIRE_PROJECT_ID!, + token: process.env.SIGNALWIRE_API_TOKEN!, + contexts: ['default'] +}); + +client.onCall(async (call) => { + await call.answer(); + const action = await call.detectDigit({ digits: '0#', timeout: 15 }); + const event = await action.wait(); + console.log(event.params); +}); + +await client.run(); +``` diff --git a/fern/products/server-sdks/pages/reference/typescript/relay/call/detect-fax.mdx b/fern/products/server-sdks/pages/reference/typescript/relay/call/detect-fax.mdx new file mode 100644 index 0000000000..6650c86ea9 --- /dev/null +++ b/fern/products/server-sdks/pages/reference/typescript/relay/call/detect-fax.mdx @@ -0,0 +1,65 @@ +--- +title: "detectFax" +slug: /reference/typescript/relay/call/detect-fax +description: "Detect a fax tone on a call." +max-toc-depth: 3 +--- + +[playaction]: /docs/server-sdks/reference/typescript/relay/actions +[collectaction]: /docs/server-sdks/reference/typescript/relay/actions +[detectaction]: /docs/server-sdks/reference/typescript/relay/actions +[relayevent]: /docs/server-sdks/reference/typescript/relay/events +[play]: /docs/server-sdks/reference/typescript/relay/call/play +[play-and-collect]: /docs/server-sdks/reference/typescript/relay/call/play-and-collect +[detect]: /docs/server-sdks/reference/typescript/relay/call/detect +[wait-for]: /docs/server-sdks/reference/typescript/relay/call/wait-for + +Detect a fax tone on the call. A typed convenience over [`detect()`][detect] +with the `fax` detector. + +## **Parameters** + + + Detector options. + + + + + + `"CED"` (called station) or `"CNG"` (calling station). + + + + Maximum seconds to run the detector before stopping. + + + + Callback invoked when the operation reaches a terminal state. + + + + +## **Returns** + +`Promise<`[`DetectAction`][detectaction]`>` -- An action handle with `stop()` and `wait()` methods. It resolves on the first detection result. + +## **Example** + +```typescript {11} +import { RelayClient } from '@signalwire/sdk'; + +const client = new RelayClient({ + project: process.env.SIGNALWIRE_PROJECT_ID!, + token: process.env.SIGNALWIRE_API_TOKEN!, + contexts: ['default'] +}); + +client.onCall(async (call) => { + await call.answer(); + const action = await call.detectFax({ tone: 'CED', timeout: 20 }); + const event = await action.wait(); + console.log(event.params); +}); + +await client.run(); +``` diff --git a/fern/products/server-sdks/pages/reference/typescript/relay/call/index.mdx b/fern/products/server-sdks/pages/reference/typescript/relay/call/index.mdx index 75178eb248..6472b6fa49 100644 --- a/fern/products/server-sdks/pages/reference/typescript/relay/call/index.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/relay/call/index.mdx @@ -110,6 +110,10 @@ objects that let you stop, pause, or wait for the operation to complete. Call segment identifier for tracking call legs. + + `true` once the call has reached the `ended` state. + + ## **Methods** @@ -122,6 +126,15 @@ objects that let you stop, pause, or wait for the operation to complete. Wait for a call to reach the ended state. + + Wait for a call to be answered. + + + Wait for a call to start ringing. + + + Wait for a call to start ending. + Answer an inbound Relay call. @@ -149,18 +162,45 @@ objects that let you stop, pause, or wait for the operation to complete. Play audio content on a call. + + Play text-to-speech. + + + Play an audio file from a URL. + + + Play silence for a number of seconds. + + + Play a named ringtone. + Record audio from a call. Play audio and collect DTMF or speech input. + + Speak a prompt, then collect input. + + + Play an audio prompt, then collect input. + Collect DTMF or speech input without playing media. Detect answering machines, fax tones, or digits on a call. + + Detect whether a human or a machine picked up. + + + Detect DTMF digits. + + + Detect a fax tone. + Start an AI agent session on a call. diff --git a/fern/products/server-sdks/pages/reference/typescript/relay/call/play-audio.mdx b/fern/products/server-sdks/pages/reference/typescript/relay/call/play-audio.mdx new file mode 100644 index 0000000000..0adeacb892 --- /dev/null +++ b/fern/products/server-sdks/pages/reference/typescript/relay/call/play-audio.mdx @@ -0,0 +1,64 @@ +--- +title: "playAudio" +slug: /reference/typescript/relay/call/play-audio +description: "Play an audio file from a URL on a call." +max-toc-depth: 3 +--- + +[playaction]: /docs/server-sdks/reference/typescript/relay/actions +[collectaction]: /docs/server-sdks/reference/typescript/relay/actions +[detectaction]: /docs/server-sdks/reference/typescript/relay/actions +[relayevent]: /docs/server-sdks/reference/typescript/relay/events +[play]: /docs/server-sdks/reference/typescript/relay/call/play +[play-and-collect]: /docs/server-sdks/reference/typescript/relay/call/play-and-collect +[detect]: /docs/server-sdks/reference/typescript/relay/call/detect +[wait-for]: /docs/server-sdks/reference/typescript/relay/call/wait-for + +Play an audio file from a URL on the call. A typed convenience over +[`play()`][play]. + +## **Parameters** + + + URL of the audio file. + + + + Playback options. + + + + + + Volume adjustment in dB, from `-40` to `40`. + + + + Callback invoked when the operation reaches a terminal state. + + + + +## **Returns** + +`Promise<`[`PlayAction`][playaction]`>` -- An action handle with `stop()`, `pause()`, `resume()`, `volume()`, and `wait()` methods. + +## **Example** + +```typescript {11} +import { RelayClient } from '@signalwire/sdk'; + +const client = new RelayClient({ + project: process.env.SIGNALWIRE_PROJECT_ID!, + token: process.env.SIGNALWIRE_API_TOKEN!, + contexts: ['default'] +}); + +client.onCall(async (call) => { + await call.answer(); + const action = await call.playAudio('https://example.com/hold-music.mp3', { volume: -6 }); + await action.wait(); +}); + +await client.run(); +``` diff --git a/fern/products/server-sdks/pages/reference/typescript/relay/call/play-ringtone.mdx b/fern/products/server-sdks/pages/reference/typescript/relay/call/play-ringtone.mdx new file mode 100644 index 0000000000..efeac90024 --- /dev/null +++ b/fern/products/server-sdks/pages/reference/typescript/relay/call/play-ringtone.mdx @@ -0,0 +1,67 @@ +--- +title: "playRingtone" +slug: /reference/typescript/relay/call/play-ringtone +description: "Play a named ringtone on a call." +max-toc-depth: 3 +--- + +[playaction]: /docs/server-sdks/reference/typescript/relay/actions +[collectaction]: /docs/server-sdks/reference/typescript/relay/actions +[detectaction]: /docs/server-sdks/reference/typescript/relay/actions +[relayevent]: /docs/server-sdks/reference/typescript/relay/events +[play]: /docs/server-sdks/reference/typescript/relay/call/play +[play-and-collect]: /docs/server-sdks/reference/typescript/relay/call/play-and-collect +[detect]: /docs/server-sdks/reference/typescript/relay/call/detect +[wait-for]: /docs/server-sdks/reference/typescript/relay/call/wait-for + +Play a named ringtone on the call. A typed convenience over [`play()`][play]. + +## **Parameters** + + + Ringtone name, a country code such as `"us"` or `"uk"`. + + + + Playback options. + + + + + + Seconds to play the ringtone. + + + + Volume adjustment in dB, from `-40` to `40`. + + + + Callback invoked when the operation reaches a terminal state. + + + + +## **Returns** + +`Promise<`[`PlayAction`][playaction]`>` -- An action handle with `stop()`, `pause()`, `resume()`, `volume()`, and `wait()` methods. + +## **Example** + +```typescript {11} +import { RelayClient } from '@signalwire/sdk'; + +const client = new RelayClient({ + project: process.env.SIGNALWIRE_PROJECT_ID!, + token: process.env.SIGNALWIRE_API_TOKEN!, + contexts: ['default'] +}); + +client.onCall(async (call) => { + await call.answer(); + const action = await call.playRingtone('us', { duration: 10 }); + await action.wait(); +}); + +await client.run(); +``` diff --git a/fern/products/server-sdks/pages/reference/typescript/relay/call/play-silence.mdx b/fern/products/server-sdks/pages/reference/typescript/relay/call/play-silence.mdx new file mode 100644 index 0000000000..911e986230 --- /dev/null +++ b/fern/products/server-sdks/pages/reference/typescript/relay/call/play-silence.mdx @@ -0,0 +1,60 @@ +--- +title: "playSilence" +slug: /reference/typescript/relay/call/play-silence +description: "Play silence on a call for a number of seconds." +max-toc-depth: 3 +--- + +[playaction]: /docs/server-sdks/reference/typescript/relay/actions +[collectaction]: /docs/server-sdks/reference/typescript/relay/actions +[detectaction]: /docs/server-sdks/reference/typescript/relay/actions +[relayevent]: /docs/server-sdks/reference/typescript/relay/events +[play]: /docs/server-sdks/reference/typescript/relay/call/play +[play-and-collect]: /docs/server-sdks/reference/typescript/relay/call/play-and-collect +[detect]: /docs/server-sdks/reference/typescript/relay/call/detect +[wait-for]: /docs/server-sdks/reference/typescript/relay/call/wait-for + +Play silence on the call for `duration` seconds. A typed convenience over +[`play()`][play]. + +## **Parameters** + + + Seconds of silence. + + + + Playback options. + + + + + + Callback invoked when the operation reaches a terminal state. + + + + +## **Returns** + +`Promise<`[`PlayAction`][playaction]`>` -- An action handle with `stop()`, `pause()`, `resume()`, `volume()`, and `wait()` methods. + +## **Example** + +```typescript {12} +import { RelayClient } from '@signalwire/sdk'; + +const client = new RelayClient({ + project: process.env.SIGNALWIRE_PROJECT_ID!, + token: process.env.SIGNALWIRE_API_TOKEN!, + contexts: ['default'] +}); + +client.onCall(async (call) => { + await call.answer(); + await (await call.playTTS('One moment.')).wait(); + await (await call.playSilence(2)).wait(); +}); + +await client.run(); +``` diff --git a/fern/products/server-sdks/pages/reference/typescript/relay/call/play-tts.mdx b/fern/products/server-sdks/pages/reference/typescript/relay/call/play-tts.mdx new file mode 100644 index 0000000000..ddc770d95a --- /dev/null +++ b/fern/products/server-sdks/pages/reference/typescript/relay/call/play-tts.mdx @@ -0,0 +1,76 @@ +--- +title: "playTTS" +slug: /reference/typescript/relay/call/play-tts +description: "Play text-to-speech on a call." +max-toc-depth: 3 +--- + +[playaction]: /docs/server-sdks/reference/typescript/relay/actions +[collectaction]: /docs/server-sdks/reference/typescript/relay/actions +[detectaction]: /docs/server-sdks/reference/typescript/relay/actions +[relayevent]: /docs/server-sdks/reference/typescript/relay/events +[play]: /docs/server-sdks/reference/typescript/relay/call/play +[play-and-collect]: /docs/server-sdks/reference/typescript/relay/call/play-and-collect +[detect]: /docs/server-sdks/reference/typescript/relay/call/detect +[wait-for]: /docs/server-sdks/reference/typescript/relay/call/wait-for + +Play text-to-speech on the call. A typed convenience over [`play()`][play] that +builds the TTS media item for you. + +## **Parameters** + + + The text to speak. + + + + Voice and playback options. + + + + + + Language code for the voice, such as `"en-US"`. + + + + `"male"` or `"female"`. + + + + Voice identifier for the TTS engine. + + + + Volume adjustment in dB, from `-40` to `40`. + + + + Callback invoked when the operation reaches a terminal state. + + + + +## **Returns** + +`Promise<`[`PlayAction`][playaction]`>` -- An action handle with `stop()`, `pause()`, `resume()`, `volume()`, and `wait()` methods. + +## **Example** + +```typescript {11} +import { RelayClient } from '@signalwire/sdk'; + +const client = new RelayClient({ + project: process.env.SIGNALWIRE_PROJECT_ID!, + token: process.env.SIGNALWIRE_API_TOKEN!, + contexts: ['default'] +}); + +client.onCall(async (call) => { + await call.answer(); + const action = await call.playTTS('Welcome to Bayview Taxi.', { language: 'en-US' }); + await action.wait(); +}); + +await client.run(); +``` diff --git a/fern/products/server-sdks/pages/reference/typescript/relay/call/prompt-audio.mdx b/fern/products/server-sdks/pages/reference/typescript/relay/call/prompt-audio.mdx new file mode 100644 index 0000000000..6524557b07 --- /dev/null +++ b/fern/products/server-sdks/pages/reference/typescript/relay/call/prompt-audio.mdx @@ -0,0 +1,72 @@ +--- +title: "promptAudio" +slug: /reference/typescript/relay/call/prompt-audio +description: "Play an audio prompt, then collect DTMF or speech input." +max-toc-depth: 3 +--- + +[playaction]: /docs/server-sdks/reference/typescript/relay/actions +[collectaction]: /docs/server-sdks/reference/typescript/relay/actions +[detectaction]: /docs/server-sdks/reference/typescript/relay/actions +[relayevent]: /docs/server-sdks/reference/typescript/relay/events +[play]: /docs/server-sdks/reference/typescript/relay/call/play +[play-and-collect]: /docs/server-sdks/reference/typescript/relay/call/play-and-collect +[detect]: /docs/server-sdks/reference/typescript/relay/call/detect +[wait-for]: /docs/server-sdks/reference/typescript/relay/call/wait-for + +Play an audio file as the prompt, then collect DTMF or speech input. A typed +convenience over [`playAndCollect()`][play-and-collect]. + +## **Parameters** + + + URL of the audio file to play as the prompt. + + + + Input collection configuration: `digits`, `speech`, `initial_timeout`, and + the other fields accepted by [`playAndCollect()`][play-and-collect]. + + + + Playback options. + + + + + + Volume adjustment in dB, from `-40` to `40`. + + + + Callback invoked when the operation reaches a terminal state. + + + + +## **Returns** + +`Promise<`[`CollectAction`][collectaction]`>` -- An action handle with `stop()`, `startInputTimers()`, and `wait()` methods. + +## **Example** + +```typescript {11-14} +import { RelayClient } from '@signalwire/sdk'; + +const client = new RelayClient({ + project: process.env.SIGNALWIRE_PROJECT_ID!, + token: process.env.SIGNALWIRE_API_TOKEN!, + contexts: ['default'] +}); + +client.onCall(async (call) => { + await call.answer(); + const action = await call.promptAudio( + 'https://example.com/menu.mp3', + { digits: { max: 1 } }, + ); + await action.wait(); +}); + +await client.run(); +``` diff --git a/fern/products/server-sdks/pages/reference/typescript/relay/call/prompt-tts.mdx b/fern/products/server-sdks/pages/reference/typescript/relay/call/prompt-tts.mdx new file mode 100644 index 0000000000..9039a2521c --- /dev/null +++ b/fern/products/server-sdks/pages/reference/typescript/relay/call/prompt-tts.mdx @@ -0,0 +1,85 @@ +--- +title: "promptTTS" +slug: /reference/typescript/relay/call/prompt-tts +description: "Speak a prompt, then collect DTMF or speech input." +max-toc-depth: 3 +--- + +[playaction]: /docs/server-sdks/reference/typescript/relay/actions +[collectaction]: /docs/server-sdks/reference/typescript/relay/actions +[detectaction]: /docs/server-sdks/reference/typescript/relay/actions +[relayevent]: /docs/server-sdks/reference/typescript/relay/events +[play]: /docs/server-sdks/reference/typescript/relay/call/play +[play-and-collect]: /docs/server-sdks/reference/typescript/relay/call/play-and-collect +[detect]: /docs/server-sdks/reference/typescript/relay/call/detect +[wait-for]: /docs/server-sdks/reference/typescript/relay/call/wait-for + +Speak a text-to-speech prompt, then collect DTMF or speech input. A typed +convenience over [`playAndCollect()`][play-and-collect]. + +## **Parameters** + + + The prompt to speak. + + + + Input collection configuration: `digits`, `speech`, `initial_timeout`, and + the other fields accepted by [`playAndCollect()`][play-and-collect]. + + + + Voice and playback options. + + + + + + Language code for the voice, such as `"en-US"`. + + + + `"male"` or `"female"`. + + + + Voice identifier for the TTS engine. + + + + Volume adjustment in dB, from `-40` to `40`. + + + + Callback invoked when the operation reaches a terminal state. + + + + +## **Returns** + +`Promise<`[`CollectAction`][collectaction]`>` -- An action handle with `stop()`, `startInputTimers()`, and `wait()` methods. + +## **Example** + +```typescript {11-14} +import { RelayClient } from '@signalwire/sdk'; + +const client = new RelayClient({ + project: process.env.SIGNALWIRE_PROJECT_ID!, + token: process.env.SIGNALWIRE_API_TOKEN!, + contexts: ['default'] +}); + +client.onCall(async (call) => { + await call.answer(); + const action = await call.promptTTS( + 'Enter your four digit PIN.', + { digits: { max: 4, terminators: '#' } }, + ); + const event = await action.wait(); + console.log(event.params); +}); + +await client.run(); +``` diff --git a/fern/products/server-sdks/pages/reference/typescript/relay/call/wait-for-answered.mdx b/fern/products/server-sdks/pages/reference/typescript/relay/call/wait-for-answered.mdx new file mode 100644 index 0000000000..075099f2c6 --- /dev/null +++ b/fern/products/server-sdks/pages/reference/typescript/relay/call/wait-for-answered.mdx @@ -0,0 +1,50 @@ +--- +title: "waitForAnswered" +slug: /reference/typescript/relay/call/wait-for-answered +description: "Wait for a call to reach the answered state." +max-toc-depth: 3 +--- + +[playaction]: /docs/server-sdks/reference/typescript/relay/actions +[collectaction]: /docs/server-sdks/reference/typescript/relay/actions +[detectaction]: /docs/server-sdks/reference/typescript/relay/actions +[relayevent]: /docs/server-sdks/reference/typescript/relay/events +[play]: /docs/server-sdks/reference/typescript/relay/call/play +[play-and-collect]: /docs/server-sdks/reference/typescript/relay/call/play-and-collect +[detect]: /docs/server-sdks/reference/typescript/relay/call/detect +[wait-for]: /docs/server-sdks/reference/typescript/relay/call/wait-for + +Wait for the call to reach the `answered` state. Returns immediately if the call +is already answered or past that state. A typed wait over [`waitFor()`][wait-for]. + +## **Parameters** + + + Maximum milliseconds to wait. Throws an `Error` if exceeded. `undefined` + waits indefinitely. + + +## **Returns** + +`Promise<`[`RelayEvent`][relayevent]`>` -- The state-change event. + +## **Example** + +```typescript {12} +import { RelayClient } from '@signalwire/sdk'; + +const client = new RelayClient({ + project: process.env.SIGNALWIRE_PROJECT_ID!, + token: process.env.SIGNALWIRE_API_TOKEN!, + contexts: ['default'] +}); + +client.onCall(async (call) => { + await call.answer(); + const dialed = await client.dial([[{ type: 'phone', to: '+15559876543', from: '+15551234567' }]]); + await dialed.waitForAnswered(30000); + console.log(dialed.state); +}); + +await client.run(); +``` diff --git a/fern/products/server-sdks/pages/reference/typescript/relay/call/wait-for-ending.mdx b/fern/products/server-sdks/pages/reference/typescript/relay/call/wait-for-ending.mdx new file mode 100644 index 0000000000..7cb0eb85ab --- /dev/null +++ b/fern/products/server-sdks/pages/reference/typescript/relay/call/wait-for-ending.mdx @@ -0,0 +1,50 @@ +--- +title: "waitForEnding" +slug: /reference/typescript/relay/call/wait-for-ending +description: "Wait for a call to reach the ending state." +max-toc-depth: 3 +--- + +[playaction]: /docs/server-sdks/reference/typescript/relay/actions +[collectaction]: /docs/server-sdks/reference/typescript/relay/actions +[detectaction]: /docs/server-sdks/reference/typescript/relay/actions +[relayevent]: /docs/server-sdks/reference/typescript/relay/events +[play]: /docs/server-sdks/reference/typescript/relay/call/play +[play-and-collect]: /docs/server-sdks/reference/typescript/relay/call/play-and-collect +[detect]: /docs/server-sdks/reference/typescript/relay/call/detect +[wait-for]: /docs/server-sdks/reference/typescript/relay/call/wait-for + +Wait for the call to reach the `ending` state. Returns immediately if the call +is already ending or past that state. A typed wait over [`waitFor()`][wait-for]. + +## **Parameters** + + + Maximum milliseconds to wait. Throws an `Error` if exceeded. `undefined` + waits indefinitely. + + +## **Returns** + +`Promise<`[`RelayEvent`][relayevent]`>` -- The state-change event. + +## **Example** + +```typescript {12} +import { RelayClient } from '@signalwire/sdk'; + +const client = new RelayClient({ + project: process.env.SIGNALWIRE_PROJECT_ID!, + token: process.env.SIGNALWIRE_API_TOKEN!, + contexts: ['default'] +}); + +client.onCall(async (call) => { + await call.answer(); + await call.hangup(); + await call.waitForEnding(); + console.log(call.state); +}); + +await client.run(); +``` diff --git a/fern/products/server-sdks/pages/reference/typescript/relay/call/wait-for-ringing.mdx b/fern/products/server-sdks/pages/reference/typescript/relay/call/wait-for-ringing.mdx new file mode 100644 index 0000000000..6155506745 --- /dev/null +++ b/fern/products/server-sdks/pages/reference/typescript/relay/call/wait-for-ringing.mdx @@ -0,0 +1,50 @@ +--- +title: "waitForRinging" +slug: /reference/typescript/relay/call/wait-for-ringing +description: "Wait for a call to reach the ringing state." +max-toc-depth: 3 +--- + +[playaction]: /docs/server-sdks/reference/typescript/relay/actions +[collectaction]: /docs/server-sdks/reference/typescript/relay/actions +[detectaction]: /docs/server-sdks/reference/typescript/relay/actions +[relayevent]: /docs/server-sdks/reference/typescript/relay/events +[play]: /docs/server-sdks/reference/typescript/relay/call/play +[play-and-collect]: /docs/server-sdks/reference/typescript/relay/call/play-and-collect +[detect]: /docs/server-sdks/reference/typescript/relay/call/detect +[wait-for]: /docs/server-sdks/reference/typescript/relay/call/wait-for + +Wait for the call to reach the `ringing` state. Returns immediately if the call +is already ringing or past that state. A typed wait over [`waitFor()`][wait-for]. + +## **Parameters** + + + Maximum milliseconds to wait. Throws an `Error` if exceeded. `undefined` + waits indefinitely. + + +## **Returns** + +`Promise<`[`RelayEvent`][relayevent]`>` -- The state-change event. + +## **Example** + +```typescript {12} +import { RelayClient } from '@signalwire/sdk'; + +const client = new RelayClient({ + project: process.env.SIGNALWIRE_PROJECT_ID!, + token: process.env.SIGNALWIRE_API_TOKEN!, + contexts: ['default'] +}); + +client.onCall(async (call) => { + await call.answer(); + const dialed = await client.dial([[{ type: 'phone', to: '+15559876543', from: '+15551234567' }]]); + await dialed.waitForRinging(30000); + console.log(dialed.state); +}); + +await client.run(); +``` diff --git a/fern/products/server-sdks/pages/reference/typescript/relay/client/dial.mdx b/fern/products/server-sdks/pages/reference/typescript/relay/client/dial.mdx index 0b13d9d01d..163c178953 100644 --- a/fern/products/server-sdks/pages/reference/typescript/relay/client/dial.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/relay/client/dial.mdx @@ -37,10 +37,14 @@ Throws `RelayError` if the dial fails or if no answer is received within the Device type. Valid values: - `"phone"` -- PSTN phone number - `"sip"` -- SIP endpoint + - `"fabric"` -- a resource address. The platform resolves the address to + whatever it points to, such as a subscriber or a Relay application, and + rings every live registration of a subscriber at once. - Device-specific parameters. + Device-specific parameters. For `"fabric"`, `to` is the resource address and + `from` and `timeout` are optional. diff --git a/fern/products/server-sdks/pages/reference/typescript/relay/constants.mdx b/fern/products/server-sdks/pages/reference/typescript/relay/constants.mdx index 8b0ea5103e..0238bf7c3d 100644 --- a/fern/products/server-sdks/pages/reference/typescript/relay/constants.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/relay/constants.mdx @@ -109,6 +109,31 @@ messages progress through: `queued` -> `initiated` -> `sent` -> `delivered` | `MESSAGE_STATE_FAILED` | `"failed"` | Message send failed | | `MESSAGE_STATE_RECEIVED` | `"received"` | Inbound message received | +## Typed state unions + +Each state family also has a string-literal union type, the list of its terminal +values, and a predicate, so you can narrow states without comparing against +individual constants. + +| Type | Terminal values | Predicate | +|------|-----------------|-----------| +| `CallState` | `CALL_STATE_TERMINAL` = `["ended"]` | `isCallStateTerminal(state)` | +| `DialState` (`dialing`, `answered`, `failed`) | `DIAL_STATE_TERMINAL` = `["answered", "failed"]` | `isDialStateTerminal(state)` | +| `MessageState` | `MESSAGE_STATE_TERMINAL` = `["delivered", "undelivered", "failed"]` | `isMessageStateTerminal(state)` | + +Two more closed sets are exported for method options: `TtsGender` (`"male"` or +`"female"`) and `FaxTone` (`"CED"` or `"CNG"`). + +```typescript {1,4} +import { isMessageStateTerminal, type MessageState } from '@signalwire/sdk'; + +function handleMessageState(message: { state: MessageState }) { + if (isMessageStateTerminal(message.state)) { + console.log('Message delivery complete'); + } +} +``` + ## **Example** ```typescript {12} From 9cf94a4c18f29b0bb3a086c91ff09e3b8faef28e Mon Sep 17 00:00:00 2001 From: August Date: Sun, 6 Sep 2026 03:13:25 +0000 Subject: [PATCH 08/38] docs(server-sdks): raise Node floor to 22 in TypeScript guides Co-Authored-By: Claude Fable 5.1 --- .../server-sdks/pages/guides/deploy/docker-kubernetes.mdx | 2 +- fern/products/server-sdks/pages/guides/deploy/serverless.mdx | 2 +- .../server-sdks/pages/guides/getting-started/installation.mdx | 4 ++-- .../server-sdks/pages/guides/getting-started/overview.mdx | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/fern/products/server-sdks/pages/guides/deploy/docker-kubernetes.mdx b/fern/products/server-sdks/pages/guides/deploy/docker-kubernetes.mdx index 936a7d02fa..4e85131f0d 100644 --- a/fern/products/server-sdks/pages/guides/deploy/docker-kubernetes.mdx +++ b/fern/products/server-sdks/pages/guides/deploy/docker-kubernetes.mdx @@ -36,7 +36,7 @@ CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "3000", "--workers", " ```dockerfile -FROM node:20-slim +FROM node:22-slim WORKDIR /app diff --git a/fern/products/server-sdks/pages/guides/deploy/serverless.mdx b/fern/products/server-sdks/pages/guides/deploy/serverless.mdx index baddcb842e..8951fd83d8 100644 --- a/fern/products/server-sdks/pages/guides/deploy/serverless.mdx +++ b/fern/products/server-sdks/pages/guides/deploy/serverless.mdx @@ -414,7 +414,7 @@ gcloud functions deploy signalwire-agent \ ## TypeScript (Node.js) gcloud functions deploy signalwire-agent \ --gen2 \ - --runtime nodejs20 \ + --runtime nodejs22 \ --trigger-http \ --allow-unauthenticated \ --entry-point main \ diff --git a/fern/products/server-sdks/pages/guides/getting-started/installation.mdx b/fern/products/server-sdks/pages/guides/getting-started/installation.mdx index b5d0dc7640..5e8940e267 100644 --- a/fern/products/server-sdks/pages/guides/getting-started/installation.mdx +++ b/fern/products/server-sdks/pages/guides/getting-started/installation.mdx @@ -10,7 +10,7 @@ max-toc-depth: 3 | Language | Runtime | Package Manager | OS | |----------|---------|-----------------|-----| | Python | 3.10+ | pip | Linux, macOS, Windows | -| TypeScript | Node.js 18+ | npm | Linux, macOS, Windows | +| TypeScript | Node.js 22+ | npm | Linux, macOS, Windows | {/* | Go | 1.21+ | go modules | Linux, macOS, Windows | | Ruby | 3.0+ | gem/bundler | Linux, macOS, Windows | @@ -36,7 +36,7 @@ npm install @signalwire/sdk ``` -`@signalwire/sdk` is published as an ES module only (no CommonJS build). Your project must use ESM — add `"type": "module"` to your `package.json`, use `.mjs` file extensions, or use a bundler/transpiler that supports ESM. `import` syntax works; `require('@signalwire/sdk')` does not work in Node older than 22 without the `--experimental-require-module` flag. +`@signalwire/sdk` is published as an ES module only (no CommonJS build). Your project must use ESM — add `"type": "module"` to your `package.json`, use `.mjs` file extensions, or use a bundler/transpiler that supports ESM. Import it with `import` syntax. diff --git a/fern/products/server-sdks/pages/guides/getting-started/overview.mdx b/fern/products/server-sdks/pages/guides/getting-started/overview.mdx index aec6621076..4f57e59922 100644 --- a/fern/products/server-sdks/pages/guides/getting-started/overview.mdx +++ b/fern/products/server-sdks/pages/guides/getting-started/overview.mdx @@ -87,7 +87,7 @@ Before starting, ensure you have the following: | Language | Requirement | Package Manager | |----------|-------------|-----------------| | Python | 3.10+ | pip | -| TypeScript | Node.js 18+ | npm | +| TypeScript | Node.js 22+ | npm | {/* | Go | 1.21+ | go modules | | Ruby | 3.0+ | gem/bundler | From 6f1314b7b3b01b4bdae1af7f806d2d486ca2e715 Mon Sep 17 00:00:00 2001 From: August Date: Sun, 6 Sep 2026 03:13:25 +0000 Subject: [PATCH 09/38] chore(server-sdks): sync TypeScript reference manifest to 6a2aa09 Co-Authored-By: Claude Fable 5.1 --- fern/products/server-sdks/sdk-source-sync.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fern/products/server-sdks/sdk-source-sync.json b/fern/products/server-sdks/sdk-source-sync.json index bb3d0e55ab..3b2a9ee76f 100644 --- a/fern/products/server-sdks/sdk-source-sync.json +++ b/fern/products/server-sdks/sdk-source-sync.json @@ -12,8 +12,8 @@ "repository": "https://github.com/signalwire/signalwire-typescript.git", "local_path": "temp/signalwire-typescript", "status": "active", - "synced_commit": "9140e11d438d0df40187f817dbccb4ea63cc3465", - "synced_at": "2026-06-03" + "synced_commit": "6a2aa09a3dce2221ba2e0dfc21ee6262dac8e6c2", + "synced_at": "2026-09-04" }, "go": { "repository": "https://github.com/signalwire/signalwire-go.git", From 34c8193c63679e0d9ec6a0b4a3f0cd2a5395b197 Mon Sep 17 00:00:00 2001 From: August Date: Tue, 8 Sep 2026 17:56:04 +0000 Subject: [PATCH 10/38] fix(server-sdks): correct TypeScript REST examples and error docs Co-Authored-By: Claude Fable 5.1 --- .../typescript/rest/client/index.mdx | 8 ++++---- .../typescript/rest/datasphere/index.mdx | 4 ++-- .../typescript/rest/datasphere/search.mdx | 4 ++-- .../reference/typescript/rest/overview.mdx | 5 +++-- .../typescript/rest/projects/update.mdx | 6 ++++-- .../typescript/rest/request-options.mdx | 13 ++++--------- .../reference/typescript/rest/rest-error.mdx | 19 +++++++++++-------- 7 files changed, 30 insertions(+), 29 deletions(-) diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/client/index.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/client/index.mdx index 151d59ecfe..026eb3f11a 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/client/index.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/client/index.mdx @@ -34,7 +34,7 @@ It authenticates with your project credentials and exposes every API namespace as a property, giving you typed access to phone numbers, fabric resources, call control, video rooms, datasphere documents, logs, and more. -## **Constructor Parameters** +## **Constructor parameters** SignalWire project ID. Falls back to the `SIGNALWIRE_PROJECT_ID` environment variable @@ -68,7 +68,7 @@ call control, video rooms, datasphere documents, logs, and more. constructor arguments and environment variables, an `Error` is thrown. -## **Namespace Properties** +## **Namespace properties** AI agents, SWML scripts, [subscribers](/docs/platform/subscribers), call flows, SIP gateways, and tokens. @@ -219,8 +219,8 @@ restClient(opts?: ClientOptions): RestClient The same options the constructor accepts: `project`, `token`, `host`, `requestOptions`, and `fetchImpl`. When omitted, the - `SIGNALWIRE_PROJECT_ID`, `SIGNALWIRE_API_TOKEN`, and `SIGNALWIRE_SPACE` - environment variables are read. + `SIGNALWIRE_PROJECT_ID`, `SIGNALWIRE_API_TOKEN`, and `SIGNALWIRE_REST_BASE_URL` + or `SIGNALWIRE_SPACE` environment variables are read. ```typescript {3-7,10} diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/datasphere/index.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/datasphere/index.mdx index 521ded9441..180566ee9e 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/datasphere/index.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/datasphere/index.mdx @@ -33,8 +33,8 @@ const client = new RestClient({ }); const results = await client.datasphere.documents.search("billing FAQ"); -for (const doc of results.data ?? []) { - console.log(doc.id, doc.title); +for (const chunk of results.chunks) { + console.log(chunk.document_id, chunk.text); } ``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/datasphere/search.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/datasphere/search.mdx index 679e0f296b..892bcbd173 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/datasphere/search.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/datasphere/search.mdx @@ -30,7 +30,7 @@ const results = await client.datasphere.documents.search( "How do I reset my password?", { count: 5 }, ); -for (const chunk of results.data ?? []) { - console.log(chunk.text, "score:", chunk.score); +for (const chunk of results.chunks) { + console.log(chunk.document_id, chunk.text); } ``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/overview.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/overview.mdx index d19f31c319..4a3d2399cb 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/overview.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/overview.mdx @@ -66,7 +66,8 @@ for (const log of logs.data ?? []) { All three constructor arguments can also be provided via environment variables: -`SIGNALWIRE_PROJECT_ID`, `SIGNALWIRE_API_TOKEN`, and `SIGNALWIRE_SPACE`. +`SIGNALWIRE_PROJECT_ID`, `SIGNALWIRE_API_TOKEN`, and `SIGNALWIRE_SPACE` (or +`SIGNALWIRE_REST_BASE_URL` for a full base URL, which takes precedence). When those are set, you can instantiate with `new RestClient()` and no arguments. @@ -105,7 +106,7 @@ const numbers = await client.phoneNumbers.list( ); ``` -## Error Handling +## Error handling REST errors throw [`RestError`][rest-error]. A request that never reaches the server, such as a DNS failure or a timeout, throws `RestTransportError`, a diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/projects/update.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/projects/update.mdx index 47782fdc8e..4484796a66 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/projects/update.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/projects/update.mdx @@ -6,7 +6,8 @@ max-toc-depth: 3 --- Update a project's name or protection settings. Pass the ID, then the typed -body; the optional `extras` argument merges additional fields. +body, which always includes `name`; the optional `extras` argument merges +additional fields. @@ -16,7 +17,7 @@ body; the optional `extras` argument merges additional fields. ## **Example** -```typescript {9-11} +```typescript {9-12} import { RestClient } from "@signalwire/sdk"; const client = new RestClient({ @@ -26,6 +27,7 @@ const client = new RestClient({ }); const project = await client.projects.update("project-id", { + name: "Bayview Taxi Staging", force_https_requests: true, }); ``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/request-options.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/request-options.mdx index 6b18a693d8..0e668251d9 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/request-options.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/request-options.mdx @@ -19,14 +19,9 @@ Pass a plain object literal, typed as `RequestOptionsInit`. The `RequestOptions` class is exported too and is accepted anywhere the plain object is. ```typescript {1} -import type { RequestOptionsInit } from '@signalwire/sdk'; +import type { RequestOptionsInit } from "@signalwire/sdk"; ``` - -The REST transport envelope ships in the SDK's next major release. Check the -package changelog for the version that includes it. - - ## **Properties** @@ -61,7 +56,7 @@ package changelog for the version that includes it. ### Client-wide default ```typescript {4} -import { RestClient } from '@signalwire/sdk'; +import { RestClient } from "@signalwire/sdk"; const client = new RestClient({ requestOptions: { timeout: 10, retries: 2 }, @@ -73,7 +68,7 @@ const numbers = await client.phoneNumbers.list(); ### Per-request override with cancellation ```typescript {6-8,11} -import { RestClient } from '@signalwire/sdk'; +import { RestClient } from "@signalwire/sdk"; const client = new RestClient(); const controller = new AbortController(); @@ -92,7 +87,7 @@ await agents; `paginate()` forwards the same `requestOptions` to every page fetch. ```typescript {4} -import { RestClient } from '@signalwire/sdk'; +import { RestClient } from "@signalwire/sdk"; const client = new RestClient(); for await (const address of client.fabric.addresses.paginate(undefined, { retries: 3 })) { diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/rest-error.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/rest-error.mdx index 411a51e60a..26a23d8170 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/rest-error.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/rest-error.mdx @@ -13,7 +13,7 @@ status code, or when the request never reaches the server. The `name` property i Also exported as `SignalWireRestError` to match the Python SDK class name. ```typescript {1} -import { RestError } from '@signalwire/sdk'; +import { RestError } from "@signalwire/sdk"; ``` ## **Properties** @@ -23,10 +23,11 @@ import { RestError } from '@signalwire/sdk'; a `RestTransportError`, where no response was received. -"} toc={true}> - Response body from the API. Parsed as JSON when the response was valid - JSON; otherwise the raw text. Matches the Python SDK's - `SignalWireRestError.body` behavior. + + Response body from the API. A `SignalWireErrorBody` object (`code`, + `message`, and optional `more_info` and `status`) when the response was valid + JSON; otherwise the raw text. For a `RestTransportError`, the underlying + transport error message. @@ -51,8 +52,10 @@ import { RestError } from '@signalwire/sdk'; - Human-readable summary: `"{method} {url} returned {statusCode}: {body}"`, - followed by `(request-id: ...)` when a request ID is available. + Human-readable summary: `"{method} {url} returned {statusCode}: {body}"` for + an HTTP error, or `"{method} {url} failed to reach the server: {body}"` for a + transport failure. Followed by `(request-id: ...)` when a request ID is + available. ## **RestTransportError** @@ -66,7 +69,7 @@ underlying transport error message. Also exported as `SignalWireRestTransportError`. ```typescript {1} -import { RestTransportError } from '@signalwire/sdk'; +import { RestTransportError } from "@signalwire/sdk"; ``` ## **Example** From 48384bf7fc5be705ab362a593ffb2cdfb8d93ad3 Mon Sep 17 00:00:00 2001 From: August Date: Tue, 8 Sep 2026 17:56:04 +0000 Subject: [PATCH 11/38] fix(server-sdks): correct TypeScript agent CLI, Bedrock, and chat client docs Co-Authored-By: Claude Fable 5.1 --- .../reference/typescript/agents/ai-chat-client/chat.mdx | 3 ++- .../reference/typescript/agents/ai-chat-client/index.mdx | 3 +++ .../reference/typescript/agents/bedrock-agent/index.mdx | 9 +++++---- .../agents/bedrock-agent/set-inference-params.mdx | 3 ++- .../pages/reference/typescript/agents/cli/index.mdx | 4 ++-- .../pages/reference/typescript/agents/cli/swaig-test.mdx | 9 +++++---- .../agents/context-builder/context/set-history.mdx | 5 +++-- .../agents/context-builder/step/set-history.mdx | 4 ++-- .../pages/reference/typescript/agents/overview.mdx | 2 +- .../reference/typescript/agents/swaig-function/index.mdx | 4 ++-- 10 files changed, 27 insertions(+), 19 deletions(-) diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/chat.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/chat.mdx index b8cfef3089..575d9e1dc8 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/chat.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/chat.mdx @@ -40,7 +40,8 @@ rather than milliseconds. "} toc={true}> - Applies only when this call creates the conversation. + Arbitrary data about the user, echoed back on this conversation's webhooks. + Sent as `user_meta_data`. diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/index.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/index.mdx index 4c1ac73036..6e4693a3f5 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/index.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/index.mdx @@ -161,5 +161,8 @@ async function main() { await main(); ``` +`await using` needs TypeScript 5.2 or later, which compiles it down for Node 22. +Without it, call [`close()`][close] in a `finally` block instead. + The [AI chat endpoint][chat-endpoint] documents the wire protocol underneath this class. diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/bedrock-agent/index.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/bedrock-agent/index.mdx index 3f2c575cc9..36f713a9c8 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/bedrock-agent/index.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/bedrock-agent/index.mdx @@ -6,8 +6,8 @@ max-toc-depth: 3 --- [agentbase]: /docs/server-sdks/reference/typescript/agents/agent-base -[amazon-bedrock]: /docs/swml/reference/amazon-bedrock -[swml-bedrock-reference]: /docs/swml/reference/amazon-bedrock +[amazon-bedrock]: /docs/swml/reference/calling/amazon-bedrock +[swml-bedrock-reference]: /docs/swml/reference/calling/amazon-bedrock [setvoice]: /docs/server-sdks/reference/typescript/agents/bedrock-agent/set-voice [setinferenceparams]: /docs/server-sdks/reference/typescript/agents/bedrock-agent/set-inference-params @@ -66,7 +66,8 @@ The `createBedrockAgent(config)` factory function returns the same instance as - Maximum tokens to generate per response. + Maximum tokens to generate per response. Accepted for compatibility with the + Python SDK. Not currently applied to the call. "} toc={true}> @@ -85,7 +86,7 @@ The `createBedrockAgent(config)` factory function returns the same instance as -## **Overridden Behavior** +## **Overridden behavior** BedrockAgent overrides several AgentBase methods to fit the Bedrock voice-to-voice model: diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/bedrock-agent/set-inference-params.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/bedrock-agent/set-inference-params.mdx index 9c98ce782a..0efdb1e679 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/bedrock-agent/set-inference-params.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/bedrock-agent/set-inference-params.mdx @@ -21,7 +21,8 @@ an argument left `undefined` keeps its current value. - Maximum tokens to generate. + Maximum tokens to generate. Accepted for compatibility with the Python SDK. + Not currently applied to the call. ## **Returns** diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/cli/index.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/cli/index.mdx index 34d1237398..34550ef7de 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/cli/index.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/cli/index.mdx @@ -17,13 +17,13 @@ through `npx` after installation. npm install @signalwire/sdk ``` -## Available Tools +## Available tools | Command | Purpose | |---------|---------| | [`swaig-test`][swaig-test] | Test SWAIG functions and generate SWML output locally | -## Local Development Workflow +## Local development workflow ```bash # 1. Inspect the generated SWML diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/cli/swaig-test.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/cli/swaig-test.mdx index 7a5ea35d44..5603b8a764 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/cli/swaig-test.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/cli/swaig-test.mdx @@ -45,9 +45,10 @@ Choose one action per invocation: - Load the agent file and validate the arguments, then exit without running an - action. `--dry-run` is an alias. Accepted anywhere on the command line, - including after `--exec`. + Validate the command-line arguments, print `parse OK`, and exit without + loading the agent file, touching the filesystem, or making network requests. + `--dry-run` is an alias. Accepted anywhere on the command line, including + after `--exec`. ## Common Options @@ -139,7 +140,7 @@ npx swaig-test src/agent.ts --dump-swml # Generate raw JSON for piping npx swaig-test src/agent.ts --dump-swml --raw | jq '.' -# Check the file loads without running anything +# Validate the arguments without loading the agent npx swaig-test src/agent.ts --parse-only ``` diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/context-builder/context/set-history.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/context-builder/context/set-history.mdx index 5fa53b2a41..4fd179803d 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/context-builder/context/set-history.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/context-builder/context/set-history.mdx @@ -14,8 +14,9 @@ what each mode does. ## **Parameters** - - History visibility mode: `"keep"`, `"default"`, or `"hide"`. + + History visibility mode: `"keep"`, `"default"`, or `"hide"`. Any other string + throws at call time. ## **Returns** diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/context-builder/step/set-history.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/context-builder/step/set-history.mdx index 6cd45df047..799d2642e9 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/context-builder/step/set-history.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/context-builder/step/set-history.mdx @@ -16,8 +16,8 @@ Overrides the context-level default set with ## **Parameters** - - History visibility mode. + + History visibility mode. Any other string throws at call time. - `"keep"` -- clear nothing. Every prior step's instructions and dialogue stay visible to the model. diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/overview.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/overview.mdx index 78ba7977b4..64a56a8968 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/overview.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/overview.mdx @@ -8,7 +8,7 @@ max-toc-depth: 3 position: 0 --- -[swml]: /docs/swml/reference/ai +[swml]: /docs/swml/reference/calling/ai [agent-base]: /docs/server-sdks/reference/typescript/agents/agent-base [swml-service]: /docs/server-sdks/reference/typescript/agents/swml-service [swml-builder]: /docs/server-sdks/reference/typescript/agents/swml-builder diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/swaig-function/index.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/swaig-function/index.mdx index 150f9c5b7c..1f4fff5cd9 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/swaig-function/index.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/swaig-function/index.mdx @@ -10,8 +10,8 @@ max-toc-depth: 3 [agentbase]: /docs/server-sdks/reference/typescript/agents/agent-base [datamap]: /docs/server-sdks/reference/typescript/agents/data-map [functionresult]: /docs/server-sdks/reference/typescript/agents/function-result -[swaig-function-definition]: /docs/swml/reference/ai/swaig/functions -[swml-swaig-functions-reference]: /docs/swml/reference/ai/swaig/functions +[swaig-function-definition]: /docs/swml/reference/calling/ai/swaig/functions +[swml-swaig-functions-reference]: /docs/swml/reference/calling/ai/swaig/functions [execute]: /docs/server-sdks/reference/typescript/agents/swaig-function/execute [toswaig]: /docs/server-sdks/reference/typescript/agents/swaig-function/to-swaig [validateargs]: /docs/server-sdks/reference/typescript/agents/swaig-function/validate-args From 38b8e6339c9922e18a0d6b578863d290549e0c28 Mon Sep 17 00:00:00 2001 From: August Date: Tue, 8 Sep 2026 17:56:04 +0000 Subject: [PATCH 12/38] docs(server-sdks): add TypeScript defineSkillTool helper Co-Authored-By: Claude Fable 5.1 --- .../reference/typescript/agents/helpers.mdx | 67 ++++++++++++++++++- .../agents/skill-base/get-tools.mdx | 5 ++ 2 files changed, 71 insertions(+), 1 deletion(-) diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/helpers.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/helpers.mdx index ac5ab94504..749148c211 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/helpers.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/helpers.mdx @@ -11,17 +11,20 @@ max-toc-depth: 3 [ref-functionresult]: /docs/server-sdks/reference/typescript/agents/function-result [ref-pombuilder]: /docs/server-sdks/reference/typescript/agents/pom-builder [ref-skillregistry]: /docs/server-sdks/reference/typescript/agents/skill-registry +[ref-skillbase-gettools]: /docs/server-sdks/reference/typescript/agents/skill-base/get-tools +[ref-definetypedtool]: /docs/server-sdks/reference/typescript/agents/agent-base/define-typed-tool The SignalWire Server SDK exports helper functions and utilities at the top level for common tasks like creating standalone contexts, building server-side API tools, managing environment variable expansion, security, and type inference. All are imported directly from `@signalwire/sdk`. -```typescript {2-11} +```typescript {2-12} import { createSimpleContext, createSimpleApiTool, createExpressionTool, + defineSkillTool, setAllowedEnvPrefixes, getAllowedEnvPrefixes, safeAssign, @@ -233,6 +236,68 @@ builder and call `.expression()` multiple times. --- +## **defineSkillTool** + +```typescript {1} +defineSkillTool(toolDef: SkillToolDefinition): SkillToolDefinition +``` + +Build a tool entry for a skill's [`getTools()`][ref-skillbase-gettools] array +with typed handler arguments. The `parameters` schema and `required` list are +captured at compile time, so a required `string` property arrives in the handler +as `args.query: string`, an `enum` narrows to its literal union, and optional +properties are marked `?`. The skill-side counterpart to +[`defineTypedTool()`][ref-definetypedtool]. + +The typing is an authoring convenience only. At runtime `args` is whatever the +model extracted, so keep defensive checks on values that matter. The returned +definition is an ordinary `SkillToolDefinition`, and the generated SWAIG output +is identical to a hand-written entry. + +#### Parameters + + + The tool definition: `name`, `description`, `parameters`, optional + `required`, and a `handler` whose `args` type is inferred from the schema. + + +#### Returns + +`SkillToolDefinition` -- The same definition, ready to return from `getTools()`. + +#### Example + +```typescript {9-23} +import { SkillBase, defineSkillTool, FunctionResult, type SkillToolDefinition } from '@signalwire/sdk'; + +class FareSkill extends SkillBase { + static override SKILL_NAME = 'fare'; + static override SKILL_DESCRIPTION = 'Quote taxi fares.'; + + override getTools(): SkillToolDefinition[] { + return [ + defineSkillTool({ + name: 'quote_fare', + description: 'Quote a fare between two addresses', + parameters: { + pickup: { type: 'string', description: 'Pickup address' }, + dropoff: { type: 'string', description: 'Drop-off address' }, + }, + required: ['pickup', 'dropoff'], + handler: async (args) => { + if (!args.pickup.trim() || !args.dropoff.trim()) { + return new FunctionResult('Provide both addresses.'); + } + return new FunctionResult(`Estimated fare from ${args.pickup} to ${args.dropoff}: $32.`); + }, + }), + ]; + } +} +``` + +--- + ## **setAllowedEnvPrefixes** ```typescript {1} diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/skill-base/get-tools.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/skill-base/get-tools.mdx index d5bada4af7..3320e55b77 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/skill-base/get-tools.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/skill-base/get-tools.mdx @@ -6,6 +6,7 @@ max-toc-depth: 3 --- [ref-skillbase]: /docs/server-sdks/reference/typescript/agents/skill-base +[ref-defineskilltool]: /docs/server-sdks/reference/typescript/agents/helpers#defineskilltool Return the SWAIG tool definitions this skill exposes. Called by the `SkillManager` at SWML render time to collect every tool that should appear in @@ -48,6 +49,10 @@ class WeatherSkill extends SkillBase { } ``` +Wrap an entry in [`defineSkillTool()`][ref-defineskilltool] to have the +handler's `args` typed from the `parameters` schema instead of +`Record`. + ## **Example — imperative via defineTool()** ```typescript {5-13} From 237b94efcd51185ae94d75f9e98b09bfe9ce655f Mon Sep 17 00:00:00 2001 From: August Date: Tue, 8 Sep 2026 17:56:04 +0000 Subject: [PATCH 13/38] fix(server-sdks): correct TypeScript Relay helper examples and add missing members Co-Authored-By: Claude Fable 5.1 --- .../typescript/relay/call/connect.mdx | 6 ++--- .../typescript/relay/call/prompt-audio.mdx | 4 ++-- .../typescript/relay/call/prompt-tts.mdx | 4 ++-- .../relay/call/wait-for-answered.mdx | 12 ++++++---- .../relay/call/wait-for-ringing.mdx | 7 +++--- .../typescript/relay/client/dial.mdx | 24 +++++++++++++------ .../reference/typescript/relay/constants.mdx | 9 +++---- .../typescript/relay/message/index.mdx | 6 +++++ .../typescript/relay/relay-error.mdx | 8 ++++++- 9 files changed, 51 insertions(+), 29 deletions(-) diff --git a/fern/products/server-sdks/pages/reference/typescript/relay/call/connect.mdx b/fern/products/server-sdks/pages/reference/typescript/relay/call/connect.mdx index 5fbd72d397..6ef8ea5576 100644 --- a/fern/products/server-sdks/pages/reference/typescript/relay/call/connect.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/relay/call/connect.mdx @@ -7,8 +7,8 @@ max-toc-depth: 3 [calling-call-connect]: /docs/server-sdks/reference/typescript/relay/call#events [call-events]: /docs/server-sdks/reference/typescript/relay/call#events -[connect]: /docs/swml/reference/connect -[swml-connect-reference]: /docs/swml/reference/connect +[connect]: /docs/swml/reference/calling/connect +[swml-connect-reference]: /docs/swml/reference/calling/connect [play]: /docs/server-sdks/reference/typescript/relay/call/play Bridge the call to one or more destinations. The `devices` parameter supports @@ -35,7 +35,7 @@ This method corresponds to the SWML [`connect`][connect] verb. See the - `"type"` -- Device type (`"phone"`, `"sip"`, or `"fabric"` for a resource address) - `"params"` -- Type-specific parameters (`to_number` and `from_number` for - phone; `to`, optional `from`, and `timeout` for fabric) + phone; `to` plus optional `from` and `timeout` for fabric) [] | undefined"} toc={true}> diff --git a/fern/products/server-sdks/pages/reference/typescript/relay/call/prompt-audio.mdx b/fern/products/server-sdks/pages/reference/typescript/relay/call/prompt-audio.mdx index 6524557b07..8fb4621d3f 100644 --- a/fern/products/server-sdks/pages/reference/typescript/relay/call/prompt-audio.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/relay/call/prompt-audio.mdx @@ -6,7 +6,7 @@ max-toc-depth: 3 --- [playaction]: /docs/server-sdks/reference/typescript/relay/actions -[collectaction]: /docs/server-sdks/reference/typescript/relay/actions +[collectaction]: /docs/server-sdks/reference/typescript/relay/actions/collect-action [detectaction]: /docs/server-sdks/reference/typescript/relay/actions [relayevent]: /docs/server-sdks/reference/typescript/relay/events [play]: /docs/server-sdks/reference/typescript/relay/call/play @@ -46,7 +46,7 @@ convenience over [`playAndCollect()`][play-and-collect]. ## **Returns** -`Promise<`[`CollectAction`][collectaction]`>` -- An action handle with `stop()`, `startInputTimers()`, and `wait()` methods. +`Promise<`[`CollectAction`][collectaction]`>` -- An action handle with `stop()`, `pause()`, `resume()`, `volume()`, `startInputTimers()`, and `wait()` methods. ## **Example** diff --git a/fern/products/server-sdks/pages/reference/typescript/relay/call/prompt-tts.mdx b/fern/products/server-sdks/pages/reference/typescript/relay/call/prompt-tts.mdx index 9039a2521c..4a582c0a19 100644 --- a/fern/products/server-sdks/pages/reference/typescript/relay/call/prompt-tts.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/relay/call/prompt-tts.mdx @@ -6,7 +6,7 @@ max-toc-depth: 3 --- [playaction]: /docs/server-sdks/reference/typescript/relay/actions -[collectaction]: /docs/server-sdks/reference/typescript/relay/actions +[collectaction]: /docs/server-sdks/reference/typescript/relay/actions/collect-action [detectaction]: /docs/server-sdks/reference/typescript/relay/actions [relayevent]: /docs/server-sdks/reference/typescript/relay/events [play]: /docs/server-sdks/reference/typescript/relay/call/play @@ -58,7 +58,7 @@ convenience over [`playAndCollect()`][play-and-collect]. ## **Returns** -`Promise<`[`CollectAction`][collectaction]`>` -- An action handle with `stop()`, `startInputTimers()`, and `wait()` methods. +`Promise<`[`CollectAction`][collectaction]`>` -- An action handle with `stop()`, `pause()`, `resume()`, `volume()`, `startInputTimers()`, and `wait()` methods. ## **Example** diff --git a/fern/products/server-sdks/pages/reference/typescript/relay/call/wait-for-answered.mdx b/fern/products/server-sdks/pages/reference/typescript/relay/call/wait-for-answered.mdx index 075099f2c6..aeb38a7608 100644 --- a/fern/products/server-sdks/pages/reference/typescript/relay/call/wait-for-answered.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/relay/call/wait-for-answered.mdx @@ -17,6 +17,11 @@ max-toc-depth: 3 Wait for the call to reach the `answered` state. Returns immediately if the call is already answered or past that state. A typed wait over [`waitFor()`][wait-for]. +`answer()` resolves when the platform accepts the command. Call +`waitForAnswered()` afterwards to block until the state event confirms the call +is up. A call returned by `client.dial()` is already answered, so this returns +at once. + ## **Parameters** @@ -30,7 +35,7 @@ is already answered or past that state. A typed wait over [`waitFor()`][wait-for ## **Example** -```typescript {12} +```typescript {11} import { RelayClient } from '@signalwire/sdk'; const client = new RelayClient({ @@ -41,9 +46,8 @@ const client = new RelayClient({ client.onCall(async (call) => { await call.answer(); - const dialed = await client.dial([[{ type: 'phone', to: '+15559876543', from: '+15551234567' }]]); - await dialed.waitForAnswered(30000); - console.log(dialed.state); + await call.waitForAnswered(5000); + await call.playTTS('Thanks for calling Bayview Taxi.'); }); await client.run(); diff --git a/fern/products/server-sdks/pages/reference/typescript/relay/call/wait-for-ringing.mdx b/fern/products/server-sdks/pages/reference/typescript/relay/call/wait-for-ringing.mdx index 6155506745..1225926e3f 100644 --- a/fern/products/server-sdks/pages/reference/typescript/relay/call/wait-for-ringing.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/relay/call/wait-for-ringing.mdx @@ -30,7 +30,7 @@ is already ringing or past that state. A typed wait over [`waitFor()`][wait-for] ## **Example** -```typescript {12} +```typescript {10} import { RelayClient } from '@signalwire/sdk'; const client = new RelayClient({ @@ -40,10 +40,9 @@ const client = new RelayClient({ }); client.onCall(async (call) => { + const event = await call.waitForRinging(5000); + console.log(event.params.call_state); await call.answer(); - const dialed = await client.dial([[{ type: 'phone', to: '+15559876543', from: '+15551234567' }]]); - await dialed.waitForRinging(30000); - console.log(dialed.state); }); await client.run(); diff --git a/fern/products/server-sdks/pages/reference/typescript/relay/client/dial.mdx b/fern/products/server-sdks/pages/reference/typescript/relay/client/dial.mdx index 163c178953..f07961b5a6 100644 --- a/fern/products/server-sdks/pages/reference/typescript/relay/client/dial.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/relay/client/dial.mdx @@ -26,7 +26,9 @@ Throws `RelayError` if the dial fails or if no answer is received within the [][]"} required={true} toc={true}> Nested array of device definitions for serial and parallel dialing. Each device is - an object with `type` and `params` keys. + an object with `type` and `params` keys. You can also put the fields flat next + to `type`; the SDK wraps them in `params` and, for `"phone"`, maps `to` and + `from` to `to_number` and `from_number`. - **Serial dial** (try one after another): each inner array has one device - **Parallel dial** (ring simultaneously): one inner array with multiple devices @@ -43,17 +45,25 @@ Throws `RelayError` if the dial fails or if no answer is received within the - Device-specific parameters. For `"fabric"`, `to` is the resource address and - `from` and `timeout` are optional. + Device-specific parameters. Which fields are required depends on the device + type. - - Destination phone number in E.164 format (for `"phone"` type). + + Destination phone number in E.164 format. Required for `"phone"`. - - Caller ID phone number in E.164 format (for `"phone"` type). + + Caller ID phone number in E.164 format. Required for `"phone"`. + + + + Destination resource address. Required for `"fabric"`. + + + + Caller ID shown to the destination (for `"fabric"`). diff --git a/fern/products/server-sdks/pages/reference/typescript/relay/constants.mdx b/fern/products/server-sdks/pages/reference/typescript/relay/constants.mdx index 0238bf7c3d..ac24d1558a 100644 --- a/fern/products/server-sdks/pages/reference/typescript/relay/constants.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/relay/constants.mdx @@ -136,14 +136,12 @@ function handleMessageState(message: { state: MessageState }) { ## **Example** -```typescript {12} +```typescript {11,20} import { CALL_STATE_ANSWERED, CALL_STATE_ENDED, EVENT_CALL_STATE, - MESSAGE_STATE_DELIVERED, - MESSAGE_STATE_UNDELIVERED, - MESSAGE_STATE_FAILED, + isMessageStateTerminal, } from '@signalwire/sdk'; import type { CallStateEvent } from '@signalwire/sdk'; @@ -157,9 +155,8 @@ function handleCallState(event: CallStateEvent) { } // Check terminal message states -const TERMINAL = [MESSAGE_STATE_DELIVERED, MESSAGE_STATE_UNDELIVERED, MESSAGE_STATE_FAILED]; function handleMessageState(message: { state: string }) { - if (TERMINAL.includes(message.state)) { + if (isMessageStateTerminal(message.state)) { console.log('Message delivery complete'); } } diff --git a/fern/products/server-sdks/pages/reference/typescript/relay/message/index.mdx b/fern/products/server-sdks/pages/reference/typescript/relay/message/index.mdx index c79fff4bea..5f0929d781 100644 --- a/fern/products/server-sdks/pages/reference/typescript/relay/message/index.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/relay/message/index.mdx @@ -107,6 +107,12 @@ await client.disconnect(); Read-only property. + + `true` when `state` is `delivered`, `undelivered`, or `failed`. Unlike + `isDone`, this tests the state value alone, so it is meaningful on an inbound + message before any event has been dispatched. + + The terminal [`RelayEvent`][relayevent] that resolved this message, or `null` if the message has not yet completed. diff --git a/fern/products/server-sdks/pages/reference/typescript/relay/relay-error.mdx b/fern/products/server-sdks/pages/reference/typescript/relay/relay-error.mdx index ff0fcd2f1b..b7e8afd985 100644 --- a/fern/products/server-sdks/pages/reference/typescript/relay/relay-error.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/relay/relay-error.mdx @@ -19,7 +19,13 @@ import { RelayError } from '@signalwire/sdk'; - Human-readable error description returned by the Relay server. + `"RELAY error {code}: {serverMessage}"`. The standard `Error` message, + prefixed with the code. + + + + The server's own error text, without the `RELAY error` prefix. Read this to + match on or display the server's wording. From 98193bd3758ca81888b72f74ca6e381f880ad4c5 Mon Sep 17 00:00:00 2001 From: August Date: Wed, 9 Sep 2026 14:53:43 +0000 Subject: [PATCH 14/38] fix(server-sdks): pass ParameterSchema output to defineTool as flat map defineTool() takes the flat property map, not the wrapped { type: 'object', properties, required } object that build() returns, so the example failed to typecheck (TS2322). Spread properties and required separately and say so in the intro. Addresses review on #668. Co-Authored-By: Claude Fable 5.1 --- .../typescript/agents/parameter-schema.mdx | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/parameter-schema.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/parameter-schema.mdx index d3ebc0636f..51551cda73 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/parameter-schema.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/parameter-schema.mdx @@ -8,10 +8,14 @@ max-toc-depth: 3 [define-tool]: /docs/server-sdks/reference/typescript/agents/agent-base/define-tool [define-typed-tool]: /docs/server-sdks/reference/typescript/agents/agent-base/define-typed-tool -`ParameterSchema` is a fluent builder that produces the `parameters` object for -[`defineTool()`][define-tool] or [`defineTypedTool()`][define-typed-tool]. -Properties appear in the order you add them, and the result is identical to the -hand-written JSON Schema object. Create one with `paramSchema()`. +`ParameterSchema` is a fluent builder that produces the JSON Schema `parameters` +object for a SWAIG tool. Properties appear in the order you add them, and the +result is identical to the hand-written JSON Schema object. Create one with +`paramSchema()`. + +[`defineTool()`][define-tool] and [`defineTypedTool()`][define-typed-tool] take +the flat property map rather than the wrapped object, so pass `properties` and +`required` from the built schema separately, as in the example below. ```typescript {1} import { paramSchema, RECORD_FORMATS } from '@signalwire/sdk'; @@ -103,7 +107,7 @@ each with a matching union type. ## **Example** -```typescript {5-10} +```typescript {5-10,15-16} import { AgentBase, FunctionResult, paramSchema } from '@signalwire/sdk'; const agent = new AgentBase({ name: 'dispatch', route: '/dispatch' }); @@ -118,7 +122,8 @@ const params = paramSchema() agent.defineTool({ name: 'book_ride', description: 'Book a taxi for the caller', - parameters: params, + parameters: params.properties, + required: params.required, handler: async (args) => { return new FunctionResult(`Booked a ${args.vehicle} to ${args.pickup}.`); }, From f326b66fbc0f958a5984e1e9bcc9b4c445a0d8f6 Mon Sep 17 00:00:00 2001 From: August Date: Wed, 9 Sep 2026 14:53:43 +0000 Subject: [PATCH 15/38] fix(server-sdks): correct BedrockAgent promptAddSection example promptAddSection() takes an options object, not a string. The example also combined systemPrompt with an added section, but raw prompt text takes precedence and the section was never rendered. Build both instructions as sections and document the precedence rule. Addresses review on #668. Co-Authored-By: Claude Fable 5.1 --- .../typescript/agents/bedrock-agent/index.mdx | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/bedrock-agent/index.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/bedrock-agent/index.mdx index 36f713a9c8..060f5497e0 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/bedrock-agent/index.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/bedrock-agent/index.mdx @@ -50,7 +50,9 @@ The `createBedrockAgent(config)` factory function returns the same instance as - Initial system prompt. Can be overridden later with `setPromptText()`. + Initial system prompt, set as raw text. Can be overridden later with + `setPromptText()`. Leave it unset if you build the prompt from sections with + `promptAddSection()`, because raw text takes precedence over sections. @@ -107,24 +109,26 @@ on Bedrock agents. Prompt methods (`setPromptText()`, `setPromptPom()`, `promptAddSection()`, and so on) work normally. The prompt is built the same way as in AgentBase and then placed in the `amazon_bedrock` verb along with `voice_id`, `temperature`, and -`top_p`. +`top_p`. Raw text set through `systemPrompt` or `setPromptText()` takes +precedence: when it is present, sections added with `promptAddSection()` are not +rendered. Use one style or the other for a given agent. ## **Examples** ### Basic Bedrock agent with a tool -```typescript {3-9} +```typescript {3-11} import { BedrockAgent, FunctionResult } from '@signalwire/sdk'; const agent = new BedrockAgent({ name: 'bedrock-assistant', route: '/assistant', - systemPrompt: 'You are a helpful customer service representative.', voiceId: 'joanna', temperature: 0.5, }); -agent.promptAddSection('Guidelines', 'Be concise and professional.'); +agent.promptAddSection('Role', { body: 'You are a helpful customer service representative.' }); +agent.promptAddSection('Guidelines', { body: 'Be concise and professional.' }); agent.defineTool({ name: 'check_order', From eff40ec9e3bc607a7a4b86e99d3c79194294a52e Mon Sep 17 00:00:00 2001 From: August Date: Wed, 9 Sep 2026 18:29:25 +0000 Subject: [PATCH 16/38] fix(server-sdks): correct TypeScript REST log, recording, and agent fields VoiceLog is a union that includes discarded records with no address fields and Fabric records with no duration, so narrow with an `in` check before printing. Recording exposes duration_in_seconds and status, not duration and state. AIAgentResponse exposes display_name, not name. Each example failed to typecheck against SDK 6a2aa09. Addresses review follow-ups on #668. Co-Authored-By: Claude Fable 5.1 --- .../pages/reference/typescript/rest/logs/voice/index.mdx | 2 ++ .../pages/reference/typescript/rest/logs/voice/list.mdx | 2 ++ .../pages/reference/typescript/rest/overview.mdx | 6 ++++-- .../pages/reference/typescript/rest/recordings/list.mdx | 2 +- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/logs/voice/index.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/logs/voice/index.mdx index 7736f8cdc6..325fc4b76b 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/logs/voice/index.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/logs/voice/index.mdx @@ -26,7 +26,9 @@ const client = new RestClient({ const logs = await client.logs.voice.list({ page_size: 5 }); for (const log of logs.data ?? []) { + if ('from' in log) { console.log(log.id, log.from, "->", log.to); + } } ``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/logs/voice/list.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/logs/voice/list.mdx index 80d9387b03..0d3b243b81 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/logs/voice/list.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/logs/voice/list.mdx @@ -26,6 +26,8 @@ const client = new RestClient({ const calls = await client.logs.voice.list({ page_size: 20 }); for (const call of calls.data ?? []) { + if ('duration' in call) { console.log(call.from, "->", call.to, call.duration); + } } ``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/overview.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/overview.mdx index 4a3d2399cb..4848bcb59c 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/overview.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/overview.mdx @@ -54,13 +54,15 @@ console.log(`Purchased: ${purchased.number}`); // List your AI agent resources const response = await client.fabric.aiAgents.list(); for (const agent of response.data ?? []) { - console.log(`Agent: ${agent.name} (${agent.id})`); + console.log(`Agent: ${agent.display_name} (${agent.id})`); } // Query recent voice call logs const logs = await client.logs.voice.list({ page_size: 5 }); for (const log of logs.data ?? []) { - console.log(`Call from ${log.from} to ${log.to}`); + if ('from' in log) { + console.log(`Call from ${log.from} to ${log.to}`); + } } ``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/recordings/list.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/recordings/list.mdx index eda5e8ce23..f6e96e40ac 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/recordings/list.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/recordings/list.mdx @@ -26,6 +26,6 @@ const client = new RestClient({ const result = await client.recordings.list({ page_size: 20 }); for (const rec of result.data ?? []) { - console.log(rec.id, rec["duration"], rec["state"]); + console.log(rec.id, rec.duration_in_seconds, rec.status); } ``` From c9a69d9143ec0552b3bc4856d6549e1b5511ce31 Mon Sep 17 00:00:00 2001 From: August Date: Wed, 9 Sep 2026 18:29:25 +0000 Subject: [PATCH 17/38] fix(server-sdks): drop removed SwmlBuilder getDocument and renderDocument The SDK removed both TypeScript-only methods in favor of the Python parity names build() and render(); calling renderDocument() throws. Switch every example to render()/build(), remove the two method pages, redirect their URLs to build and render, and stop describing build and render as aliases. Addresses review follow-ups on #668. Co-Authored-By: Claude Fable 5.1 --- fern/docs.yml | 7 +++++ .../agents/swml-builder/add-section.mdx | 2 +- .../swml-builder/add-verb-to-section.mdx | 2 +- .../agents/swml-builder/add-verb.mdx | 2 +- .../typescript/agents/swml-builder/ai.mdx | 2 +- .../typescript/agents/swml-builder/build.mdx | 12 +++---- .../agents/swml-builder/document.mdx | 8 ++--- .../agents/swml-builder/get-document.mdx | 31 ------------------- .../typescript/agents/swml-builder/index.mdx | 22 +++++-------- .../agents/swml-builder/render-document.mdx | 30 ------------------ .../typescript/agents/swml-builder/render.mdx | 10 +++--- 11 files changed, 32 insertions(+), 96 deletions(-) delete mode 100644 fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/get-document.mdx delete mode 100644 fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/render-document.mdx diff --git a/fern/docs.yml b/fern/docs.yml index 6153b66561..895affa329 100644 --- a/fern/docs.yml +++ b/fern/docs.yml @@ -238,6 +238,13 @@ redirects: - source: /docs/server-sdks/reference/typescript/agents/swml-service/on-request destination: /docs/server-sdks/reference/typescript/agents/swml-service/set-on-request-callback + # SwmlBuilder getDocument()/renderDocument() were removed from the SDK in + # favor of the Python-parity names build()/render(). + - source: /docs/server-sdks/reference/typescript/agents/swml-builder/get-document + destination: /docs/server-sdks/reference/typescript/agents/swml-builder/build + - source: /docs/server-sdks/reference/typescript/agents/swml-builder/render-document + destination: /docs/server-sdks/reference/typescript/agents/swml-builder/render + # The prompt writing techniques guide duplicated the prompt engineering # overview; the additive parts were merged into it and the page removed. - source: /docs/platform/ai/prompt-engineering/best-practices diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/add-section.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/add-section.mdx index 2537f04c0f..b1197e4071 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/add-section.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/add-section.mdx @@ -38,5 +38,5 @@ builder.addVerbToSection('fallback', 'play', { }); builder.addVerbToSection('fallback', 'hangup', {}); -console.log(builder.renderDocument()); +console.log(builder.render()); ``` diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/add-verb-to-section.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/add-verb-to-section.mdx index 92dcbd9db7..1ce0628a78 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/add-verb-to-section.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/add-verb-to-section.mdx @@ -38,5 +38,5 @@ builder.addVerbToSection('goodbye', 'play', { }); builder.addVerbToSection('goodbye', 'hangup', {}); -console.log(builder.renderDocument()); +console.log(builder.render()); ``` diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/add-verb.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/add-verb.mdx index 74ccb189ca..c154da5b30 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/add-verb.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/add-verb.mdx @@ -41,5 +41,5 @@ builder.addVerb('answer', {}); builder.addVerb('play', { url: 'https://example.com/greeting.mp3' }); builder.addVerb('hangup', {}); -console.log(builder.renderDocument()); +console.log(builder.render()); ``` diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/ai.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/ai.mdx index 1f9016bac7..29c92a17f8 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/ai.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/ai.mdx @@ -41,5 +41,5 @@ builder.ai({ post_prompt_url: 'https://example.com/summary', }); -console.log(builder.renderDocument()); +console.log(builder.render()); ``` diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/build.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/build.mdx index 358cf3f5d0..5c54906904 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/build.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/build.mdx @@ -1,17 +1,17 @@ --- title: "build" slug: /reference/typescript/agents/swml-builder/build -description: "Build and return the SWML document as an object (Python-compat alias for getDocument)." +description: "Build and return the SWML document as an object." max-toc-depth: 3 --- -[ref-getdocument]: /docs/server-sdks/reference/typescript/agents/swml-builder/get-document [ref-render]: /docs/server-sdks/reference/typescript/agents/swml-builder/render +[ref-document]: /docs/server-sdks/reference/typescript/agents/swml-builder/document -Return the SWML document as a plain object. Python-compat alias for -[`getDocument()`][ref-getdocument]; the two are functionally identical. Use -`build()` when porting from the Python SDK. For a JSON string, use -[`render()`][ref-render] or `renderDocument()`. +Return the SWML document as a plain object. The name matches the Python SDK's +`SWMLBuilder.build()`. For a JSON string, use [`render()`][ref-render]. For +property-style access to the same object, use the [`document`][ref-document] +getter. ## **Returns** diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/document.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/document.mdx index 3155a9f1ed..f7deceb298 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/document.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/document.mdx @@ -5,16 +5,16 @@ description: "Read-only accessor for the underlying SWML document." max-toc-depth: 3 --- -[ref-getdocument]: /docs/server-sdks/reference/typescript/agents/swml-builder/get-document +[ref-build]: /docs/server-sdks/reference/typescript/agents/swml-builder/build Read-only getter for the underlying SWML document object. Provides direct access to the mutable document (the returned reference is the internal object, not a copy). Equivalent to the Python SDK's `service` property on `SWMLBuilder`. -Prefer [`getDocument()`][ref-getdocument] when you want an explicit method -call for symmetry with other accessors. The `document` getter exists for -callers that want property-style access. +Prefer [`build()`][ref-build] when you want an explicit method call for +symmetry with other accessors. The `document` getter exists for callers that +want property-style access. ## **Type** diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/get-document.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/get-document.mdx deleted file mode 100644 index 1db887ffb1..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/get-document.mdx +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: "getDocument" -slug: /reference/typescript/agents/swml-builder/get-document -description: "Return the raw SWML document object." -max-toc-depth: 3 ---- - -Returns the raw SWML document object containing the version string and all sections -with their verb arrays. - -## **Parameters** - -This method takes no parameters. - -## **Returns** - -`Record` -- The SWML document object with `version` and `sections` keys. - -## **Example** - -```typescript {7} -import { SwmlBuilder } from '@signalwire/sdk'; - -const builder = new SwmlBuilder(); -builder.addVerb('answer', {}); -builder.addVerb('play', { url: 'https://example.com/audio.mp3' }); - -const doc = builder.getDocument(); -console.log(doc); -// { version: '1.0.0', sections: { main: [ { answer: {} }, { play: { url: '...' } } ] } } -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/index.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/index.mdx index 1fad956ef6..ec8b1cba65 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/index.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/index.mdx @@ -12,11 +12,9 @@ max-toc-depth: 3 [addverbtosection]: /docs/server-sdks/reference/typescript/agents/swml-builder/add-verb-to-section [ai]: /docs/server-sdks/reference/typescript/agents/swml-builder/ai [answer]: /docs/server-sdks/reference/typescript/agents/swml-builder/answer -[getdocument]: /docs/server-sdks/reference/typescript/agents/swml-builder/get-document [getschemautils]: /docs/server-sdks/reference/typescript/agents/swml-builder/get-schema-utils [hangup]: /docs/server-sdks/reference/typescript/agents/swml-builder/hangup [play]: /docs/server-sdks/reference/typescript/agents/swml-builder/play -[renderdocument]: /docs/server-sdks/reference/typescript/agents/swml-builder/render-document [reset]: /docs/server-sdks/reference/typescript/agents/swml-builder/reset SwmlBuilder provides a fluent interface for constructing SWML documents by chaining @@ -77,7 +75,7 @@ builder.answer(); builder.play({ url: 'https://example.com/greeting.mp3' }); builder.hangup(); -console.log(builder.renderDocument()); +console.log(builder.render()); ``` The `sleep` verb is a special case -- it accepts either a number (duration) directly @@ -91,7 +89,7 @@ builder.answer(); builder.sleep(2000); builder.hangup(); -console.log(builder.renderDocument()); +console.log(builder.render()); ``` ## **Methods** @@ -109,9 +107,6 @@ console.log(builder.renderDocument()); Add an answer verb to the SWML document. - - Return the raw SWML document object. - Get the shared SchemaUtils singleton (static). @@ -121,9 +116,6 @@ console.log(builder.renderDocument()); Add a play verb to play audio or text-to-speech. - - Serialize the SWML document to a JSON string. - Reset the SWML document to an empty state. @@ -131,10 +123,10 @@ console.log(builder.renderDocument()); Add a new named section to the document. - Build and return the document (Python-compat alias for getDocument). + Build and return the SWML document as an object. - Render the document as JSON (Python-compat alias for renderDocument). + Render the SWML document as a JSON string. Property-style read-only accessor for the underlying document. @@ -160,7 +152,7 @@ const doc = builder .play({ url: 'https://example.com/welcome.mp3' }) .sleep(1000) .hangup() - .getDocument(); + .build(); console.log(doc); ``` @@ -198,7 +190,7 @@ builder params: { end_of_speech_timeout: 500 }, }); -console.log(builder.renderDocument()); +console.log(builder.render()); ``` ### Multi-Section Document @@ -218,5 +210,5 @@ builder.addVerbToSection('goodbye', 'play', { }); builder.addVerbToSection('goodbye', 'hangup', {}); -console.log(builder.renderDocument()); +console.log(builder.render()); ``` diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/render-document.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/render-document.mdx deleted file mode 100644 index 8d37924f06..0000000000 --- a/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/render-document.mdx +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: "renderDocument" -slug: /reference/typescript/agents/swml-builder/render-document -description: "Serialize the SWML document to a JSON string." -max-toc-depth: 3 ---- - -Serializes the SWML document to a JSON string using `JSON.stringify`. - -## **Parameters** - -This method takes no parameters. - -## **Returns** - -`string` -- The JSON-encoded SWML document. - -## **Example** - -```typescript {7} -import { SwmlBuilder } from '@signalwire/sdk'; - -const builder = new SwmlBuilder(); -builder.addVerb('answer', {}); -builder.addVerb('hangup', {}); - -const json = builder.renderDocument(); -console.log(json); -// '{"version":"1.0.0","sections":{"main":[{"answer":{}},{"hangup":{}}]}}' -``` diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/render.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/render.mdx index b68fa11db9..46f0e56b47 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/render.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/render.mdx @@ -1,17 +1,15 @@ --- title: "render" slug: /reference/typescript/agents/swml-builder/render -description: "Render the SWML document as a JSON string (Python-compat alias for renderDocument)." +description: "Render the SWML document as a JSON string." max-toc-depth: 3 --- -[ref-renderdocument]: /docs/server-sdks/reference/typescript/agents/swml-builder/render-document [ref-build]: /docs/server-sdks/reference/typescript/agents/swml-builder/build -Render the SWML document as a JSON string. Python-compat alias for -[`renderDocument()`][ref-renderdocument]; the two are functionally identical. -Use `render()` when porting from the Python SDK. For the document as a plain -object, use [`build()`][ref-build] or `getDocument()`. +Render the SWML document as a JSON string. The name matches the Python SDK's +`SWMLBuilder.render()`. For the document as a plain object, use +[`build()`][ref-build]. ## **Returns** From c6f1c853fbfca9212613f2c7ee4ab7a89bd5c008 Mon Sep 17 00:00:00 2001 From: August Date: Wed, 9 Sep 2026 18:29:25 +0000 Subject: [PATCH 18/38] fix(server-sdks): supply control_id to REST call commands instead of reading it CallResponse has no control_id field, so the play, stream, tap, record, and collectStartInputTimers examples failed with TS2339. The ID is a client-chosen request option: declare it, pass it as control_id, and keep it for later control commands. Reword the play, stream, tap, record, collect, and detect prose to match. Addresses review follow-ups on #668. Co-Authored-By: Claude Fable 5.1 --- .../calling/collect-start-input-timers.mdx | 9 ++++--- .../typescript/rest/calling/collect.mdx | 3 ++- .../typescript/rest/calling/detect.mdx | 3 ++- .../typescript/rest/calling/play.mdx | 26 ++++++++++--------- .../typescript/rest/calling/record.mdx | 16 ++++++------ .../typescript/rest/calling/stream.mdx | 13 ++++++---- .../reference/typescript/rest/calling/tap.mdx | 11 ++++---- 7 files changed, 45 insertions(+), 36 deletions(-) diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/collect-start-input-timers.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/collect-start-input-timers.mdx index 21a5df4830..8c5808e3bb 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/collect-start-input-timers.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/collect-start-input-timers.mdx @@ -21,7 +21,7 @@ before starting the timer countdown. ## **Example** -```typescript {21} +```typescript {9-13,21} import { RestClient } from "@signalwire/sdk"; const client = new RestClient({ @@ -30,11 +30,12 @@ const client = new RestClient({ host: "your-space.signalwire.com" }); -// Start collection without auto-timers, play prompt, then start timers -const result = await client.calling.collect("call-id-xxx", { +// Start collection with a control ID you choose, play a prompt, then start timers +const controlId = "pin-collect-1"; +await client.calling.collect("call-id-xxx", { + control_id: controlId, digits: { max: 4, terminators: "#" }, }); -const controlId = result.control_id; // Play a prompt first await client.calling.play("call-id-xxx", [ diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/collect.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/collect.mdx index 56da07befb..50f722bd15 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/collect.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/collect.mdx @@ -6,7 +6,8 @@ max-toc-depth: 3 --- Start collecting user input on an active call. Supports DTMF digit collection -and speech recognition. Returns a `control_id` for managing the collection. +and speech recognition. Pass a `control_id` of your choosing in the options and +keep it to manage the collection later. ## **Request** diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/detect.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/detect.mdx index 9cbad237b7..48568d17d6 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/detect.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/detect.mdx @@ -6,7 +6,8 @@ max-toc-depth: 3 --- Start a detector on an active call. Detectors can identify answering machines, -fax tones, or DTMF digits. Returns a `control_id` for managing the detector. +fax tones, or DTMF digits. Pass a `control_id` of your choosing in the options +and keep it to manage the detector later. ## **Request** diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/play.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/play.mdx index 60a112b216..3a2aeac22e 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/play.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/play.mdx @@ -10,12 +10,12 @@ max-toc-depth: 3 [play-stop]: /docs/server-sdks/reference/typescript/rest/calling/play-stop [play-volume]: /docs/server-sdks/reference/typescript/rest/calling/play-volume -Play audio or text-to-speech on an active call. Returns a `control_id` that can be -used with [`playPause()`][play-pause], -[`playResume()`][play-resume], -[`playStop()`][play-stop], and -[`playVolume()`][play-volume] to manage -the playback. +Play audio or text-to-speech on an active call. Pass a `control_id` of your +choosing in the options to manage the playback later with +[`playPause()`][play-pause], [`playResume()`][play-resume], +[`playStop()`][play-stop], and [`playVolume()`][play-volume]. The ID must be +unique per active playback on the call. The response confirms that the command +was accepted; playback state arrives asynchronously at `status_url`. ## **Request** @@ -29,7 +29,7 @@ the playback. ### Play TTS -```typescript {10} +```typescript {9-14} import { RestClient } from "@signalwire/sdk"; const client = new RestClient({ @@ -38,11 +38,13 @@ const client = new RestClient({ host: "your-space.signalwire.com" }); -// Play TTS -const result = await client.calling.play("call-id-xxx", [ - { type: "tts", params: { text: "Hello from the REST API!" } }, -]); -const controlId = result.control_id; +// Choose a control ID and keep it for later play commands +const controlId = "greeting-1"; +await client.calling.play( + "call-id-xxx", + [{ type: "tts", params: { text: "Hello from the REST API!" } }], + { control_id: controlId }, +); ``` ### Play Audio File diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/record.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/record.mdx index f8c0b59d82..d6024d0fe0 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/record.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/record.mdx @@ -9,10 +9,9 @@ max-toc-depth: 3 [resume]: /docs/server-sdks/reference/typescript/rest/calling/record-resume [stop]: /docs/server-sdks/reference/typescript/rest/calling/record-stop -Start recording an active call. Returns a `control_id` used to -[pause][pause], -[resume][resume], -or [stop][stop] the recording. +Start recording an active call. Pass a `control_id` of your choosing in the +options and keep it to [pause][pause], [resume][resume], or [stop][stop] the +recording later. ## **Request** @@ -24,7 +23,7 @@ or [stop][stop] the recording. ## **Example** -```typescript {9} +```typescript {9-13} import { RestClient } from "@signalwire/sdk"; const client = new RestClient({ @@ -33,8 +32,9 @@ const client = new RestClient({ host: "your-space.signalwire.com" }); -const result = await client.calling.record("call-id-xxx", { - audio: { format: "mp3", stereo: true } +const controlId = "recording-1"; +await client.calling.record("call-id-xxx", { + control_id: controlId, + audio: { format: "mp3", stereo: true }, }); -const controlId = result.control_id; ``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/stream.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/stream.mdx index 65141ff80b..9ef1d5abe4 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/stream.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/stream.mdx @@ -6,8 +6,9 @@ max-toc-depth: 3 --- Start streaming audio from an active call to a WebSocket endpoint. This is -commonly used for real-time speech processing, analytics, or archival. -Returns a `control_id` for stopping the stream. +commonly used for real-time speech processing, analytics, or archival. Pass a +`control_id` of your choosing in the options and keep it to stop the stream +later. ## **Request** @@ -19,7 +20,7 @@ Returns a `control_id` for stopping the stream. ## **Example** -```typescript {9} +```typescript {9-12} import { RestClient } from "@signalwire/sdk"; const client = new RestClient({ @@ -28,6 +29,8 @@ const client = new RestClient({ host: "your-space.signalwire.com" }); -const result = await client.calling.stream("call-id-xxx", "wss://example.com/audio-stream"); -const controlId = result.control_id; +const controlId = "audio-stream-1"; +await client.calling.stream("call-id-xxx", "wss://example.com/audio-stream", { + control_id: controlId, +}); ``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/tap.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/tap.mdx index 4d0d64b0fd..951c928ed6 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/tap.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/tap.mdx @@ -6,8 +6,8 @@ max-toc-depth: 3 --- Start tapping audio from an active call and sending it to an external endpoint -(e.g., a WebSocket or RTP destination). Returns a `control_id` for stopping -the tap. +(e.g., a WebSocket or RTP destination). Pass a `control_id` of your choosing in +the options and keep it to stop the tap later. ## **Request** @@ -19,7 +19,7 @@ the tap. ## **Example** -```typescript {9} +```typescript {9-15} import { RestClient } from "@signalwire/sdk"; const client = new RestClient({ @@ -28,10 +28,11 @@ const client = new RestClient({ host: "your-space.signalwire.com" }); -const result = await client.calling.tap( +const controlId = "tap-1"; +await client.calling.tap( "call-id-xxx", { type: "audio", params: { direction: "both" } }, { type: "ws", params: { uri: "wss://example.com/tap" } }, + { control_id: controlId }, ); -const controlId = result.control_id; ``` From ef3b7905eead5c47625d2facb9c5d935cde876b0 Mon Sep 17 00:00:00 2001 From: August Date: Thu, 10 Sep 2026 13:37:51 +0000 Subject: [PATCH 19/38] fix(server-sdks): supply control_id in every TypeScript calling example The Calling API requires a caller-supplied control_id on play, collect, and detect, but only the first example on each rewritten page threaded one through. The namespace overview also stopped a play under an ID that nothing had assigned. Give every command its own ID, reuse it in the follow-up stop call where there is one, and fix the off-by-one highlight range on collectStartInputTimers. Co-Authored-By: Claude Fable 5.1 --- .../typescript/rest/calling/ai-stop.mdx | 8 ++++---- .../calling/collect-start-input-timers.mdx | 6 +++--- .../typescript/rest/calling/collect.mdx | 11 ++++++---- .../typescript/rest/calling/detect.mdx | 20 +++++++++++-------- .../typescript/rest/calling/index.mdx | 7 ++++--- .../typescript/rest/calling/play.mdx | 6 +++--- 6 files changed, 33 insertions(+), 25 deletions(-) diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/ai-stop.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/ai-stop.mdx index cb53f9b9d0..0e25da978a 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/ai-stop.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/ai-stop.mdx @@ -18,7 +18,7 @@ the call itself remains active, allowing further call control operations. ## **Example** -```typescript {10} +```typescript {10-13} import { RestClient } from "@signalwire/sdk"; const client = new RestClient({ @@ -27,10 +27,10 @@ const client = new RestClient({ host: "your-space.signalwire.com" }); -// Stop AI and then play a goodbye message -await client.calling.aiStop("call-id-xxx", "ctrl-id"); +// Stop the AI agent by its control ID, then play a goodbye message under a new one +await client.calling.aiStop("call-id-xxx", "agent-1"); await client.calling.play("call-id-xxx", [ { type: "tts", params: { text: "Thank you for calling. Goodbye!" } }, -]); +], { control_id: "goodbye-1" }); await client.calling.end("call-id-xxx", { reason: "hangup" }); ``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/collect-start-input-timers.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/collect-start-input-timers.mdx index 8c5808e3bb..1c1e7e6592 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/collect-start-input-timers.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/collect-start-input-timers.mdx @@ -21,7 +21,7 @@ before starting the timer countdown. ## **Example** -```typescript {9-13,21} +```typescript {10-14,17-19,22} import { RestClient } from "@signalwire/sdk"; const client = new RestClient({ @@ -37,10 +37,10 @@ await client.calling.collect("call-id-xxx", { digits: { max: 4, terminators: "#" }, }); -// Play a prompt first +// Play a prompt under its own control ID await client.calling.play("call-id-xxx", [ { type: "tts", params: { text: "Please enter your 4-digit PIN." } }, -]); +], { control_id: "pin-prompt-1" }); // Now start the input timers await client.calling.collectStartInputTimers("call-id-xxx", controlId); diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/collect.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/collect.mdx index 50f722bd15..14cc0d7f15 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/collect.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/collect.mdx @@ -21,7 +21,7 @@ keep it to manage the collection later. ### Collect DTMF Digits -```typescript {10} +```typescript {10-14} import { RestClient } from "@signalwire/sdk"; const client = new RestClient({ @@ -30,8 +30,9 @@ const client = new RestClient({ host: "your-space.signalwire.com" }); -// Collect DTMF digits +// Collect DTMF digits under a control ID you choose const result = await client.calling.collect("call-id-xxx", { + control_id: "pin-collect-1", digits: { max: 4, terminators: "#", digit_timeout: 5.0 }, initial_timeout: 10.0, }); @@ -39,7 +40,7 @@ const result = await client.calling.collect("call-id-xxx", { ### Collect Speech -```typescript {9} +```typescript {9-15} import { RestClient } from "@signalwire/sdk"; const client = new RestClient({ @@ -49,6 +50,7 @@ const client = new RestClient({ }); const result = await client.calling.collect("call-id-xxx", { + control_id: "speech-collect-1", speech: { end_silence_timeout: 1.0, language: "en-US", @@ -58,7 +60,7 @@ const result = await client.calling.collect("call-id-xxx", { ### Collect Both -```typescript {9} +```typescript {9-14} import { RestClient } from "@signalwire/sdk"; const client = new RestClient({ @@ -68,6 +70,7 @@ const client = new RestClient({ }); const result = await client.calling.collect("call-id-xxx", { + control_id: "combined-collect-1", digits: { max: 1, terminators: "#" }, speech: { end_silence_timeout: 2.0 }, initial_timeout: 15.0, diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/detect.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/detect.mdx index 48568d17d6..d19b9b8fa0 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/detect.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/detect.mdx @@ -7,7 +7,10 @@ max-toc-depth: 3 Start a detector on an active call. Detectors can identify answering machines, fax tones, or DTMF digits. Pass a `control_id` of your choosing in the options -and keep it to manage the detector later. +and keep it. The ID must be unique per active detector on the call, and +[`detectStop()`][detect-stop] uses it to end the detector. + +[detect-stop]: /docs/server-sdks/reference/typescript/rest/calling/detect-stop ## **Request** @@ -21,7 +24,7 @@ and keep it to manage the detector later. ### Answering Machine Detection -```typescript {10} +```typescript {9-20} import { RestClient } from "@signalwire/sdk"; const client = new RestClient({ @@ -30,7 +33,8 @@ const client = new RestClient({ host: "your-space.signalwire.com" }); -// Answering machine detection +// Answering machine detection, correlated by the control ID you choose +const controlId = "amd-1"; const result = await client.calling.detect( "call-id-xxx", { @@ -40,13 +44,13 @@ const result = await client.calling.detect( end_silence_timeout: 1.0, }, }, - { timeout: 30.0 }, + { control_id: controlId, timeout: 30.0 }, ); ``` ### Fax Detection -```typescript {9} +```typescript {9-12} import { RestClient } from "@signalwire/sdk"; const client = new RestClient({ @@ -58,12 +62,12 @@ const client = new RestClient({ const result = await client.calling.detect("call-id-xxx", { type: "fax", params: { tone: "CED" }, -}); +}, { control_id: "fax-detect-1" }); ``` ### Digit Detection -```typescript {9} +```typescript {9-12} import { RestClient } from "@signalwire/sdk"; const client = new RestClient({ @@ -75,5 +79,5 @@ const client = new RestClient({ const result = await client.calling.detect("call-id-xxx", { type: "digit", params: { digits: "0123456789#*" }, -}); +}, { control_id: "digit-detect-1" }); ``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/index.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/index.mdx index 4e2c0c27c3..6f7685dd25 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/index.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/index.mdx @@ -22,7 +22,7 @@ merged into the command as-is. A final optional [`requestOptions`][request-options] argument sets the timeout, retries, and abort signal for that one request. -```typescript {9-11} +```typescript {9-11,13-15} import { RestClient } from "@signalwire/sdk"; const client = new RestClient({ @@ -35,8 +35,9 @@ const call = await client.calling.dial("+15551234567", "+15559876543", { url: "https://example.com/call-handler", }); -await client.calling.play(call.id, [{ type: "tts", params: { text: "Hello!" } }]); -await client.calling.playStop(call.id, "ctrl-id"); +const controlId = "greeting-1"; +await client.calling.play(call.id, [{ type: "tts", params: { text: "Hello!" } }], { control_id: controlId }); +await client.calling.playStop(call.id, controlId); await client.calling.end(call.id, { reason: "hangup" }); ``` diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/play.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/play.mdx index 3a2aeac22e..3afd88214e 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/play.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/play.mdx @@ -49,7 +49,7 @@ await client.calling.play( ### Play Audio File -```typescript {9} +```typescript {9-11} import { RestClient } from "@signalwire/sdk"; const client = new RestClient({ @@ -60,7 +60,7 @@ const client = new RestClient({ await client.calling.play("call-id-xxx", [ { type: "audio", params: { url: "https://example.com/greeting.mp3" } }, -]); +], { control_id: "greeting-1" }); ``` ### Play Multiple Items @@ -81,6 +81,6 @@ await client.calling.play( { type: "silence", params: { duration: 1 } }, { type: "audio", params: { url: "https://example.com/hold-music.mp3" } }, ], - { loop: 2 }, + { control_id: "hold-sequence-1", loop: 2 }, ); ``` From 532c7d2151c4e61986d425a807b035fa236a3934 Mon Sep 17 00:00:00 2001 From: August Date: Thu, 10 Sep 2026 13:37:51 +0000 Subject: [PATCH 20/38] fix(server-sdks): point SwmlService render docs at build() and render() SwmlService.getDocument() and renderDocument() still exist, but they now delegate to SwmlBuilder.build() and render(); the removed getDocument() and renderDocument() builder methods were still named as the delegates. Co-Authored-By: Claude Fable 5.1 --- .../typescript/agents/swml-service/render-document.mdx | 2 +- .../reference/typescript/agents/swml-service/render-swml.mdx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/swml-service/render-document.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/swml-service/render-document.mdx index 51e2156fb6..74806994a2 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/swml-service/render-document.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/swml-service/render-document.mdx @@ -10,7 +10,7 @@ max-toc-depth: 3 Render the current SWML document as a JSON string. This is the serialized form returned to SignalWire when a call requests SWML. Delegates to -`SwmlBuilder.renderDocument()` under the hood. +`SwmlBuilder.render()` under the hood. For the document as a plain object, use [`getDocument()`][ref-getdocument] or diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/swml-service/render-swml.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/swml-service/render-swml.mdx index 013ca750bb..0c313b2580 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/swml-service/render-swml.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/swml-service/render-swml.mdx @@ -6,7 +6,7 @@ max-toc-depth: 3 --- Render the current SWML document. For a plain `SWMLService`, this delegates to -the underlying `SwmlBuilder`'s `getDocument()` method and returns the in-memory +the underlying `SwmlBuilder`'s `build()` method and returns the in-memory document object. The signature accepts optional `callId` and `modifications` arguments. These are From dd114ecefa8efcfd03c9b9bb95bb0a2551472ca3 Mon Sep 17 00:00:00 2001 From: August Date: Thu, 10 Sep 2026 20:47:29 +0000 Subject: [PATCH 21/38] fix(server-sdks): rename userEvent example field from order to event Co-Authored-By: Claude Sonnet 5 --- .../pages/reference/typescript/rest/calling/user-event.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/user-event.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/user-event.mdx index b64a936970..c53f526beb 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/user-event.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/user-event.mdx @@ -30,6 +30,6 @@ const client = new RestClient({ }); await client.calling.userEvent("call-id-xxx", { - order: { action: "order.confirmed", order_id: "ORD-12345", amount: 49.99 }, + event: { action: "order.confirmed", order_id: "ORD-12345", amount: 49.99 }, }); ``` From e5c9802ec3e0fabf1dac48668283c250a0a93ec8 Mon Sep 17 00:00:00 2001 From: August Date: Thu, 10 Sep 2026 20:47:32 +0000 Subject: [PATCH 22/38] fix(server-sdks): correct secure default and wrapped parameter schema docs Co-Authored-By: Claude Sonnet 5 --- .../agents/agent-base/validate-tool-token.mdx | 2 +- .../reference/typescript/agents/parameter-schema.mdx | 12 ++++++------ .../typescript/agents/skill-base/define-tool.mdx | 6 ++++-- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/validate-tool-token.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/validate-tool-token.mdx index cd03deb9f0..221cf42d2c 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/validate-tool-token.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/validate-tool-token.mdx @@ -9,7 +9,7 @@ max-toc-depth: 3 Validate a per-tool HMAC token attached to an incoming SWAIG function call. Returns `false` for unknown tools, short-circuits to `true` for tools -registered without [`secure: true`][define-tool], and otherwise delegates to +registered with [`secure: false`][define-tool], and otherwise delegates to `SessionManager.validateToolToken`. Raw-dict descriptors (e.g. `DataMap` output) are always treated as secure. diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/parameter-schema.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/parameter-schema.mdx index 51551cda73..4740043840 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/parameter-schema.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/parameter-schema.mdx @@ -13,9 +13,10 @@ object for a SWAIG tool. Properties appear in the order you add them, and the result is identical to the hand-written JSON Schema object. Create one with `paramSchema()`. -[`defineTool()`][define-tool] and [`defineTypedTool()`][define-typed-tool] take -the flat property map rather than the wrapped object, so pass `properties` and -`required` from the built schema separately, as in the example below. +[`defineTool()`][define-tool] and [`defineTypedTool()`][define-typed-tool] +accept the wrapped `{ type: 'object', properties, required }` object this +builder produces, so pass `build()`'s result directly as `parameters`, as in +the example below. ```typescript {1} import { paramSchema, RECORD_FORMATS } from '@signalwire/sdk'; @@ -107,7 +108,7 @@ each with a matching union type. ## **Example** -```typescript {5-10,15-16} +```typescript {5-10,15} import { AgentBase, FunctionResult, paramSchema } from '@signalwire/sdk'; const agent = new AgentBase({ name: 'dispatch', route: '/dispatch' }); @@ -122,8 +123,7 @@ const params = paramSchema() agent.defineTool({ name: 'book_ride', description: 'Book a taxi for the caller', - parameters: params.properties, - required: params.required, + parameters: params, handler: async (args) => { return new FunctionResult(`Booked a ${args.vehicle} to ${args.pickup}.`); }, diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/skill-base/define-tool.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/skill-base/define-tool.mdx index 706ccea10f..0a19e09d6e 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/skill-base/define-tool.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/skill-base/define-tool.mdx @@ -44,8 +44,10 @@ directly instead. Async function invoked when the AI calls the tool. - - When `true`, the tool requires signed tokens for invocation. + + Whether to require token validation on tool calls. Tools are secure by + default: the rendered webhook URL carries a per-tool token. Pass `false` + only to expose the tool on the shared, unauthenticated webhook URL. From e2131688eeb98d6cb88313f46cee2e06870ad139 Mon Sep 17 00:00:00 2001 From: August Date: Thu, 10 Sep 2026 20:47:37 +0000 Subject: [PATCH 23/38] fix(server-sdks): restore deleted Python compat namespace docs Co-Authored-By: Claude Sonnet 5 --- .../guides/manage-resources/overview.mdx | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/fern/products/server-sdks/pages/guides/manage-resources/overview.mdx b/fern/products/server-sdks/pages/guides/manage-resources/overview.mdx index c112941258..ab4c234b8f 100644 --- a/fern/products/server-sdks/pages/guides/manage-resources/overview.mdx +++ b/fern/products/server-sdks/pages/guides/manage-resources/overview.mdx @@ -257,6 +257,7 @@ client.calling # REST-based call control (37 commands) client.phone_numbers # Search, purchase, manage numbers client.video # Rooms, sessions, recordings, conferences client.datasphere # Document management and semantic search +client.compat # Twilio-compatible LAML API client.logs # Message, voice, fax, conference logs client.registry # 10DLC brand/campaign management client.queues # Call queue management @@ -484,6 +485,28 @@ order = client.registry.campaigns.create_order( ) ``` +### Compatibility (LAML) Namespace + +Twilio-compatible REST API for migrating existing applications: + +```python +# List calls +calls = client.compat.calls.list() + +# Send an SMS +msg = client.compat.messages.create( + To="+15559876543", + From="+15551234567", + Body="Hello from SignalWire!", +) + +# Manage phone numbers +numbers = client.compat.phone_numbers.list() + +# Start call recording +client.compat.calls.start_recording("call-sid") +``` + ### Other Resources ```python From 67e604597e960ffd546209aa5bc778d02cfd55c9 Mon Sep 17 00:00:00 2001 From: August Date: Thu, 10 Sep 2026 20:47:41 +0000 Subject: [PATCH 24/38] fix(server-sdks): correct ai.stop control_id note and initialTimeout casing Co-Authored-By: Claude Sonnet 5 --- .../reference/typescript/relay/call/prompt-audio.mdx | 8 +------- .../pages/reference/typescript/relay/call/prompt-tts.mdx | 8 +------- .../pages/reference/typescript/rest/calling/ai-stop.mdx | 2 +- 3 files changed, 3 insertions(+), 15 deletions(-) diff --git a/fern/products/server-sdks/pages/reference/typescript/relay/call/prompt-audio.mdx b/fern/products/server-sdks/pages/reference/typescript/relay/call/prompt-audio.mdx index 8fb4621d3f..666ff91cbd 100644 --- a/fern/products/server-sdks/pages/reference/typescript/relay/call/prompt-audio.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/relay/call/prompt-audio.mdx @@ -5,14 +5,8 @@ description: "Play an audio prompt, then collect DTMF or speech input." max-toc-depth: 3 --- -[playaction]: /docs/server-sdks/reference/typescript/relay/actions [collectaction]: /docs/server-sdks/reference/typescript/relay/actions/collect-action -[detectaction]: /docs/server-sdks/reference/typescript/relay/actions -[relayevent]: /docs/server-sdks/reference/typescript/relay/events -[play]: /docs/server-sdks/reference/typescript/relay/call/play [play-and-collect]: /docs/server-sdks/reference/typescript/relay/call/play-and-collect -[detect]: /docs/server-sdks/reference/typescript/relay/call/detect -[wait-for]: /docs/server-sdks/reference/typescript/relay/call/wait-for Play an audio file as the prompt, then collect DTMF or speech input. A typed convenience over [`playAndCollect()`][play-and-collect]. @@ -24,7 +18,7 @@ convenience over [`playAndCollect()`][play-and-collect]. - Input collection configuration: `digits`, `speech`, `initial_timeout`, and + Input collection configuration: `digits`, `speech`, `initialTimeout`, and the other fields accepted by [`playAndCollect()`][play-and-collect]. diff --git a/fern/products/server-sdks/pages/reference/typescript/relay/call/prompt-tts.mdx b/fern/products/server-sdks/pages/reference/typescript/relay/call/prompt-tts.mdx index 4a582c0a19..d0a8942ffe 100644 --- a/fern/products/server-sdks/pages/reference/typescript/relay/call/prompt-tts.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/relay/call/prompt-tts.mdx @@ -5,14 +5,8 @@ description: "Speak a prompt, then collect DTMF or speech input." max-toc-depth: 3 --- -[playaction]: /docs/server-sdks/reference/typescript/relay/actions [collectaction]: /docs/server-sdks/reference/typescript/relay/actions/collect-action -[detectaction]: /docs/server-sdks/reference/typescript/relay/actions -[relayevent]: /docs/server-sdks/reference/typescript/relay/events -[play]: /docs/server-sdks/reference/typescript/relay/call/play [play-and-collect]: /docs/server-sdks/reference/typescript/relay/call/play-and-collect -[detect]: /docs/server-sdks/reference/typescript/relay/call/detect -[wait-for]: /docs/server-sdks/reference/typescript/relay/call/wait-for Speak a text-to-speech prompt, then collect DTMF or speech input. A typed convenience over [`playAndCollect()`][play-and-collect]. @@ -24,7 +18,7 @@ convenience over [`playAndCollect()`][play-and-collect]. - Input collection configuration: `digits`, `speech`, `initial_timeout`, and + Input collection configuration: `digits`, `speech`, `initialTimeout`, and the other fields accepted by [`playAndCollect()`][play-and-collect]. diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/ai-stop.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/ai-stop.mdx index 0e25da978a..c7f9a65a08 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/ai-stop.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/ai-stop.mdx @@ -27,7 +27,7 @@ const client = new RestClient({ host: "your-space.signalwire.com" }); -// Stop the AI agent by its control ID, then play a goodbye message under a new one +// Stop the AI agent running on the call, then play a goodbye message under a new control ID await client.calling.aiStop("call-id-xxx", "agent-1"); await client.calling.play("call-id-xxx", [ { type: "tts", params: { text: "Thank you for calling. Goodbye!" } }, From 7cb91b356f51fa7b18cfe1b723ddafa8e253d215 Mon Sep 17 00:00:00 2001 From: August Date: Thu, 10 Sep 2026 20:47:46 +0000 Subject: [PATCH 25/38] docs(server-sdks): rename stale Resource-suffixed reference titles Co-Authored-By: Claude Sonnet 5 --- .../server-sdks/pages/reference/typescript/rest/chat/index.mdx | 2 +- .../pages/reference/typescript/rest/imported-numbers/index.mdx | 2 +- .../pages/reference/typescript/rest/lookup/index.mdx | 2 +- .../pages/reference/typescript/rest/pubsub/index.mdx | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/chat/index.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/chat/index.mdx index eb5980c04e..79ffff0298 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/chat/index.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/chat/index.mdx @@ -1,5 +1,5 @@ --- -title: "ChatResource" +title: "Chat" slug: /reference/typescript/rest/chat description: Chat API namespace for token creation. max-toc-depth: 3 diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/imported-numbers/index.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/imported-numbers/index.mdx index ad5956c4da..d57d05235f 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/imported-numbers/index.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/imported-numbers/index.mdx @@ -1,5 +1,5 @@ --- -title: "ImportedNumbersResource" +title: "ImportedNumbers" slug: /reference/typescript/rest/imported-numbers description: Imported Phone Numbers namespace for creating imported numbers. max-toc-depth: 3 diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/lookup/index.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/lookup/index.mdx index acdc4ee968..8e9f6c777d 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/lookup/index.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/lookup/index.mdx @@ -1,5 +1,5 @@ --- -title: "LookupResource" +title: "Lookup" slug: /reference/typescript/rest/lookup description: Phone Number Lookup namespace. max-toc-depth: 3 diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/pubsub/index.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/pubsub/index.mdx index 489fd0fbb4..5e4ca8dec9 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/pubsub/index.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/pubsub/index.mdx @@ -1,5 +1,5 @@ --- -title: "PubSubResource" +title: "PubSub" slug: /reference/typescript/rest/pubsub description: PubSub API namespace for token creation. max-toc-depth: 3 From dab36fee1cb10a0f3469043a4ba57c4e4f6df3f2 Mon Sep 17 00:00:00 2001 From: August Date: Thu, 10 Sep 2026 20:47:50 +0000 Subject: [PATCH 26/38] docs(server-sdks): sentence-case Title-Case headings Co-Authored-By: Claude Sonnet 5 --- .../python/agents/bedrock-agent/index.mdx | 2 +- .../python/agents/cli/swaig-test.mdx | 26 +++++++++---------- .../typescript/agents/bedrock-agent/index.mdx | 2 +- .../typescript/agents/cli/swaig-test.mdx | 10 +++---- 4 files changed, 20 insertions(+), 20 deletions(-) diff --git a/fern/products/server-sdks/pages/reference/python/agents/bedrock-agent/index.mdx b/fern/products/server-sdks/pages/reference/python/agents/bedrock-agent/index.mdx index 8135558e5c..6cf7005b2a 100644 --- a/fern/products/server-sdks/pages/reference/python/agents/bedrock-agent/index.mdx +++ b/fern/products/server-sdks/pages/reference/python/agents/bedrock-agent/index.mdx @@ -72,7 +72,7 @@ full specification. -## **Overridden Behavior** +## **Overridden behavior** BedrockAgent overrides several AgentBase methods to adapt for the Bedrock voice-to-voice model: diff --git a/fern/products/server-sdks/pages/reference/python/agents/cli/swaig-test.mdx b/fern/products/server-sdks/pages/reference/python/agents/cli/swaig-test.mdx index ac4c3fdbe0..d32f397f68 100644 --- a/fern/products/server-sdks/pages/reference/python/agents/cli/swaig-test.mdx +++ b/fern/products/server-sdks/pages/reference/python/agents/cli/swaig-test.mdx @@ -40,7 +40,7 @@ Choose one action per invocation: after the function name. -## Common Options +## Common options Enable verbose output with debug information, including raw result types and @@ -62,7 +62,7 @@ Choose one action per invocation: Mutually exclusive with `--agent-class`. -## Function Execution Options +## Function execution options Use minimal `post_data` containing only the function arguments. This is the default behavior. @@ -77,7 +77,7 @@ Choose one action per invocation: JSON string with custom `post_data` overrides merged into the request payload. -## SWML Generation Options +## SWML generation options Simulated call type. Valid values: @@ -103,7 +103,7 @@ Choose one action per invocation: Override the destination/to extension in mock data. -## Data Customization +## Data customization JSON string injected as `userVariables` in the mock request. Used to test @@ -124,7 +124,7 @@ Choose one action per invocation: Can be specified multiple times. -## Serverless Simulation +## Serverless simulation Simulate a serverless platform environment. Valid values: @@ -146,7 +146,7 @@ Choose one action per invocation: Load environment variables from a file (one `KEY=VALUE` per line). -### Platform-Specific Options +### Platform-specific options Run `swaig-test agent.py --help-platforms` for the full list. Key options per platform: @@ -158,7 +158,7 @@ Run `swaig-test agent.py --help-platforms` for the full list. Key options per pl **Azure**: `--azure-env`, `--azure-function-url` -## Extended Help +## Extended help Show detailed documentation for all serverless platform options. @@ -170,7 +170,7 @@ Run `swaig-test agent.py --help-platforms` for the full list. Key options per pl ## Examples -### List Tools and Generate SWML +### List tools and generate SWML ```bash # List all registered SWAIG functions @@ -186,7 +186,7 @@ swaig-test agent.py --dump-swml --raw | jq '.' swaig-test agent.py --dump-swml --raw | jq '.sections.main[1].ai.SWAIG.functions' ``` -### Execute Functions +### Execute functions ```bash # Execute with CLI-style arguments @@ -206,7 +206,7 @@ Arguments are automatically type-converted: numeric values become integers or floats, `true`/`false` become booleans, and everything else stays as a string. -### Multi-Agent Files +### Multi-agent files ```bash # Discover agents in the file @@ -219,7 +219,7 @@ swaig-test multi_agent.py --agent-class SalesAgent --list-tools swaig-test multi_agent.py --route /support --exec create_ticket --issue "Login problem" ``` -### Dynamic Agent Testing +### Dynamic agent testing ```bash # Test with query parameters @@ -232,7 +232,7 @@ swaig-test dynamic_agent.py --dump-swml \ --user-vars '{"preferences":{"language":"es"}}' ``` -### Serverless Simulation +### Serverless simulation ```bash # AWS Lambda @@ -259,7 +259,7 @@ swaig-test agent.py --simulate-serverless lambda \ --exec my_function ``` -## Exit Codes +## Exit codes | Code | Meaning | |------|---------| diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/bedrock-agent/index.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/bedrock-agent/index.mdx index 060f5497e0..4d09bea823 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/bedrock-agent/index.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/bedrock-agent/index.mdx @@ -39,7 +39,7 @@ const agent = new BedrockAgent({ The `createBedrockAgent(config)` factory function returns the same instance as `new BedrockAgent(config)`. -### Constructor Parameters +### Constructor parameters Agent name. diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/cli/swaig-test.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/cli/swaig-test.mdx index 5603b8a764..cba4ba91cc 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/cli/swaig-test.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/cli/swaig-test.mdx @@ -51,7 +51,7 @@ Choose one action per invocation: after `--exec`. -## Common Options +## Common options Output raw JSON only, suppressing all logs. Designed for piping to `jq`. @@ -73,7 +73,7 @@ Choose one action per invocation: Override the agent's route. -## Function Execution Options +## Function execution options A function argument. Repeat for each argument. @@ -84,7 +84,7 @@ Choose one action per invocation: `--override call.state=answered`). Repeatable. -## SWML Generation Options +## SWML generation options Simulated call type: `sip` or `webrtc`. @@ -110,7 +110,7 @@ Choose one action per invocation: Override the destination extension in the mock data. -## Serverless Simulation +## Serverless simulation Render SWML as the agent would on a serverless platform. Valid values: @@ -178,7 +178,7 @@ npx swaig-test src/agent.ts --simulate-serverless gcf \ --env-file .env ``` -## Exit Codes +## Exit codes | Code | Meaning | |------|---------| From b2b3e8be5c5a8f189aaa875d5969a80a7a1bc561 Mon Sep 17 00:00:00 2001 From: August Date: Thu, 10 Sep 2026 20:47:54 +0000 Subject: [PATCH 27/38] docs(server-sdks): consolidate control_id note across calling pages Co-Authored-By: Claude Sonnet 5 --- .../reference/typescript/rest/calling/collect.mdx | 7 +++++-- .../reference/typescript/rest/calling/detect.mdx | 8 +++++--- .../reference/typescript/rest/calling/play.mdx | 15 +++++++++------ .../reference/typescript/rest/calling/record.mdx | 9 ++++++--- .../reference/typescript/rest/calling/stream.mdx | 8 +++++--- .../reference/typescript/rest/calling/tap.mdx | 7 +++++-- .../typescript/rest/calling/transcribe.mdx | 7 +++++-- fern/snippets/server-sdks/control-id-note.mdx | 3 +++ 8 files changed, 43 insertions(+), 21 deletions(-) create mode 100644 fern/snippets/server-sdks/control-id-note.mdx diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/collect.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/collect.mdx index 14cc0d7f15..ad4fa52462 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/collect.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/collect.mdx @@ -6,8 +6,11 @@ max-toc-depth: 3 --- Start collecting user input on an active call. Supports DTMF digit collection -and speech recognition. Pass a `control_id` of your choosing in the options and -keep it to manage the collection later. +and speech recognition. + + + +Keep it to manage the collection later. ## **Request** diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/detect.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/detect.mdx index d19b9b8fa0..0aed796db5 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/detect.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/detect.mdx @@ -6,9 +6,11 @@ max-toc-depth: 3 --- Start a detector on an active call. Detectors can identify answering machines, -fax tones, or DTMF digits. Pass a `control_id` of your choosing in the options -and keep it. The ID must be unique per active detector on the call, and -[`detectStop()`][detect-stop] uses it to end the detector. +fax tones, or DTMF digits. + + + +Keep it — [`detectStop()`][detect-stop] uses it to end the detector. [detect-stop]: /docs/server-sdks/reference/typescript/rest/calling/detect-stop diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/play.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/play.mdx index 3afd88214e..7685593395 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/play.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/play.mdx @@ -10,12 +10,15 @@ max-toc-depth: 3 [play-stop]: /docs/server-sdks/reference/typescript/rest/calling/play-stop [play-volume]: /docs/server-sdks/reference/typescript/rest/calling/play-volume -Play audio or text-to-speech on an active call. Pass a `control_id` of your -choosing in the options to manage the playback later with -[`playPause()`][play-pause], [`playResume()`][play-resume], -[`playStop()`][play-stop], and [`playVolume()`][play-volume]. The ID must be -unique per active playback on the call. The response confirms that the command -was accepted; playback state arrives asynchronously at `status_url`. +Play audio or text-to-speech on an active call. The response confirms that +the command was accepted; playback state arrives asynchronously at +`status_url`. + + + +Keep it to manage the playback later with [`playPause()`][play-pause], +[`playResume()`][play-resume], [`playStop()`][play-stop], and +[`playVolume()`][play-volume]. ## **Request** diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/record.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/record.mdx index d6024d0fe0..fea37452d8 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/record.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/record.mdx @@ -9,9 +9,12 @@ max-toc-depth: 3 [resume]: /docs/server-sdks/reference/typescript/rest/calling/record-resume [stop]: /docs/server-sdks/reference/typescript/rest/calling/record-stop -Start recording an active call. Pass a `control_id` of your choosing in the -options and keep it to [pause][pause], [resume][resume], or [stop][stop] the -recording later. +Start recording an active call. + + + +Keep it to [pause][pause], [resume][resume], or [stop][stop] the recording +later. ## **Request** diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/stream.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/stream.mdx index 9ef1d5abe4..bb66c1bf1c 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/stream.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/stream.mdx @@ -6,9 +6,11 @@ max-toc-depth: 3 --- Start streaming audio from an active call to a WebSocket endpoint. This is -commonly used for real-time speech processing, analytics, or archival. Pass a -`control_id` of your choosing in the options and keep it to stop the stream -later. +commonly used for real-time speech processing, analytics, or archival. + + + +Keep it to stop the stream later. ## **Request** diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/tap.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/tap.mdx index 951c928ed6..292046612f 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/tap.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/tap.mdx @@ -6,8 +6,11 @@ max-toc-depth: 3 --- Start tapping audio from an active call and sending it to an external endpoint -(e.g., a WebSocket or RTP destination). Pass a `control_id` of your choosing in -the options and keep it to stop the tap later. +(e.g., a WebSocket or RTP destination). + + + +Keep it to stop the tap later. ## **Request** diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/transcribe.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/transcribe.mdx index a359789db3..fdbacf7b54 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/transcribe.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/transcribe.mdx @@ -7,8 +7,11 @@ max-toc-depth: 3 Start transcribing an active call in the background. The transcription covers the whole call and completes when the call ends. For real-time transcription, use live transcription. -Status updates are delivered to the optional `status_url`. Supply a `control_id` so you -can stop the transcription later with +Status updates are delivered to the optional `status_url`. + + + +Keep it to stop the transcription later with [`transcribeStop`](/docs/server-sdks/reference/typescript/rest/calling/transcribe-stop). ## **Request** diff --git a/fern/snippets/server-sdks/control-id-note.mdx b/fern/snippets/server-sdks/control-id-note.mdx new file mode 100644 index 0000000000..268c3976f6 --- /dev/null +++ b/fern/snippets/server-sdks/control-id-note.mdx @@ -0,0 +1,3 @@ +`control_id` is a caller-chosen identifier for this operation, unique per +active operation of this kind on the call. The TypeScript SDK types it as +optional, but the API requires it — a request that omits it is rejected. From 46f0eb29515e59b222695e360e42ab96eaa5990e Mon Sep 17 00:00:00 2001 From: August Date: Thu, 10 Sep 2026 20:47:58 +0000 Subject: [PATCH 28/38] docs(server-sdks): dedupe npm install snippet Co-Authored-By: Claude Sonnet 5 --- .../reference/typescript/agents/ai-chat-client/index.mdx | 4 +--- .../pages/reference/typescript/agents/cli/index.mdx | 4 +--- fern/snippets/server-sdks/npm-install.mdx | 3 +++ 3 files changed, 5 insertions(+), 6 deletions(-) create mode 100644 fern/snippets/server-sdks/npm-install.mdx diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/index.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/index.mdx index 6e4693a3f5..4b3f41a328 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/index.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/index.mdx @@ -23,9 +23,7 @@ Every method returns a promise. A turn waits on a full model round trip, measured in seconds, so don't block on it in a request handler that serves other users. -```bash -npm install @signalwire/sdk -``` + This class holds your API token, so it belongs on a server you control. Never diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/cli/index.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/cli/index.mdx index 34550ef7de..0ddcbb3ccc 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/cli/index.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/cli/index.mdx @@ -13,9 +13,7 @@ functions, and executes a function with arguments you supply, all without deploying or placing a call. The package's `bin` entry makes it available through `npx` after installation. -```bash -npm install @signalwire/sdk -``` + ## Available tools diff --git a/fern/snippets/server-sdks/npm-install.mdx b/fern/snippets/server-sdks/npm-install.mdx new file mode 100644 index 0000000000..55d5148d56 --- /dev/null +++ b/fern/snippets/server-sdks/npm-install.mdx @@ -0,0 +1,3 @@ +```bash +npm install @signalwire/sdk +``` From e564e6fc10fa02b048c8dff3075a61a898dba5ea Mon Sep 17 00:00:00 2001 From: August Date: Thu, 10 Sep 2026 20:48:04 +0000 Subject: [PATCH 29/38] docs(server-sdks): drop unused link-reference boilerplate in relay call pages Co-Authored-By: Claude Sonnet 5 --- .../typescript/relay/call/detect-answering-machine.mdx | 6 ------ .../pages/reference/typescript/relay/call/detect-digit.mdx | 6 ------ .../pages/reference/typescript/relay/call/detect-fax.mdx | 6 ------ .../pages/reference/typescript/relay/call/play-audio.mdx | 6 ------ .../pages/reference/typescript/relay/call/play-ringtone.mdx | 6 ------ .../pages/reference/typescript/relay/call/play-silence.mdx | 6 ------ .../pages/reference/typescript/relay/call/play-tts.mdx | 6 ------ .../reference/typescript/relay/call/wait-for-answered.mdx | 6 ------ .../reference/typescript/relay/call/wait-for-ending.mdx | 6 ------ .../reference/typescript/relay/call/wait-for-ringing.mdx | 6 ------ 10 files changed, 60 deletions(-) diff --git a/fern/products/server-sdks/pages/reference/typescript/relay/call/detect-answering-machine.mdx b/fern/products/server-sdks/pages/reference/typescript/relay/call/detect-answering-machine.mdx index c87370989d..f91d92cb83 100644 --- a/fern/products/server-sdks/pages/reference/typescript/relay/call/detect-answering-machine.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/relay/call/detect-answering-machine.mdx @@ -5,14 +5,8 @@ description: "Detect whether a human or an answering machine picked up." max-toc-depth: 3 --- -[playaction]: /docs/server-sdks/reference/typescript/relay/actions -[collectaction]: /docs/server-sdks/reference/typescript/relay/actions [detectaction]: /docs/server-sdks/reference/typescript/relay/actions -[relayevent]: /docs/server-sdks/reference/typescript/relay/events -[play]: /docs/server-sdks/reference/typescript/relay/call/play -[play-and-collect]: /docs/server-sdks/reference/typescript/relay/call/play-and-collect [detect]: /docs/server-sdks/reference/typescript/relay/call/detect -[wait-for]: /docs/server-sdks/reference/typescript/relay/call/wait-for Detect whether a human or an answering machine picked up. A typed convenience over [`detect()`][detect] with the `machine` detector. diff --git a/fern/products/server-sdks/pages/reference/typescript/relay/call/detect-digit.mdx b/fern/products/server-sdks/pages/reference/typescript/relay/call/detect-digit.mdx index 2ea39eeea4..0c68461869 100644 --- a/fern/products/server-sdks/pages/reference/typescript/relay/call/detect-digit.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/relay/call/detect-digit.mdx @@ -5,14 +5,8 @@ description: "Detect DTMF digits on a call." max-toc-depth: 3 --- -[playaction]: /docs/server-sdks/reference/typescript/relay/actions -[collectaction]: /docs/server-sdks/reference/typescript/relay/actions [detectaction]: /docs/server-sdks/reference/typescript/relay/actions -[relayevent]: /docs/server-sdks/reference/typescript/relay/events -[play]: /docs/server-sdks/reference/typescript/relay/call/play -[play-and-collect]: /docs/server-sdks/reference/typescript/relay/call/play-and-collect [detect]: /docs/server-sdks/reference/typescript/relay/call/detect -[wait-for]: /docs/server-sdks/reference/typescript/relay/call/wait-for Detect DTMF digits on the call. A typed convenience over [`detect()`][detect] with the `digit` detector. diff --git a/fern/products/server-sdks/pages/reference/typescript/relay/call/detect-fax.mdx b/fern/products/server-sdks/pages/reference/typescript/relay/call/detect-fax.mdx index 6650c86ea9..e115de29df 100644 --- a/fern/products/server-sdks/pages/reference/typescript/relay/call/detect-fax.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/relay/call/detect-fax.mdx @@ -5,14 +5,8 @@ description: "Detect a fax tone on a call." max-toc-depth: 3 --- -[playaction]: /docs/server-sdks/reference/typescript/relay/actions -[collectaction]: /docs/server-sdks/reference/typescript/relay/actions [detectaction]: /docs/server-sdks/reference/typescript/relay/actions -[relayevent]: /docs/server-sdks/reference/typescript/relay/events -[play]: /docs/server-sdks/reference/typescript/relay/call/play -[play-and-collect]: /docs/server-sdks/reference/typescript/relay/call/play-and-collect [detect]: /docs/server-sdks/reference/typescript/relay/call/detect -[wait-for]: /docs/server-sdks/reference/typescript/relay/call/wait-for Detect a fax tone on the call. A typed convenience over [`detect()`][detect] with the `fax` detector. diff --git a/fern/products/server-sdks/pages/reference/typescript/relay/call/play-audio.mdx b/fern/products/server-sdks/pages/reference/typescript/relay/call/play-audio.mdx index 0adeacb892..627c4cc24a 100644 --- a/fern/products/server-sdks/pages/reference/typescript/relay/call/play-audio.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/relay/call/play-audio.mdx @@ -6,13 +6,7 @@ max-toc-depth: 3 --- [playaction]: /docs/server-sdks/reference/typescript/relay/actions -[collectaction]: /docs/server-sdks/reference/typescript/relay/actions -[detectaction]: /docs/server-sdks/reference/typescript/relay/actions -[relayevent]: /docs/server-sdks/reference/typescript/relay/events [play]: /docs/server-sdks/reference/typescript/relay/call/play -[play-and-collect]: /docs/server-sdks/reference/typescript/relay/call/play-and-collect -[detect]: /docs/server-sdks/reference/typescript/relay/call/detect -[wait-for]: /docs/server-sdks/reference/typescript/relay/call/wait-for Play an audio file from a URL on the call. A typed convenience over [`play()`][play]. diff --git a/fern/products/server-sdks/pages/reference/typescript/relay/call/play-ringtone.mdx b/fern/products/server-sdks/pages/reference/typescript/relay/call/play-ringtone.mdx index efeac90024..b8ddea59bb 100644 --- a/fern/products/server-sdks/pages/reference/typescript/relay/call/play-ringtone.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/relay/call/play-ringtone.mdx @@ -6,13 +6,7 @@ max-toc-depth: 3 --- [playaction]: /docs/server-sdks/reference/typescript/relay/actions -[collectaction]: /docs/server-sdks/reference/typescript/relay/actions -[detectaction]: /docs/server-sdks/reference/typescript/relay/actions -[relayevent]: /docs/server-sdks/reference/typescript/relay/events [play]: /docs/server-sdks/reference/typescript/relay/call/play -[play-and-collect]: /docs/server-sdks/reference/typescript/relay/call/play-and-collect -[detect]: /docs/server-sdks/reference/typescript/relay/call/detect -[wait-for]: /docs/server-sdks/reference/typescript/relay/call/wait-for Play a named ringtone on the call. A typed convenience over [`play()`][play]. diff --git a/fern/products/server-sdks/pages/reference/typescript/relay/call/play-silence.mdx b/fern/products/server-sdks/pages/reference/typescript/relay/call/play-silence.mdx index 911e986230..7137ccbf9b 100644 --- a/fern/products/server-sdks/pages/reference/typescript/relay/call/play-silence.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/relay/call/play-silence.mdx @@ -6,13 +6,7 @@ max-toc-depth: 3 --- [playaction]: /docs/server-sdks/reference/typescript/relay/actions -[collectaction]: /docs/server-sdks/reference/typescript/relay/actions -[detectaction]: /docs/server-sdks/reference/typescript/relay/actions -[relayevent]: /docs/server-sdks/reference/typescript/relay/events [play]: /docs/server-sdks/reference/typescript/relay/call/play -[play-and-collect]: /docs/server-sdks/reference/typescript/relay/call/play-and-collect -[detect]: /docs/server-sdks/reference/typescript/relay/call/detect -[wait-for]: /docs/server-sdks/reference/typescript/relay/call/wait-for Play silence on the call for `duration` seconds. A typed convenience over [`play()`][play]. diff --git a/fern/products/server-sdks/pages/reference/typescript/relay/call/play-tts.mdx b/fern/products/server-sdks/pages/reference/typescript/relay/call/play-tts.mdx index ddc770d95a..7d8f69afc0 100644 --- a/fern/products/server-sdks/pages/reference/typescript/relay/call/play-tts.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/relay/call/play-tts.mdx @@ -6,13 +6,7 @@ max-toc-depth: 3 --- [playaction]: /docs/server-sdks/reference/typescript/relay/actions -[collectaction]: /docs/server-sdks/reference/typescript/relay/actions -[detectaction]: /docs/server-sdks/reference/typescript/relay/actions -[relayevent]: /docs/server-sdks/reference/typescript/relay/events [play]: /docs/server-sdks/reference/typescript/relay/call/play -[play-and-collect]: /docs/server-sdks/reference/typescript/relay/call/play-and-collect -[detect]: /docs/server-sdks/reference/typescript/relay/call/detect -[wait-for]: /docs/server-sdks/reference/typescript/relay/call/wait-for Play text-to-speech on the call. A typed convenience over [`play()`][play] that builds the TTS media item for you. diff --git a/fern/products/server-sdks/pages/reference/typescript/relay/call/wait-for-answered.mdx b/fern/products/server-sdks/pages/reference/typescript/relay/call/wait-for-answered.mdx index aeb38a7608..f31bdb4ac6 100644 --- a/fern/products/server-sdks/pages/reference/typescript/relay/call/wait-for-answered.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/relay/call/wait-for-answered.mdx @@ -5,13 +5,7 @@ description: "Wait for a call to reach the answered state." max-toc-depth: 3 --- -[playaction]: /docs/server-sdks/reference/typescript/relay/actions -[collectaction]: /docs/server-sdks/reference/typescript/relay/actions -[detectaction]: /docs/server-sdks/reference/typescript/relay/actions [relayevent]: /docs/server-sdks/reference/typescript/relay/events -[play]: /docs/server-sdks/reference/typescript/relay/call/play -[play-and-collect]: /docs/server-sdks/reference/typescript/relay/call/play-and-collect -[detect]: /docs/server-sdks/reference/typescript/relay/call/detect [wait-for]: /docs/server-sdks/reference/typescript/relay/call/wait-for Wait for the call to reach the `answered` state. Returns immediately if the call diff --git a/fern/products/server-sdks/pages/reference/typescript/relay/call/wait-for-ending.mdx b/fern/products/server-sdks/pages/reference/typescript/relay/call/wait-for-ending.mdx index 7cb0eb85ab..33c1669dfc 100644 --- a/fern/products/server-sdks/pages/reference/typescript/relay/call/wait-for-ending.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/relay/call/wait-for-ending.mdx @@ -5,13 +5,7 @@ description: "Wait for a call to reach the ending state." max-toc-depth: 3 --- -[playaction]: /docs/server-sdks/reference/typescript/relay/actions -[collectaction]: /docs/server-sdks/reference/typescript/relay/actions -[detectaction]: /docs/server-sdks/reference/typescript/relay/actions [relayevent]: /docs/server-sdks/reference/typescript/relay/events -[play]: /docs/server-sdks/reference/typescript/relay/call/play -[play-and-collect]: /docs/server-sdks/reference/typescript/relay/call/play-and-collect -[detect]: /docs/server-sdks/reference/typescript/relay/call/detect [wait-for]: /docs/server-sdks/reference/typescript/relay/call/wait-for Wait for the call to reach the `ending` state. Returns immediately if the call diff --git a/fern/products/server-sdks/pages/reference/typescript/relay/call/wait-for-ringing.mdx b/fern/products/server-sdks/pages/reference/typescript/relay/call/wait-for-ringing.mdx index 1225926e3f..6ab8af9e2d 100644 --- a/fern/products/server-sdks/pages/reference/typescript/relay/call/wait-for-ringing.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/relay/call/wait-for-ringing.mdx @@ -5,13 +5,7 @@ description: "Wait for a call to reach the ringing state." max-toc-depth: 3 --- -[playaction]: /docs/server-sdks/reference/typescript/relay/actions -[collectaction]: /docs/server-sdks/reference/typescript/relay/actions -[detectaction]: /docs/server-sdks/reference/typescript/relay/actions [relayevent]: /docs/server-sdks/reference/typescript/relay/events -[play]: /docs/server-sdks/reference/typescript/relay/call/play -[play-and-collect]: /docs/server-sdks/reference/typescript/relay/call/play-and-collect -[detect]: /docs/server-sdks/reference/typescript/relay/call/detect [wait-for]: /docs/server-sdks/reference/typescript/relay/call/wait-for Wait for the call to reach the `ringing` state. Returns immediately if the call From e3679977ce5ae26b0aa0bf4ab320709635027c66 Mon Sep 17 00:00:00 2001 From: August Date: Fri, 11 Sep 2026 14:08:06 +0000 Subject: [PATCH 30/38] fix(server-sdks): restore wire-name initial_timeout on promptTTS and promptAudio Co-Authored-By: Claude Fable 5.1 --- .../pages/reference/typescript/relay/call/prompt-audio.mdx | 5 +++-- .../pages/reference/typescript/relay/call/prompt-tts.mdx | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/fern/products/server-sdks/pages/reference/typescript/relay/call/prompt-audio.mdx b/fern/products/server-sdks/pages/reference/typescript/relay/call/prompt-audio.mdx index 666ff91cbd..dcfbab9fec 100644 --- a/fern/products/server-sdks/pages/reference/typescript/relay/call/prompt-audio.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/relay/call/prompt-audio.mdx @@ -18,8 +18,9 @@ convenience over [`playAndCollect()`][play-and-collect]. - Input collection configuration: `digits`, `speech`, `initialTimeout`, and - the other fields accepted by [`playAndCollect()`][play-and-collect]. + Input collection configuration: `digits`, `speech`, `initial_timeout`, and + the other fields accepted by [`playAndCollect()`][play-and-collect]. Field + names are the snake_case wire names; the object is sent as-is. diff --git a/fern/products/server-sdks/pages/reference/typescript/relay/call/prompt-tts.mdx b/fern/products/server-sdks/pages/reference/typescript/relay/call/prompt-tts.mdx index d0a8942ffe..99f58c9452 100644 --- a/fern/products/server-sdks/pages/reference/typescript/relay/call/prompt-tts.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/relay/call/prompt-tts.mdx @@ -18,8 +18,9 @@ convenience over [`playAndCollect()`][play-and-collect]. - Input collection configuration: `digits`, `speech`, `initialTimeout`, and - the other fields accepted by [`playAndCollect()`][play-and-collect]. + Input collection configuration: `digits`, `speech`, `initial_timeout`, and + the other fields accepted by [`playAndCollect()`][play-and-collect]. Field + names are the snake_case wire names; the object is sent as-is. From 4ec2c1082469b9a7e84c09e4d940c82c5764dc5e Mon Sep 17 00:00:00 2001 From: August Date: Fri, 11 Sep 2026 14:08:06 +0000 Subject: [PATCH 31/38] fix(server-sdks): correct swaig-test --override example to a top-level key Co-Authored-By: Claude Fable 5.1 --- .../pages/reference/typescript/agents/cli/swaig-test.mdx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/cli/swaig-test.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/cli/swaig-test.mdx index cba4ba91cc..c0073f9f7a 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/cli/swaig-test.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/cli/swaig-test.mdx @@ -80,8 +80,8 @@ Choose one action per invocation: - Override a field in the mock call data using dot-path notation (e.g., - `--override call.state=answered`). Repeatable. + Override a top-level field in the mock call data (e.g., + `--override call_state=answered`). Repeatable. ## SWML generation options @@ -153,7 +153,7 @@ npx swaig-test src/agent.ts --exec search --arg query="AI agents" --arg limit=5 # Execute with verbose debug output and a realistic call state npx swaig-test src/agent.ts --verbose --exec book_ride \ --arg pickup="123 Gough Street" \ - --override call.state=answered + --override call_state=answered ``` ### Multi-agent files From a96390cb68cb9e3d30466ffb5aee29d3f0dc1fd4 Mon Sep 17 00:00:00 2001 From: August Date: Fri, 11 Sep 2026 14:08:06 +0000 Subject: [PATCH 32/38] docs(server-sdks): state SIGNALWIRE_RELAY_HOST precedence over SIGNALWIRE_SPACE Co-Authored-By: Claude Fable 5.1 --- .../typescript/agents/configuration/environment-variables.mdx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/configuration/environment-variables.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/configuration/environment-variables.mdx index 81b31c83b3..f7f2b49f24 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/configuration/environment-variables.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/configuration/environment-variables.mdx @@ -213,7 +213,8 @@ These variables are shared between the Relay WebSocket client and the REST HTTP - Override the Relay WebSocket host. Defaults to `relay.signalwire.com`. + Override the Relay WebSocket host. Takes precedence over `SIGNALWIRE_SPACE`; + the `host` constructor option takes precedence over both. From 7081f437077ca58088f323f7ba0a2d7992ffe394 Mon Sep 17 00:00:00 2001 From: August Date: Fri, 11 Sep 2026 14:08:06 +0000 Subject: [PATCH 33/38] docs(server-sdks): drop wrong Python service comparison on SwmlBuilder.document Co-Authored-By: Claude Fable 5.1 --- .../pages/reference/typescript/agents/swml-builder/document.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/document.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/document.mdx index f7deceb298..eb7d9d1113 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/document.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/document.mdx @@ -9,7 +9,7 @@ max-toc-depth: 3 Read-only getter for the underlying SWML document object. Provides direct access to the mutable document (the returned reference is the internal object, -not a copy). Equivalent to the Python SDK's `service` property on `SWMLBuilder`. +not a copy). Prefer [`build()`][ref-build] when you want an explicit method call for From 195d717b457cb14b574f8b35a22183af760c2cf8 Mon Sep 17 00:00:00 2001 From: August Date: Fri, 11 Sep 2026 14:08:06 +0000 Subject: [PATCH 34/38] docs(server-sdks): name the Relay detect command on detectAnsweringMachine Co-Authored-By: Claude Fable 5.1 --- .../typescript/relay/call/detect-answering-machine.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fern/products/server-sdks/pages/reference/typescript/relay/call/detect-answering-machine.mdx b/fern/products/server-sdks/pages/reference/typescript/relay/call/detect-answering-machine.mdx index f91d92cb83..b0799b079e 100644 --- a/fern/products/server-sdks/pages/reference/typescript/relay/call/detect-answering-machine.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/relay/call/detect-answering-machine.mdx @@ -14,8 +14,8 @@ over [`detect()`][detect] with the `machine` detector. ## **Parameters** - Detector options. Each maps to the matching snake_case field of the SWML - `machine` detector. + Detector options. Each maps to the matching snake_case param of the + [`detect()`][detect] command's `machine` detector type. From b49302879ed7ba76f658142b9a82af6db9186b59 Mon Sep 17 00:00:00 2001 From: August Date: Fri, 11 Sep 2026 15:12:18 +0000 Subject: [PATCH 35/38] docs(sdk): document SIGNALWIRE_SPACE behavior across TypeScript clients Co-Authored-By: Claude Fable 5.1 --- .../agents/ai-chat-client/index.mdx | 5 ++++- .../configuration/environment-variables.mdx | 20 ++++++++++++++++--- .../typescript/relay/client/index.mdx | 7 +++++-- 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/index.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/index.mdx index 4b3f41a328..e0ff4ec9b6 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/index.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/index.mdx @@ -42,7 +42,10 @@ other users. - Your Space name, used to build the service URL. Falls back to `SIGNALWIRE_SPACE`. + Your space name, `your-space` rather than `your-space.signalwire.com`, used to build + the service URL. Falls back to `SIGNALWIRE_SPACE`. `RestClient` reads that variable + as a full hostname, so a value set for REST builds a wrong URL here; pass `space` or + `url` explicitly in that case. diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/configuration/environment-variables.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/configuration/environment-variables.mdx index f7f2b49f24..a61cb75483 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/configuration/environment-variables.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/configuration/environment-variables.mdx @@ -183,7 +183,9 @@ for webhook URL generation. ## Relay and REST Client -These variables are shared between the Relay WebSocket client and the REST HTTP client. +`RelayClient`, `RestClient`, and `AIChatClient` read these variables. The +three clients agree on the credential variables but not on `SIGNALWIRE_SPACE`, +so read that entry before setting it in a process that uses more than one client. SignalWire project ID for authentication. @@ -197,10 +199,21 @@ These variables are shared between the Relay WebSocket client and the REST HTTP JWT token for Relay authentication. Alternative to project ID + API token. - - Space hostname used for Relay WebSocket connections and as the REST API base URL. + + Your space hostname, for example `your-space.signalwire.com`. `RestClient` uses + it as the REST API host and throws when neither this variable, the `host` option, + nor `SIGNALWIRE_REST_BASE_URL` is set. `AIChatClient` reads the same variable but + expects the bare space name, `your-space`, and appends `.signalwire.com` itself. + +`RelayClient` connects to `relay.signalwire.com` by default and needs no space +setting. When `SIGNALWIRE_SPACE` is set, it connects to that host instead. If +the same process uses REST and Relay, set `SIGNALWIRE_RELAY_HOST=relay.signalwire.com` +or pass `host` to `RelayClient` so the REST setting does not redirect the WebSocket +connection. + + Full base URL for REST requests (e.g., `https://your-space.signalwire.com`). Takes precedence over `SIGNALWIRE_SPACE`; the `host` constructor option @@ -319,6 +332,7 @@ SIGNALWIRE_LOG_LEVEL=info # Relay / REST SIGNALWIRE_PROJECT_ID=your-project-id SIGNALWIRE_API_TOKEN=your-api-token +# REST host. RelayClient reads it too; set SIGNALWIRE_RELAY_HOST to keep the default. SIGNALWIRE_SPACE=your-space.signalwire.com # Custom Skills diff --git a/fern/products/server-sdks/pages/reference/typescript/relay/client/index.mdx b/fern/products/server-sdks/pages/reference/typescript/relay/client/index.mdx index 37e34bcf88..71d3ca1128 100644 --- a/fern/products/server-sdks/pages/reference/typescript/relay/client/index.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/relay/client/index.mdx @@ -41,8 +41,11 @@ token. Credentials can be passed directly or read from environment variables. - SignalWire space hostname (e.g., `your-space.signalwire.com`). Set via constructor or `SIGNALWIRE_SPACE` - environment variable. + Relay WebSocket endpoint. The default is the endpoint for SignalWire projects; you + do not set your space here. The constructor option wins, then `SIGNALWIRE_RELAY_HOST`, + then `SIGNALWIRE_SPACE`, then the default. `RestClient` reads `SIGNALWIRE_SPACE` as + the REST host, so when it is set for REST, set `SIGNALWIRE_RELAY_HOST` or pass `host` + to keep the default. From 7b376ce1ac29a6725b0ec057afcdd35744ed2ee0 Mon Sep 17 00:00:00 2001 From: August Date: Fri, 11 Sep 2026 23:15:25 +0000 Subject: [PATCH 36/38] docs(server-sdks): point SWML links at the calling reference tree Co-Authored-By: Claude Fable 5.1 --- .../pages/reference/python/agents/bedrock-agent/index.mdx | 4 ++-- .../typescript/agents/agent-base/add-function-include.mdx | 4 ++-- .../reference/typescript/agents/agent-base/add-language.mdx | 4 ++-- .../reference/typescript/agents/agent-base/define-tool.mdx | 4 ++-- .../pages/reference/typescript/agents/agent-base/index.mdx | 4 ++-- .../reference/typescript/agents/agent-base/set-params.mdx | 4 ++-- .../typescript/agents/agent-base/set-prompt-text.mdx | 4 ++-- .../pages/reference/typescript/agents/data-map/index.mdx | 4 ++-- .../reference/typescript/agents/function-result/index.mdx | 4 ++-- .../pages/reference/typescript/agents/swml-builder/ai.mdx | 2 +- .../pages/reference/typescript/agents/swml-builder/index.mdx | 4 ++-- .../reference/typescript/agents/swml-service/define-tool.mdx | 4 ++-- .../pages/reference/typescript/agents/swml-service/index.mdx | 4 ++-- .../server-sdks/pages/reference/typescript/relay/call/ai.mdx | 4 ++-- 14 files changed, 27 insertions(+), 27 deletions(-) diff --git a/fern/products/server-sdks/pages/reference/python/agents/bedrock-agent/index.mdx b/fern/products/server-sdks/pages/reference/python/agents/bedrock-agent/index.mdx index 6cf7005b2a..12e35644df 100644 --- a/fern/products/server-sdks/pages/reference/python/agents/bedrock-agent/index.mdx +++ b/fern/products/server-sdks/pages/reference/python/agents/bedrock-agent/index.mdx @@ -6,8 +6,8 @@ max-toc-depth: 3 --- [agentbase]: /docs/server-sdks/reference/python/agents/agent-base -[amazon-bedrock]: /docs/swml/reference/amazon-bedrock -[swml-bedrock-reference]: /docs/swml/reference/amazon-bedrock +[amazon-bedrock]: /docs/swml/reference/calling/amazon-bedrock +[swml-bedrock-reference]: /docs/swml/reference/calling/amazon-bedrock [setvoice]: /docs/server-sdks/reference/python/agents/bedrock-agent/set-voice [setinferenceparams]: /docs/server-sdks/reference/python/agents/bedrock-agent/set-inference-params diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/add-function-include.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/add-function-include.mdx index 068fd19f1e..b45247b880 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/add-function-include.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/add-function-include.mdx @@ -5,8 +5,8 @@ description: Add a remote function include to the SWAIG configuration. max-toc-depth: 3 --- -[ai-swaig-includes]: /docs/swml/reference/ai/swaig/includes -[swml-swaig-includes-reference]: /docs/swml/reference/ai/swaig/includes +[ai-swaig-includes]: /docs/swml/reference/calling/ai/swaig/includes +[swml-swaig-includes-reference]: /docs/swml/reference/calling/ai/swaig/includes [ref-agentbase]: /docs/server-sdks/reference/typescript/agents/agent-base Add a remote SWAIG function include so the agent can call tools hosted on an external diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/add-language.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/add-language.mdx index 87f7ffffce..aae05e36f4 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/add-language.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/add-language.mdx @@ -5,8 +5,8 @@ description: Add a language configuration with voice settings for multilingual c max-toc-depth: 3 --- -[ai-languages]: /docs/swml/reference/ai/languages -[swml-languages-reference]: /docs/swml/reference/ai/languages +[ai-languages]: /docs/swml/reference/calling/ai/languages +[swml-languages-reference]: /docs/swml/reference/calling/ai/languages [ref-agentbase]: /docs/server-sdks/reference/typescript/agents/agent-base Add a language configuration with voice settings. The agent uses these configurations diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/define-tool.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/define-tool.mdx index e34ed31947..064b2231eb 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/define-tool.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/define-tool.mdx @@ -5,8 +5,8 @@ description: Programmatically define a SWAIG tool that the AI can invoke during max-toc-depth: 3 --- -[swaig-function]: /docs/swml/reference/ai/swaig/functions -[swml-swaig-functions-reference]: /docs/swml/reference/ai/swaig/functions +[swaig-function]: /docs/swml/reference/calling/ai/swaig/functions +[swml-swaig-functions-reference]: /docs/swml/reference/calling/ai/swaig/functions [functionresult]: /docs/server-sdks/reference/typescript/agents/function-result [ref-agentbase]: /docs/server-sdks/reference/typescript/agents/agent-base [parameter-schema]: /docs/server-sdks/reference/typescript/agents/parameter-schema diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/index.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/index.mdx index 77dd7ef980..932926a5a1 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/index.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/index.mdx @@ -5,8 +5,8 @@ description: The central class for building AI-powered voice agents with SignalW max-toc-depth: 3 --- -[ai]: /docs/swml/reference/ai -[swml-reference]: /docs/swml/reference/ai +[ai]: /docs/swml/reference/calling/ai +[swml-reference]: /docs/swml/reference/calling/ai [agentserver]: /docs/server-sdks/reference/typescript/agents/agent-server [swmlservice]: /docs/server-sdks/reference/typescript/agents/swml-service [setnativefunctions]: /docs/server-sdks/reference/typescript/agents/agent-base/native-functions diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/set-params.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/set-params.mdx index 59a1277ae7..172c581847 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/set-params.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/set-params.mdx @@ -5,8 +5,8 @@ description: Configure AI model parameters such as temperature, timeouts, and sp max-toc-depth: 3 --- -[ai-params]: /docs/swml/reference/ai/params -[swml-ai-params-reference]: /docs/swml/reference/ai/params +[ai-params]: /docs/swml/reference/calling/ai/params +[swml-ai-params-reference]: /docs/swml/reference/calling/ai/params [ref-agentbase]: /docs/server-sdks/reference/typescript/agents/agent-base Set multiple AI parameters at once. Merges into any previously set parameters. diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/set-prompt-text.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/set-prompt-text.mdx index 0e68d19ebd..e903026af9 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/set-prompt-text.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/set-prompt-text.mdx @@ -5,8 +5,8 @@ description: Set the agent's system prompt as a raw text string. max-toc-depth: 3 --- -[ai-prompt]: /docs/swml/reference/ai/prompt -[swml-prompt-reference]: /docs/swml/reference/ai/prompt +[ai-prompt]: /docs/swml/reference/calling/ai/prompt +[swml-prompt-reference]: /docs/swml/reference/calling/ai/prompt [ref-agentbase]: /docs/server-sdks/reference/typescript/agents/agent-base Set the agent's system prompt as a raw text string. This is the simplest way to diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/data-map/index.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/data-map/index.mdx index f520e90e5f..00ea2d45d0 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/data-map/index.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/data-map/index.mdx @@ -7,8 +7,8 @@ max-toc-depth: 3 [swaigfunction]: /docs/server-sdks/reference/typescript/agents/swaig-function [functionresult]: /docs/server-sdks/reference/typescript/agents/function-result -[data-map]: /docs/swml/reference/ai/swaig/functions/data-map -[swml-data-map-reference]: /docs/swml/reference/ai/swaig/functions/data-map +[data-map]: /docs/swml/reference/calling/ai/swaig/functions/data-map +[swml-data-map-reference]: /docs/swml/reference/calling/ai/swaig/functions/data-map [body]: /docs/server-sdks/reference/typescript/agents/data-map/body [errorkeys]: /docs/server-sdks/reference/typescript/agents/data-map/error-keys [expression]: /docs/server-sdks/reference/typescript/agents/data-map/expression diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/function-result/index.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/function-result/index.mdx index 839179a9c6..cd6ea0e0d3 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/function-result/index.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/function-result/index.mdx @@ -8,8 +8,8 @@ max-toc-depth: 3 [tool]: /docs/server-sdks/reference/typescript/agents/agent-base#tool [define-tool]: /docs/server-sdks/reference/typescript/agents/agent-base/define-tool [agentbase]: /docs/server-sdks/reference/typescript/agents/agent-base -[swaig-function]: /docs/swml/reference/ai/swaig/functions -[swml-swaig-functions-reference]: /docs/swml/reference/ai/swaig/functions +[swaig-function]: /docs/swml/reference/calling/ai/swaig/functions +[swml-swaig-functions-reference]: /docs/swml/reference/calling/ai/swaig/functions [setresponse]: /docs/server-sdks/reference/typescript/agents/function-result/set-response [setpostprocess]: /docs/server-sdks/reference/typescript/agents/function-result/set-post-process [addaction]: /docs/server-sdks/reference/typescript/agents/function-result/add-action diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/ai.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/ai.mdx index 29c92a17f8..51d0e1cd6f 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/ai.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/ai.mdx @@ -14,7 +14,7 @@ passed directly as the AI verb's configuration payload in the SWML document. Optional configuration object for the AI verb. The structure matches the - [SWML AI verb specification](/docs/swml/reference/ai) and may include keys such as + [SWML AI verb specification](/docs/swml/reference/calling/ai) and may include keys such as `prompt`, `post_prompt`, `post_prompt_url`, `swaig`, `hints`, `languages`, `params`, and `global_data`. diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/index.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/index.mdx index ec8b1cba65..07ffaa60d6 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/index.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/index.mdx @@ -6,8 +6,8 @@ max-toc-depth: 3 --- [swmlservice]: /docs/server-sdks/reference/typescript/agents/swml-service -[swml]: /docs/swml/reference/ai -[swml-reference]: /docs/swml/reference/ai +[swml]: /docs/swml/reference/calling/ai +[swml-reference]: /docs/swml/reference/calling/ai [addverb]: /docs/server-sdks/reference/typescript/agents/swml-builder/add-verb [addverbtosection]: /docs/server-sdks/reference/typescript/agents/swml-builder/add-verb-to-section [ai]: /docs/server-sdks/reference/typescript/agents/swml-builder/ai diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/swml-service/define-tool.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/swml-service/define-tool.mdx index d7666c7508..418a452833 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/swml-service/define-tool.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/swml-service/define-tool.mdx @@ -5,8 +5,8 @@ description: Define a SWAIG tool on a SWMLService instance. max-toc-depth: 3 --- -[swaig-function]: /docs/swml/reference/ai/swaig/functions -[swml-swaig-functions-reference]: /docs/swml/reference/ai/swaig/functions +[swaig-function]: /docs/swml/reference/calling/ai/swaig/functions +[swml-swaig-functions-reference]: /docs/swml/reference/calling/ai/swaig/functions [functionresult]: /docs/server-sdks/reference/typescript/agents/function-result [ref-swmlservice]: /docs/server-sdks/reference/typescript/agents/swml-service diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/swml-service/index.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/swml-service/index.mdx index 2548d04515..66bf16d86d 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/swml-service/index.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/swml-service/index.mdx @@ -6,8 +6,8 @@ max-toc-depth: 3 --- [agentbase]: /docs/server-sdks/reference/typescript/agents/agent-base -[swml]: /docs/swml/reference/ai -[swml-reference]: /docs/swml/reference/ai +[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 diff --git a/fern/products/server-sdks/pages/reference/typescript/relay/call/ai.mdx b/fern/products/server-sdks/pages/reference/typescript/relay/call/ai.mdx index b4d4449bdf..9687e7ed81 100644 --- a/fern/products/server-sdks/pages/reference/typescript/relay/call/ai.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/relay/call/ai.mdx @@ -8,8 +8,8 @@ max-toc-depth: 3 [aiaction]: /docs/server-sdks/reference/typescript/relay/actions [agentbase]: /docs/server-sdks/reference/typescript/agents/agent-base [amazon-bedrock]: /docs/server-sdks/reference/typescript/relay/call/amazon-bedrock -[ai]: /docs/swml/reference/ai -[swml-ai-reference]: /docs/swml/reference/ai +[ai]: /docs/swml/reference/calling/ai +[swml-ai-reference]: /docs/swml/reference/calling/ai Start an AI agent session on the call. The AI agent handles the conversation using the provided prompt, tools, and configuration. Returns an From 7fadd1c735cf2c04bcbcfef6e511686a78279f0b Mon Sep 17 00:00:00 2001 From: August Date: Fri, 11 Sep 2026 23:15:25 +0000 Subject: [PATCH 37/38] docs(server-sdks): drop unsourced createConversation status values Co-Authored-By: Claude Fable 5.1 --- .../typescript/agents/ai-chat-client/create-conversation.mdx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/create-conversation.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/create-conversation.mdx index b03019e1cf..6d890786c6 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/create-conversation.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/ai-chat-client/create-conversation.mdx @@ -50,8 +50,9 @@ it for an id that already exists returns that conversation untouched. ## **Returns** -`Promise` -- carries `id`, `status` (`created`, -`reinitialized`, or `exists`), and `initialMessage`. +`Promise` -- carries `id`, `status`, and `initialMessage`. +`status` is the lifecycle state the service reports; the SDK fills in `created` +when the response omits it. `initialMessage` is the agent's generated greeting. Create the conversation From 3e0607abbf4d3a7b52bcd71072408e5f35114035 Mon Sep 17 00:00:00 2001 From: August Date: Fri, 11 Sep 2026 23:15:25 +0000 Subject: [PATCH 38/38] docs(server-sdks): correct TypeScript reference details against SDK source Co-Authored-By: Claude Fable 5.1 --- .../agents/agent-base/register-routing-callback.mdx | 7 ++++--- .../typescript/agents/bedrock-agent/index.mdx | 9 +++++---- .../reference/typescript/agents/cli/swaig-test.mdx | 4 ++-- .../typescript/agents/parameter-schema.mdx | 2 +- .../agents/swml-builder/add-verb-to-section.mdx | 13 ++++++++++++- .../typescript/relay/call/play-ringtone.mdx | 2 +- .../typescript/rest/calling/record-stop.mdx | 2 +- 7 files changed, 26 insertions(+), 13 deletions(-) diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/register-routing-callback.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/register-routing-callback.mdx index e9aefa1c12..047762df5a 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/register-routing-callback.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/agent-base/register-routing-callback.mdx @@ -20,9 +20,10 @@ the incoming SIP URI. For routing on agent name alone, use ## **Parameters** - Receives the parsed request body. Return a route string to redirect the - request there (HTTP 307, preserving the POST body), or return `null` or - `undefined` to serve this agent's own SWML. + Receives the parsed request body and, optionally, the request headers. + Return a route string to redirect the request there (HTTP 307, preserving + the POST body), or return `null` or `undefined` to serve this agent's own + SWML. diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/bedrock-agent/index.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/bedrock-agent/index.mdx index 4d09bea823..e45af71058 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/bedrock-agent/index.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/bedrock-agent/index.mdx @@ -108,10 +108,11 @@ on Bedrock agents. Prompt methods (`setPromptText()`, `setPromptPom()`, `promptAddSection()`, and so on) work normally. The prompt is built the same way as in AgentBase and then -placed in the `amazon_bedrock` verb along with `voice_id`, `temperature`, and -`top_p`. Raw text set through `systemPrompt` or `setPromptText()` takes -precedence: when it is present, sections added with `promptAddSection()` are not -rendered. Use one style or the other for a given agent. +placed in the `amazon_bedrock` verb, with `voice_id`, `temperature`, and `top_p` +added to the prompt object itself. Raw text set through `systemPrompt` or +`setPromptText()` takes precedence: when it is present, sections added with +`promptAddSection()` are not rendered. Use one style or the other for a given +agent. ## **Examples** diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/cli/swaig-test.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/cli/swaig-test.mdx index c0073f9f7a..481bbae31d 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/cli/swaig-test.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/cli/swaig-test.mdx @@ -150,10 +150,10 @@ npx swaig-test src/agent.ts --parse-only # Execute with arguments npx swaig-test src/agent.ts --exec search --arg query="AI agents" --arg limit=5 -# Execute with verbose debug output and a realistic call state +# Execute with verbose debug output and an overridden caller number npx swaig-test src/agent.ts --verbose --exec book_ride \ --arg pickup="123 Gough Street" \ - --override call_state=answered + --override from=+15551234567 ``` ### Multi-agent files diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/parameter-schema.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/parameter-schema.mdx index 4740043840..551c3c6e0c 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/parameter-schema.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/parameter-schema.mdx @@ -19,7 +19,7 @@ builder produces, so pass `build()`'s result directly as `parameters`, as in the example below. ```typescript {1} -import { paramSchema, RECORD_FORMATS } from '@signalwire/sdk'; +import { paramSchema } from '@signalwire/sdk'; ``` ## **Methods** diff --git a/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/add-verb-to-section.mdx b/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/add-verb-to-section.mdx index 1ce0628a78..d0f327c3ab 100644 --- a/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/add-verb-to-section.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/agents/swml-builder/add-verb-to-section.mdx @@ -5,8 +5,19 @@ description: "Append a verb to a named section, creating the section if it does max-toc-depth: 3 --- +[add-verb]: /docs/server-sdks/reference/typescript/agents/swml-builder/add-verb + Append a verb to a named section of the SWML document. If the section does not -exist, it is created automatically. +exist, it is created automatically. The verb config is validated against the +bundled schema when validation is enabled, exactly as in [`addVerb()`][add-verb]. + + +Validation is strict. An unknown verb name, an unknown or misspelled key inside +the verb config, or a value of the wrong type throws a `SchemaValidationError` +instead of being dropped silently. Earlier SDK versions appended to non-main +sections without validating. Set `SWML_SKIP_SCHEMA_VALIDATION=true` to disable +validation. + ## **Parameters** diff --git a/fern/products/server-sdks/pages/reference/typescript/relay/call/play-ringtone.mdx b/fern/products/server-sdks/pages/reference/typescript/relay/call/play-ringtone.mdx index b8ddea59bb..10a65bfa90 100644 --- a/fern/products/server-sdks/pages/reference/typescript/relay/call/play-ringtone.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/relay/call/play-ringtone.mdx @@ -13,7 +13,7 @@ Play a named ringtone on the call. A typed convenience over [`play()`][play]. ## **Parameters** - Ringtone name, a country code such as `"us"` or `"uk"`. + Ringtone name, a country code such as `"us"` or `"gb"`. diff --git a/fern/products/server-sdks/pages/reference/typescript/rest/calling/record-stop.mdx b/fern/products/server-sdks/pages/reference/typescript/rest/calling/record-stop.mdx index 389b83efbd..f1b1110a8b 100644 --- a/fern/products/server-sdks/pages/reference/typescript/rest/calling/record-stop.mdx +++ b/fern/products/server-sdks/pages/reference/typescript/rest/calling/record-stop.mdx @@ -29,5 +29,5 @@ const client = new RestClient({ }); const result = await client.calling.recordStop("call-id-xxx", "ctrl-id"); -console.log(result); // Contains recording URL +console.log(result.id, result.status); // The updated call leg ```