diff --git a/fern/docs.yml b/fern/docs.yml
index f18bcbd0da..6351c58c32 100644
--- a/fern/docs.yml
+++ b/fern/docs.yml
@@ -80,6 +80,12 @@ products:
availability: deprecated
slug: v2
+ - display-name: SDK Reference
+ slug: sdk-reference
+ path: products/sdk-reference/sdk-reference.yml
+ icon: fa-regular fa-books
+ subtitle: Auto-generated reference for every SignalWire SDK
+
# Column 3 (APIs)
- display-name: APIs
slug: apis
diff --git a/fern/products/sdk-reference/cpp/_meta.json b/fern/products/sdk-reference/cpp/_meta.json
new file mode 100644
index 0000000000..8d27cb69c9
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/_meta.json
@@ -0,0 +1,10 @@
+{
+ "language": "cpp",
+ "sdk_name": "cpp-sdk",
+ "version": null,
+ "source_repo": "https://github.com/signalwire/signalwire-cpp",
+ "format": "mdx",
+ "platform": "fern",
+ "base_slug": "/reference/cpp",
+ "item_count": 1819
+}
\ No newline at end of file
diff --git a/fern/products/sdk-reference/cpp/agents/agent/agent-base/index.mdx b/fern/products/sdk-reference/cpp/agents/agent/agent-base/index.mdx
new file mode 100644
index 0000000000..a5cc8b49ca
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/agent/agent-base/index.mdx
@@ -0,0 +1,2791 @@
+---
+slug: "/reference/cpp/agents/agent/agent-base"
+title: "AgentBase"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::agent::AgentBase"
+ parent: "signalwire::agent"
+ module: "agents.agent"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp"
+ visibility: "public"
+---
+# `AgentBase`
+
+## Signature
+
+```cpp
+class signalwire::agent::AgentBase : signalwire::swml::Service
+```
+
+## Inheritance
+
+**Extends:** [signalwire::swml::Service](/docs/sdk-reference/reference/cpp/agents/swml/service)
+
+## Methods
+
+### ~AgentBase
+
+**Modifiers:** `virtual`
+
+#### Signature
+
+```cpp
+void ~AgentBase()
+```
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 120.
+
+***
+
+### add\_answer\_verb
+
+#### Signature
+
+```cpp
+AgentBase & add_answer_verb(const std::string & verb_name, const json & params)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 380.
+
+***
+
+### add\_context
+
+#### Signature
+
+```cpp
+contexts::Context & add_context(const std::string & name)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`contexts::Context &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 392.
+
+***
+
+### add\_function\_include
+
+#### Signature
+
+```cpp
+AgentBase & add_function_include(const json & include)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 370.
+
+***
+
+### add\_hint
+
+#### Signature
+
+```cpp
+AgentBase & add_hint(const std::string & hint)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 291.
+
+***
+
+### add\_hints
+
+#### Signature
+
+```cpp
+AgentBase & add_hints(const std::vector< std::string > & hints)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 292.
+
+***
+
+### add\_internal\_filler
+
+Add internal fillers for a single language (legacy overload; stored under the given language key at the top level).
+
+#### Signature
+
+
+
+ ```cpp
+ AgentBase & add_internal_filler(
+ const std::string & lang,
+ const std::vector< std::string > & fillers
+ )
+ ```
+
+
+
+ ```cpp
+ AgentBase & add_internal_filler(
+ const std::string & function_name,
+ const std::string & language_code,
+ const std::vector< std::string > & fillers
+ )
+ ```
+
+
+
+#### Parameters (Overload 1)
+
+
+
+
+
+#### Parameters (Overload 2)
+
+
+
+
+
+
+
+#### Returns (Overload 1)
+
+`AgentBase &`
+
+#### Returns (Overload 2)
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 359.
+
+***
+
+### add\_language
+
+#### Signature
+
+```cpp
+AgentBase & add_language(const LanguageConfig & lang)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 294.
+
+***
+
+### add\_mcp\_server
+
+#### Signature
+
+```cpp
+AgentBase & add_mcp_server(
+ const std::string & url,
+ const std::map< std::string, std::string > & headers = {},
+ bool resources = false,
+ const std::map< std::string, std::string > & resource_vars = {}
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 422.
+
+***
+
+### add\_pattern\_hint
+
+#### Signature
+
+```cpp
+AgentBase & add_pattern_hint(const std::string & pattern)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 293.
+
+***
+
+### add\_post\_ai\_verb
+
+#### Signature
+
+```cpp
+AgentBase & add_post_ai_verb(const std::string & verb_name, const json & params)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 382.
+
+***
+
+### add\_post\_answer\_verb
+
+#### Signature
+
+```cpp
+AgentBase & add_post_answer_verb(
+ const std::string & verb_name,
+ const json & params
+)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 381.
+
+***
+
+### add\_pre\_answer\_verb
+
+#### Signature
+
+```cpp
+AgentBase & add_pre_answer_verb(
+ const std::string & verb_name,
+ const json & params
+)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 379.
+
+***
+
+### add\_pronunciation
+
+#### Signature
+
+```cpp
+AgentBase & add_pronunciation(
+ const std::string & replace_val,
+ const std::string & with_val,
+ bool ignore_case = false
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 314.
+
+***
+
+### add\_security\_headers
+
+**Modifiers:** `static`
+
+#### Signature
+
+```cpp
+void add_security_headers(httplib::Response & res)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 554.
+
+***
+
+### add\_skill
+
+#### Signature
+
+
+
+ ```cpp
+ AgentBase & add_skill(
+ const std::string & skill_name,
+ const json & params = json::object()
+ )
+ ```
+
+
+
+ ```cpp
+ AgentBase & add_skill(
+ skills::SkillName skill_name,
+ const json & params = json::object()
+ )
+ ```
+
+
+
+#### Parameters (Overload 1)
+
+
+
+
+
+#### Parameters (Overload 2)
+
+
+
+
+
+#### Returns (Overload 1)
+
+`AgentBase &`
+
+#### Returns (Overload 2)
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 403.
+
+***
+
+### add\_swaig\_query\_param
+
+#### Signature
+
+```cpp
+AgentBase & add_swaig_query_param(
+ const std::string & key,
+ const std::string & value
+)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 440.
+
+***
+
+### AgentBase
+
+**Modifiers:** `explicit`
+
+#### Signature
+
+
+
+ ```cpp
+ void AgentBase(
+ const std::string & name = "agent",
+ const std::string & route = "/",
+ const std::string & host = "0.0.0.0",
+ int port = 3000
+ )
+ ```
+
+
+
+ ```cpp
+ void AgentBase(const AgentBase & other)
+ ```
+
+
+
+#### Parameters (Overload 1)
+
+
+
+
+
+
+
+
+
+#### Parameters (Overload 2)
+
+
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 116.
+
+***
+
+### auth\_password
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const std::string & auth_password() const
+```
+
+#### Returns
+
+`const std::string &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 458.
+
+***
+
+### auth\_username
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const std::string & auth_username() const
+```
+
+#### Returns
+
+`const std::string &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 457.
+
+***
+
+### auto\_map\_sip\_usernames
+
+#### Signature
+
+```cpp
+AgentBase & auto_map_sip_usernames(bool enable = true)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 450.
+
+***
+
+### build\_ai\_verb
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+json build_ai_verb(const std::string & webhook_url) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 527.
+
+***
+
+### build\_mcp\_tool\_list
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+std::vector< json > build_mcp_tool_list() const
+```
+
+#### Returns
+
+`std::vector< json >`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 429.
+
+***
+
+### build\_prompt
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+json build_prompt() const
+```
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 533.
+
+***
+
+### build\_swaig\_functions
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+json build_swaig_functions(const std::string & webhook_url) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 530.
+
+***
+
+### build\_webhook\_url
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+std::string build_webhook_url(const std::string & base_url) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 521.
+
+***
+
+### clear\_post\_ai\_verbs
+
+#### Signature
+
+```cpp
+AgentBase & clear_post_ai_verbs()
+```
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 385.
+
+***
+
+### clear\_post\_answer\_verbs
+
+#### Signature
+
+```cpp
+AgentBase & clear_post_answer_verbs()
+```
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 384.
+
+***
+
+### clear\_pre\_answer\_verbs
+
+#### Signature
+
+```cpp
+AgentBase & clear_pre_answer_verbs()
+```
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 383.
+
+***
+
+### clear\_swaig\_query\_params
+
+#### Signature
+
+```cpp
+AgentBase & clear_swaig_query_params()
+```
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 441.
+
+***
+
+### clone
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+std::unique_ptr< AgentBase > clone() const
+```
+
+#### Returns
+
+`std::unique_ptr< AgentBase >`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 518.
+
+***
+
+### create\_tool\_token
+
+Mint a per-call SWAIG-function token via the agent's SessionManager.
+Python parity: state\_mixin.StateMixin.\_create\_tool\_token — delegates to SessionManager::create\_token and returns an empty string on any thrown exception (Python catches all exceptions and returns "" on error).
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+std::string create_tool_token(
+ const std::string & tool_name,
+ const std::string & call_id
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 274.
+
+***
+
+### define\_contexts
+
+#### Signature
+
+```cpp
+contexts::ContextBuilder & define_contexts()
+```
+
+#### Returns
+
+`contexts::ContextBuilder &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 391.
+
+***
+
+### define\_tool
+
+Register a SWAIG tool (function) that the AI can invoke during a call.
+
+How this becomes a tool the model seesA SWAIG function is exactly the same concept as a "tool" in native OpenAI / Anthropic tool calling. On every LLM turn, the SDK renders each registered SWAIG function into the OpenAI tool schema:
+\{ "type": "function", "function": \{ "name": "your\_name\_here", "description": "your description text", "parameters": \{ ... your JSON schema ... \} \} \}
+That schema is sent to the model as part of the same API call that produces the next assistant message. The model reads:
+the function description to decide WHEN to call this tool
+each parameter description (inside parameters) to decide HOW to fill in that argument from the user's utterance
+
+This means descriptions are prompt engineering, not developer comments. A vague description is the #1 cause of "the model has
+the right tool but doesn't call it" failures.
+
+Bad vs good descriptionsBAD : description: "Lookup function" GOOD: description: "Look up a customer's account details by " "account number. Use this BEFORE quoting " "any account-specific info (balance, plan, " "status). Do not use for general product " "questions."
+BAD : parameters: \{"id": \{"type": "string", "description": "the id"\}\} GOOD: parameters: \{"account\_number": \{"type": "string", "description": "The customer's 8-digit account " "number, no dashes or spaces. Ask the user if they " "don't provide it."\}\}
+
+Tool count mattersLLM tool selection accuracy degrades past ~7-8 simultaneously-active tools per call. Use contexts::Step::set\_functions to partition tools across steps so only the relevant subset is active at any moment.
+
+#### Signature
+
+
+
+ ```cpp
+ AgentBase & define_tool(const swaig::ToolDefinition & tool)
+ ```
+
+
+
+ ```cpp
+ AgentBase & define_tool(
+ const std::string & name,
+ const std::string & description,
+ const json & parameters,
+ swaig::ToolHandler handler,
+ bool secure = false
+ )
+ ```
+
+
+
+#### Parameters (Overload 1)
+
+
+
+#### Parameters (Overload 2)
+
+
+
+
+
+
+
+
+
+
+
+#### Returns (Overload 1)
+
+`AgentBase &`
+
+#### Returns (Overload 2)
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 258.
+
+***
+
+### detect\_proxy\_url
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+std::string detect_proxy_url(
+ const std::map< std::string, std::string > & headers
+) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 524.
+
+***
+
+### enable\_debug\_events
+
+#### Signature
+
+```cpp
+AgentBase & enable_debug_events(bool enable = true)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 369.
+
+***
+
+### enable\_debug\_routes
+
+#### Signature
+
+```cpp
+AgentBase & enable_debug_routes(bool enable = true)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 442.
+
+***
+
+### enable\_mcp\_server
+
+#### Signature
+
+```cpp
+AgentBase & enable_mcp_server(bool enable = true)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 426.
+
+***
+
+### enable\_sip\_routing
+
+#### Signature
+
+```cpp
+AgentBase & enable_sip_routing(bool enable = true)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 448.
+
+***
+
+### get\_contexts
+
+Returns the contexts dictionary as a serialised JSON object, or std::nullopt when no contexts have been defined yet.
+Mirrors Python's PromptManager.get\_contexts which returns the contexts dict or None.
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+std::optional< json > get_contexts() const
+```
+
+#### Returns
+
+`std::optional< json >`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 196.
+
+***
+
+### get\_language\_params
+
+Read the per-language params dict for a previously-added language. Returns std::nullopt when the code is unknown or when params were never set on that language — no exception path, mirroring Python's None return.
+Python parity: AIConfigMixin.get\_language\_params (029ca6f).
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+std::optional< json > get_language_params(const std::string & code) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`std::optional< json >`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 313.
+
+***
+
+### get\_post\_prompt
+
+Returns the post-prompt text whatever set\_post\_prompt stored, or std::nullopt when no post-prompt has been set.
+Mirrors Python's PromptManager.get\_post\_prompt / PromptMixin.get\_post\_prompt — used by SWML rendering when a post-prompt is configured.
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+std::optional< std::string > get_post_prompt() const
+```
+
+#### Returns
+
+`std::optional< std::string >`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 173.
+
+***
+
+### get\_prompt
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+std::string get_prompt() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 154.
+
+***
+
+### get\_raw\_prompt
+
+Returns the raw prompt text whatever set\_prompt\_text stored, or std::nullopt when no raw prompt has been set. Distinct from get\_prompt which renders the POM array when use\_pom is true.
+Mirrors Python's PromptManager.get\_raw\_prompt.
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+std::optional< std::string > get_raw_prompt() const
+```
+
+#### Returns
+
+`std::optional< std::string >`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 181.
+
+***
+
+### handle\_mcp\_request
+
+#### Signature
+
+```cpp
+json handle_mcp_request(const json & body)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 430.
+
+***
+
+### handle\_post\_prompt\_request
+
+#### Signature
+
+```cpp
+void handle_post_prompt_request(
+ const httplib::Request & req,
+ httplib::Response & res
+)
+```
+
+#### Parameters
+
+
+
+
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 548.
+
+***
+
+### handle\_swaig\_request
+
+#### Signature
+
+```cpp
+void handle_swaig_request(const httplib::Request & req, httplib::Response & res)
+```
+
+#### Parameters
+
+
+
+
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 545.
+
+***
+
+### handle\_swml\_request
+
+#### Signature
+
+```cpp
+void handle_swml_request(const httplib::Request & req, httplib::Response & res)
+```
+
+#### Parameters
+
+
+
+
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 542.
+
+***
+
+### has\_contexts
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+bool has_contexts() const
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 393.
+
+***
+
+### has\_skill
+
+**Modifiers:** `const`
+
+#### Signature
+
+
+
+ ```cpp
+ bool has_skill(const std::string & skill_name) const
+ ```
+
+
+
+ ```cpp
+ bool has_skill(skills::SkillName skill_name) const
+ ```
+
+
+
+#### Parameters (Overload 1)
+
+
+
+#### Parameters (Overload 2)
+
+
+
+#### Returns (Overload 1)
+
+`bool`
+
+#### Returns (Overload 2)
+
+`bool`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 405.
+
+***
+
+### init\_auth
+
+#### Signature
+
+```cpp
+void init_auth()
+```
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 536.
+
+***
+
+### is\_mcp\_server\_enabled
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+bool is_mcp_server_enabled() const
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 427.
+
+***
+
+### list\_skills
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+std::vector< std::string > list_skills() const
+```
+
+#### Returns
+
+`std::vector< std::string >`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 406.
+
+***
+
+### list\_tools
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+std::vector< std::string > list_tools() const
+```
+
+#### Returns
+
+`std::vector< std::string >`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 266.
+
+***
+
+### manual\_set\_proxy\_url
+
+#### Signature
+
+```cpp
+AgentBase & manual_set_proxy_url(const std::string & url)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 437.
+
+***
+
+### mcp\_servers
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const std::vector< json > & mcp_servers() const
+```
+
+#### Returns
+
+`const std::vector< json > &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 428.
+
+***
+
+### on\_debug\_event
+
+#### Signature
+
+```cpp
+AgentBase & on_debug_event(DebugEventCallback cb)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 494.
+
+***
+
+### on\_function\_call
+
+Dispatch a function call to the registered handler. Returns a FunctionResult; if the function isn't registered, returns a FunctionResult with a "Function not found" response.
+
+**Modifiers:** `virtual`
+
+#### Signature
+
+```cpp
+swaig::FunctionResult on_function_call(
+ const std::string & name,
+ const json & args,
+ const json & raw_data
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Returns
+
+`swaig::FunctionResult`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 263.
+
+***
+
+### on\_summary
+
+#### Signature
+
+```cpp
+AgentBase & on_summary(SummaryCallback cb)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 493.
+
+***
+
+### operator=
+
+#### Signature
+
+```cpp
+AgentBase & operator=(const AgentBase &)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 124.
+
+***
+
+### pom
+
+Read-only snapshot of the agent's POM as a PromptObjectModel.
+Python parity: agent.pom instance attribute (agent\_base.py line 209). Returns std::nullopt when use\_pom is false (mirroring Python's self.pom = None); otherwise returns a freshly built signalwire::pom::PromptObjectModel whose sections are deep-copied from the agent's internal section/ subsection structures so callers cannot mutate them in-place.
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+std::optional< signalwire::pom::PromptObjectModel > pom() const
+```
+
+#### Returns
+
+`std::optional< signalwire::pom::PromptObjectModel >`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 165.
+
+***
+
+### prompt\_add\_section
+
+#### Signature
+
+```cpp
+AgentBase & prompt_add_section(
+ const std::string & title,
+ const std::string & body = "",
+ const std::vector< std::string > & bullets = {}
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 143.
+
+***
+
+### prompt\_add\_subsection
+
+#### Signature
+
+```cpp
+AgentBase & prompt_add_subsection(
+ const std::string & parent_title,
+ const std::string & title,
+ const std::string & body = "",
+ const std::vector< std::string > & bullets = {}
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 146.
+
+***
+
+### prompt\_add\_to\_section
+
+#### Signature
+
+```cpp
+AgentBase & prompt_add_to_section(
+ const std::string & title,
+ const std::string & body = "",
+ const std::vector< std::string > & bullets = {}
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 150.
+
+***
+
+### prompt\_has\_section
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+bool prompt_has_section(const std::string & title) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 153.
+
+***
+
+### register\_sip\_username
+
+#### Signature
+
+```cpp
+AgentBase & register_sip_username(const std::string & username)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 449.
+
+***
+
+### register\_swaig\_function
+
+#### Signature
+
+```cpp
+AgentBase & register_swaig_function(const json & func_def)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 262.
+
+***
+
+### remove\_skill
+
+#### Signature
+
+
+
+ ```cpp
+ AgentBase & remove_skill(const std::string & skill_name)
+ ```
+
+
+
+ ```cpp
+ AgentBase & remove_skill(skills::SkillName skill_name)
+ ```
+
+
+
+#### Parameters (Overload 1)
+
+
+
+#### Parameters (Overload 2)
+
+
+
+#### Returns (Overload 1)
+
+`AgentBase &`
+
+#### Returns (Overload 2)
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 404.
+
+***
+
+### render\_swml
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+json render_swml() const
+```
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 500.
+
+***
+
+### render\_swml\_for\_request
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+json render_swml_for_request(
+ const std::map< std::string, std::string > & query_params,
+ const json & body_params,
+ const std::map< std::string, std::string > & headers
+) const
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 501.
+
+***
+
+### render\_swml\_internal
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+json render_swml_internal(
+ const std::map< std::string, std::string > & headers
+) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 557.
+
+***
+
+### reset\_contexts
+
+Remove all contexts, returning the agent to a no-contexts state. Convenience wrapper around define\_contexts().reset().
+
+#### Signature
+
+```cpp
+AgentBase & reset_contexts()
+```
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 397.
+
+***
+
+### run
+
+#### Signature
+
+```cpp
+void run()
+```
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 509.
+
+***
+
+### serve
+
+#### Signature
+
+```cpp
+void serve()
+```
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 510.
+
+***
+
+### session\_manager
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+security::SessionManager & session_manager()
+```
+
+#### Returns
+
+`security::SessionManager &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 514.
+
+***
+
+### set\_auth
+
+#### Signature
+
+```cpp
+AgentBase & set_auth(const std::string & username, const std::string & password)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 456.
+
+***
+
+### set\_dynamic\_config\_callback
+
+#### Signature
+
+```cpp
+AgentBase & set_dynamic_config_callback(DynamicConfigCallback cb)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 436.
+
+***
+
+### set\_function\_includes
+
+#### Signature
+
+```cpp
+AgentBase & set_function_includes(const std::vector< json > & includes)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 371.
+
+***
+
+### set\_global\_data
+
+#### Signature
+
+```cpp
+AgentBase & set_global_data(const json & data)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 320.
+
+***
+
+### set\_internal\_fillers
+
+Set internal fillers for native SWAIG functions.
+Internal fillers are short phrases the AI agent speaks (via TTS) while an internal/native function is running, so the caller doesn't hear dead air during transitions or background work.
+Supported function names (match the SWAIGInternalFiller schema): hangup, check\_time, wait\_for\_user, wait\_seconds, adjust\_response\_latency, next\_step, change\_context, get\_visual\_input, get\_ideal\_strategy. See supported\_internal\_filler\_names().
+Notably NOT supported: change\_step, gather\_submit, or arbitrary user-defined SWAIG function names. The runtime only honors fillers for the names listed above; everything else is silently ignored at the SWML level. This method warns at registration time if you pass an unknown name so you catch the typo early.
+Expected JSON shape: \{"function\_name": \{"language\_code": \["phrase1", ...]\}, ...\}
+
+#### Signature
+
+```cpp
+AgentBase & set_internal_fillers(const json & fillers)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 355.
+
+***
+
+### set\_language\_params
+
+Set (or replace) the per-language params dict on an already-added language. Useful when language entries are built via add\_language() first and engine-specific tuning is added later (e.g. from a config loader). Passing an empty object removes the params key (treated as unset). No-op if code isn't found among previously-added languages.
+Python parity: AIConfigMixin.set\_language\_params (029ca6f).
+
+#### Signature
+
+```cpp
+AgentBase & set_language_params(const std::string & code, const json & params)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 305.
+
+***
+
+### set\_languages
+
+#### Signature
+
+```cpp
+AgentBase & set_languages(const std::vector< LanguageConfig > & langs)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 295.
+
+***
+
+### set\_name
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+AgentBase & set_name(const std::string & n)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 131.
+
+***
+
+### set\_native\_functions
+
+#### Signature
+
+```cpp
+AgentBase & set_native_functions(const std::vector< std::string > & funcs)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 322.
+
+***
+
+### set\_param
+
+#### Signature
+
+```cpp
+AgentBase & set_param(const std::string & key, const json & value)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 318.
+
+***
+
+### set\_params
+
+#### Signature
+
+```cpp
+AgentBase & set_params(const json & params)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 319.
+
+***
+
+### set\_post\_prompt
+
+#### Signature
+
+```cpp
+AgentBase & set_post_prompt(const std::string & text)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 141.
+
+***
+
+### set\_post\_prompt\_llm\_params
+
+#### Signature
+
+```cpp
+AgentBase & set_post_prompt_llm_params(const json & params)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 373.
+
+***
+
+### set\_post\_prompt\_url
+
+#### Signature
+
+```cpp
+AgentBase & set_post_prompt_url(const std::string & url)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 142.
+
+***
+
+### set\_post\_prompt\_url\_direct
+
+#### Signature
+
+```cpp
+AgentBase & set_post_prompt_url_direct(const std::string & url)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 439.
+
+***
+
+### set\_prompt\_llm\_params
+
+#### Signature
+
+```cpp
+AgentBase & set_prompt_llm_params(const json & params)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 372.
+
+***
+
+### set\_prompt\_pom
+
+Sets the prompt as a list of POM section JSON objects. Each section supports keys "title", "body", "bullets", "numbered", "numbered\_bullets", and "subsections". Switches the agent to POM mode.
+Mirrors Python's PromptManager.set\_prompt\_pom.
+
+#### Signature
+
+```cpp
+AgentBase & set_prompt_pom(const std::vector< json > & pom)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 189.
+
+***
+
+### set\_prompt\_text
+
+#### Signature
+
+```cpp
+AgentBase & set_prompt_text(const std::string & text)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 140.
+
+***
+
+### set\_pronunciations
+
+#### Signature
+
+```cpp
+AgentBase & set_pronunciations(const std::vector< Pronunciation > & pronuns)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 317.
+
+***
+
+### set\_signing\_key
+
+Set the SignalWire Signing Key (Dashboard → API Credentials). Pass the empty string to clear and revert to env-fallback behavior.
+
+#### Signature
+
+```cpp
+AgentBase & set_signing_key(const std::string & key)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 476.
+
+***
+
+### set\_use\_pom
+
+#### Signature
+
+```cpp
+AgentBase & set_use_pom(bool use_pom)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 155.
+
+***
+
+### set\_webhook\_url
+
+#### Signature
+
+```cpp
+AgentBase & set_webhook_url(const std::string & url)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 438.
+
+***
+
+### setup\_routes
+
+#### Signature
+
+```cpp
+void setup_routes(httplib::Server & server)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 539.
+
+***
+
+### signing\_key
+
+Read the resolved signing key (constructor / set\_signing\_key / SIGNALWIRE\_SIGNING\_KEY env), or std::nullopt when unset. The returned value is the secret — never log it.
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+std::optional< std::string > signing_key() const
+```
+
+#### Returns
+
+`std::optional< std::string >`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 481.
+
+***
+
+### stop
+
+#### Signature
+
+```cpp
+void stop()
+```
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 511.
+
+***
+
+### supported\_internal\_filler\_names
+
+The complete set of internal SWAIG function names that accept fillers, matching the SWAIGInternalFiller schema definition. Any name outside this set is silently ignored by the runtime — set\_internal\_fillers and add\_internal\_filler warn if you pass an unknown name.
+Notable absences: change\_step, gather\_submit, and arbitrary user-defined SWAIG function names are NOT supported.
+
+**Modifiers:** `static`
+
+#### Signature
+
+```cpp
+const std::set< std::string > & supported_internal_filler_names()
+```
+
+#### Returns
+
+`const std::set< std::string > &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 331.
+
+***
+
+### trust\_proxy\_for\_signature
+
+If true, X-Forwarded-Proto / X-Forwarded-Host are honored by the webhook middleware when reconstructing the URL. Default false — proxy headers are spoofable so opt in only when the reverse-proxy is trusted.
+
+#### Signature
+
+```cpp
+AgentBase & trust_proxy_for_signature(bool trust)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 487.
+
+***
+
+### update\_global\_data
+
+#### Signature
+
+```cpp
+AgentBase & update_global_data(const json & data)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`AgentBase &`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 321.
+
+***
+
+### validate\_auth
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+bool validate_auth(const httplib::Request & req, httplib::Response & res) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 551.
+
+***
+
+### validate\_tool\_token
+
+Validate a per-call SWAIG-function token. Returns false when the function is not registered, when the SessionManager rejects the token, or on any underlying exception.
+Python parity: state\_mixin.StateMixin.validate\_tool\_token — rejects unknown function names up-front and swallows exceptions.
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+bool validate_tool_token(
+ const std::string & function_name,
+ const std::string & token,
+ const std::string & call_id
+) const
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 283.
+
+## Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 113.
diff --git a/fern/products/sdk-reference/cpp/agents/agent/index.mdx b/fern/products/sdk-reference/cpp/agents/agent/index.mdx
new file mode 100644
index 0000000000..bc1e5e2009
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/agent/index.mdx
@@ -0,0 +1,159 @@
+---
+slug: "/reference/cpp/agents/agent"
+title: "agent"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "module"
+ language: "cpp"
+ qualified_name: "signalwire::agent"
+ parent: "agents"
+ module: "agents"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp"
+---
+# `agent`
+
+## Signature
+
+```cpp
+namespace signalwire::agent
+```
+
+## Classes
+
+
+
+
+
+ Language configuration.
+
+
+
+ Pronunciation rule.
+
+
+
+ SWAIG query parameters.
+
+
+
+## Functions
+
+### sorted\_list\_str
+
+**Modifiers:** `static`
+
+#### Signature
+
+```cpp
+std::string sorted_list_str(const std::set< std::string > & s)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/agent/agent_base.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/agent/agent_base.cpp)
+
+Line 458.
+
+## Type Aliases
+
+### DebugEventCallback
+
+Debug event callback type.
+
+#### Signature
+
+```cpp
+typedef std::function< void(const json &event)> DebugEventCallback
+```
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 101.
+
+***
+
+### DynamicConfigCallback
+
+Dynamic config callback type.
+
+#### Signature
+
+```cpp
+typedef std::function< void( const std::map< std::string, std::string > &query_params, const json &body_params, const std::map< std::string, std::string > &headers, class AgentBase &agent_copy)> DynamicConfigCallback
+```
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 90.
+
+***
+
+### json
+
+#### Signature
+
+```cpp
+typedef nlohmann::json json
+```
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 34.
+
+***
+
+### PomSection
+
+Back-compat alias for the original signalwire::agent::PomSection type. The implementation now lives in signalwire::pom::Section — see signalwire/pom/pom.hpp for the full API (render\_markdown, render\_xml, numbered/numberedBullets fields, etc.). New code should use signalwire::pom::Section directly.
+
+#### Signature
+
+```cpp
+typedef signalwire::pom::Section PomSection
+```
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 41.
+
+***
+
+### SummaryCallback
+
+Summary callback type.
+
+#### Signature
+
+```cpp
+typedef std::function< void(const json &summary, const json &raw_data)> SummaryCallback
+```
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 98.
+
+## Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 32.
diff --git a/fern/products/sdk-reference/cpp/agents/agent/language-config/index.mdx b/fern/products/sdk-reference/cpp/agents/agent/language-config/index.mdx
new file mode 100644
index 0000000000..24efedd7dd
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/agent/language-config/index.mdx
@@ -0,0 +1,68 @@
+---
+slug: "/reference/cpp/agents/agent/language-config"
+title: "LanguageConfig"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::agent::LanguageConfig"
+ parent: "signalwire::agent"
+ module: "agents.agent"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp"
+ visibility: "public"
+---
+# `LanguageConfig`
+
+Language configuration.
+
+## Signature
+
+```cpp
+struct signalwire::agent::LanguageConfig
+```
+
+## Properties
+
+
+
+
+
+
+
+
+
+
+ Per-language params dict (engine-specific tuning, voice settings, etc.). Emitted as the language object's params key in SWML only when non-empty — matches Python reference commit 029ca6f. Treated as "unset" when null OR when an empty object.
+
+
+
+
+## Methods
+
+### to\_json
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json to_json() const
+```
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 57.
+
+## Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 44.
diff --git a/fern/products/sdk-reference/cpp/agents/agent/pronunciation/index.mdx b/fern/products/sdk-reference/cpp/agents/agent/pronunciation/index.mdx
new file mode 100644
index 0000000000..bf224daf55
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/agent/pronunciation/index.mdx
@@ -0,0 +1,60 @@
+---
+slug: "/reference/cpp/agents/agent/pronunciation"
+title: "Pronunciation"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::agent::Pronunciation"
+ parent: "signalwire::agent"
+ module: "agents.agent"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp"
+ visibility: "public"
+---
+# `Pronunciation`
+
+Pronunciation rule.
+
+## Signature
+
+```cpp
+struct signalwire::agent::Pronunciation
+```
+
+## Properties
+
+
+
+
+
+
+
+## Methods
+
+### to\_json
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json to_json() const
+```
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 80.
+
+## Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 75.
diff --git a/fern/products/sdk-reference/cpp/agents/agent/swaig-query-param/index.mdx b/fern/products/sdk-reference/cpp/agents/agent/swaig-query-param/index.mdx
new file mode 100644
index 0000000000..793c08ff93
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/agent/swaig-query-param/index.mdx
@@ -0,0 +1,36 @@
+---
+slug: "/reference/cpp/agents/agent/swaig-query-param"
+title: "SwaigQueryParam"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::agent::SwaigQueryParam"
+ parent: "signalwire::agent"
+ module: "agents.agent"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp"
+ visibility: "public"
+---
+# `SwaigQueryParam`
+
+SWAIG query parameters.
+
+## Signature
+
+```cpp
+struct signalwire::agent::SwaigQueryParam
+```
+
+## Properties
+
+
+
+
+
+## Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 104.
diff --git a/fern/products/sdk-reference/cpp/agents/contexts/context-builder/index.mdx b/fern/products/sdk-reference/cpp/agents/contexts/context-builder/index.mdx
new file mode 100644
index 0000000000..9848baae58
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/contexts/context-builder/index.mdx
@@ -0,0 +1,229 @@
+---
+slug: "/reference/cpp/agents/contexts/context-builder"
+title: "ContextBuilder"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::contexts::ContextBuilder"
+ parent: "signalwire::contexts"
+ module: "agents.contexts"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp"
+ visibility: "public"
+---
+# `ContextBuilder`
+
+Builder for multi-step, multi-context AI agent workflows.
+A ContextBuilder owns one or more Contexts; each Context owns an ordered list of Steps. Only one context and one step is active at a time. Per chat turn, the runtime injects the current step's instructions as a system message, then asks the LLM for a response.
+
+Native tools auto-injected by the runtimeWhen a step (or its enclosing context) declares valid\_steps or valid\_contexts, the runtime auto-injects two native tools so the model can navigate the flow:
+
+next\_step(step: enum) — present when valid\_steps is set
+change\_context(context: enum) — present when valid\_contexts is set
+
+A third native tool — gather\_submit — is injected during gather\_info questioning. These three names are reserved: validate() rejects any agent that defines a SWAIG tool with one of them. See reserved\_native\_tool\_names().
+
+Function whitelisting (Step::set\_functions)Each step may declare a functions whitelist. The whitelist is applied in-memory at the start of each LLM turn. CRITICALLY: if a step does NOT declare a functions field, it INHERITS the previous step's active set. See Step::set\_functions for details and examples.
+
+## Signature
+
+```cpp
+class signalwire::contexts::ContextBuilder
+```
+
+## Methods
+
+### add\_context
+
+Add a new context.
+
+#### Signature
+
+```cpp
+Context & add_context(const std::string & name)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Context &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 405.
+
+***
+
+### attach\_tool\_name\_supplier
+
+Attach a tool-name supplier so validate() can check user-defined SWAIG tool names against reserved\_native\_tool\_names(). AgentBase::define\_contexts() wires this up automatically.
+
+#### Signature
+
+```cpp
+ContextBuilder & attach_tool_name_supplier(
+ std::function< std::vector< std::string >()> supplier
+)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`ContextBuilder &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 414.
+
+***
+
+### ContextBuilder
+
+#### Signature
+
+```cpp
+void ContextBuilder()
+```
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 399.
+
+***
+
+### get\_context
+
+Get an existing context.
+
+#### Signature
+
+```cpp
+Context * get_context(const std::string & name)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Context *`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 408.
+
+***
+
+### has\_contexts
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+bool has_contexts() const
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 429.
+
+***
+
+### reset
+
+Remove all contexts, returning the builder to its initial state.
+
+#### Signature
+
+```cpp
+ContextBuilder & reset()
+```
+
+#### Returns
+
+`ContextBuilder &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 402.
+
+***
+
+### to\_json
+
+Serialize all contexts to JSON.
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+json to_json() const
+```
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 427.
+
+***
+
+### validate
+
+Validate all contexts. Checks:
+At least one context is defined
+A single context must be named "default"
+Every context has at least one step
+gather\_info completion\_action targets an existing step
+No user-defined SWAIG tool collides with a reserved native name (via the attached tool-name supplier)
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+void validate() const
+```
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 424.
+
+## Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 397.
diff --git a/fern/products/sdk-reference/cpp/agents/contexts/context/index.mdx b/fern/products/sdk-reference/cpp/agents/contexts/context/index.mdx
new file mode 100644
index 0000000000..0710443c3f
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/contexts/context/index.mdx
@@ -0,0 +1,836 @@
+---
+slug: "/reference/cpp/agents/contexts/context"
+title: "Context"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::contexts::Context"
+ parent: "signalwire::contexts"
+ module: "agents.contexts"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp"
+ visibility: "public"
+---
+# `Context`
+
+## Signature
+
+```cpp
+class signalwire::contexts::Context
+```
+
+## Methods
+
+### add\_bullets
+
+Add a POM section with bullets to the context prompt.
+
+#### Signature
+
+```cpp
+Context & add_bullets(
+ const std::string & title,
+ const std::vector< std::string > & bullets
+)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`Context &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 310.
+
+***
+
+### add\_enter\_filler
+
+Add enter filler for a specific language.
+
+#### Signature
+
+```cpp
+Context & add_enter_filler(
+ const std::string & lang,
+ const std::vector< std::string > & fillers
+)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`Context &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 325.
+
+***
+
+### add\_exit\_filler
+
+Add exit filler for a specific language.
+
+#### Signature
+
+```cpp
+Context & add_exit_filler(
+ const std::string & lang,
+ const std::vector< std::string > & fillers
+)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`Context &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 328.
+
+***
+
+### add\_section
+
+Add a POM section to the context prompt.
+
+#### Signature
+
+```cpp
+Context & add_section(const std::string & title, const std::string & body)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`Context &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 307.
+
+***
+
+### add\_step
+
+Add a new step to this context (returns reference for chaining).
+
+#### Signature
+
+```cpp
+Step & add_step(
+ const std::string & name,
+ const std::string & task = "",
+ const std::vector< std::string > & bullets = {},
+ const std::string & criteria = "",
+ const std::optional< std::variant< std::string, std::vector< std::string > > > & functions = std::nullopt,
+ const std::vector< std::string > & valid_steps = {}
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+
+
+
+
+#### Returns
+
+`Step &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 240.
+
+***
+
+### add\_system\_bullets
+
+Add a POM section with bullets to the system prompt.
+
+#### Signature
+
+```cpp
+Context & add_system_bullets(
+ const std::string & title,
+ const std::vector< std::string > & bullets
+)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`Context &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 316.
+
+***
+
+### add\_system\_section
+
+Add a POM section to the system prompt.
+
+#### Signature
+
+```cpp
+Context & add_system_section(
+ const std::string & title,
+ const std::string & body
+)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`Context &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 313.
+
+***
+
+### Context
+
+#### Signature
+
+
+
+ ```cpp
+ void Context()
+ ```
+
+
+
+ ```cpp
+ void Context(const std::string & name)
+ ```
+
+
+
+#### Parameters (Overload 2)
+
+
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 236.
+
+***
+
+### get\_step
+
+Get an existing step by name.
+
+#### Signature
+
+```cpp
+Step * get_step(const std::string & name)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Step *`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 248.
+
+***
+
+### has\_steps
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+bool has_steps() const
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 334.
+
+***
+
+### initial\_step
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const std::optional< std::string > & initial_step() const
+```
+
+#### Returns
+
+`const std::optional< std::string > &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 337.
+
+***
+
+### move\_step
+
+Move a step to a specific position.
+
+#### Signature
+
+```cpp
+Context & move_step(const std::string & name, int position)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`Context &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 254.
+
+***
+
+### name
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const std::string & name() const
+```
+
+#### Returns
+
+`const std::string &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 333.
+
+***
+
+### remove\_step
+
+Remove a step.
+
+#### Signature
+
+```cpp
+Context & remove_step(const std::string & name)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Context &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 251.
+
+***
+
+### set\_consolidate
+
+Set consolidate.
+
+#### Signature
+
+```cpp
+Context & set_consolidate(bool c)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Context &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 275.
+
+***
+
+### set\_enter\_fillers
+
+Set enter fillers.
+
+#### Signature
+
+```cpp
+Context & set_enter_fillers(const json & fillers)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Context &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 319.
+
+***
+
+### set\_exit\_fillers
+
+Set exit fillers.
+
+#### Signature
+
+```cpp
+Context & set_exit_fillers(const json & fillers)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Context &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 322.
+
+***
+
+### set\_full\_reset
+
+Set full reset.
+
+#### Signature
+
+```cpp
+Context & set_full_reset(bool fr)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Context &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 278.
+
+***
+
+### set\_initial\_step
+
+Set which step the context starts on when entered.
+By default, a context starts on its first step (index 0). Use this to skip a preamble step on re-entry via change\_context.
+
+#### Signature
+
+```cpp
+Context & set_initial_step(const std::string & step_name)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Context &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 260.
+
+***
+
+### set\_isolated
+
+Mark this context as isolated — entering it wipes conversation history.
+When isolated=true and the context is entered via change\_context, the runtime wipes the conversation array. The model starts fresh with only the new context's system\_prompt + step instructions, with no memory of prior turns.
+EXCEPTION — reset overrides the wipe: If the context also has a reset configuration (via set\_consolidate or set\_full\_reset), the wipe is skipped in favor of the reset behavior. Use reset with consolidate=true to summarize prior history into a single message instead of dropping it entirely.
+Use cases: switching to a sensitive billing flow that should not see prior small-talk; handing off to a different agent persona; resetting after a long off-topic detour.
+
+#### Signature
+
+```cpp
+Context & set_isolated(bool isolated)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Context &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 301.
+
+***
+
+### set\_post\_prompt
+
+Set post prompt override.
+
+#### Signature
+
+```cpp
+Context & set_post_prompt(const std::string & pp)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Context &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 269.
+
+***
+
+### set\_prompt
+
+Set prompt text directly.
+
+#### Signature
+
+```cpp
+Context & set_prompt(const std::string & prompt)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Context &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 304.
+
+***
+
+### set\_system\_prompt
+
+Set system prompt (for context switching).
+
+#### Signature
+
+```cpp
+Context & set_system_prompt(const std::string & sp)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Context &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 272.
+
+***
+
+### set\_user\_prompt
+
+Set user prompt.
+
+#### Signature
+
+```cpp
+Context & set_user_prompt(const std::string & up)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Context &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 281.
+
+***
+
+### set\_valid\_contexts
+
+Set valid contexts for navigation.
+
+#### Signature
+
+```cpp
+Context & set_valid_contexts(const std::vector< std::string > & ctxs)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Context &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 263.
+
+***
+
+### set\_valid\_steps
+
+Set valid steps for all steps in this context.
+
+#### Signature
+
+```cpp
+Context & set_valid_steps(const std::vector< std::string > & steps)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Context &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 266.
+
+***
+
+### step\_order
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const std::vector< std::string > & step_order() const
+```
+
+#### Returns
+
+`const std::vector< std::string > &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 336.
+
+***
+
+### steps
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const std::map< std::string, Step > & steps() const
+```
+
+#### Returns
+
+`const std::map< std::string, Step > &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 335.
+
+***
+
+### to\_json
+
+Serialize to JSON.
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+json to_json() const
+```
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 331.
+
+***
+
+### valid\_contexts
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const std::optional< std::vector< std::string > > & valid_contexts() const
+```
+
+#### Returns
+
+`const std::optional< std::vector< std::string > > &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 338.
+
+## Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 234.
diff --git a/fern/products/sdk-reference/cpp/agents/contexts/gather-info/index.mdx b/fern/products/sdk-reference/cpp/agents/contexts/gather-info/index.mdx
new file mode 100644
index 0000000000..d0f93bc6c1
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/contexts/gather-info/index.mdx
@@ -0,0 +1,185 @@
+---
+slug: "/reference/cpp/agents/contexts/gather-info"
+title: "GatherInfo"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::contexts::GatherInfo"
+ parent: "signalwire::contexts"
+ module: "agents.contexts"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp"
+ visibility: "public"
+---
+# `GatherInfo`
+
+## Signature
+
+```cpp
+class signalwire::contexts::GatherInfo
+```
+
+## Methods
+
+### add\_question
+
+#### Signature
+
+```cpp
+GatherInfo & add_question(
+ const std::string & key,
+ const std::string & question,
+ const std::string & type = "string",
+ bool confirm = false,
+ const std::string & prompt = "",
+ const std::vector< std::string > & functions = {}
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+
+
+
+
+#### Returns
+
+`GatherInfo &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 65.
+
+***
+
+### completion\_action
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const std::string & completion_action() const
+```
+
+#### Returns
+
+`const std::string &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 74.
+
+***
+
+### GatherInfo
+
+#### Signature
+
+```cpp
+void GatherInfo(
+ const std::string & output_key = "",
+ const std::string & completion_action = "",
+ const std::string & prompt = ""
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 61.
+
+***
+
+### has\_questions
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+bool has_questions() const
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 72.
+
+***
+
+### questions
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const std::vector< GatherQuestion > & questions() const
+```
+
+#### Returns
+
+`const std::vector< GatherQuestion > &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 73.
+
+***
+
+### to\_json
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+json to_json() const
+```
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 70.
+
+## Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 59.
diff --git a/fern/products/sdk-reference/cpp/agents/contexts/gather-question/index.mdx b/fern/products/sdk-reference/cpp/agents/contexts/gather-question/index.mdx
new file mode 100644
index 0000000000..4d20fba004
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/contexts/gather-question/index.mdx
@@ -0,0 +1,109 @@
+---
+slug: "/reference/cpp/agents/contexts/gather-question"
+title: "GatherQuestion"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::contexts::GatherQuestion"
+ parent: "signalwire::contexts"
+ module: "agents.contexts"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp"
+ visibility: "public"
+---
+# `GatherQuestion`
+
+## Signature
+
+```cpp
+class signalwire::contexts::GatherQuestion
+```
+
+## Methods
+
+### GatherQuestion
+
+#### Signature
+
+```cpp
+void GatherQuestion(
+ const std::string & key,
+ const std::string & question,
+ const std::string & type = "string",
+ bool confirm = false,
+ const std::string & prompt = "",
+ const std::vector< std::string > & functions = {}
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+
+
+
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 37.
+
+***
+
+### key
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const std::string & key() const
+```
+
+#### Returns
+
+`const std::string &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 44.
+
+***
+
+### to\_json
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+json to_json() const
+```
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 42.
+
+## Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 35.
diff --git a/fern/products/sdk-reference/cpp/agents/contexts/index.mdx b/fern/products/sdk-reference/cpp/agents/contexts/index.mdx
new file mode 100644
index 0000000000..f765896921
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/contexts/index.mdx
@@ -0,0 +1,89 @@
+---
+slug: "/reference/cpp/agents/contexts"
+title: "contexts"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "module"
+ language: "cpp"
+ qualified_name: "signalwire::contexts"
+ parent: "agents"
+ module: "agents"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp"
+---
+# `contexts`
+
+## Signature
+
+```cpp
+namespace signalwire::contexts
+```
+
+## Constants
+
+
+
+
+
+## Classes
+
+
+
+
+
+ Builder for multi-step, multi-context AI agent workflows. A ContextBuilder owns one or more Contexts; each Context owns an ordered list of Steps. Only one context and one step is active at a time. Per chat turn, the runtime injects the current step's instructions as a system message, then asks the LLM for a response.
+
+
+
+
+
+
+
+
+
+## Functions
+
+### reserved\_native\_tool\_names
+
+Reserved tool names auto-injected by the runtime when contexts/steps are present. User-defined SWAIG tools must not collide with these names:
+next\_step / change\_context are injected when valid\_steps or valid\_contexts is set so the model can navigate the flow.
+gather\_submit is injected while a step's gather\_info is collecting answers. ContextBuilder::validate() rejects any agent that registers a user tool sharing one of these names.
+
+#### Signature
+
+```cpp
+const std::set< std::string > & reserved_native_tool_names()
+```
+
+#### Returns
+
+`const std::set< std::string > &`
+
+#### Source
+
+[`src/contexts/contexts.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/contexts/contexts.cpp)
+
+Line 10.
+
+## Type Aliases
+
+### json
+
+#### Signature
+
+```cpp
+typedef nlohmann::json json
+```
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 16.
+
+## Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 14.
diff --git a/fern/products/sdk-reference/cpp/agents/contexts/step/index.mdx b/fern/products/sdk-reference/cpp/agents/contexts/step/index.mdx
new file mode 100644
index 0000000000..b1dd82cc39
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/contexts/step/index.mdx
@@ -0,0 +1,657 @@
+---
+slug: "/reference/cpp/agents/contexts/step"
+title: "Step"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::contexts::Step"
+ parent: "signalwire::contexts"
+ module: "agents.contexts"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp"
+ visibility: "public"
+---
+# `Step`
+
+## Signature
+
+```cpp
+class signalwire::contexts::Step
+```
+
+## Methods
+
+### add\_bullets
+
+Add a POM section with bullet points.
+
+#### Signature
+
+```cpp
+Step & add_bullets(
+ const std::string & title,
+ const std::vector< std::string > & bullets
+)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`Step &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 99.
+
+***
+
+### add\_gather\_question
+
+Add a gather question (set\_gather\_info must be called first).
+IMPORTANT — gather mode locks function access: While the model is asking gather questions, the runtime forcibly deactivates ALL of the step's other functions. The only callable tools during a gather question are:
+
+gather\_submit (the native answer-submission tool)
+Whatever names you pass in this question's functions argument
+
+next\_step and change\_context are also filtered out — the model cannot navigate away until the gather completes. This is by design: it forces a tight ask → submit → next-question loop.
+If a question needs to call out to a tool (e.g. validate an email, geocode a ZIP), list that tool name in this question's functions argument. Functions listed here are active ONLY for this question.
+
+#### Signature
+
+```cpp
+Step & add_gather_question(
+ const std::string & key,
+ const std::string & question,
+ const std::string & type = "string",
+ bool confirm = false,
+ const std::string & prompt = "",
+ const std::vector< std::string > & functions = {}
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+
+
+
+
+#### Returns
+
+`Step &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 186.
+
+***
+
+### add\_section
+
+Add a POM section to the step.
+
+#### Signature
+
+```cpp
+Step & add_section(const std::string & title, const std::string & body)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`Step &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 96.
+
+***
+
+### clear\_sections
+
+Clear all sections and text.
+
+#### Signature
+
+```cpp
+Step & clear_sections()
+```
+
+#### Returns
+
+`Step &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 192.
+
+***
+
+### gather\_info
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const std::optional< GatherInfo > & gather_info() const
+```
+
+#### Returns
+
+`const std::optional< GatherInfo > &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 206.
+
+***
+
+### name
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const std::string & name() const
+```
+
+#### Returns
+
+`const std::string &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 203.
+
+***
+
+### set\_end
+
+Mark this step as terminal for the step flow.
+IMPORTANT: end=true does NOT end the conversation or hang up the call. It exits step mode entirely after this step executes — clearing the steps list, current step index, valid\_steps, and valid\_contexts. The agent keeps running, but operates only under the base system prompt and the context-level prompt; no more step instructions are injected and no more next\_step tool is offered.
+To actually end the call, call a hangup tool or define a hangup hook.
+
+#### Signature
+
+```cpp
+Step & set_end(bool end)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Step &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 153.
+
+***
+
+### set\_functions
+
+Set which non-internal functions are callable while this step is active.
+IMPORTANT — inheritance behavior: If you do NOT call this method, the step inherits whichever function set was active on the previous step (or the previous context's last step). The server-side runtime only resets the active set when a step explicitly declares its functions field. This is the most common source of bugs in multi-step agents: forgetting set\_functions on a later step lets the previous step's tools leak through. Best practice is to call set\_functions explicitly on every step that should differ from the previous one.
+Keep the per-step active set small: LLM tool selection accuracy degrades noticeably past ~7-8 simultaneously-active tools per call. Use per-step whitelisting to partition large tool collections.
+Internal functions (e.g. gather\_submit, hangup hook) are ALWAYS protected and cannot be deactivated by this whitelist. The native navigation tools next\_step and change\_context are injected automatically when set\_valid\_steps / set\_valid\_contexts is used; they are not affected by this list.
+
+functions
+
+One of:
+std::vectorstd::string — whitelist of allowed names
+empty std::vector — disable all user functions
+std::string "none" — synonym for the empty vector
+
+#### Signature
+
+```cpp
+Step & set_functions(
+ const std::variant< std::string, std::vector< std::string > > & functions
+)
+```
+
+#### Parameters
+
+
+ One of: std::vectorstd::string — whitelist of allowed names empty std::vector — disable all user functions std::string "none" — synonym for the empty vector
+
+
+#### Returns
+
+`Step &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 133.
+
+***
+
+### set\_gather\_info
+
+Enable info gathering on this step.
+
+#### Signature
+
+```cpp
+Step & set_gather_info(
+ const std::string & output_key = "",
+ const std::string & completion_action = "",
+ const std::string & prompt = ""
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Returns
+
+`Step &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 162.
+
+***
+
+### set\_reset\_consolidate
+
+#### Signature
+
+```cpp
+Step & set_reset_consolidate(bool c)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Step &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 197.
+
+***
+
+### set\_reset\_full\_reset
+
+#### Signature
+
+```cpp
+Step & set_reset_full_reset(bool fr)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Step &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 198.
+
+***
+
+### set\_reset\_system\_prompt
+
+Set reset parameters for context switching.
+
+#### Signature
+
+```cpp
+Step & set_reset_system_prompt(const std::string & sp)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Step &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 195.
+
+***
+
+### set\_reset\_user\_prompt
+
+#### Signature
+
+```cpp
+Step & set_reset_user_prompt(const std::string & up)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Step &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 196.
+
+***
+
+### set\_skip\_to\_next\_step
+
+Set whether to auto-advance to the next step.
+
+#### Signature
+
+```cpp
+Step & set_skip_to_next_step(bool skip)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Step &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 159.
+
+***
+
+### set\_skip\_user\_turn
+
+Set whether to skip waiting for user input.
+
+#### Signature
+
+```cpp
+Step & set_skip_user_turn(bool skip)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Step &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 156.
+
+***
+
+### set\_step\_criteria
+
+Set step completion criteria.
+
+#### Signature
+
+```cpp
+Step & set_step_criteria(const std::string & criteria)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Step &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 102.
+
+***
+
+### set\_text
+
+Set the step's prompt text directly.
+
+#### Signature
+
+```cpp
+Step & set_text(const std::string & text)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Step &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 93.
+
+***
+
+### set\_valid\_contexts
+
+Set which contexts can be navigated to from this step.
+
+#### Signature
+
+```cpp
+Step & set_valid_contexts(const std::vector< std::string > & ctxs)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Step &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 139.
+
+***
+
+### set\_valid\_steps
+
+Set which steps can be navigated to from this step.
+
+#### Signature
+
+```cpp
+Step & set_valid_steps(const std::vector< std::string > & steps)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Step &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 136.
+
+***
+
+### Step
+
+#### Signature
+
+
+
+ ```cpp
+ void Step()
+ ```
+
+
+
+ ```cpp
+ void Step(const std::string & name)
+ ```
+
+
+
+#### Parameters (Overload 2)
+
+
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 89.
+
+***
+
+### to\_json
+
+Serialize to JSON.
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+json to_json() const
+```
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 201.
+
+***
+
+### valid\_contexts
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const std::optional< std::vector< std::string > > & valid_contexts() const
+```
+
+#### Returns
+
+`const std::optional< std::vector< std::string > > &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 205.
+
+***
+
+### valid\_steps
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const std::optional< std::vector< std::string > > & valid_steps() const
+```
+
+#### Returns
+
+`const std::optional< std::vector< std::string > > &`
+
+#### Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 204.
+
+## Source
+
+[`include/signalwire/contexts/contexts.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/contexts/contexts.hpp)
+
+Line 87.
diff --git a/fern/products/sdk-reference/cpp/agents/datamap/index.mdx b/fern/products/sdk-reference/cpp/agents/datamap/index.mdx
new file mode 100644
index 0000000000..6d81a515be
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/datamap/index.mdx
@@ -0,0 +1,475 @@
+---
+slug: "/reference/cpp/agents/datamap"
+title: "datamap"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::datamap"
+ parent: "agents"
+ module: "agents"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/datamap/datamap.hpp"
+---
+# `datamap`
+
+Fluent builder for SWAIG data\_map tools (server-side, no webhook needed). Every setter returns \*this for chaining.
+
+## Signature
+
+```cpp
+class signalwire::datamap::DataMap
+```
+
+## Methods
+
+### body
+
+Set request body for the last added webhook.
+
+#### Signature
+
+```cpp
+DataMap & body(const json & data)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`DataMap &`
+
+#### Source
+
+[`include/signalwire/datamap/datamap.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/datamap/datamap.hpp)
+
+Line 81.
+
+***
+
+### DataMap
+
+**Modifiers:** `explicit`
+
+#### Signature
+
+```cpp
+void DataMap(const std::string & function_name)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/datamap/datamap.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/datamap/datamap.hpp)
+
+Line 20.
+
+***
+
+### description
+
+Alias for purpose(). Sets the LLM-facing tool description. This string is read by the model to decide WHEN to call this tool. See purpose() for bad-vs-good examples.
+
+#### Signature
+
+```cpp
+DataMap & description(const std::string & desc)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`DataMap &`
+
+#### Source
+
+[`include/signalwire/datamap/datamap.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/datamap/datamap.hpp)
+
+Line 43.
+
+***
+
+### error\_keys
+
+Set error keys for the most recent webhook or top-level.
+
+#### Signature
+
+```cpp
+DataMap & error_keys(const std::vector< std::string > & keys)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`DataMap &`
+
+#### Source
+
+[`include/signalwire/datamap/datamap.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/datamap/datamap.hpp)
+
+Line 96.
+
+***
+
+### expression
+
+Add an expression pattern for pattern-based responses.
+
+#### Signature
+
+```cpp
+DataMap & expression(
+ const std::string & test_value,
+ const std::string & pattern,
+ const swaig::FunctionResult & output,
+ const swaig::FunctionResult * nomatch_output = nullptr
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+#### Returns
+
+`DataMap &`
+
+#### Source
+
+[`include/signalwire/datamap/datamap.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/datamap/datamap.hpp)
+
+Line 66.
+
+***
+
+### fallback\_output
+
+Set a fallback output at the top level.
+
+#### Signature
+
+```cpp
+DataMap & fallback_output(const swaig::FunctionResult & result)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`DataMap &`
+
+#### Source
+
+[`include/signalwire/datamap/datamap.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/datamap/datamap.hpp)
+
+Line 93.
+
+***
+
+### foreach
+
+Set foreach configuration for the last webhook.
+
+#### Signature
+
+```cpp
+DataMap & foreach(const json & foreach_config)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`DataMap &`
+
+#### Source
+
+[`include/signalwire/datamap/datamap.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/datamap/datamap.hpp)
+
+Line 87.
+
+***
+
+### global\_error\_keys
+
+Set top-level error keys.
+
+#### Signature
+
+```cpp
+DataMap & global_error_keys(const std::vector< std::string > & keys)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`DataMap &`
+
+#### Source
+
+[`include/signalwire/datamap/datamap.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/datamap/datamap.hpp)
+
+Line 99.
+
+***
+
+### output
+
+Set output for the most recent webhook.
+
+#### Signature
+
+```cpp
+DataMap & output(const swaig::FunctionResult & result)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`DataMap &`
+
+#### Source
+
+[`include/signalwire/datamap/datamap.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/datamap/datamap.hpp)
+
+Line 90.
+
+***
+
+### parameter
+
+Add a parameter to this data-map tool — the desc is LLM-FACING.
+Each parameter description is rendered into the OpenAI tool schema under parameters.properties.<name>.description and sent to the model. The model uses it to decide HOW to fill in the argument from user speech. It is prompt engineering, not developer FYI.
+Bad vs good: BAD : .parameter("city", "string", "the city") GOOD: .parameter("city", "string", "The name of the city to get weather for, e.g. " "'San Francisco'. Ask the user if they did not " "provide one. Include the state or country if the " "city name is ambiguous.")
+
+#### Signature
+
+```cpp
+DataMap & parameter(
+ const std::string & name,
+ const std::string & param_type,
+ const std::string & desc,
+ bool required = false,
+ const std::vector< std::string > & enum_values = {}
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+
+
+#### Returns
+
+`DataMap &`
+
+#### Source
+
+[`include/signalwire/datamap/datamap.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/datamap/datamap.hpp)
+
+Line 61.
+
+***
+
+### params
+
+Set request params for the last added webhook (alias for body).
+
+#### Signature
+
+```cpp
+DataMap & params(const json & data)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`DataMap &`
+
+#### Source
+
+[`include/signalwire/datamap/datamap.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/datamap/datamap.hpp)
+
+Line 84.
+
+***
+
+### purpose
+
+Set the LLM-facing tool description (the "purpose"). PROMPT ENGINEERING, not developer documentation.
+The description string is rendered into the OpenAI tool schema description field on every LLM turn. The model reads it to decide WHEN to call this tool. A vague purpose() is the #1 cause of "the model has the right tool but doesn't call it" failures with data-map tools.
+Bad vs good: BAD : .purpose("weather api") GOOD: .purpose("Get the current weather conditions and " "forecast for a specific city. Use this " "whenever the user asks about weather, " "temperature, rain, or similar conditions in " "a named location.")
+
+#### Signature
+
+```cpp
+DataMap & purpose(const std::string & desc)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`DataMap &`
+
+#### Source
+
+[`include/signalwire/datamap/datamap.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/datamap/datamap.hpp)
+
+Line 38.
+
+***
+
+### to\_swaig\_function
+
+Convert to a SWAIG function definition JSON \[\[nodiscard]]: the built tool definition is the output of the builder; dropping it discards the whole DataMap. (The fluent DataMap& setters above are intentionally NOT nodiscard.)
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+json to_swaig_function() const
+```
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/datamap/datamap.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/datamap/datamap.hpp)
+
+Line 105.
+
+***
+
+### webhook
+
+Add a webhook API call.
+
+#### Signature
+
+```cpp
+DataMap & webhook(
+ const std::string & method,
+ const std::string & url,
+ const json & headers = json::object(),
+ const std::string & form_param = "",
+ bool input_args_as_params = false,
+ const std::vector< std::string > & require_args = {}
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+
+
+
+
+#### Returns
+
+`DataMap &`
+
+#### Source
+
+[`include/signalwire/datamap/datamap.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/datamap/datamap.hpp)
+
+Line 71.
+
+***
+
+### webhook\_expressions
+
+Add expressions that run after the most recent webhook.
+
+#### Signature
+
+```cpp
+DataMap & webhook_expressions(const std::vector< json > & expressions)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`DataMap &`
+
+#### Source
+
+[`include/signalwire/datamap/datamap.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/datamap/datamap.hpp)
+
+Line 78.
+
+## Type Aliases
+
+### json
+
+#### Signature
+
+```cpp
+typedef nlohmann::json json
+```
+
+#### Source
+
+[`include/signalwire/datamap/datamap.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/datamap/datamap.hpp)
+
+Line 14.
+
+## Source
+
+[`include/signalwire/datamap/datamap.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/datamap/datamap.hpp)
+
+Line 18.
diff --git a/fern/products/sdk-reference/cpp/agents/index.mdx b/fern/products/sdk-reference/cpp/agents/index.mdx
new file mode 100644
index 0000000000..959c59e187
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/index.mdx
@@ -0,0 +1,40 @@
+---
+slug: "/reference/cpp/agents"
+title: "agents"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "module"
+ language: "cpp"
+ qualified_name: "agents"
+---
+# `agents`
+
+## Classes
+
+
+
+ Fluent builder for SWAIG data\_map tools (server-side, no webhook needed). Every setter returns \*this for chaining.
+
+
+
+## Modules
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/fern/products/sdk-reference/cpp/agents/pom/index.mdx b/fern/products/sdk-reference/cpp/agents/pom/index.mdx
new file mode 100644
index 0000000000..52d3d4de17
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/pom/index.mdx
@@ -0,0 +1,131 @@
+---
+slug: "/reference/cpp/agents/pom"
+title: "pom"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "module"
+ language: "cpp"
+ qualified_name: "signalwire::pom"
+ parent: "agents"
+ module: "agents"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/pom/pom.hpp"
+---
+# `pom`
+
+## Signature
+
+```cpp
+namespace signalwire::pom
+```
+
+## Classes
+
+
+
+ Top-level container of an ordered list of sections.
+
+
+
+ One section in the Prompt Object Model tree. Mirrors Python's signalwire.pom.pom.Section. Fields are public to match the Python attribute access pattern section.body, section.bullets, section.subsections.
+
+
+
+## Functions
+
+### yaml\_dump
+
+Emit a json value as YAML. Inverse of yaml\_parse. Pretty output matches the shape PyYAML's yaml.dump(..., default\_flow\_style=False, sort\_keys=False) produces for the POM shape.
+
+#### Signature
+
+```cpp
+std::string yaml_dump(const json & value)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/pom/pom.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/pom/pom.cpp)
+
+Line 1121.
+
+***
+
+### yaml\_dump\_ordered
+
+#### Signature
+
+```cpp
+std::string yaml_dump_ordered(const nlohmann::ordered_json & value)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/pom/pom.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/pom/pom.cpp)
+
+Line 1129.
+
+***
+
+### yaml\_parse
+
+Parse a YAML document (POM-shaped subset only) into a json value. Supports list-of-dicts at top level; values may be strings, booleans, or lists of either. Throws std::invalid\_argument on malformed input.
+
+#### Signature
+
+```cpp
+json yaml_parse(const std::string & yaml_text)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`src/pom/pom.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/pom/pom.cpp)
+
+Line 1110.
+
+## Type Aliases
+
+### json
+
+#### Signature
+
+```cpp
+typedef nlohmann::json json
+```
+
+#### Source
+
+[`include/signalwire/pom/pom.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/pom/pom.hpp)
+
+Line 39.
+
+## Source
+
+[`include/signalwire/pom/pom.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/pom/pom.hpp)
+
+Line 37.
diff --git a/fern/products/sdk-reference/cpp/agents/pom/prompt-object-model/index.mdx b/fern/products/sdk-reference/cpp/agents/pom/prompt-object-model/index.mdx
new file mode 100644
index 0000000000..60c71480f4
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/pom/prompt-object-model/index.mdx
@@ -0,0 +1,391 @@
+---
+slug: "/reference/cpp/agents/pom/prompt-object-model"
+title: "PromptObjectModel"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::pom::PromptObjectModel"
+ parent: "signalwire::pom"
+ module: "agents.pom"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/pom/pom.hpp"
+ visibility: "public"
+---
+# `PromptObjectModel`
+
+Top-level container of an ordered list of sections.
+
+## Signature
+
+```cpp
+class signalwire::pom::PromptObjectModel
+```
+
+## Properties
+
+
+
+
+
+## Methods
+
+### add\_pom\_as\_subsection
+
+Add every top-level section of pom\_to\_add as a subsection of the section identified by target\_title. Throws std::invalid\_argument when no matching section exists.
+
+#### Signature
+
+
+
+ ```cpp
+ void add_pom_as_subsection(
+ const std::string & target_title,
+ const PromptObjectModel & pom_to_add
+ )
+ ```
+
+
+
+ ```cpp
+ void add_pom_as_subsection(
+ Section & target,
+ const PromptObjectModel & pom_to_add
+ )
+ ```
+
+
+
+#### Parameters (Overload 1)
+
+
+
+
+
+#### Parameters (Overload 2)
+
+
+
+
+
+#### Source
+
+[`include/signalwire/pom/pom.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/pom/pom.hpp)
+
+Line 188.
+
+***
+
+### add\_section
+
+Append a new top-level section. title may be empty only for the very first section (Python enforces "Only the first section can
+have no title"); subsequent calls without a title throw std::invalid\_argument.
+
+#### Signature
+
+```cpp
+Section & add_section(
+ const std::string & title = "",
+ const std::string & body = "",
+ const std::vector< std::string > & bullets = {},
+ std::optional< bool > numbered = std::nullopt,
+ bool numbered_bullets = false
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+
+
+#### Returns
+
+`Section &`
+
+#### Source
+
+[`include/signalwire/pom/pom.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/pom/pom.hpp)
+
+Line 152.
+
+***
+
+### find\_section
+
+Recursively search for a section by title. Returns a pointer to the owned section so callers can mutate it; returns nullptr when nothing matches. Pointer is invalidated by any subsequent mutation of the POM that grows sections or subsections (caller's responsibility — same contract as std::vector::data()).
+
+#### Signature
+
+
+
+ ```cpp
+ Section * find_section(const std::string & title)
+ ```
+
+
+
+ ```cpp
+ const Section * find_section(const std::string & title) const
+ ```
+
+
+
+#### Parameters (Overload 1)
+
+
+
+#### Parameters (Overload 2)
+
+
+
+#### Returns (Overload 1)
+
+`Section *`
+
+#### Returns (Overload 2)
+
+`const Section *`
+
+#### Source
+
+[`include/signalwire/pom/pom.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/pom/pom.hpp)
+
+Line 163.
+
+***
+
+### from\_json
+
+Build a POM from a JSON string. Throws nlohmann::json::parse\_error on malformed JSON, and std::invalid\_argument on shape violations (missing required fields, wrong types, etc.).
+
+**Modifiers:** `static`
+
+#### Signature
+
+
+
+ ```cpp
+ PromptObjectModel from_json(const std::string & json_text)
+ ```
+
+
+
+ ```cpp
+ PromptObjectModel from_json(const json & data)
+ ```
+
+
+
+#### Parameters (Overload 1)
+
+
+
+#### Parameters (Overload 2)
+
+
+
+#### Returns (Overload 1)
+
+`PromptObjectModel`
+
+#### Returns (Overload 2)
+
+`PromptObjectModel`
+
+#### Source
+
+[`include/signalwire/pom/pom.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/pom/pom.hpp)
+
+Line 142.
+
+***
+
+### from\_yaml
+
+Build a POM from a YAML string (minimal POM-shaped subset only).
+
+**Modifiers:** `static`
+
+#### Signature
+
+```cpp
+PromptObjectModel from_yaml(const std::string & yaml_text)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`PromptObjectModel`
+
+#### Source
+
+[`include/signalwire/pom/pom.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/pom/pom.hpp)
+
+Line 146.
+
+***
+
+### PromptObjectModel
+
+#### Signature
+
+
+
+ ```cpp
+ void PromptObjectModel()
+ ```
+
+
+
+ ```cpp
+ void PromptObjectModel(bool debug_flag)
+ ```
+
+
+
+#### Parameters (Overload 2)
+
+
+
+#### Source
+
+[`include/signalwire/pom/pom.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/pom/pom.hpp)
+
+Line 135.
+
+***
+
+### render\_markdown
+
+Render entire POM as Markdown.
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+std::string render_markdown() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/pom/pom.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/pom/pom.hpp)
+
+Line 179.
+
+***
+
+### render\_xml
+
+Render entire POM as XML (with <?xml ... ?> prolog and a <prompt> root element).
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+std::string render_xml() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/pom/pom.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/pom/pom.hpp)
+
+Line 183.
+
+***
+
+### to\_dict
+
+Whole-tree dict view (a json array). Identical content to to\_json, returned as a parsed json value.
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+json to_dict() const
+```
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/pom/pom.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/pom/pom.hpp)
+
+Line 176.
+
+***
+
+### to\_json
+
+Whole-tree JSON serializer. Returns a pretty-printed (indent=2) JSON array string, matching Python's json.dumps(..., indent=2).
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+std::string to_json() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/pom/pom.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/pom/pom.hpp)
+
+Line 168.
+
+***
+
+### to\_yaml
+
+Whole-tree YAML serializer. Returns a YAML document representing the JSON-equivalent list-of-dicts structure.
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+std::string to_yaml() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/pom/pom.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/pom/pom.hpp)
+
+Line 172.
+
+## Source
+
+[`include/signalwire/pom/pom.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/pom/pom.hpp)
+
+Line 130.
diff --git a/fern/products/sdk-reference/cpp/agents/pom/section/index.mdx b/fern/products/sdk-reference/cpp/agents/pom/section/index.mdx
new file mode 100644
index 0000000000..da8d1fa95a
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/pom/section/index.mdx
@@ -0,0 +1,301 @@
+---
+slug: "/reference/cpp/agents/pom/section"
+title: "Section"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::pom::Section"
+ parent: "signalwire::pom"
+ module: "agents.pom"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/pom/pom.hpp"
+ visibility: "public"
+---
+# `Section`
+
+One section in the Prompt Object Model tree.
+Mirrors Python's signalwire.pom.pom.Section. Fields are public to match the Python attribute access pattern section.body, section.bullets, section.subsections.
+
+## Signature
+
+```cpp
+class signalwire::pom::Section
+```
+
+## Properties
+
+
+ Optional paragraph of body text.
+
+
+
+ Optional bullet list.
+
+
+
+ Whether this section participates in section numbering. Three-state: std::nullopt — not specified (Python None); inherits. true — explicitly numbered. false — explicitly opted out of numbering. Numbering is "all-or-none per sibling group": if any sibling has numbered == true, every sibling gets numbered unless it explicitly opts out with false.
+
+
+
+ When true, bullets are rendered as a numbered list (1. 2. 3.) in markdown and as <bullet id="1"> in XML, instead of dash bullets.
+
+
+
+ Nested sections (recursively the same shape).
+
+
+
+ Section title. Optional only on the very first top-level section (Python enforces "only the first section can have no title"); for subsections a title is always required.
+
+
+## Methods
+
+### add\_body
+
+Replace (NOT append) the body text. Mirrors Python's documented "Add OR REPLACE the body text" contract.
+
+#### Signature
+
+```cpp
+void add_body(const std::string & b)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/pom/pom.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/pom/pom.hpp)
+
+Line 90.
+
+***
+
+### add\_bullets
+
+Append bullets to the existing list.
+
+#### Signature
+
+```cpp
+void add_bullets(const std::vector< std::string > & bs)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/pom/pom.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/pom/pom.hpp)
+
+Line 93.
+
+***
+
+### add\_subsection
+
+Add a child subsection. Returns a reference to the newly-created subsection so callers can chain further mutations. Throws std::invalid\_argument if title is empty (Python raises ValueError("Subsections must have a title")).
+
+#### Signature
+
+```cpp
+Section & add_subsection(
+ const std::string & title,
+ const std::string & body = "",
+ const std::vector< std::string > & bullets = {},
+ std::optional< bool > numbered = std::nullopt,
+ bool numbered_bullets = false
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+
+
+#### Returns
+
+`Section &`
+
+#### Source
+
+[`include/signalwire/pom/pom.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/pom/pom.hpp)
+
+Line 99.
+
+***
+
+### render\_markdown
+
+Render this section + subtree as Markdown. level is the heading level for this section (default 2 = ## ); section\_number is the parent path that will prefix this section's title (e.g. \{1, 2\} -> "1.2. "); empty means "no numbering".
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+std::string render_markdown(
+ int level = 2,
+ const std::vector< int > & section_number = {}
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/pom/pom.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/pom/pom.hpp)
+
+Line 118.
+
+***
+
+### render\_xml
+
+Render this section + subtree as XML. indent is the number of 2-space indents to use; section\_number follows the same rule as render\_markdown.
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+std::string render_xml(
+ int indent = 0,
+ const std::vector< int > & section_number = {}
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/pom/pom.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/pom/pom.hpp)
+
+Line 124.
+
+***
+
+### Section
+
+Build a Section. title is optional; everything else has sensible defaults so empty Sections can be created and populated incrementally via add\_body / add\_bullets / add\_subsection.
+
+#### Signature
+
+
+
+ ```cpp
+ void Section()
+ ```
+
+
+
+ ```cpp
+ void Section(
+ std::optional< std::string > t,
+ std::string b = "",
+ std::vector< std::string > bs = {},
+ std::optional< bool > num = std::nullopt,
+ bool numbered_bullets = false
+ )
+ ```
+
+
+
+#### Parameters (Overload 2)
+
+
+
+
+
+
+
+
+
+
+
+#### Source
+
+[`include/signalwire/pom/pom.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/pom/pom.hpp)
+
+Line 77.
+
+***
+
+### to\_dict
+
+Python-compatible alias for to\_json — Python exposes to\_dict. Returns the same JSON object.
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json to_dict() const
+```
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/pom/pom.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/pom/pom.hpp)
+
+Line 112.
+
+***
+
+### to\_json
+
+Convert the section (and its subtree) to a JSON object. Matches the Python key order: title, body, bullets, subsections, numbered, numberedBullets.
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+json to_json() const
+```
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/pom/pom.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/pom/pom.hpp)
+
+Line 108.
+
+## Source
+
+[`include/signalwire/pom/pom.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/pom/pom.hpp)
+
+Line 48.
diff --git a/fern/products/sdk-reference/cpp/agents/prefabs/concierge-agent/index.mdx b/fern/products/sdk-reference/cpp/agents/prefabs/concierge-agent/index.mdx
new file mode 100644
index 0000000000..aedf1f7f33
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/prefabs/concierge-agent/index.mdx
@@ -0,0 +1,139 @@
+---
+slug: "/reference/cpp/agents/prefabs/concierge-agent"
+title: "ConciergeAgent"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::prefabs::ConciergeAgent"
+ parent: "signalwire::prefabs"
+ module: "agents.prefabs"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/prefabs/prefabs.hpp"
+ visibility: "public"
+---
+# `ConciergeAgent`
+
+Venue concierge with amenity info.
+
+## Signature
+
+```cpp
+class signalwire::prefabs::ConciergeAgent : signalwire::agent::AgentBase
+```
+
+## Inheritance
+
+**Extends:** [signalwire::agent::AgentBase](/docs/sdk-reference/reference/cpp/agents/agent/agent-base)
+
+## Methods
+
+### ConciergeAgent
+
+**Modifiers:** `explicit`
+
+#### Signature
+
+```cpp
+void ConciergeAgent(
+ const std::string & name = "concierge",
+ const std::string & route = "/",
+ const std::string & host = "0.0.0.0",
+ int port = 3000
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+#### Source
+
+[`include/signalwire/prefabs/prefabs.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/prefabs/prefabs.hpp)
+
+Line 67.
+
+***
+
+### set\_amenities
+
+#### Signature
+
+```cpp
+ConciergeAgent & set_amenities(const std::vector< json > & amenities)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`ConciergeAgent &`
+
+#### Source
+
+[`include/signalwire/prefabs/prefabs.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/prefabs/prefabs.hpp)
+
+Line 73.
+
+***
+
+### set\_hours
+
+#### Signature
+
+```cpp
+ConciergeAgent & set_hours(const json & hours)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`ConciergeAgent &`
+
+#### Source
+
+[`include/signalwire/prefabs/prefabs.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/prefabs/prefabs.hpp)
+
+Line 74.
+
+***
+
+### set\_venue\_name
+
+#### Signature
+
+```cpp
+ConciergeAgent & set_venue_name(const std::string & name)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`ConciergeAgent &`
+
+#### Source
+
+[`include/signalwire/prefabs/prefabs.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/prefabs/prefabs.hpp)
+
+Line 72.
+
+## Source
+
+[`include/signalwire/prefabs/prefabs.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/prefabs/prefabs.hpp)
+
+Line 65.
diff --git a/fern/products/sdk-reference/cpp/agents/prefabs/faq-bot-agent/index.mdx b/fern/products/sdk-reference/cpp/agents/prefabs/faq-bot-agent/index.mdx
new file mode 100644
index 0000000000..1f6dcfd937
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/prefabs/faq-bot-agent/index.mdx
@@ -0,0 +1,139 @@
+---
+slug: "/reference/cpp/agents/prefabs/faq-bot-agent"
+title: "FAQBotAgent"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::prefabs::FAQBotAgent"
+ parent: "signalwire::prefabs"
+ module: "agents.prefabs"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/prefabs/prefabs.hpp"
+ visibility: "public"
+---
+# `FAQBotAgent`
+
+Keyword-based FAQ matching.
+
+## Signature
+
+```cpp
+class signalwire::prefabs::FAQBotAgent : signalwire::agent::AgentBase
+```
+
+## Inheritance
+
+**Extends:** [signalwire::agent::AgentBase](/docs/sdk-reference/reference/cpp/agents/agent/agent-base)
+
+## Methods
+
+### FAQBotAgent
+
+**Modifiers:** `explicit`
+
+#### Signature
+
+```cpp
+void FAQBotAgent(
+ const std::string & name = "faq_bot",
+ const std::string & route = "/",
+ const std::string & host = "0.0.0.0",
+ int port = 3000
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+#### Source
+
+[`include/signalwire/prefabs/prefabs.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/prefabs/prefabs.hpp)
+
+Line 54.
+
+***
+
+### set\_faqs
+
+#### Signature
+
+```cpp
+FAQBotAgent & set_faqs(const std::vector< json > & faqs)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`FAQBotAgent &`
+
+#### Source
+
+[`include/signalwire/prefabs/prefabs.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/prefabs/prefabs.hpp)
+
+Line 59.
+
+***
+
+### set\_no\_match\_message
+
+#### Signature
+
+```cpp
+FAQBotAgent & set_no_match_message(const std::string & msg)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`FAQBotAgent &`
+
+#### Source
+
+[`include/signalwire/prefabs/prefabs.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/prefabs/prefabs.hpp)
+
+Line 60.
+
+***
+
+### set\_suggest\_related
+
+#### Signature
+
+```cpp
+FAQBotAgent & set_suggest_related(bool suggest)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`FAQBotAgent &`
+
+#### Source
+
+[`include/signalwire/prefabs/prefabs.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/prefabs/prefabs.hpp)
+
+Line 61.
+
+## Source
+
+[`include/signalwire/prefabs/prefabs.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/prefabs/prefabs.hpp)
+
+Line 52.
diff --git a/fern/products/sdk-reference/cpp/agents/prefabs/index.mdx b/fern/products/sdk-reference/cpp/agents/prefabs/index.mdx
new file mode 100644
index 0000000000..eb305c11d2
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/prefabs/index.mdx
@@ -0,0 +1,67 @@
+---
+slug: "/reference/cpp/agents/prefabs"
+title: "prefabs"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "module"
+ language: "cpp"
+ qualified_name: "signalwire::prefabs"
+ parent: "agents"
+ module: "agents"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/prefabs/prefabs.hpp"
+---
+# `prefabs`
+
+## Signature
+
+```cpp
+namespace signalwire::prefabs
+```
+
+## Classes
+
+
+
+ Venue concierge with amenity info.
+
+
+
+ Keyword-based FAQ matching.
+
+
+
+ Sequential question collection with key/value answers.
+
+
+
+ Department routing with call transfer.
+
+
+
+ Typed surveys with validation.
+
+
+
+## Type Aliases
+
+### json
+
+#### Signature
+
+```cpp
+typedef nlohmann::json json
+```
+
+#### Source
+
+[`include/signalwire/prefabs/prefabs.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/prefabs/prefabs.hpp)
+
+Line 10.
+
+## Source
+
+[`include/signalwire/prefabs/prefabs.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/prefabs/prefabs.hpp)
+
+Line 8.
diff --git a/fern/products/sdk-reference/cpp/agents/prefabs/info-gatherer-agent/index.mdx b/fern/products/sdk-reference/cpp/agents/prefabs/info-gatherer-agent/index.mdx
new file mode 100644
index 0000000000..b3b61654cb
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/prefabs/info-gatherer-agent/index.mdx
@@ -0,0 +1,139 @@
+---
+slug: "/reference/cpp/agents/prefabs/info-gatherer-agent"
+title: "InfoGathererAgent"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::prefabs::InfoGathererAgent"
+ parent: "signalwire::prefabs"
+ module: "agents.prefabs"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/prefabs/prefabs.hpp"
+ visibility: "public"
+---
+# `InfoGathererAgent`
+
+Sequential question collection with key/value answers.
+
+## Signature
+
+```cpp
+class signalwire::prefabs::InfoGathererAgent : signalwire::agent::AgentBase
+```
+
+## Inheritance
+
+**Extends:** [signalwire::agent::AgentBase](/docs/sdk-reference/reference/cpp/agents/agent/agent-base)
+
+## Methods
+
+### InfoGathererAgent
+
+**Modifiers:** `explicit`
+
+#### Signature
+
+```cpp
+void InfoGathererAgent(
+ const std::string & name = "info_gatherer",
+ const std::string & route = "/",
+ const std::string & host = "0.0.0.0",
+ int port = 3000
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+#### Source
+
+[`include/signalwire/prefabs/prefabs.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/prefabs/prefabs.hpp)
+
+Line 15.
+
+***
+
+### set\_completion\_message
+
+#### Signature
+
+```cpp
+InfoGathererAgent & set_completion_message(const std::string & msg)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`InfoGathererAgent &`
+
+#### Source
+
+[`include/signalwire/prefabs/prefabs.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/prefabs/prefabs.hpp)
+
+Line 21.
+
+***
+
+### set\_prefix
+
+#### Signature
+
+```cpp
+InfoGathererAgent & set_prefix(const std::string & prefix)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`InfoGathererAgent &`
+
+#### Source
+
+[`include/signalwire/prefabs/prefabs.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/prefabs/prefabs.hpp)
+
+Line 22.
+
+***
+
+### set\_questions
+
+#### Signature
+
+```cpp
+InfoGathererAgent & set_questions(const std::vector< json > & questions)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`InfoGathererAgent &`
+
+#### Source
+
+[`include/signalwire/prefabs/prefabs.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/prefabs/prefabs.hpp)
+
+Line 20.
+
+## Source
+
+[`include/signalwire/prefabs/prefabs.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/prefabs/prefabs.hpp)
+
+Line 13.
diff --git a/fern/products/sdk-reference/cpp/agents/prefabs/receptionist-agent/index.mdx b/fern/products/sdk-reference/cpp/agents/prefabs/receptionist-agent/index.mdx
new file mode 100644
index 0000000000..02d6a8449b
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/prefabs/receptionist-agent/index.mdx
@@ -0,0 +1,139 @@
+---
+slug: "/reference/cpp/agents/prefabs/receptionist-agent"
+title: "ReceptionistAgent"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::prefabs::ReceptionistAgent"
+ parent: "signalwire::prefabs"
+ module: "agents.prefabs"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/prefabs/prefabs.hpp"
+ visibility: "public"
+---
+# `ReceptionistAgent`
+
+Department routing with call transfer.
+
+## Signature
+
+```cpp
+class signalwire::prefabs::ReceptionistAgent : signalwire::agent::AgentBase
+```
+
+## Inheritance
+
+**Extends:** [signalwire::agent::AgentBase](/docs/sdk-reference/reference/cpp/agents/agent/agent-base)
+
+## Methods
+
+### ReceptionistAgent
+
+**Modifiers:** `explicit`
+
+#### Signature
+
+```cpp
+void ReceptionistAgent(
+ const std::string & name = "receptionist",
+ const std::string & route = "/",
+ const std::string & host = "0.0.0.0",
+ int port = 3000
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+#### Source
+
+[`include/signalwire/prefabs/prefabs.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/prefabs/prefabs.hpp)
+
+Line 41.
+
+***
+
+### set\_departments
+
+#### Signature
+
+```cpp
+ReceptionistAgent & set_departments(const json & departments)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`ReceptionistAgent &`
+
+#### Source
+
+[`include/signalwire/prefabs/prefabs.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/prefabs/prefabs.hpp)
+
+Line 46.
+
+***
+
+### set\_greeting
+
+#### Signature
+
+```cpp
+ReceptionistAgent & set_greeting(const std::string & greeting)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`ReceptionistAgent &`
+
+#### Source
+
+[`include/signalwire/prefabs/prefabs.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/prefabs/prefabs.hpp)
+
+Line 47.
+
+***
+
+### set\_transfer\_message
+
+#### Signature
+
+```cpp
+ReceptionistAgent & set_transfer_message(const std::string & msg)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`ReceptionistAgent &`
+
+#### Source
+
+[`include/signalwire/prefabs/prefabs.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/prefabs/prefabs.hpp)
+
+Line 48.
+
+## Source
+
+[`include/signalwire/prefabs/prefabs.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/prefabs/prefabs.hpp)
+
+Line 39.
diff --git a/fern/products/sdk-reference/cpp/agents/prefabs/survey-agent/index.mdx b/fern/products/sdk-reference/cpp/agents/prefabs/survey-agent/index.mdx
new file mode 100644
index 0000000000..469ee85b24
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/prefabs/survey-agent/index.mdx
@@ -0,0 +1,139 @@
+---
+slug: "/reference/cpp/agents/prefabs/survey-agent"
+title: "SurveyAgent"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::prefabs::SurveyAgent"
+ parent: "signalwire::prefabs"
+ module: "agents.prefabs"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/prefabs/prefabs.hpp"
+ visibility: "public"
+---
+# `SurveyAgent`
+
+Typed surveys with validation.
+
+## Signature
+
+```cpp
+class signalwire::prefabs::SurveyAgent : signalwire::agent::AgentBase
+```
+
+## Inheritance
+
+**Extends:** [signalwire::agent::AgentBase](/docs/sdk-reference/reference/cpp/agents/agent/agent-base)
+
+## Methods
+
+### set\_completion\_message
+
+#### Signature
+
+```cpp
+SurveyAgent & set_completion_message(const std::string & msg)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SurveyAgent &`
+
+#### Source
+
+[`include/signalwire/prefabs/prefabs.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/prefabs/prefabs.hpp)
+
+Line 34.
+
+***
+
+### set\_intro\_message
+
+#### Signature
+
+```cpp
+SurveyAgent & set_intro_message(const std::string & msg)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SurveyAgent &`
+
+#### Source
+
+[`include/signalwire/prefabs/prefabs.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/prefabs/prefabs.hpp)
+
+Line 35.
+
+***
+
+### set\_questions
+
+#### Signature
+
+```cpp
+SurveyAgent & set_questions(const std::vector< json > & questions)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SurveyAgent &`
+
+#### Source
+
+[`include/signalwire/prefabs/prefabs.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/prefabs/prefabs.hpp)
+
+Line 33.
+
+***
+
+### SurveyAgent
+
+**Modifiers:** `explicit`
+
+#### Signature
+
+```cpp
+void SurveyAgent(
+ const std::string & name = "survey",
+ const std::string & route = "/",
+ const std::string & host = "0.0.0.0",
+ int port = 3000
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+#### Source
+
+[`include/signalwire/prefabs/prefabs.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/prefabs/prefabs.hpp)
+
+Line 28.
+
+## Source
+
+[`include/signalwire/prefabs/prefabs.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/prefabs/prefabs.hpp)
+
+Line 26.
diff --git a/fern/products/sdk-reference/cpp/agents/server/agent-server/index.mdx b/fern/products/sdk-reference/cpp/agents/server/agent-server/index.mdx
new file mode 100644
index 0000000000..2a3d799c40
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/server/agent-server/index.mdx
@@ -0,0 +1,270 @@
+---
+slug: "/reference/cpp/agents/server/agent-server"
+title: "AgentServer"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::server::AgentServer"
+ parent: "signalwire::server"
+ module: "agents.server"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/server/agent_server.hpp"
+ visibility: "public"
+---
+# `AgentServer`
+
+Multi-agent hosting server.
+
+## Signature
+
+```cpp
+class signalwire::server::AgentServer
+```
+
+## Methods
+
+### ~AgentServer
+
+#### Signature
+
+```cpp
+void ~AgentServer()
+```
+
+#### Source
+
+[`include/signalwire/server/agent_server.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/server/agent_server.hpp)
+
+Line 25.
+
+***
+
+### AgentServer
+
+**Modifiers:** `explicit`
+
+#### Signature
+
+```cpp
+void AgentServer(const std::string & host = "0.0.0.0", int port = 3000)
+```
+
+#### Parameters
+
+
+
+
+
+#### Source
+
+[`include/signalwire/server/agent_server.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/server/agent_server.hpp)
+
+Line 24.
+
+***
+
+### enable\_sip\_routing
+
+Enable SIP routing.
+
+#### Signature
+
+```cpp
+AgentServer & enable_sip_routing(bool enable = true)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`AgentServer &`
+
+#### Source
+
+[`include/signalwire/server/agent_server.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/server/agent_server.hpp)
+
+Line 37.
+
+***
+
+### list\_routes
+
+List registered routes.
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+std::vector< std::string > list_routes() const
+```
+
+#### Returns
+
+`std::vector< std::string >`
+
+#### Source
+
+[`include/signalwire/server/agent_server.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/server/agent_server.hpp)
+
+Line 34.
+
+***
+
+### map\_sip\_username
+
+Map a SIP username to an agent route.
+
+#### Signature
+
+```cpp
+AgentServer & map_sip_username(
+ const std::string & username,
+ const std::string & route
+)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`AgentServer &`
+
+#### Source
+
+[`include/signalwire/server/agent_server.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/server/agent_server.hpp)
+
+Line 40.
+
+***
+
+### register\_agent
+
+Register an agent at a specific route.
+
+#### Signature
+
+```cpp
+AgentServer & register_agent(
+ std::shared_ptr< agent::AgentBase > agent,
+ const std::string & route
+)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`AgentServer &`
+
+#### Source
+
+[`include/signalwire/server/agent_server.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/server/agent_server.hpp)
+
+Line 28.
+
+***
+
+### run
+
+Start the server (blocking).
+
+#### Signature
+
+```cpp
+void run()
+```
+
+#### Source
+
+[`include/signalwire/server/agent_server.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/server/agent_server.hpp)
+
+Line 46.
+
+***
+
+### set\_static\_dir
+
+Enable static file serving from a directory.
+
+#### Signature
+
+```cpp
+AgentServer & set_static_dir(const std::string & dir)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`AgentServer &`
+
+#### Source
+
+[`include/signalwire/server/agent_server.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/server/agent_server.hpp)
+
+Line 43.
+
+***
+
+### stop
+
+Stop the server.
+
+#### Signature
+
+```cpp
+void stop()
+```
+
+#### Source
+
+[`include/signalwire/server/agent_server.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/server/agent_server.hpp)
+
+Line 49.
+
+***
+
+### unregister\_agent
+
+Unregister an agent by route.
+
+#### Signature
+
+```cpp
+AgentServer & unregister_agent(const std::string & route)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`AgentServer &`
+
+#### Source
+
+[`include/signalwire/server/agent_server.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/server/agent_server.hpp)
+
+Line 31.
+
+## Source
+
+[`include/signalwire/server/agent_server.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/server/agent_server.hpp)
+
+Line 22.
diff --git a/fern/products/sdk-reference/cpp/agents/server/index.mdx b/fern/products/sdk-reference/cpp/agents/server/index.mdx
new file mode 100644
index 0000000000..9d6cc8a585
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/server/index.mdx
@@ -0,0 +1,107 @@
+---
+slug: "/reference/cpp/agents/server"
+title: "server"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "module"
+ language: "cpp"
+ qualified_name: "signalwire::server"
+ parent: "agents"
+ module: "agents"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp"
+---
+# `server`
+
+## Signature
+
+```cpp
+namespace signalwire::server
+```
+
+## Classes
+
+
+
+ Multi-agent hosting server.
+
+
+
+ Resolved TLS configuration for an in-process HTTP server.
+
+
+
+## Functions
+
+### make\_http\_server
+
+Construct the httplib server for the given config. When cfg.usable(), an SSLServer (TLS termination in-process) is returned upcast to Server\*; otherwise a plain Server. Returns nullptr only on allocation failure. When an SSLServer is requested but its cert/key fail to load, the returned server's is\_valid() is false — callers log and refuse to listen, the same failure mode as a bad bind.
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+std::unique_ptr< httplib::Server > make_http_server(const TlsServerConfig & cfg)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`std::unique_ptr< httplib::Server >`
+
+#### Source
+
+[`src/server/tls_server.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/server/tls_server.hpp)
+
+Line 60.
+
+***
+
+### resolve\_tls\_config\_from\_env
+
+Resolve TLS config from the SWML\_SSL\_\* environment variables, mirroring signalwire-python's SecurityConfig.load\_from\_env(). Returns enabled=false when SWML\_SSL\_ENABLED is unset/false.
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+TlsServerConfig resolve_tls_config_from_env()
+```
+
+#### Returns
+
+`TlsServerConfig`
+
+#### Source
+
+[`src/server/tls_server.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/server/tls_server.hpp)
+
+Line 44.
+
+## Type Aliases
+
+### json
+
+#### Signature
+
+```cpp
+typedef nlohmann::json json
+```
+
+#### Source
+
+[`include/signalwire/server/agent_server.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/server/agent_server.hpp)
+
+Line 19.
+
+## Source
+
+[`include/signalwire/agent/agent_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/agent/agent_base.hpp)
+
+Line 29.
diff --git a/fern/products/sdk-reference/cpp/agents/server/tls-server-config/index.mdx b/fern/products/sdk-reference/cpp/agents/server/tls-server-config/index.mdx
new file mode 100644
index 0000000000..26663cb9f2
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/server/tls-server-config/index.mdx
@@ -0,0 +1,62 @@
+---
+slug: "/reference/cpp/agents/server/tls-server-config"
+title: "TlsServerConfig"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::server::TlsServerConfig"
+ parent: "signalwire::server"
+ module: "agents.server"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/src/server/tls_server.hpp"
+ visibility: "public"
+---
+# `TlsServerConfig`
+
+Resolved TLS configuration for an in-process HTTP server.
+
+## Signature
+
+```cpp
+struct signalwire::server::TlsServerConfig
+```
+
+## Properties
+
+
+
+
+
+
+
+## Methods
+
+### usable
+
+True only when TLS is enabled AND both cert + key paths are present.
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+bool usable() const
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/server/tls_server.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/server/tls_server.hpp)
+
+Line 36.
+
+## Source
+
+[`src/server/tls_server.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/server/tls_server.hpp)
+
+Line 30.
diff --git a/fern/products/sdk-reference/cpp/agents/skills/api-ninjas-trivia-skill-r/index.mdx b/fern/products/sdk-reference/cpp/agents/skills/api-ninjas-trivia-skill-r/index.mdx
new file mode 100644
index 0000000000..ee4c79446c
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/skills/api-ninjas-trivia-skill-r/index.mdx
@@ -0,0 +1,174 @@
+---
+slug: "/reference/cpp/agents/skills/api-ninjas-trivia-skill-r"
+title: "ApiNinjasTriviaSkillR"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::skills::ApiNinjasTriviaSkillR"
+ parent: "signalwire::skills"
+ module: "agents.skills"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp"
+ visibility: "public"
+---
+# `ApiNinjasTriviaSkillR`
+
+## Signature
+
+```cpp
+class signalwire::skills::ApiNinjasTriviaSkillR : signalwire::skills::SkillBase
+```
+
+## Inheritance
+
+**Extends:** [signalwire::skills::SkillBase](/docs/sdk-reference/reference/cpp/agents/skills/skill-base)
+
+## Methods
+
+### get\_datamap\_functions
+
+Get SWAIG DataMap functions (for DataMap-based skills).
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< json > get_datamap_functions() const
+```
+
+#### Returns
+
+`std::vector< json >`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 400.
+
+***
+
+### register\_tools
+
+Register tools with the agent. Returns tool definitions.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< swaig::ToolDefinition > register_tools()
+```
+
+#### Returns
+
+`std::vector< swaig::ToolDefinition >`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 400.
+
+***
+
+### setup
+
+Initialize the skill with given params. Return true on success.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool setup(const json & params)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 400.
+
+***
+
+### skill\_description
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_description() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 400.
+
+***
+
+### skill\_name
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_name() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 400.
+
+***
+
+### supports\_multiple\_instances
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool supports_multiple_instances() const
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 400.
+
+## Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 400.
diff --git a/fern/products/sdk-reference/cpp/agents/skills/api-ninjas-trivia-skill/index.mdx b/fern/products/sdk-reference/cpp/agents/skills/api-ninjas-trivia-skill/index.mdx
new file mode 100644
index 0000000000..a37f21ebac
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/skills/api-ninjas-trivia-skill/index.mdx
@@ -0,0 +1,174 @@
+---
+slug: "/reference/cpp/agents/skills/api-ninjas-trivia-skill"
+title: "ApiNinjasTriviaSkill"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::skills::ApiNinjasTriviaSkill"
+ parent: "signalwire::skills"
+ module: "agents.skills"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/api_ninjas_trivia.cpp"
+ visibility: "public"
+---
+# `ApiNinjasTriviaSkill`
+
+## Signature
+
+```cpp
+class signalwire::skills::ApiNinjasTriviaSkill : signalwire::skills::SkillBase
+```
+
+## Inheritance
+
+**Extends:** [signalwire::skills::SkillBase](/docs/sdk-reference/reference/cpp/agents/skills/skill-base)
+
+## Methods
+
+### get\_datamap\_functions
+
+Get SWAIG DataMap functions (for DataMap-based skills).
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< json > get_datamap_functions() const
+```
+
+#### Returns
+
+`std::vector< json >`
+
+#### Source
+
+[`src/skills/builtin/api_ninjas_trivia.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/api_ninjas_trivia.cpp)
+
+Line 25.
+
+***
+
+### register\_tools
+
+Register tools with the agent. Returns tool definitions.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< swaig::ToolDefinition > register_tools()
+```
+
+#### Returns
+
+`std::vector< swaig::ToolDefinition >`
+
+#### Source
+
+[`src/skills/builtin/api_ninjas_trivia.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/api_ninjas_trivia.cpp)
+
+Line 23.
+
+***
+
+### setup
+
+Initialize the skill with given params. Return true on success.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool setup(const json & params)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/builtin/api_ninjas_trivia.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/api_ninjas_trivia.cpp)
+
+Line 16.
+
+***
+
+### skill\_description
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_description() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/builtin/api_ninjas_trivia.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/api_ninjas_trivia.cpp)
+
+Line 13.
+
+***
+
+### skill\_name
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_name() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/builtin/api_ninjas_trivia.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/api_ninjas_trivia.cpp)
+
+Line 12.
+
+***
+
+### supports\_multiple\_instances
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool supports_multiple_instances() const
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/builtin/api_ninjas_trivia.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/api_ninjas_trivia.cpp)
+
+Line 14.
+
+## Source
+
+[`src/skills/builtin/api_ninjas_trivia.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/api_ninjas_trivia.cpp)
+
+Line 10.
diff --git a/fern/products/sdk-reference/cpp/agents/skills/claude-skills-skill-r/index.mdx b/fern/products/sdk-reference/cpp/agents/skills/claude-skills-skill-r/index.mdx
new file mode 100644
index 0000000000..c36fbaed4e
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/skills/claude-skills-skill-r/index.mdx
@@ -0,0 +1,150 @@
+---
+slug: "/reference/cpp/agents/skills/claude-skills-skill-r"
+title: "ClaudeSkillsSkillR"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::skills::ClaudeSkillsSkillR"
+ parent: "signalwire::skills"
+ module: "agents.skills"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp"
+ visibility: "public"
+---
+# `ClaudeSkillsSkillR`
+
+## Signature
+
+```cpp
+class signalwire::skills::ClaudeSkillsSkillR : signalwire::skills::SkillBase
+```
+
+## Inheritance
+
+**Extends:** [signalwire::skills::SkillBase](/docs/sdk-reference/reference/cpp/agents/skills/skill-base)
+
+## Methods
+
+### register\_tools
+
+Register tools with the agent. Returns tool definitions.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< swaig::ToolDefinition > register_tools()
+```
+
+#### Returns
+
+`std::vector< swaig::ToolDefinition >`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 406.
+
+***
+
+### setup
+
+Initialize the skill with given params. Return true on success.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool setup(const json & params)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 406.
+
+***
+
+### skill\_description
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_description() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 406.
+
+***
+
+### skill\_name
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_name() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 406.
+
+***
+
+### supports\_multiple\_instances
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool supports_multiple_instances() const
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 406.
+
+## Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 406.
diff --git a/fern/products/sdk-reference/cpp/agents/skills/claude-skills-skill/index.mdx b/fern/products/sdk-reference/cpp/agents/skills/claude-skills-skill/index.mdx
new file mode 100644
index 0000000000..dc22d80617
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/skills/claude-skills-skill/index.mdx
@@ -0,0 +1,174 @@
+---
+slug: "/reference/cpp/agents/skills/claude-skills-skill"
+title: "ClaudeSkillsSkill"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::skills::ClaudeSkillsSkill"
+ parent: "signalwire::skills"
+ module: "agents.skills"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/claude_skills.cpp"
+ visibility: "public"
+---
+# `ClaudeSkillsSkill`
+
+## Signature
+
+```cpp
+class signalwire::skills::ClaudeSkillsSkill : signalwire::skills::SkillBase
+```
+
+## Inheritance
+
+**Extends:** [signalwire::skills::SkillBase](/docs/sdk-reference/reference/cpp/agents/skills/skill-base)
+
+## Methods
+
+### get\_hints
+
+Get speech recognition hints to merge into agent.
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< std::string > get_hints() const
+```
+
+#### Returns
+
+`std::vector< std::string >`
+
+#### Source
+
+[`src/skills/builtin/claude_skills.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/claude_skills.cpp)
+
+Line 37.
+
+***
+
+### register\_tools
+
+Register tools with the agent. Returns tool definitions.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< swaig::ToolDefinition > register_tools()
+```
+
+#### Returns
+
+`std::vector< swaig::ToolDefinition >`
+
+#### Source
+
+[`src/skills/builtin/claude_skills.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/claude_skills.cpp)
+
+Line 22.
+
+***
+
+### setup
+
+Initialize the skill with given params. Return true on success.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool setup(const json & params)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/builtin/claude_skills.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/claude_skills.cpp)
+
+Line 15.
+
+***
+
+### skill\_description
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_description() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/builtin/claude_skills.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/claude_skills.cpp)
+
+Line 12.
+
+***
+
+### skill\_name
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_name() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/builtin/claude_skills.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/claude_skills.cpp)
+
+Line 11.
+
+***
+
+### supports\_multiple\_instances
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool supports_multiple_instances() const
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/builtin/claude_skills.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/claude_skills.cpp)
+
+Line 13.
+
+## Source
+
+[`src/skills/builtin/claude_skills.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/claude_skills.cpp)
+
+Line 9.
diff --git a/fern/products/sdk-reference/cpp/agents/skills/custom-skills-skill-r/index.mdx b/fern/products/sdk-reference/cpp/agents/skills/custom-skills-skill-r/index.mdx
new file mode 100644
index 0000000000..f495ce0edf
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/skills/custom-skills-skill-r/index.mdx
@@ -0,0 +1,150 @@
+---
+slug: "/reference/cpp/agents/skills/custom-skills-skill-r"
+title: "CustomSkillsSkillR"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::skills::CustomSkillsSkillR"
+ parent: "signalwire::skills"
+ module: "agents.skills"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp"
+ visibility: "public"
+---
+# `CustomSkillsSkillR`
+
+## Signature
+
+```cpp
+class signalwire::skills::CustomSkillsSkillR : signalwire::skills::SkillBase
+```
+
+## Inheritance
+
+**Extends:** [signalwire::skills::SkillBase](/docs/sdk-reference/reference/cpp/agents/skills/skill-base)
+
+## Methods
+
+### register\_tools
+
+Register tools with the agent. Returns tool definitions.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< swaig::ToolDefinition > register_tools()
+```
+
+#### Returns
+
+`std::vector< swaig::ToolDefinition >`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 410.
+
+***
+
+### setup
+
+Initialize the skill with given params. Return true on success.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool setup(const json & params)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 410.
+
+***
+
+### skill\_description
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_description() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 410.
+
+***
+
+### skill\_name
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_name() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 410.
+
+***
+
+### supports\_multiple\_instances
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool supports_multiple_instances() const
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 410.
+
+## Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 410.
diff --git a/fern/products/sdk-reference/cpp/agents/skills/custom-skills-skill/index.mdx b/fern/products/sdk-reference/cpp/agents/skills/custom-skills-skill/index.mdx
new file mode 100644
index 0000000000..07dab87c6f
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/skills/custom-skills-skill/index.mdx
@@ -0,0 +1,150 @@
+---
+slug: "/reference/cpp/agents/skills/custom-skills-skill"
+title: "CustomSkillsSkill"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::skills::CustomSkillsSkill"
+ parent: "signalwire::skills"
+ module: "agents.skills"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/custom_skills.cpp"
+ visibility: "public"
+---
+# `CustomSkillsSkill`
+
+## Signature
+
+```cpp
+class signalwire::skills::CustomSkillsSkill : signalwire::skills::SkillBase
+```
+
+## Inheritance
+
+**Extends:** [signalwire::skills::SkillBase](/docs/sdk-reference/reference/cpp/agents/skills/skill-base)
+
+## Methods
+
+### register\_tools
+
+Register tools with the agent. Returns tool definitions.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< swaig::ToolDefinition > register_tools()
+```
+
+#### Returns
+
+`std::vector< swaig::ToolDefinition >`
+
+#### Source
+
+[`src/skills/builtin/custom_skills.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/custom_skills.cpp)
+
+Line 20.
+
+***
+
+### setup
+
+Initialize the skill with given params. Return true on success.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool setup(const json & params)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/builtin/custom_skills.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/custom_skills.cpp)
+
+Line 15.
+
+***
+
+### skill\_description
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_description() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/builtin/custom_skills.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/custom_skills.cpp)
+
+Line 12.
+
+***
+
+### skill\_name
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_name() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/builtin/custom_skills.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/custom_skills.cpp)
+
+Line 11.
+
+***
+
+### supports\_multiple\_instances
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool supports_multiple_instances() const
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/builtin/custom_skills.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/custom_skills.cpp)
+
+Line 13.
+
+## Source
+
+[`src/skills/builtin/custom_skills.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/custom_skills.cpp)
+
+Line 9.
diff --git a/fern/products/sdk-reference/cpp/agents/skills/datasphere-serverless-skill-r/index.mdx b/fern/products/sdk-reference/cpp/agents/skills/datasphere-serverless-skill-r/index.mdx
new file mode 100644
index 0000000000..1007c6754a
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/skills/datasphere-serverless-skill-r/index.mdx
@@ -0,0 +1,174 @@
+---
+slug: "/reference/cpp/agents/skills/datasphere-serverless-skill-r"
+title: "DatasphereServerlessSkillR"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::skills::DatasphereServerlessSkillR"
+ parent: "signalwire::skills"
+ module: "agents.skills"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp"
+ visibility: "public"
+---
+# `DatasphereServerlessSkillR`
+
+## Signature
+
+```cpp
+class signalwire::skills::DatasphereServerlessSkillR : signalwire::skills::SkillBase
+```
+
+## Inheritance
+
+**Extends:** [signalwire::skills::SkillBase](/docs/sdk-reference/reference/cpp/agents/skills/skill-base)
+
+## Methods
+
+### get\_datamap\_functions
+
+Get SWAIG DataMap functions (for DataMap-based skills).
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< json > get_datamap_functions() const
+```
+
+#### Returns
+
+`std::vector< json >`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 394.
+
+***
+
+### register\_tools
+
+Register tools with the agent. Returns tool definitions.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< swaig::ToolDefinition > register_tools()
+```
+
+#### Returns
+
+`std::vector< swaig::ToolDefinition >`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 394.
+
+***
+
+### setup
+
+Initialize the skill with given params. Return true on success.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool setup(const json & params)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 394.
+
+***
+
+### skill\_description
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_description() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 394.
+
+***
+
+### skill\_name
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_name() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 394.
+
+***
+
+### supports\_multiple\_instances
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool supports_multiple_instances() const
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 394.
+
+## Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 394.
diff --git a/fern/products/sdk-reference/cpp/agents/skills/datasphere-serverless-skill/index.mdx b/fern/products/sdk-reference/cpp/agents/skills/datasphere-serverless-skill/index.mdx
new file mode 100644
index 0000000000..26a05f4288
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/skills/datasphere-serverless-skill/index.mdx
@@ -0,0 +1,222 @@
+---
+slug: "/reference/cpp/agents/skills/datasphere-serverless-skill"
+title: "DatasphereServerlessSkill"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::skills::DatasphereServerlessSkill"
+ parent: "signalwire::skills"
+ module: "agents.skills"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/datasphere_serverless.cpp"
+ visibility: "public"
+---
+# `DatasphereServerlessSkill`
+
+## Signature
+
+```cpp
+class signalwire::skills::DatasphereServerlessSkill : signalwire::skills::SkillBase
+```
+
+## Inheritance
+
+**Extends:** [signalwire::skills::SkillBase](/docs/sdk-reference/reference/cpp/agents/skills/skill-base)
+
+## Methods
+
+### get\_datamap\_functions
+
+Get SWAIG DataMap functions (for DataMap-based skills).
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< json > get_datamap_functions() const
+```
+
+#### Returns
+
+`std::vector< json >`
+
+#### Source
+
+[`src/skills/builtin/datasphere_serverless.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/datasphere_serverless.cpp)
+
+Line 31.
+
+***
+
+### get\_global\_data
+
+Get global data to merge into agent.
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+json get_global_data() const
+```
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`src/skills/builtin/datasphere_serverless.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/datasphere_serverless.cpp)
+
+Line 58.
+
+***
+
+### get\_prompt\_sections
+
+Get prompt sections to inject into agent.
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< SkillPromptSection > get_prompt_sections() const
+```
+
+#### Returns
+
+`std::vector< SkillPromptSection >`
+
+#### Source
+
+[`src/skills/builtin/datasphere_serverless.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/datasphere_serverless.cpp)
+
+Line 52.
+
+***
+
+### register\_tools
+
+Register tools with the agent. Returns tool definitions.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< swaig::ToolDefinition > register_tools()
+```
+
+#### Returns
+
+`std::vector< swaig::ToolDefinition >`
+
+#### Source
+
+[`src/skills/builtin/datasphere_serverless.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/datasphere_serverless.cpp)
+
+Line 29.
+
+***
+
+### setup
+
+Initialize the skill with given params. Return true on success.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool setup(const json & params)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/builtin/datasphere_serverless.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/datasphere_serverless.cpp)
+
+Line 19.
+
+***
+
+### skill\_description
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_description() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/builtin/datasphere_serverless.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/datasphere_serverless.cpp)
+
+Line 14.
+
+***
+
+### skill\_name
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_name() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/builtin/datasphere_serverless.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/datasphere_serverless.cpp)
+
+Line 13.
+
+***
+
+### supports\_multiple\_instances
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool supports_multiple_instances() const
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/builtin/datasphere_serverless.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/datasphere_serverless.cpp)
+
+Line 17.
+
+## Source
+
+[`src/skills/builtin/datasphere_serverless.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/datasphere_serverless.cpp)
+
+Line 11.
diff --git a/fern/products/sdk-reference/cpp/agents/skills/datasphere-skill-r/index.mdx b/fern/products/sdk-reference/cpp/agents/skills/datasphere-skill-r/index.mdx
new file mode 100644
index 0000000000..65031994fb
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/skills/datasphere-skill-r/index.mdx
@@ -0,0 +1,174 @@
+---
+slug: "/reference/cpp/agents/skills/datasphere-skill-r"
+title: "DatasphereSkillR"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::skills::DatasphereSkillR"
+ parent: "signalwire::skills"
+ module: "agents.skills"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp"
+ visibility: "public"
+---
+# `DatasphereSkillR`
+
+## Signature
+
+```cpp
+class signalwire::skills::DatasphereSkillR : signalwire::skills::SkillBase
+```
+
+## Inheritance
+
+**Extends:** [signalwire::skills::SkillBase](/docs/sdk-reference/reference/cpp/agents/skills/skill-base)
+
+## Methods
+
+### get\_global\_data
+
+Get global data to merge into agent.
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+json get_global_data() const
+```
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 391.
+
+***
+
+### register\_tools
+
+Register tools with the agent. Returns tool definitions.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< swaig::ToolDefinition > register_tools()
+```
+
+#### Returns
+
+`std::vector< swaig::ToolDefinition >`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 333.
+
+***
+
+### setup
+
+Initialize the skill with given params. Return true on success.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool setup(const json & params)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 321.
+
+***
+
+### skill\_description
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_description() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 319.
+
+***
+
+### skill\_name
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_name() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 318.
+
+***
+
+### supports\_multiple\_instances
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool supports_multiple_instances() const
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 320.
+
+## Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 313.
diff --git a/fern/products/sdk-reference/cpp/agents/skills/datasphere-skill/index.mdx b/fern/products/sdk-reference/cpp/agents/skills/datasphere-skill/index.mdx
new file mode 100644
index 0000000000..6a7f1e724b
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/skills/datasphere-skill/index.mdx
@@ -0,0 +1,201 @@
+---
+slug: "/reference/cpp/agents/skills/datasphere-skill"
+title: "DatasphereSkill"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::skills::DatasphereSkill"
+ parent: "signalwire::skills"
+ module: "agents.skills"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/datasphere.cpp"
+ visibility: "public"
+---
+# `DatasphereSkill`
+
+SignalWire DataSphere RAG search skill — issues a real POST against the DataSphere /api/datasphere/documents/\{document\_id\}/search endpoint with the user query in the JSON body, parses the results\[] array, and returns a flattened text summary. Matches the Python DatasphereSkill upstream-call shape.
+DATASPHERE\_BASE\_URL env var overrides the upstream URL (used by audit\_skills\_dispatch.py); when unset, the real upstream is built from space\_name (https://\{space\}.signalwire.com).
+
+## Signature
+
+```cpp
+class signalwire::skills::DatasphereSkill : signalwire::skills::SkillBase
+```
+
+## Inheritance
+
+**Extends:** [signalwire::skills::SkillBase](/docs/sdk-reference/reference/cpp/agents/skills/skill-base)
+
+## Methods
+
+### get\_global\_data
+
+Get global data to merge into agent.
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+json get_global_data() const
+```
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`src/skills/builtin/datasphere.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/datasphere.cpp)
+
+Line 106.
+
+***
+
+### get\_prompt\_sections
+
+Get prompt sections to inject into agent.
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< SkillPromptSection > get_prompt_sections() const
+```
+
+#### Returns
+
+`std::vector< SkillPromptSection >`
+
+#### Source
+
+[`src/skills/builtin/datasphere.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/datasphere.cpp)
+
+Line 99.
+
+***
+
+### register\_tools
+
+Register tools with the agent. Returns tool definitions.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< swaig::ToolDefinition > register_tools()
+```
+
+#### Returns
+
+`std::vector< swaig::ToolDefinition >`
+
+#### Source
+
+[`src/skills/builtin/datasphere.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/datasphere.cpp)
+
+Line 42.
+
+***
+
+### setup
+
+Initialize the skill with given params. Return true on success.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool setup(const json & params)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/builtin/datasphere.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/datasphere.cpp)
+
+Line 30.
+
+***
+
+### skill\_description
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_description() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/builtin/datasphere.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/datasphere.cpp)
+
+Line 25.
+
+***
+
+### skill\_name
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_name() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/builtin/datasphere.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/datasphere.cpp)
+
+Line 24.
+
+***
+
+### supports\_multiple\_instances
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool supports_multiple_instances() const
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/builtin/datasphere.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/datasphere.cpp)
+
+Line 28.
+
+## Source
+
+[`src/skills/builtin/datasphere.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/datasphere.cpp)
+
+Line 22.
diff --git a/fern/products/sdk-reference/cpp/agents/skills/date-time-skill/index.mdx b/fern/products/sdk-reference/cpp/agents/skills/date-time-skill/index.mdx
new file mode 100644
index 0000000000..4568ff9ec3
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/skills/date-time-skill/index.mdx
@@ -0,0 +1,174 @@
+---
+slug: "/reference/cpp/agents/skills/date-time-skill"
+title: "DateTimeSkill"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::skills::DateTimeSkill"
+ parent: "signalwire::skills"
+ module: "agents.skills"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/datetime.cpp"
+ visibility: "public"
+---
+# `DateTimeSkill`
+
+## Signature
+
+```cpp
+class signalwire::skills::DateTimeSkill : signalwire::skills::SkillBase, signalwire::skills::SkillBase
+```
+
+## Inheritance
+
+**Extends:** [signalwire::skills::SkillBase](/docs/sdk-reference/reference/cpp/agents/skills/skill-base), [signalwire::skills::SkillBase](/docs/sdk-reference/reference/cpp/agents/skills/skill-base)
+
+## Methods
+
+### get\_prompt\_sections
+
+Get prompt sections to inject into agent.
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< SkillPromptSection > get_prompt_sections() const
+```
+
+#### Returns
+
+`std::vector< SkillPromptSection >`
+
+#### Source
+
+[`src/skills/builtin/datetime.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/datetime.cpp)
+
+Line 74.
+
+***
+
+### register\_tools
+
+Register tools with the agent. Returns tool definitions.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< swaig::ToolDefinition > register_tools()
+```
+
+#### Returns
+
+`std::vector< swaig::ToolDefinition >`
+
+#### Source
+
+[`src/skills/builtin/datetime.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/datetime.cpp)
+
+Line 24.
+
+***
+
+### setup
+
+Initialize the skill with given params. Return true on success.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool setup(const json & params)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/builtin/datetime.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/datetime.cpp)
+
+Line 19.
+
+***
+
+### skill\_description
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_description() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/builtin/datetime.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/datetime.cpp)
+
+Line 16.
+
+***
+
+### skill\_name
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_name() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/builtin/datetime.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/datetime.cpp)
+
+Line 15.
+
+***
+
+### supports\_multiple\_instances
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool supports_multiple_instances() const
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/builtin/datetime.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/datetime.cpp)
+
+Line 17.
+
+## Source
+
+[`src/skills/builtin/datetime.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/datetime.cpp)
+
+Line 13.
diff --git a/fern/products/sdk-reference/cpp/agents/skills/google-maps-skill-r/index.mdx b/fern/products/sdk-reference/cpp/agents/skills/google-maps-skill-r/index.mdx
new file mode 100644
index 0000000000..26d6a9ecea
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/skills/google-maps-skill-r/index.mdx
@@ -0,0 +1,152 @@
+---
+slug: "/reference/cpp/agents/skills/google-maps-skill-r"
+title: "GoogleMapsSkillR"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::skills::GoogleMapsSkillR"
+ parent: "signalwire::skills"
+ module: "agents.skills"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp"
+ visibility: "public"
+---
+# `GoogleMapsSkillR`
+
+## Signature
+
+```cpp
+class signalwire::skills::GoogleMapsSkillR : signalwire::skills::SkillBase
+```
+
+## Inheritance
+
+**Extends:** [signalwire::skills::SkillBase](/docs/sdk-reference/reference/cpp/agents/skills/skill-base)
+
+## Methods
+
+### get\_hints
+
+Get speech recognition hints to merge into agent.
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< std::string > get_hints() const
+```
+
+#### Returns
+
+`std::vector< std::string >`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 243.
+
+***
+
+### register\_tools
+
+Register tools with the agent. Returns tool definitions.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< swaig::ToolDefinition > register_tools()
+```
+
+#### Returns
+
+`std::vector< swaig::ToolDefinition >`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 243.
+
+***
+
+### setup
+
+Initialize the skill with given params. Return true on success.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool setup(const json & params)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 243.
+
+***
+
+### skill\_description
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_description() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 243.
+
+***
+
+### skill\_name
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_name() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 243.
+
+## Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 243.
diff --git a/fern/products/sdk-reference/cpp/agents/skills/google-maps-skill/index.mdx b/fern/products/sdk-reference/cpp/agents/skills/google-maps-skill/index.mdx
new file mode 100644
index 0000000000..90bf1d4ac1
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/skills/google-maps-skill/index.mdx
@@ -0,0 +1,176 @@
+---
+slug: "/reference/cpp/agents/skills/google-maps-skill"
+title: "GoogleMapsSkill"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::skills::GoogleMapsSkill"
+ parent: "signalwire::skills"
+ module: "agents.skills"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/google_maps.cpp"
+ visibility: "public"
+---
+# `GoogleMapsSkill`
+
+## Signature
+
+```cpp
+class signalwire::skills::GoogleMapsSkill : signalwire::skills::SkillBase
+```
+
+## Inheritance
+
+**Extends:** [signalwire::skills::SkillBase](/docs/sdk-reference/reference/cpp/agents/skills/skill-base)
+
+## Methods
+
+### get\_hints
+
+Get speech recognition hints to merge into agent.
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< std::string > get_hints() const
+```
+
+#### Returns
+
+`std::vector< std::string >`
+
+#### Source
+
+[`src/skills/builtin/google_maps.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/google_maps.cpp)
+
+Line 53.
+
+***
+
+### get\_prompt\_sections
+
+Get prompt sections to inject into agent.
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< SkillPromptSection > get_prompt_sections() const
+```
+
+#### Returns
+
+`std::vector< SkillPromptSection >`
+
+#### Source
+
+[`src/skills/builtin/google_maps.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/google_maps.cpp)
+
+Line 57.
+
+***
+
+### register\_tools
+
+Register tools with the agent. Returns tool definitions.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< swaig::ToolDefinition > register_tools()
+```
+
+#### Returns
+
+`std::vector< swaig::ToolDefinition >`
+
+#### Source
+
+[`src/skills/builtin/google_maps.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/google_maps.cpp)
+
+Line 24.
+
+***
+
+### setup
+
+Initialize the skill with given params. Return true on success.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool setup(const json & params)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/builtin/google_maps.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/google_maps.cpp)
+
+Line 16.
+
+***
+
+### skill\_description
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_description() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/builtin/google_maps.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/google_maps.cpp)
+
+Line 12.
+
+***
+
+### skill\_name
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_name() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/builtin/google_maps.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/google_maps.cpp)
+
+Line 11.
+
+## Source
+
+[`src/skills/builtin/google_maps.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/google_maps.cpp)
+
+Line 9.
diff --git a/fern/products/sdk-reference/cpp/agents/skills/index.mdx b/fern/products/sdk-reference/cpp/agents/skills/index.mdx
new file mode 100644
index 0000000000..662457700a
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/skills/index.mdx
@@ -0,0 +1,413 @@
+---
+slug: "/reference/cpp/agents/skills"
+title: "skills"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "module"
+ language: "cpp"
+ qualified_name: "signalwire::skills"
+ parent: "agents"
+ module: "agents"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_base.hpp"
+---
+# `skills`
+
+## Signature
+
+```cpp
+namespace signalwire::skills
+```
+
+## Classes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SignalWire DataSphere RAG search skill — issues a real POST against the DataSphere /api/datasphere/documents/\{document\_id\}/search endpoint with the user query in the JSON body, parses the results\[] array, and returns a flattened text summary. Matches the Python DatasphereSkill upstream-call shape. DATASPHERE\_BASE\_URL env var overrides the upstream URL (used by audit\_skills\_dispatch.py); when unset, the real upstream is built from space\_name (https://\{space\}.signalwire.com).
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Abstract base class for all skills.
+
+
+
+ Result of a skill HTTP request. status is the HTTP status code (0 indicates a transport-level error — connection refused, DNS, etc.). body is the raw response body. error is non-empty when status is 0.
+
+
+
+ Manages skill lifecycle: creation, setup, registration with agents.
+
+
+
+ POM section for skill prompts.
+
+
+
+ Global registry of skill factories.
+
+
+
+ Spider scrape skill — issues a real GET against the URL the LLM passes in. Strips HTML tags from the response and returns the text payload. Matches Python SpiderSkill's scrape\_url behavior. SPIDER\_BASE\_URL env var overrides the host portion of the URL the caller passes in (used by audit\_skills\_dispatch.py to redirect scrape requests at a loopback fixture).
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Google Custom Search API skill — issues a real GET against Google's customsearch/v1 endpoint, parses the items\[] results, and returns a human-readable summary. Matches Python's WebSearchSkill behavior. Configuration: api\_key (or env GOOGLE\_SEARCH\_API\_KEY / GOOGLE\_API\_KEY) search\_engine\_id (or env GOOGLE\_SEARCH\_ENGINE\_ID / GOOGLE\_CSE\_ID) num\_results (default 3) tool\_name (default "web\_search") WEB\_SEARCH\_BASE\_URL env var overrides the upstream URL (used by audit\_skills\_dispatch.py to point the skill at a fixture)
+
+
+
+
+
+ Wikipedia search skill — issues a real GET against the Wikipedia API /w/api.php endpoint with action=query\&list=search, parses the query.search\[] results, and returns titles + snippets. Matches the Python WikipediaSearchSkill upstream call shape. WIKIPEDIA\_BASE\_URL env var overrides the API root (used by audit\_skills\_dispatch.py to point the skill at its loopback fixture).
+
+
+
+
+
+## Modules
+
+
+
+
+
+## Functions
+
+### ensure\_builtin\_skills\_registered
+
+Ensure all built-in skills are registered. Called automatically but can be called explicitly to force linkage.
+
+#### Signature
+
+```cpp
+void ensure_builtin_skills_registered()
+```
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 443.
+
+***
+
+### http\_get
+
+Issue a real HTTP GET. Implementation uses cpp-httplib so it works against any plain-HTTP host (including loopback fixtures used by the audit\_skills\_dispatch.py audit). Skills that need TLS to reach production upstreams set the appropriate base-URL env var (e.g. WEB\_SEARCH\_BASE\_URL) — production deployments point at TLS proxies or a dev-side rewriter; the SDK keeps its transport stack OpenSSL-3 independent until the wider port adopts it.
+
+#### Signature
+
+```cpp
+SkillHttpResponse http_get(
+ const std::string & url,
+ const std::map< std::string, std::string > & headers = {},
+ int timeout_seconds = 10
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Returns
+
+`SkillHttpResponse`
+
+#### Source
+
+[`src/skills/skills_http.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skills_http.cpp)
+
+Line 55.
+
+***
+
+### http\_get\_ms
+
+Millisecond-precision variant of http\_get. The connection and read timeouts are both bound to timeout\_ms. Needed by web\_search's per\_page\_timeout, which is a sub-second float in the common case (default 2.0s, but configurable below 1s) — the integer-second http\_get truncates a 0.3s budget to 0 and httplib treats a zero timeout as "no
+wait", which would defeat the bound. A non-positive timeout\_ms falls back to a 10s default so a misconfiguration can never produce an unbounded fetch.
+
+#### Signature
+
+```cpp
+SkillHttpResponse http_get_ms(
+ const std::string & url,
+ const std::map< std::string, std::string > & headers,
+ long timeout_ms
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Returns
+
+`SkillHttpResponse`
+
+#### Source
+
+[`src/skills/skills_http.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skills_http.cpp)
+
+Line 87.
+
+***
+
+### http\_post
+
+Issue a real HTTP POST with body as the request body and content\_type for Content-Type. Same semantics as http\_get for status / error / body.
+
+#### Signature
+
+```cpp
+SkillHttpResponse http_post(
+ const std::string & url,
+ const std::string & body,
+ const std::string & content_type = "application/json",
+ const std::map< std::string, std::string > & headers = {},
+ int timeout_seconds = 10
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+
+
+#### Returns
+
+`SkillHttpResponse`
+
+#### Source
+
+[`src/skills/skills_http.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skills_http.cpp)
+
+Line 123.
+
+***
+
+### skill\_name\_value
+
+Map a SkillName to its canonical wire string (the value a built-in skill reports from skill\_name()). This is the single normalization point shared by the typed add\_skill/remove\_skill/has\_skill overloads, so their behavior is identical to passing the bare string.
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+std::string skill_name_value(SkillName name)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/skills/skill_name.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_name.hpp)
+
+Line 51.
+
+***
+
+### to\_string
+
+to\_string overload so SkillName interoperates with ADL-based stringification the same way skill\_name\_value() does.
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+std::string to_string(SkillName name)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/skills/skill_name.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_name.hpp)
+
+Line 77.
+
+## Type Aliases
+
+### json
+
+#### Signature
+
+```cpp
+typedef nlohmann::json json
+```
+
+#### Source
+
+[`include/signalwire/skills/skill_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_base.hpp)
+
+Line 16.
+
+***
+
+### SkillFactory
+
+Factory function type for creating skill instances.
+
+#### Signature
+
+```cpp
+typedef std::function< std::unique_ptr< SkillBase >()> SkillFactory
+```
+
+#### Source
+
+[`include/signalwire/skills/skill_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_base.hpp)
+
+Line 118.
+
+## Enums
+
+### SkillName
+
+Built-in skill names as a typed, compile-time-checked closed set.
+AgentBase::add\_skill() (and remove\_skill() / has\_skill()) accept this enum class OR a std::string. The enum gives editor autocompletion and makes a typo fail at the call site — a bare string like "datetiem" only fails at runtime, on the server. The string overload keeps parity with the Python reference (which uses a bare str) and still allows custom / third-party skills that aren't built in. agent.add\_skill(SkillName::Datetime); // typed, autocompleted
+agent.add\_skill("datetime"); // string still works (parity)
+agent.add\_skill("my\_custom\_skill"); // open set: custom skills ok
+
+Members mirror the 18 built-in skills' registered skill\_name() values (the canonical wire strings). skill\_name\_value() maps each member to that wire string, so the enum and string overloads load the identical skill.
+
+#### Signature
+
+```cpp
+enum class SkillName
+```
+
+#### Variants
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#### Source
+
+[`include/signalwire/skills/skill_name.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_name.hpp)
+
+Line 26.
+
+## Source
+
+[`include/signalwire/skills/skill_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_base.hpp)
+
+Line 14.
diff --git a/fern/products/sdk-reference/cpp/agents/skills/info-gatherer-skill-r/index.mdx b/fern/products/sdk-reference/cpp/agents/skills/info-gatherer-skill-r/index.mdx
new file mode 100644
index 0000000000..3679464382
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/skills/info-gatherer-skill-r/index.mdx
@@ -0,0 +1,174 @@
+---
+slug: "/reference/cpp/agents/skills/info-gatherer-skill-r"
+title: "InfoGathererSkillR"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::skills::InfoGathererSkillR"
+ parent: "signalwire::skills"
+ module: "agents.skills"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp"
+ visibility: "public"
+---
+# `InfoGathererSkillR`
+
+## Signature
+
+```cpp
+class signalwire::skills::InfoGathererSkillR : signalwire::skills::SkillBase
+```
+
+## Inheritance
+
+**Extends:** [signalwire::skills::SkillBase](/docs/sdk-reference/reference/cpp/agents/skills/skill-base)
+
+## Methods
+
+### get\_instance\_key
+
+Get instance key for multi-instance skills.
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string get_instance_key() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 404.
+
+***
+
+### register\_tools
+
+Register tools with the agent. Returns tool definitions.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< swaig::ToolDefinition > register_tools()
+```
+
+#### Returns
+
+`std::vector< swaig::ToolDefinition >`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 404.
+
+***
+
+### setup
+
+Initialize the skill with given params. Return true on success.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool setup(const json & params)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 404.
+
+***
+
+### skill\_description
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_description() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 404.
+
+***
+
+### skill\_name
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_name() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 404.
+
+***
+
+### supports\_multiple\_instances
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool supports_multiple_instances() const
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 404.
+
+## Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 404.
diff --git a/fern/products/sdk-reference/cpp/agents/skills/info-gatherer-skill/index.mdx b/fern/products/sdk-reference/cpp/agents/skills/info-gatherer-skill/index.mdx
new file mode 100644
index 0000000000..8c1f800c68
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/skills/info-gatherer-skill/index.mdx
@@ -0,0 +1,222 @@
+---
+slug: "/reference/cpp/agents/skills/info-gatherer-skill"
+title: "InfoGathererSkill"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::skills::InfoGathererSkill"
+ parent: "signalwire::skills"
+ module: "agents.skills"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/info_gatherer.cpp"
+ visibility: "public"
+---
+# `InfoGathererSkill`
+
+## Signature
+
+```cpp
+class signalwire::skills::InfoGathererSkill : signalwire::skills::SkillBase
+```
+
+## Inheritance
+
+**Extends:** [signalwire::skills::SkillBase](/docs/sdk-reference/reference/cpp/agents/skills/skill-base)
+
+## Methods
+
+### get\_global\_data
+
+Get global data to merge into agent.
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+json get_global_data() const
+```
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`src/skills/builtin/info_gatherer.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/info_gatherer.cpp)
+
+Line 110.
+
+***
+
+### get\_instance\_key
+
+Get instance key for multi-instance skills.
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string get_instance_key() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/builtin/info_gatherer.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/info_gatherer.cpp)
+
+Line 131.
+
+***
+
+### get\_prompt\_sections
+
+Get prompt sections to inject into agent.
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< SkillPromptSection > get_prompt_sections() const
+```
+
+#### Returns
+
+`std::vector< SkillPromptSection >`
+
+#### Source
+
+[`src/skills/builtin/info_gatherer.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/info_gatherer.cpp)
+
+Line 122.
+
+***
+
+### register\_tools
+
+Register tools with the agent. Returns tool definitions.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< swaig::ToolDefinition > register_tools()
+```
+
+#### Returns
+
+`std::vector< swaig::ToolDefinition >`
+
+#### Source
+
+[`src/skills/builtin/info_gatherer.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/info_gatherer.cpp)
+
+Line 25.
+
+***
+
+### setup
+
+Initialize the skill with given params. Return true on success.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool setup(const json & params)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/builtin/info_gatherer.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/info_gatherer.cpp)
+
+Line 17.
+
+***
+
+### skill\_description
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_description() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/builtin/info_gatherer.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/info_gatherer.cpp)
+
+Line 12.
+
+***
+
+### skill\_name
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_name() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/builtin/info_gatherer.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/info_gatherer.cpp)
+
+Line 11.
+
+***
+
+### supports\_multiple\_instances
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool supports_multiple_instances() const
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/builtin/info_gatherer.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/info_gatherer.cpp)
+
+Line 15.
+
+## Source
+
+[`src/skills/builtin/info_gatherer.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/info_gatherer.cpp)
+
+Line 9.
diff --git a/fern/products/sdk-reference/cpp/agents/skills/joke-skill-r/index.mdx b/fern/products/sdk-reference/cpp/agents/skills/joke-skill-r/index.mdx
new file mode 100644
index 0000000000..bfc62ae78a
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/skills/joke-skill-r/index.mdx
@@ -0,0 +1,200 @@
+---
+slug: "/reference/cpp/agents/skills/joke-skill-r"
+title: "JokeSkillR"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::skills::JokeSkillR"
+ parent: "signalwire::skills"
+ module: "agents.skills"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp"
+ visibility: "public"
+---
+# `JokeSkillR`
+
+## Signature
+
+```cpp
+class signalwire::skills::JokeSkillR : signalwire::skills::SkillBase
+```
+
+## Inheritance
+
+**Extends:** [signalwire::skills::SkillBase](/docs/sdk-reference/reference/cpp/agents/skills/skill-base)
+
+## Methods
+
+### get\_datamap\_functions
+
+Get SWAIG DataMap functions (for DataMap-based skills).
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< json > get_datamap_functions() const
+```
+
+#### Returns
+
+`std::vector< json >`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 73.
+
+***
+
+### get\_global\_data
+
+Get global data to merge into agent.
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+json get_global_data() const
+```
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 75.
+
+***
+
+### get\_prompt\_sections
+
+Get prompt sections to inject into agent.
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< SkillPromptSection > get_prompt_sections() const
+```
+
+#### Returns
+
+`std::vector< SkillPromptSection >`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 74.
+
+***
+
+### register\_tools
+
+Register tools with the agent. Returns tool definitions.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< swaig::ToolDefinition > register_tools()
+```
+
+#### Returns
+
+`std::vector< swaig::ToolDefinition >`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 72.
+
+***
+
+### setup
+
+Initialize the skill with given params. Return true on success.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool setup(const json & params)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 71.
+
+***
+
+### skill\_description
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_description() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 70.
+
+***
+
+### skill\_name
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_name() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 69.
+
+## Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 66.
diff --git a/fern/products/sdk-reference/cpp/agents/skills/joke-skill/index.mdx b/fern/products/sdk-reference/cpp/agents/skills/joke-skill/index.mdx
new file mode 100644
index 0000000000..e7e0b196b7
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/skills/joke-skill/index.mdx
@@ -0,0 +1,200 @@
+---
+slug: "/reference/cpp/agents/skills/joke-skill"
+title: "JokeSkill"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::skills::JokeSkill"
+ parent: "signalwire::skills"
+ module: "agents.skills"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/joke.cpp"
+ visibility: "public"
+---
+# `JokeSkill`
+
+## Signature
+
+```cpp
+class signalwire::skills::JokeSkill : signalwire::skills::SkillBase
+```
+
+## Inheritance
+
+**Extends:** [signalwire::skills::SkillBase](/docs/sdk-reference/reference/cpp/agents/skills/skill-base)
+
+## Methods
+
+### get\_datamap\_functions
+
+Get SWAIG DataMap functions (for DataMap-based skills).
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< json > get_datamap_functions() const
+```
+
+#### Returns
+
+`std::vector< json >`
+
+#### Source
+
+[`src/skills/builtin/joke.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/joke.cpp)
+
+Line 24.
+
+***
+
+### get\_global\_data
+
+Get global data to merge into agent.
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+json get_global_data() const
+```
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`src/skills/builtin/joke.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/joke.cpp)
+
+Line 41.
+
+***
+
+### get\_prompt\_sections
+
+Get prompt sections to inject into agent.
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< SkillPromptSection > get_prompt_sections() const
+```
+
+#### Returns
+
+`std::vector< SkillPromptSection >`
+
+#### Source
+
+[`src/skills/builtin/joke.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/joke.cpp)
+
+Line 36.
+
+***
+
+### register\_tools
+
+Register tools with the agent. Returns tool definitions.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< swaig::ToolDefinition > register_tools()
+```
+
+#### Returns
+
+`std::vector< swaig::ToolDefinition >`
+
+#### Source
+
+[`src/skills/builtin/joke.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/joke.cpp)
+
+Line 22.
+
+***
+
+### setup
+
+Initialize the skill with given params. Return true on success.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool setup(const json & params)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/builtin/joke.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/joke.cpp)
+
+Line 15.
+
+***
+
+### skill\_description
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_description() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/builtin/joke.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/joke.cpp)
+
+Line 13.
+
+***
+
+### skill\_name
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_name() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/builtin/joke.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/joke.cpp)
+
+Line 12.
+
+## Source
+
+[`src/skills/builtin/joke.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/joke.cpp)
+
+Line 10.
diff --git a/fern/products/sdk-reference/cpp/agents/skills/math-skill-r/index.mdx b/fern/products/sdk-reference/cpp/agents/skills/math-skill-r/index.mdx
new file mode 100644
index 0000000000..0d490eb0d8
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/skills/math-skill-r/index.mdx
@@ -0,0 +1,152 @@
+---
+slug: "/reference/cpp/agents/skills/math-skill-r"
+title: "MathSkillR"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::skills::MathSkillR"
+ parent: "signalwire::skills"
+ module: "agents.skills"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp"
+ visibility: "public"
+---
+# `MathSkillR`
+
+## Signature
+
+```cpp
+class signalwire::skills::MathSkillR : signalwire::skills::SkillBase
+```
+
+## Inheritance
+
+**Extends:** [signalwire::skills::SkillBase](/docs/sdk-reference/reference/cpp/agents/skills/skill-base)
+
+## Methods
+
+### get\_prompt\_sections
+
+Get prompt sections to inject into agent.
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< SkillPromptSection > get_prompt_sections() const
+```
+
+#### Returns
+
+`std::vector< SkillPromptSection >`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 62.
+
+***
+
+### register\_tools
+
+Register tools with the agent. Returns tool definitions.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< swaig::ToolDefinition > register_tools()
+```
+
+#### Returns
+
+`std::vector< swaig::ToolDefinition >`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 58.
+
+***
+
+### setup
+
+Initialize the skill with given params. Return true on success.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool setup(const json & params)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 57.
+
+***
+
+### skill\_description
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_description() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 56.
+
+***
+
+### skill\_name
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_name() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 55.
+
+## Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 41.
diff --git a/fern/products/sdk-reference/cpp/agents/skills/math-skill/index.mdx b/fern/products/sdk-reference/cpp/agents/skills/math-skill/index.mdx
new file mode 100644
index 0000000000..47ae4745e8
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/skills/math-skill/index.mdx
@@ -0,0 +1,174 @@
+---
+slug: "/reference/cpp/agents/skills/math-skill"
+title: "MathSkill"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::skills::MathSkill"
+ parent: "signalwire::skills"
+ module: "agents.skills"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/math.cpp"
+ visibility: "public"
+---
+# `MathSkill`
+
+## Signature
+
+```cpp
+class signalwire::skills::MathSkill : signalwire::skills::SkillBase
+```
+
+## Inheritance
+
+**Extends:** [signalwire::skills::SkillBase](/docs/sdk-reference/reference/cpp/agents/skills/skill-base)
+
+## Methods
+
+### get\_prompt\_sections
+
+Get prompt sections to inject into agent.
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< SkillPromptSection > get_prompt_sections() const
+```
+
+#### Returns
+
+`std::vector< SkillPromptSection >`
+
+#### Source
+
+[`src/skills/builtin/math.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/math.cpp)
+
+Line 139.
+
+***
+
+### register\_tools
+
+Register tools with the agent. Returns tool definitions.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< swaig::ToolDefinition > register_tools()
+```
+
+#### Returns
+
+`std::vector< swaig::ToolDefinition >`
+
+#### Source
+
+[`src/skills/builtin/math.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/math.cpp)
+
+Line 108.
+
+***
+
+### setup
+
+Initialize the skill with given params. Return true on success.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool setup(const json & params)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/builtin/math.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/math.cpp)
+
+Line 106.
+
+***
+
+### skill\_description
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_description() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/builtin/math.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/math.cpp)
+
+Line 103.
+
+***
+
+### skill\_name
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_name() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/builtin/math.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/math.cpp)
+
+Line 102.
+
+***
+
+### supports\_multiple\_instances
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool supports_multiple_instances() const
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/builtin/math.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/math.cpp)
+
+Line 104.
+
+## Source
+
+[`src/skills/builtin/math.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/math.cpp)
+
+Line 100.
diff --git a/fern/products/sdk-reference/cpp/agents/skills/mcp-gateway-skill-r/index.mdx b/fern/products/sdk-reference/cpp/agents/skills/mcp-gateway-skill-r/index.mdx
new file mode 100644
index 0000000000..b31ddf7f7c
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/skills/mcp-gateway-skill-r/index.mdx
@@ -0,0 +1,152 @@
+---
+slug: "/reference/cpp/agents/skills/mcp-gateway-skill-r"
+title: "McpGatewaySkillR"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::skills::McpGatewaySkillR"
+ parent: "signalwire::skills"
+ module: "agents.skills"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp"
+ visibility: "public"
+---
+# `McpGatewaySkillR`
+
+## Signature
+
+```cpp
+class signalwire::skills::McpGatewaySkillR : signalwire::skills::SkillBase
+```
+
+## Inheritance
+
+**Extends:** [signalwire::skills::SkillBase](/docs/sdk-reference/reference/cpp/agents/skills/skill-base)
+
+## Methods
+
+### get\_hints
+
+Get speech recognition hints to merge into agent.
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< std::string > get_hints() const
+```
+
+#### Returns
+
+`std::vector< std::string >`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 408.
+
+***
+
+### register\_tools
+
+Register tools with the agent. Returns tool definitions.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< swaig::ToolDefinition > register_tools()
+```
+
+#### Returns
+
+`std::vector< swaig::ToolDefinition >`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 408.
+
+***
+
+### setup
+
+Initialize the skill with given params. Return true on success.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool setup(const json & params)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 408.
+
+***
+
+### skill\_description
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_description() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 408.
+
+***
+
+### skill\_name
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_name() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 408.
+
+## Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 408.
diff --git a/fern/products/sdk-reference/cpp/agents/skills/mcp-gateway-skill/index.mdx b/fern/products/sdk-reference/cpp/agents/skills/mcp-gateway-skill/index.mdx
new file mode 100644
index 0000000000..4409852194
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/skills/mcp-gateway-skill/index.mdx
@@ -0,0 +1,200 @@
+---
+slug: "/reference/cpp/agents/skills/mcp-gateway-skill"
+title: "McpGatewaySkill"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::skills::McpGatewaySkill"
+ parent: "signalwire::skills"
+ module: "agents.skills"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/mcp_gateway.cpp"
+ visibility: "public"
+---
+# `McpGatewaySkill`
+
+## Signature
+
+```cpp
+class signalwire::skills::McpGatewaySkill : signalwire::skills::SkillBase
+```
+
+## Inheritance
+
+**Extends:** [signalwire::skills::SkillBase](/docs/sdk-reference/reference/cpp/agents/skills/skill-base)
+
+## Methods
+
+### get\_global\_data
+
+Get global data to merge into agent.
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+json get_global_data() const
+```
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`src/skills/builtin/mcp_gateway.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/mcp_gateway.cpp)
+
+Line 55.
+
+***
+
+### get\_hints
+
+Get speech recognition hints to merge into agent.
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< std::string > get_hints() const
+```
+
+#### Returns
+
+`std::vector< std::string >`
+
+#### Source
+
+[`src/skills/builtin/mcp_gateway.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/mcp_gateway.cpp)
+
+Line 45.
+
+***
+
+### get\_prompt\_sections
+
+Get prompt sections to inject into agent.
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< SkillPromptSection > get_prompt_sections() const
+```
+
+#### Returns
+
+`std::vector< SkillPromptSection >`
+
+#### Source
+
+[`src/skills/builtin/mcp_gateway.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/mcp_gateway.cpp)
+
+Line 69.
+
+***
+
+### register\_tools
+
+Register tools with the agent. Returns tool definitions.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< swaig::ToolDefinition > register_tools()
+```
+
+#### Returns
+
+`std::vector< swaig::ToolDefinition >`
+
+#### Source
+
+[`src/skills/builtin/mcp_gateway.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/mcp_gateway.cpp)
+
+Line 21.
+
+***
+
+### setup
+
+Initialize the skill with given params. Return true on success.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool setup(const json & params)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/builtin/mcp_gateway.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/mcp_gateway.cpp)
+
+Line 14.
+
+***
+
+### skill\_description
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_description() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/builtin/mcp_gateway.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/mcp_gateway.cpp)
+
+Line 12.
+
+***
+
+### skill\_name
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_name() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/builtin/mcp_gateway.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/mcp_gateway.cpp)
+
+Line 11.
+
+## Source
+
+[`src/skills/builtin/mcp_gateway.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/mcp_gateway.cpp)
+
+Line 9.
diff --git a/fern/products/sdk-reference/cpp/agents/skills/native-vector-search-skill-r/index.mdx b/fern/products/sdk-reference/cpp/agents/skills/native-vector-search-skill-r/index.mdx
new file mode 100644
index 0000000000..ae3e3823b8
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/skills/native-vector-search-skill-r/index.mdx
@@ -0,0 +1,174 @@
+---
+slug: "/reference/cpp/agents/skills/native-vector-search-skill-r"
+title: "NativeVectorSearchSkillR"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::skills::NativeVectorSearchSkillR"
+ parent: "signalwire::skills"
+ module: "agents.skills"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp"
+ visibility: "public"
+---
+# `NativeVectorSearchSkillR`
+
+## Signature
+
+```cpp
+class signalwire::skills::NativeVectorSearchSkillR : signalwire::skills::SkillBase
+```
+
+## Inheritance
+
+**Extends:** [signalwire::skills::SkillBase](/docs/sdk-reference/reference/cpp/agents/skills/skill-base)
+
+## Methods
+
+### get\_hints
+
+Get speech recognition hints to merge into agent.
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< std::string > get_hints() const
+```
+
+#### Returns
+
+`std::vector< std::string >`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 402.
+
+***
+
+### register\_tools
+
+Register tools with the agent. Returns tool definitions.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< swaig::ToolDefinition > register_tools()
+```
+
+#### Returns
+
+`std::vector< swaig::ToolDefinition >`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 402.
+
+***
+
+### setup
+
+Initialize the skill with given params. Return true on success.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool setup(const json & params)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 402.
+
+***
+
+### skill\_description
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_description() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 402.
+
+***
+
+### skill\_name
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_name() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 402.
+
+***
+
+### supports\_multiple\_instances
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool supports_multiple_instances() const
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 402.
+
+## Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 402.
diff --git a/fern/products/sdk-reference/cpp/agents/skills/native-vector-search-skill/index.mdx b/fern/products/sdk-reference/cpp/agents/skills/native-vector-search-skill/index.mdx
new file mode 100644
index 0000000000..e8fab8888f
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/skills/native-vector-search-skill/index.mdx
@@ -0,0 +1,174 @@
+---
+slug: "/reference/cpp/agents/skills/native-vector-search-skill"
+title: "NativeVectorSearchSkill"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::skills::NativeVectorSearchSkill"
+ parent: "signalwire::skills"
+ module: "agents.skills"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/native_vector_search.cpp"
+ visibility: "public"
+---
+# `NativeVectorSearchSkill`
+
+## Signature
+
+```cpp
+class signalwire::skills::NativeVectorSearchSkill : signalwire::skills::SkillBase
+```
+
+## Inheritance
+
+**Extends:** [signalwire::skills::SkillBase](/docs/sdk-reference/reference/cpp/agents/skills/skill-base)
+
+## Methods
+
+### get\_hints
+
+Get speech recognition hints to merge into agent.
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< std::string > get_hints() const
+```
+
+#### Returns
+
+`std::vector< std::string >`
+
+#### Source
+
+[`src/skills/builtin/native_vector_search.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/native_vector_search.cpp)
+
+Line 44.
+
+***
+
+### register\_tools
+
+Register tools with the agent. Returns tool definitions.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< swaig::ToolDefinition > register_tools()
+```
+
+#### Returns
+
+`std::vector< swaig::ToolDefinition >`
+
+#### Source
+
+[`src/skills/builtin/native_vector_search.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/native_vector_search.cpp)
+
+Line 27.
+
+***
+
+### setup
+
+Initialize the skill with given params. Return true on success.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool setup(const json & params)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/builtin/native_vector_search.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/native_vector_search.cpp)
+
+Line 17.
+
+***
+
+### skill\_description
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_description() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/builtin/native_vector_search.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/native_vector_search.cpp)
+
+Line 12.
+
+***
+
+### skill\_name
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_name() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/builtin/native_vector_search.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/native_vector_search.cpp)
+
+Line 11.
+
+***
+
+### supports\_multiple\_instances
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool supports_multiple_instances() const
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/builtin/native_vector_search.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/native_vector_search.cpp)
+
+Line 15.
+
+## Source
+
+[`src/skills/builtin/native_vector_search.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/native_vector_search.cpp)
+
+Line 9.
diff --git a/fern/products/sdk-reference/cpp/agents/skills/play-background-file-skill-r/index.mdx b/fern/products/sdk-reference/cpp/agents/skills/play-background-file-skill-r/index.mdx
new file mode 100644
index 0000000000..18617a717e
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/skills/play-background-file-skill-r/index.mdx
@@ -0,0 +1,174 @@
+---
+slug: "/reference/cpp/agents/skills/play-background-file-skill-r"
+title: "PlayBackgroundFileSkillR"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::skills::PlayBackgroundFileSkillR"
+ parent: "signalwire::skills"
+ module: "agents.skills"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp"
+ visibility: "public"
+---
+# `PlayBackgroundFileSkillR`
+
+## Signature
+
+```cpp
+class signalwire::skills::PlayBackgroundFileSkillR : signalwire::skills::SkillBase
+```
+
+## Inheritance
+
+**Extends:** [signalwire::skills::SkillBase](/docs/sdk-reference/reference/cpp/agents/skills/skill-base)
+
+## Methods
+
+### get\_datamap\_functions
+
+Get SWAIG DataMap functions (for DataMap-based skills).
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< json > get_datamap_functions() const
+```
+
+#### Returns
+
+`std::vector< json >`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 398.
+
+***
+
+### register\_tools
+
+Register tools with the agent. Returns tool definitions.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< swaig::ToolDefinition > register_tools()
+```
+
+#### Returns
+
+`std::vector< swaig::ToolDefinition >`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 398.
+
+***
+
+### setup
+
+Initialize the skill with given params. Return true on success.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool setup(const json & params)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 398.
+
+***
+
+### skill\_description
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_description() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 398.
+
+***
+
+### skill\_name
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_name() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 398.
+
+***
+
+### supports\_multiple\_instances
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool supports_multiple_instances() const
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 398.
+
+## Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 398.
diff --git a/fern/products/sdk-reference/cpp/agents/skills/play-background-file-skill/index.mdx b/fern/products/sdk-reference/cpp/agents/skills/play-background-file-skill/index.mdx
new file mode 100644
index 0000000000..0b4db72a01
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/skills/play-background-file-skill/index.mdx
@@ -0,0 +1,174 @@
+---
+slug: "/reference/cpp/agents/skills/play-background-file-skill"
+title: "PlayBackgroundFileSkill"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::skills::PlayBackgroundFileSkill"
+ parent: "signalwire::skills"
+ module: "agents.skills"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/play_background_file.cpp"
+ visibility: "public"
+---
+# `PlayBackgroundFileSkill`
+
+## Signature
+
+```cpp
+class signalwire::skills::PlayBackgroundFileSkill : signalwire::skills::SkillBase
+```
+
+## Inheritance
+
+**Extends:** [signalwire::skills::SkillBase](/docs/sdk-reference/reference/cpp/agents/skills/skill-base)
+
+## Methods
+
+### get\_datamap\_functions
+
+Get SWAIG DataMap functions (for DataMap-based skills).
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< json > get_datamap_functions() const
+```
+
+#### Returns
+
+`std::vector< json >`
+
+#### Source
+
+[`src/skills/builtin/play_background_file.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/play_background_file.cpp)
+
+Line 24.
+
+***
+
+### register\_tools
+
+Register tools with the agent. Returns tool definitions.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< swaig::ToolDefinition > register_tools()
+```
+
+#### Returns
+
+`std::vector< swaig::ToolDefinition >`
+
+#### Source
+
+[`src/skills/builtin/play_background_file.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/play_background_file.cpp)
+
+Line 22.
+
+***
+
+### setup
+
+Initialize the skill with given params. Return true on success.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool setup(const json & params)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/builtin/play_background_file.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/play_background_file.cpp)
+
+Line 16.
+
+***
+
+### skill\_description
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_description() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/builtin/play_background_file.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/play_background_file.cpp)
+
+Line 13.
+
+***
+
+### skill\_name
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_name() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/builtin/play_background_file.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/play_background_file.cpp)
+
+Line 12.
+
+***
+
+### supports\_multiple\_instances
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool supports_multiple_instances() const
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/builtin/play_background_file.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/play_background_file.cpp)
+
+Line 14.
+
+## Source
+
+[`src/skills/builtin/play_background_file.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/play_background_file.cpp)
+
+Line 10.
diff --git a/fern/products/sdk-reference/cpp/agents/skills/skill-base/index.mdx b/fern/products/sdk-reference/cpp/agents/skills/skill-base/index.mdx
new file mode 100644
index 0000000000..de01df541b
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/skills/skill-base/index.mdx
@@ -0,0 +1,518 @@
+---
+slug: "/reference/cpp/agents/skills/skill-base"
+title: "SkillBase"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::skills::SkillBase"
+ parent: "signalwire::skills"
+ module: "agents.skills"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_base.hpp"
+ visibility: "public"
+---
+# `SkillBase`
+
+Abstract base class for all skills.
+
+## Signature
+
+```cpp
+class signalwire::skills::SkillBase
+```
+
+## Methods
+
+### ~SkillBase
+
+**Modifiers:** `virtual`
+
+#### Signature
+
+```cpp
+void ~SkillBase()
+```
+
+#### Source
+
+[`include/signalwire/skills/skill_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_base.hpp)
+
+Line 28.
+
+***
+
+### cleanup
+
+Cleanup resources.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+void cleanup()
+```
+
+#### Source
+
+[`include/signalwire/skills/skill_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_base.hpp)
+
+Line 70.
+
+***
+
+### define\_tool
+
+Define a tool (convenience for register\_tools implementations).
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+swaig::ToolDefinition define_tool(
+ const std::string & name,
+ const std::string & description,
+ const json & parameters,
+ swaig::ToolHandler handler,
+ bool secure = false
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+
+
+#### Returns
+
+`swaig::ToolDefinition`
+
+#### Source
+
+[`include/signalwire/skills/skill_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_base.hpp)
+
+Line 77.
+
+***
+
+### get\_datamap\_functions
+
+Get SWAIG DataMap functions (for DataMap-based skills).
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< json > get_datamap_functions() const
+```
+
+#### Returns
+
+`std::vector< json >`
+
+#### Source
+
+[`include/signalwire/skills/skill_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_base.hpp)
+
+Line 61.
+
+***
+
+### get\_global\_data
+
+Get global data to merge into agent.
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+json get_global_data() const
+```
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/skills/skill_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_base.hpp)
+
+Line 55.
+
+***
+
+### get\_hints
+
+Get speech recognition hints to merge into agent.
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< std::string > get_hints() const
+```
+
+#### Returns
+
+`std::vector< std::string >`
+
+#### Source
+
+[`include/signalwire/skills/skill_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_base.hpp)
+
+Line 52.
+
+***
+
+### get\_instance\_key
+
+Get instance key for multi-instance skills.
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string get_instance_key() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/skills/skill_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_base.hpp)
+
+Line 67.
+
+***
+
+### get\_param
+
+Get a parameter value with a default.
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+template
+T get_param(
+ const json & params,
+ const std::string & key,
+ const T & default_val
+) const
+```
+
+#### Type Parameters
+
+
+
+#### Parameters
+
+
+
+
+
+
+
+#### Returns
+
+`T`
+
+#### Source
+
+[`include/signalwire/skills/skill_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_base.hpp)
+
+Line 94.
+
+***
+
+### get\_param\_or\_env
+
+Get a string parameter with env var fallback.
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+std::string get_param_or_env(
+ const json & params,
+ const std::string & key,
+ const std::string & env_var,
+ const std::string & default_val = ""
+) const
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/skills/skill_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_base.hpp)
+
+Line 102.
+
+***
+
+### get\_parameter\_schema
+
+Get parameter schema for GUI tools.
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+json get_parameter_schema() const
+```
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/skills/skill_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_base.hpp)
+
+Line 64.
+
+***
+
+### get\_prompt\_sections
+
+Get prompt sections to inject into agent.
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< SkillPromptSection > get_prompt_sections() const
+```
+
+#### Returns
+
+`std::vector< SkillPromptSection >`
+
+#### Source
+
+[`include/signalwire/skills/skill_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_base.hpp)
+
+Line 58.
+
+***
+
+### register\_tools
+
+Register tools with the agent. Returns tool definitions.
+
+**Modifiers:** `virtual` `pure`
+
+#### Signature
+
+```cpp
+std::vector< swaig::ToolDefinition > register_tools() = 0
+```
+
+#### Returns
+
+`std::vector< swaig::ToolDefinition >`
+
+#### Source
+
+[`include/signalwire/skills/skill_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_base.hpp)
+
+Line 45.
+
+***
+
+### required\_env\_vars
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< std::string > required_env_vars() const
+```
+
+#### Returns
+
+`std::vector< std::string >`
+
+#### Source
+
+[`include/signalwire/skills/skill_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_base.hpp)
+
+Line 38.
+
+***
+
+### required\_packages
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< std::string > required_packages() const
+```
+
+#### Returns
+
+`std::vector< std::string >`
+
+#### Source
+
+[`include/signalwire/skills/skill_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_base.hpp)
+
+Line 39.
+
+***
+
+### setup
+
+Initialize the skill with given params. Return true on success.
+
+**Modifiers:** `virtual` `pure`
+
+#### Signature
+
+```cpp
+bool setup(const json & params) = 0
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/skills/skill_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_base.hpp)
+
+Line 42.
+
+***
+
+### skill\_description
+
+**Modifiers:** `const` `virtual` `pure`
+
+#### Signature
+
+```cpp
+std::string skill_description() const = 0
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/skills/skill_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_base.hpp)
+
+Line 35.
+
+***
+
+### skill\_name
+
+**Modifiers:** `const` `virtual` `pure`
+
+#### Signature
+
+```cpp
+std::string skill_name() const = 0
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/skills/skill_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_base.hpp)
+
+Line 34.
+
+***
+
+### skill\_version
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_version() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/skills/skill_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_base.hpp)
+
+Line 36.
+
+***
+
+### supports\_multiple\_instances
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool supports_multiple_instances() const
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/skills/skill_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_base.hpp)
+
+Line 37.
+
+## Source
+
+[`include/signalwire/skills/skill_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_base.hpp)
+
+Line 26.
diff --git a/fern/products/sdk-reference/cpp/agents/skills/skill-http-response/index.mdx b/fern/products/sdk-reference/cpp/agents/skills/skill-http-response/index.mdx
new file mode 100644
index 0000000000..11470b6692
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/skills/skill-http-response/index.mdx
@@ -0,0 +1,38 @@
+---
+slug: "/reference/cpp/agents/skills/skill-http-response"
+title: "SkillHttpResponse"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::skills::SkillHttpResponse"
+ parent: "signalwire::skills"
+ module: "agents.skills"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skills_http.hpp"
+ visibility: "public"
+---
+# `SkillHttpResponse`
+
+Result of a skill HTTP request. status is the HTTP status code (0 indicates a transport-level error — connection refused, DNS, etc.). body is the raw response body. error is non-empty when status is 0.
+
+## Signature
+
+```cpp
+struct signalwire::skills::SkillHttpResponse
+```
+
+## Properties
+
+
+
+
+
+
+
+## Source
+
+[`include/signalwire/skills/skills_http.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skills_http.hpp)
+
+Line 14.
diff --git a/fern/products/sdk-reference/cpp/agents/skills/skill-manager/index.mdx b/fern/products/sdk-reference/cpp/agents/skills/skill-manager/index.mdx
new file mode 100644
index 0000000000..3e68bf3614
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/skills/skill-manager/index.mdx
@@ -0,0 +1,172 @@
+---
+slug: "/reference/cpp/agents/skills/skill-manager"
+title: "SkillManager"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::skills::SkillManager"
+ parent: "signalwire::skills"
+ module: "agents.skills"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_manager.hpp"
+ visibility: "public"
+---
+# `SkillManager`
+
+Manages skill lifecycle: creation, setup, registration with agents.
+
+## Signature
+
+```cpp
+class signalwire::skills::SkillManager
+```
+
+## Methods
+
+### cleanup\_all
+
+Cleanup all skills.
+
+#### Signature
+
+```cpp
+void cleanup_all()
+```
+
+#### Source
+
+[`include/signalwire/skills/skill_manager.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_manager.hpp)
+
+Line 40.
+
+***
+
+### is\_loaded
+
+Check if a skill is loaded.
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+bool is_loaded(const std::string & skill_name) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/skills/skill_manager.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_manager.hpp)
+
+Line 34.
+
+***
+
+### list\_loaded
+
+List loaded skills.
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+std::vector< std::string > list_loaded() const
+```
+
+#### Returns
+
+`std::vector< std::string >`
+
+#### Source
+
+[`include/signalwire/skills/skill_manager.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_manager.hpp)
+
+Line 37.
+
+***
+
+### load\_skill
+
+Load a skill by name with params and register it with the agent.
+
+#### Signature
+
+```cpp
+bool load_skill(
+ const std::string & skill_name,
+ const json & params,
+ agent::AgentBase & agent
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/skills/skill_manager.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_manager.hpp)
+
+Line 27.
+
+***
+
+### SkillManager
+
+#### Signature
+
+```cpp
+void SkillManager()
+```
+
+#### Source
+
+[`include/signalwire/skills/skill_manager.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_manager.hpp)
+
+Line 24.
+
+***
+
+### unload\_skill
+
+Unload a skill.
+
+#### Signature
+
+```cpp
+void unload_skill(const std::string & skill_name)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/skills/skill_manager.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_manager.hpp)
+
+Line 31.
+
+## Source
+
+[`include/signalwire/skills/skill_manager.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_manager.hpp)
+
+Line 22.
diff --git a/fern/products/sdk-reference/cpp/agents/skills/skill-prompt-section/index.mdx b/fern/products/sdk-reference/cpp/agents/skills/skill-prompt-section/index.mdx
new file mode 100644
index 0000000000..db2fa84e5a
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/skills/skill-prompt-section/index.mdx
@@ -0,0 +1,38 @@
+---
+slug: "/reference/cpp/agents/skills/skill-prompt-section"
+title: "SkillPromptSection"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::skills::SkillPromptSection"
+ parent: "signalwire::skills"
+ module: "agents.skills"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_base.hpp"
+ visibility: "public"
+---
+# `SkillPromptSection`
+
+POM section for skill prompts.
+
+## Signature
+
+```cpp
+struct signalwire::skills::SkillPromptSection
+```
+
+## Properties
+
+
+
+
+
+
+
+## Source
+
+[`include/signalwire/skills/skill_base.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_base.hpp)
+
+Line 19.
diff --git a/fern/products/sdk-reference/cpp/agents/skills/skill-registry/index.mdx b/fern/products/sdk-reference/cpp/agents/skills/skill-registry/index.mdx
new file mode 100644
index 0000000000..6ab4fff6f5
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/skills/skill-registry/index.mdx
@@ -0,0 +1,207 @@
+---
+slug: "/reference/cpp/agents/skills/skill-registry"
+title: "SkillRegistry"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::skills::SkillRegistry"
+ parent: "signalwire::skills"
+ module: "agents.skills"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_registry.hpp"
+ visibility: "public"
+---
+# `SkillRegistry`
+
+Global registry of skill factories.
+
+## Signature
+
+```cpp
+class signalwire::skills::SkillRegistry
+```
+
+## Methods
+
+### add\_skill\_directory
+
+Add a directory to search for skills.
+Mirrors Python's signalwire.skills.registry.SkillRegistry.add\_skill\_directory: validate that the path exists and is a directory, then append it (de-duplicated) to external\_paths\_. Throws std::invalid\_argument (the C++ analog of Python's ValueError) for invalid input — the path doesn't exist or isn't a directory.
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void add_skill_directory(const std::string & path)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/skills/skill_registry.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_registry.hpp)
+
+Line 65.
+
+***
+
+### create
+
+Create a skill instance by name.
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+std::unique_ptr< SkillBase > create(const std::string & name) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`std::unique_ptr< SkillBase >`
+
+#### Source
+
+[`include/signalwire/skills/skill_registry.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_registry.hpp)
+
+Line 32.
+
+***
+
+### external\_paths
+
+Returns the registered external skill directories. Mirrors Python's SkillRegistry.\_external\_paths (private list, exposed here as a public accessor for parity-test inspection — C++ has no convention for protected attributes that tests can poke).
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+std::vector< std::string > external_paths() const
+```
+
+#### Returns
+
+`std::vector< std::string >`
+
+#### Source
+
+[`include/signalwire/skills/skill_registry.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_registry.hpp)
+
+Line 84.
+
+***
+
+### has\_skill
+
+Check if a skill is registered.
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+bool has_skill(const std::string & name) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/skills/skill_registry.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_registry.hpp)
+
+Line 42.
+
+***
+
+### instance
+
+**Modifiers:** `static` `inline`
+
+#### Signature
+
+```cpp
+SkillRegistry & instance()
+```
+
+#### Returns
+
+`SkillRegistry &`
+
+#### Source
+
+[`include/signalwire/skills/skill_registry.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_registry.hpp)
+
+Line 20.
+
+***
+
+### list\_skills
+
+List all registered skill names.
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+std::vector< std::string > list_skills() const
+```
+
+#### Returns
+
+`std::vector< std::string >`
+
+#### Source
+
+[`include/signalwire/skills/skill_registry.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_registry.hpp)
+
+Line 48.
+
+***
+
+### register\_skill
+
+Register a skill factory.
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void register_skill(const std::string & name, SkillFactory factory)
+```
+
+#### Parameters
+
+
+
+
+
+#### Source
+
+[`include/signalwire/skills/skill_registry.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_registry.hpp)
+
+Line 26.
+
+## Source
+
+[`include/signalwire/skills/skill_registry.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/skill_registry.hpp)
+
+Line 18.
diff --git a/fern/products/sdk-reference/cpp/agents/skills/spider-skill-r/index.mdx b/fern/products/sdk-reference/cpp/agents/skills/spider-skill-r/index.mdx
new file mode 100644
index 0000000000..6412c75947
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/skills/spider-skill-r/index.mdx
@@ -0,0 +1,174 @@
+---
+slug: "/reference/cpp/agents/skills/spider-skill-r"
+title: "SpiderSkillR"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::skills::SpiderSkillR"
+ parent: "signalwire::skills"
+ module: "agents.skills"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp"
+ visibility: "public"
+---
+# `SpiderSkillR`
+
+## Signature
+
+```cpp
+class signalwire::skills::SpiderSkillR : signalwire::skills::SkillBase
+```
+
+## Inheritance
+
+**Extends:** [signalwire::skills::SkillBase](/docs/sdk-reference/reference/cpp/agents/skills/skill-base)
+
+## Methods
+
+### get\_hints
+
+Get speech recognition hints to merge into agent.
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< std::string > get_hints() const
+```
+
+#### Returns
+
+`std::vector< std::string >`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 301.
+
+***
+
+### register\_tools
+
+Register tools with the agent. Returns tool definitions.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< swaig::ToolDefinition > register_tools()
+```
+
+#### Returns
+
+`std::vector< swaig::ToolDefinition >`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 271.
+
+***
+
+### setup
+
+Initialize the skill with given params. Return true on success.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool setup(const json & params)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 270.
+
+***
+
+### skill\_description
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_description() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 268.
+
+***
+
+### skill\_name
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_name() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 267.
+
+***
+
+### supports\_multiple\_instances
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool supports_multiple_instances() const
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 269.
+
+## Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 249.
diff --git a/fern/products/sdk-reference/cpp/agents/skills/spider-skill/index.mdx b/fern/products/sdk-reference/cpp/agents/skills/spider-skill/index.mdx
new file mode 100644
index 0000000000..2f5cb56225
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/skills/spider-skill/index.mdx
@@ -0,0 +1,177 @@
+---
+slug: "/reference/cpp/agents/skills/spider-skill"
+title: "SpiderSkill"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::skills::SpiderSkill"
+ parent: "signalwire::skills"
+ module: "agents.skills"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/spider.cpp"
+ visibility: "public"
+---
+# `SpiderSkill`
+
+Spider scrape skill — issues a real GET against the URL the LLM passes in. Strips HTML tags from the response and returns the text payload. Matches Python SpiderSkill's scrape\_url behavior.
+SPIDER\_BASE\_URL env var overrides the host portion of the URL the caller passes in (used by audit\_skills\_dispatch.py to redirect scrape requests at a loopback fixture).
+
+## Signature
+
+```cpp
+class signalwire::skills::SpiderSkill : signalwire::skills::SkillBase
+```
+
+## Inheritance
+
+**Extends:** [signalwire::skills::SkillBase](/docs/sdk-reference/reference/cpp/agents/skills/skill-base)
+
+## Methods
+
+### get\_hints
+
+Get speech recognition hints to merge into agent.
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< std::string > get_hints() const
+```
+
+#### Returns
+
+`std::vector< std::string >`
+
+#### Source
+
+[`src/skills/builtin/spider.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/spider.cpp)
+
+Line 153.
+
+***
+
+### register\_tools
+
+Register tools with the agent. Returns tool definitions.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< swaig::ToolDefinition > register_tools()
+```
+
+#### Returns
+
+`std::vector< swaig::ToolDefinition >`
+
+#### Source
+
+[`src/skills/builtin/spider.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/spider.cpp)
+
+Line 62.
+
+***
+
+### setup
+
+Initialize the skill with given params. Return true on success.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool setup(const json & params)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/builtin/spider.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/spider.cpp)
+
+Line 60.
+
+***
+
+### skill\_description
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_description() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/builtin/spider.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/spider.cpp)
+
+Line 57.
+
+***
+
+### skill\_name
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_name() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/builtin/spider.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/spider.cpp)
+
+Line 56.
+
+***
+
+### supports\_multiple\_instances
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool supports_multiple_instances() const
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/builtin/spider.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/spider.cpp)
+
+Line 58.
+
+## Source
+
+[`src/skills/builtin/spider.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/spider.cpp)
+
+Line 54.
diff --git a/fern/products/sdk-reference/cpp/agents/skills/swml-transfer-skill-r/index.mdx b/fern/products/sdk-reference/cpp/agents/skills/swml-transfer-skill-r/index.mdx
new file mode 100644
index 0000000000..e66ccc06b9
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/skills/swml-transfer-skill-r/index.mdx
@@ -0,0 +1,198 @@
+---
+slug: "/reference/cpp/agents/skills/swml-transfer-skill-r"
+title: "SwmlTransferSkillR"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::skills::SwmlTransferSkillR"
+ parent: "signalwire::skills"
+ module: "agents.skills"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp"
+ visibility: "public"
+---
+# `SwmlTransferSkillR`
+
+## Signature
+
+```cpp
+class signalwire::skills::SwmlTransferSkillR : signalwire::skills::SkillBase
+```
+
+## Inheritance
+
+**Extends:** [signalwire::skills::SkillBase](/docs/sdk-reference/reference/cpp/agents/skills/skill-base)
+
+## Methods
+
+### get\_datamap\_functions
+
+Get SWAIG DataMap functions (for DataMap-based skills).
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< json > get_datamap_functions() const
+```
+
+#### Returns
+
+`std::vector< json >`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 396.
+
+***
+
+### get\_hints
+
+Get speech recognition hints to merge into agent.
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< std::string > get_hints() const
+```
+
+#### Returns
+
+`std::vector< std::string >`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 396.
+
+***
+
+### register\_tools
+
+Register tools with the agent. Returns tool definitions.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< swaig::ToolDefinition > register_tools()
+```
+
+#### Returns
+
+`std::vector< swaig::ToolDefinition >`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 396.
+
+***
+
+### setup
+
+Initialize the skill with given params. Return true on success.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool setup(const json & params)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 396.
+
+***
+
+### skill\_description
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_description() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 396.
+
+***
+
+### skill\_name
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_name() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 396.
+
+***
+
+### supports\_multiple\_instances
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool supports_multiple_instances() const
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 396.
+
+## Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 396.
diff --git a/fern/products/sdk-reference/cpp/agents/skills/swml-transfer-skill/index.mdx b/fern/products/sdk-reference/cpp/agents/skills/swml-transfer-skill/index.mdx
new file mode 100644
index 0000000000..12129f8f9d
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/skills/swml-transfer-skill/index.mdx
@@ -0,0 +1,222 @@
+---
+slug: "/reference/cpp/agents/skills/swml-transfer-skill"
+title: "SwmlTransferSkill"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::skills::SwmlTransferSkill"
+ parent: "signalwire::skills"
+ module: "agents.skills"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/swml_transfer.cpp"
+ visibility: "public"
+---
+# `SwmlTransferSkill`
+
+## Signature
+
+```cpp
+class signalwire::skills::SwmlTransferSkill : signalwire::skills::SkillBase
+```
+
+## Inheritance
+
+**Extends:** [signalwire::skills::SkillBase](/docs/sdk-reference/reference/cpp/agents/skills/skill-base)
+
+## Methods
+
+### get\_datamap\_functions
+
+Get SWAIG DataMap functions (for DataMap-based skills).
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< json > get_datamap_functions() const
+```
+
+#### Returns
+
+`std::vector< json >`
+
+#### Source
+
+[`src/skills/builtin/swml_transfer.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/swml_transfer.cpp)
+
+Line 26.
+
+***
+
+### get\_hints
+
+Get speech recognition hints to merge into agent.
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< std::string > get_hints() const
+```
+
+#### Returns
+
+`std::vector< std::string >`
+
+#### Source
+
+[`src/skills/builtin/swml_transfer.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/swml_transfer.cpp)
+
+Line 62.
+
+***
+
+### get\_prompt\_sections
+
+Get prompt sections to inject into agent.
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< SkillPromptSection > get_prompt_sections() const
+```
+
+#### Returns
+
+`std::vector< SkillPromptSection >`
+
+#### Source
+
+[`src/skills/builtin/swml_transfer.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/swml_transfer.cpp)
+
+Line 81.
+
+***
+
+### register\_tools
+
+Register tools with the agent. Returns tool definitions.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< swaig::ToolDefinition > register_tools()
+```
+
+#### Returns
+
+`std::vector< swaig::ToolDefinition >`
+
+#### Source
+
+[`src/skills/builtin/swml_transfer.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/swml_transfer.cpp)
+
+Line 24.
+
+***
+
+### setup
+
+Initialize the skill with given params. Return true on success.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool setup(const json & params)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/builtin/swml_transfer.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/swml_transfer.cpp)
+
+Line 18.
+
+***
+
+### skill\_description
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_description() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/builtin/swml_transfer.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/swml_transfer.cpp)
+
+Line 13.
+
+***
+
+### skill\_name
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_name() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/builtin/swml_transfer.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/swml_transfer.cpp)
+
+Line 12.
+
+***
+
+### supports\_multiple\_instances
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool supports_multiple_instances() const
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/builtin/swml_transfer.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/swml_transfer.cpp)
+
+Line 16.
+
+## Source
+
+[`src/skills/builtin/swml_transfer.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/swml_transfer.cpp)
+
+Line 10.
diff --git a/fern/products/sdk-reference/cpp/agents/skills/weather-api-skill-r/index.mdx b/fern/products/sdk-reference/cpp/agents/skills/weather-api-skill-r/index.mdx
new file mode 100644
index 0000000000..11225014b3
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/skills/weather-api-skill-r/index.mdx
@@ -0,0 +1,152 @@
+---
+slug: "/reference/cpp/agents/skills/weather-api-skill-r"
+title: "WeatherApiSkillR"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::skills::WeatherApiSkillR"
+ parent: "signalwire::skills"
+ module: "agents.skills"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp"
+ visibility: "public"
+---
+# `WeatherApiSkillR`
+
+## Signature
+
+```cpp
+class signalwire::skills::WeatherApiSkillR : signalwire::skills::SkillBase
+```
+
+## Inheritance
+
+**Extends:** [signalwire::skills::SkillBase](/docs/sdk-reference/reference/cpp/agents/skills/skill-base)
+
+## Methods
+
+### get\_datamap\_functions
+
+Get SWAIG DataMap functions (for DataMap-based skills).
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< json > get_datamap_functions() const
+```
+
+#### Returns
+
+`std::vector< json >`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 86.
+
+***
+
+### register\_tools
+
+Register tools with the agent. Returns tool definitions.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< swaig::ToolDefinition > register_tools()
+```
+
+#### Returns
+
+`std::vector< swaig::ToolDefinition >`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 85.
+
+***
+
+### setup
+
+Initialize the skill with given params. Return true on success.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool setup(const json & params)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 84.
+
+***
+
+### skill\_description
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_description() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 83.
+
+***
+
+### skill\_name
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_name() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 82.
+
+## Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 79.
diff --git a/fern/products/sdk-reference/cpp/agents/skills/weather-api-skill/index.mdx b/fern/products/sdk-reference/cpp/agents/skills/weather-api-skill/index.mdx
new file mode 100644
index 0000000000..b7945bfdb8
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/skills/weather-api-skill/index.mdx
@@ -0,0 +1,152 @@
+---
+slug: "/reference/cpp/agents/skills/weather-api-skill"
+title: "WeatherApiSkill"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::skills::WeatherApiSkill"
+ parent: "signalwire::skills"
+ module: "agents.skills"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/weather_api.cpp"
+ visibility: "public"
+---
+# `WeatherApiSkill`
+
+## Signature
+
+```cpp
+class signalwire::skills::WeatherApiSkill : signalwire::skills::SkillBase
+```
+
+## Inheritance
+
+**Extends:** [signalwire::skills::SkillBase](/docs/sdk-reference/reference/cpp/agents/skills/skill-base)
+
+## Methods
+
+### get\_datamap\_functions
+
+Get SWAIG DataMap functions (for DataMap-based skills).
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< json > get_datamap_functions() const
+```
+
+#### Returns
+
+`std::vector< json >`
+
+#### Source
+
+[`src/skills/builtin/weather_api.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/weather_api.cpp)
+
+Line 25.
+
+***
+
+### register\_tools
+
+Register tools with the agent. Returns tool definitions.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< swaig::ToolDefinition > register_tools()
+```
+
+#### Returns
+
+`std::vector< swaig::ToolDefinition >`
+
+#### Source
+
+[`src/skills/builtin/weather_api.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/weather_api.cpp)
+
+Line 23.
+
+***
+
+### setup
+
+Initialize the skill with given params. Return true on success.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool setup(const json & params)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/builtin/weather_api.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/weather_api.cpp)
+
+Line 15.
+
+***
+
+### skill\_description
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_description() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/builtin/weather_api.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/weather_api.cpp)
+
+Line 13.
+
+***
+
+### skill\_name
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_name() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/builtin/weather_api.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/weather_api.cpp)
+
+Line 12.
+
+## Source
+
+[`src/skills/builtin/weather_api.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/weather_api.cpp)
+
+Line 10.
diff --git a/fern/products/sdk-reference/cpp/agents/skills/web-search-core/candidate/index.mdx b/fern/products/sdk-reference/cpp/agents/skills/web-search-core/candidate/index.mdx
new file mode 100644
index 0000000000..779874ff83
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/skills/web-search-core/candidate/index.mdx
@@ -0,0 +1,42 @@
+---
+slug: "/reference/cpp/agents/skills/web-search-core/candidate"
+title: "Candidate"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::skills::web_search_core::Candidate"
+ parent: "signalwire::skills::web_search_core"
+ module: "agents.skills.web_search_core"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/web_search_core.hpp"
+ visibility: "public"
+---
+# `Candidate`
+
+One Google CSE hit: title / link / snippet, plus the page text once a scrape succeeds.
+
+## Signature
+
+```cpp
+struct signalwire::skills::web_search_core::Candidate
+```
+
+## Properties
+
+
+
+
+
+
+
+
+
+
+
+## Source
+
+[`include/signalwire/skills/web_search_core.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/web_search_core.hpp)
+
+Line 55.
diff --git a/fern/products/sdk-reference/cpp/agents/skills/web-search-core/index.mdx b/fern/products/sdk-reference/cpp/agents/skills/web-search-core/index.mdx
new file mode 100644
index 0000000000..7288e9c5ef
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/skills/web-search-core/index.mdx
@@ -0,0 +1,318 @@
+---
+slug: "/reference/cpp/agents/skills/web-search-core"
+title: "web_search_core"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "module"
+ language: "cpp"
+ qualified_name: "signalwire::skills::web_search_core"
+ parent: "signalwire::skills"
+ module: "agents.skills"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/web_search_core.hpp"
+---
+# `web_search_core`
+
+## Signature
+
+```cpp
+namespace signalwire::skills::web_search_core
+```
+
+## Classes
+
+
+
+ One Google CSE hit: title / link / snippet, plus the page text once a scrape succeeds.
+
+
+
+ Latency-control configuration read from the skill params.
+
+
+
+## Functions
+
+### format\_scraped\_results
+
+Format the successfully-scraped results. Returned when at least one page was fetched within budget. Keeps the historical "Web search results for '<q>'" header shape so existing parse-assertions still see it, but enriches each entry with the fetched page content (truncated to per\_result\_limit).
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+std::string format_scraped_results(
+ const std::string & query,
+ const std::vector< Candidate > & scraped,
+ std::size_t total_candidates,
+ std::size_t per_result_limit
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/skills/web_search_core.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/web_search_core.hpp)
+
+Line 122.
+
+***
+
+### format\_snippet\_results
+
+Format Google CSE snippets without fetching the underlying pages. Used for the snippets\_only fast path AND as the graceful fallback when scraping is abandoned by the overall\_deadline. Always non-empty when there is at least one candidate. Mirrors Python's \_format\_snippet\_results.
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+std::string format_snippet_results(
+ const std::string & query,
+ const std::vector< Candidate > & cands,
+ int num_results
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/skills/web_search_core.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/web_search_core.hpp)
+
+Line 91.
+
+***
+
+### parse\_cse\_items
+
+Parse a Google CSE \{ "items": \[ \{title, link, snippet\}, ... ] \} body into candidate hits. Unknown / missing fields default to empty strings.
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+std::vector< Candidate > parse_cse_items(const json & parsed)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`std::vector< Candidate >`
+
+#### Source
+
+[`include/signalwire/skills/web_search_core.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/web_search_core.hpp)
+
+Line 73.
+
+***
+
+### run
+
+Run the full latency-controlled web\_search flow given an already-fetched and parsed CSE candidate list. Returns the response body (UNWRAPPED — the caller applies response\_prefix/response\_postfix). had\_items distinguishes "CSE
+returned zero items" (return empty\_no\_items\_message) from "CSE returned
+items but none scraped" (snippet fallback).
+Steps mirror Python's search\_and\_scrape\_best:
+snippets\_only -> format CSE snippets directly.
+scrape under deadline.
+no scraped survivors -> snippet fallback (non-empty).
+else -> format scraped results.
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+std::string run(
+ const std::string & query,
+ std::vector< Candidate > candidates,
+ const LatencyParams & lp,
+ int num_results,
+ std::size_t max_content_length,
+ const std::string & empty_no_items_message
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+
+
+
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/skills/web_search_core.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/web_search_core.hpp)
+
+Line 254.
+
+***
+
+### schema\_fragment
+
+Build the parameter-schema fragment advertising the 6 latency / response params. Merged into each skill's get\_parameter\_schema(). Mirrors Python's get\_parameter\_schema entries (295745b) and the Go reference port.
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+json schema_fragment()
+```
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/skills/web_search_core.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/web_search_core.hpp)
+
+Line 302.
+
+***
+
+### scrape\_candidates
+
+Scrape the candidate result links under the overall\_deadline budget, returning only the ones that produced usable page content before time ran out. The overall\_deadline is enforced in BOTH parallel and sequential modes via std::chrono::steady\_clock — that is the contract.
+Parallel mode (best-effort): dispatch every scrape via std::async, then future::wait\_until(deadline) each. Whatever has not finished by the deadline is abandoned — its future is moved into a detached reaper so the abandoned fetch (already bounded by per\_page\_timeout) is cleaned up off the hot path and never blocks the response. std::async's own future destructor would otherwise JOIN the task, defeating the deadline; the reaper sidesteps that.
+Sequential mode: scrape one link at a time, breaking out the instant the deadline has passed.
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+std::vector< Candidate > scrape_candidates(
+ const std::vector< Candidate > & cands,
+ const LatencyParams & lp,
+ steady_clock::time_point deadline_at
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Returns
+
+`std::vector< Candidate >`
+
+#### Source
+
+[`include/signalwire/skills/web_search_core.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/web_search_core.hpp)
+
+Line 186.
+
+***
+
+### scrape\_one
+
+Fetch one candidate's page under the per\_page\_timeout bound. A 2xx response with a non-empty body is a usable scrape; everything else (transport error, non-2xx, empty body) yields an unscraped candidate. The per\_page\_timeout is converted to milliseconds so a sub-second budget is honored exactly.
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+Candidate scrape_one(const Candidate & in, double per_page_timeout)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`Candidate`
+
+#### Source
+
+[`include/signalwire/skills/web_search_core.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/web_search_core.hpp)
+
+Line 153.
+
+## Type Aliases
+
+### json
+
+#### Signature
+
+```cpp
+typedef nlohmann::json json
+```
+
+#### Source
+
+[`include/signalwire/skills/web_search_core.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/web_search_core.hpp)
+
+Line 50.
+
+***
+
+### steady\_clock
+
+#### Signature
+
+```cpp
+typedef std::chrono::steady_clock steady_clock
+```
+
+#### Source
+
+[`include/signalwire/skills/web_search_core.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/web_search_core.hpp)
+
+Line 51.
+
+## Source
+
+[`include/signalwire/skills/web_search_core.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/web_search_core.hpp)
+
+Line 48.
diff --git a/fern/products/sdk-reference/cpp/agents/skills/web-search-core/latency-params/index.mdx b/fern/products/sdk-reference/cpp/agents/skills/web-search-core/latency-params/index.mdx
new file mode 100644
index 0000000000..c15dc25d7f
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/skills/web-search-core/latency-params/index.mdx
@@ -0,0 +1,40 @@
+---
+slug: "/reference/cpp/agents/skills/web-search-core/latency-params"
+title: "LatencyParams"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::skills::web_search_core::LatencyParams"
+ parent: "signalwire::skills::web_search_core"
+ module: "agents.skills.web_search_core"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/web_search_core.hpp"
+ visibility: "public"
+---
+# `LatencyParams`
+
+Latency-control configuration read from the skill params.
+
+## Signature
+
+```cpp
+struct signalwire::skills::web_search_core::LatencyParams
+```
+
+## Properties
+
+
+
+
+
+
+
+
+
+## Source
+
+[`include/signalwire/skills/web_search_core.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/skills/web_search_core.hpp)
+
+Line 64.
diff --git a/fern/products/sdk-reference/cpp/agents/skills/web-search-skill-r/index.mdx b/fern/products/sdk-reference/cpp/agents/skills/web-search-skill-r/index.mdx
new file mode 100644
index 0000000000..991869de7c
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/skills/web-search-skill-r/index.mdx
@@ -0,0 +1,244 @@
+---
+slug: "/reference/cpp/agents/skills/web-search-skill-r"
+title: "WebSearchSkillR"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::skills::WebSearchSkillR"
+ parent: "signalwire::skills"
+ module: "agents.skills"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp"
+ visibility: "public"
+---
+# `WebSearchSkillR`
+
+## Signature
+
+```cpp
+class signalwire::skills::WebSearchSkillR : signalwire::skills::SkillBase
+```
+
+## Inheritance
+
+**Extends:** [signalwire::skills::SkillBase](/docs/sdk-reference/reference/cpp/agents/skills/skill-base)
+
+## Methods
+
+### get\_global\_data
+
+Get global data to merge into agent.
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+json get_global_data() const
+```
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 176.
+
+***
+
+### get\_parameter\_schema
+
+Get parameter schema for GUI tools.
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+json get_parameter_schema() const
+```
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 177.
+
+***
+
+### get\_prompt\_sections
+
+Get prompt sections to inject into agent.
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< SkillPromptSection > get_prompt_sections() const
+```
+
+#### Returns
+
+`std::vector< SkillPromptSection >`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 175.
+
+***
+
+### register\_tools
+
+Register tools with the agent. Returns tool definitions.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< swaig::ToolDefinition > register_tools()
+```
+
+#### Returns
+
+`std::vector< swaig::ToolDefinition >`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 131.
+
+***
+
+### setup
+
+Initialize the skill with given params. Return true on success.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool setup(const json & params)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 112.
+
+***
+
+### skill\_description
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_description() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 109.
+
+***
+
+### skill\_name
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_name() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 108.
+
+***
+
+### skill\_version
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_version() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 110.
+
+***
+
+### supports\_multiple\_instances
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool supports_multiple_instances() const
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 111.
+
+## Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 96.
diff --git a/fern/products/sdk-reference/cpp/agents/skills/web-search-skill/index.mdx b/fern/products/sdk-reference/cpp/agents/skills/web-search-skill/index.mdx
new file mode 100644
index 0000000000..f05b8b3ea6
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/skills/web-search-skill/index.mdx
@@ -0,0 +1,252 @@
+---
+slug: "/reference/cpp/agents/skills/web-search-skill"
+title: "WebSearchSkill"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::skills::WebSearchSkill"
+ parent: "signalwire::skills"
+ module: "agents.skills"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/web_search.cpp"
+ visibility: "public"
+---
+# `WebSearchSkill`
+
+Google Custom Search API skill — issues a real GET against Google's customsearch/v1 endpoint, parses the items\[] results, and returns a human-readable summary. Matches Python's WebSearchSkill behavior.
+Configuration:
+api\_key (or env GOOGLE\_SEARCH\_API\_KEY / GOOGLE\_API\_KEY)
+search\_engine\_id (or env GOOGLE\_SEARCH\_ENGINE\_ID / GOOGLE\_CSE\_ID)
+num\_results (default 3)
+tool\_name (default "web\_search")
+WEB\_SEARCH\_BASE\_URL env var overrides the upstream URL (used by audit\_skills\_dispatch.py to point the skill at a fixture)
+
+## Signature
+
+```cpp
+class signalwire::skills::WebSearchSkill : signalwire::skills::SkillBase
+```
+
+## Inheritance
+
+**Extends:** [signalwire::skills::SkillBase](/docs/sdk-reference/reference/cpp/agents/skills/skill-base)
+
+## Methods
+
+### get\_global\_data
+
+Get global data to merge into agent.
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+json get_global_data() const
+```
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`src/skills/builtin/web_search.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/web_search.cpp)
+
+Line 142.
+
+***
+
+### get\_parameter\_schema
+
+Get parameter schema for GUI tools.
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+json get_parameter_schema() const
+```
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`src/skills/builtin/web_search.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/web_search.cpp)
+
+Line 150.
+
+***
+
+### get\_prompt\_sections
+
+Get prompt sections to inject into agent.
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< SkillPromptSection > get_prompt_sections() const
+```
+
+#### Returns
+
+`std::vector< SkillPromptSection >`
+
+#### Source
+
+[`src/skills/builtin/web_search.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/web_search.cpp)
+
+Line 135.
+
+***
+
+### register\_tools
+
+Register tools with the agent. Returns tool definitions.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< swaig::ToolDefinition > register_tools()
+```
+
+#### Returns
+
+`std::vector< swaig::ToolDefinition >`
+
+#### Source
+
+[`src/skills/builtin/web_search.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/web_search.cpp)
+
+Line 59.
+
+***
+
+### setup
+
+Initialize the skill with given params. Return true on success.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool setup(const json & params)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/builtin/web_search.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/web_search.cpp)
+
+Line 32.
+
+***
+
+### skill\_description
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_description() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/builtin/web_search.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/web_search.cpp)
+
+Line 28.
+
+***
+
+### skill\_name
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_name() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/builtin/web_search.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/web_search.cpp)
+
+Line 27.
+
+***
+
+### skill\_version
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_version() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/builtin/web_search.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/web_search.cpp)
+
+Line 29.
+
+***
+
+### supports\_multiple\_instances
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool supports_multiple_instances() const
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/builtin/web_search.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/web_search.cpp)
+
+Line 30.
+
+## Source
+
+[`src/skills/builtin/web_search.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/web_search.cpp)
+
+Line 25.
diff --git a/fern/products/sdk-reference/cpp/agents/skills/wikipedia-search-skill-r/index.mdx b/fern/products/sdk-reference/cpp/agents/skills/wikipedia-search-skill-r/index.mdx
new file mode 100644
index 0000000000..13157b9f4a
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/skills/wikipedia-search-skill-r/index.mdx
@@ -0,0 +1,152 @@
+---
+slug: "/reference/cpp/agents/skills/wikipedia-search-skill-r"
+title: "WikipediaSearchSkillR"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::skills::WikipediaSearchSkillR"
+ parent: "signalwire::skills"
+ module: "agents.skills"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp"
+ visibility: "public"
+---
+# `WikipediaSearchSkillR`
+
+## Signature
+
+```cpp
+class signalwire::skills::WikipediaSearchSkillR : signalwire::skills::SkillBase
+```
+
+## Inheritance
+
+**Extends:** [signalwire::skills::SkillBase](/docs/sdk-reference/reference/cpp/agents/skills/skill-base)
+
+## Methods
+
+### get\_prompt\_sections
+
+Get prompt sections to inject into agent.
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< SkillPromptSection > get_prompt_sections() const
+```
+
+#### Returns
+
+`std::vector< SkillPromptSection >`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 238.
+
+***
+
+### register\_tools
+
+Register tools with the agent. Returns tool definitions.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< swaig::ToolDefinition > register_tools()
+```
+
+#### Returns
+
+`std::vector< swaig::ToolDefinition >`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 198.
+
+***
+
+### setup
+
+Initialize the skill with given params. Return true on success.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool setup(const json & params)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 192.
+
+***
+
+### skill\_description
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_description() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 191.
+
+***
+
+### skill\_name
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_name() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 190.
+
+## Source
+
+[`src/skills/skill_registry.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/skill_registry.cpp)
+
+Line 186.
diff --git a/fern/products/sdk-reference/cpp/agents/skills/wikipedia-search-skill/index.mdx b/fern/products/sdk-reference/cpp/agents/skills/wikipedia-search-skill/index.mdx
new file mode 100644
index 0000000000..81217a818c
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/skills/wikipedia-search-skill/index.mdx
@@ -0,0 +1,155 @@
+---
+slug: "/reference/cpp/agents/skills/wikipedia-search-skill"
+title: "WikipediaSearchSkill"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::skills::WikipediaSearchSkill"
+ parent: "signalwire::skills"
+ module: "agents.skills"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/wikipedia_search.cpp"
+ visibility: "public"
+---
+# `WikipediaSearchSkill`
+
+Wikipedia search skill — issues a real GET against the Wikipedia API /w/api.php endpoint with action=query\&list=search, parses the query.search\[] results, and returns titles + snippets. Matches the Python WikipediaSearchSkill upstream call shape.
+WIKIPEDIA\_BASE\_URL env var overrides the API root (used by audit\_skills\_dispatch.py to point the skill at its loopback fixture).
+
+## Signature
+
+```cpp
+class signalwire::skills::WikipediaSearchSkill : signalwire::skills::SkillBase
+```
+
+## Inheritance
+
+**Extends:** [signalwire::skills::SkillBase](/docs/sdk-reference/reference/cpp/agents/skills/skill-base)
+
+## Methods
+
+### get\_prompt\_sections
+
+Get prompt sections to inject into agent.
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< SkillPromptSection > get_prompt_sections() const
+```
+
+#### Returns
+
+`std::vector< SkillPromptSection >`
+
+#### Source
+
+[`src/skills/builtin/wikipedia_search.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/wikipedia_search.cpp)
+
+Line 102.
+
+***
+
+### register\_tools
+
+Register tools with the agent. Returns tool definitions.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::vector< swaig::ToolDefinition > register_tools()
+```
+
+#### Returns
+
+`std::vector< swaig::ToolDefinition >`
+
+#### Source
+
+[`src/skills/builtin/wikipedia_search.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/wikipedia_search.cpp)
+
+Line 35.
+
+***
+
+### setup
+
+Initialize the skill with given params. Return true on success.
+
+**Modifiers:** `inline` `virtual`
+
+#### Signature
+
+```cpp
+bool setup(const json & params)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/skills/builtin/wikipedia_search.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/wikipedia_search.cpp)
+
+Line 27.
+
+***
+
+### skill\_description
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_description() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/builtin/wikipedia_search.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/wikipedia_search.cpp)
+
+Line 23.
+
+***
+
+### skill\_name
+
+**Modifiers:** `const` `inline` `virtual`
+
+#### Signature
+
+```cpp
+std::string skill_name() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`src/skills/builtin/wikipedia_search.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/wikipedia_search.cpp)
+
+Line 22.
+
+## Source
+
+[`src/skills/builtin/wikipedia_search.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/skills/builtin/wikipedia_search.cpp)
+
+Line 20.
diff --git a/fern/products/sdk-reference/cpp/agents/swaig/enum-or-string/index.mdx b/fern/products/sdk-reference/cpp/agents/swaig/enum-or-string/index.mdx
new file mode 100644
index 0000000000..4a2ca08740
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/swaig/enum-or-string/index.mdx
@@ -0,0 +1,110 @@
+---
+slug: "/reference/cpp/agents/swaig/enum-or-string"
+title: "EnumOrString"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::swaig::EnumOrString"
+ parent: "signalwire::swaig"
+ module: "agents.swaig"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp"
+ visibility: "public"
+---
+# `EnumOrString`
+
+A closed-set field that accepts EITHER the typed enum OR a bare string.
+JoinConferenceOptions::beep = ConferenceBeep::OnEnter; and ... = "onEnter"; both compile and resolve to the same wire string; the open-string path keeps parity with Python's bare str (the validation in join\_conference then rejects out-of-set strings exactly as Python does). Templated on the enum type plus its \*\_value() mapper so one definition covers all four sets.
+
+## Signature
+
+```cpp
+template
+struct signalwire::swaig::EnumOrString
+```
+
+## Type Parameters
+
+
+
+
+
+## Properties
+
+
+
+## Methods
+
+### EnumOrString
+
+**Modifiers:** `inline`
+
+#### Signature
+
+
+
+ ```cpp
+ void EnumOrString(E e)
+ ```
+
+
+
+ ```cpp
+ void EnumOrString(const std::string & s)
+ ```
+
+
+
+ ```cpp
+ void EnumOrString(const char * s)
+ ```
+
+
+
+#### Parameters (Overload 1)
+
+
+
+#### Parameters (Overload 2)
+
+
+
+#### Parameters (Overload 3)
+
+
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 157.
+
+***
+
+### str
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const std::string & str() const
+```
+
+#### Returns
+
+`const std::string &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 160.
+
+## Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 155.
diff --git a/fern/products/sdk-reference/cpp/agents/swaig/function-result/index.mdx b/fern/products/sdk-reference/cpp/agents/swaig/function-result/index.mdx
new file mode 100644
index 0000000000..df7d462f14
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/swaig/function-result/index.mdx
@@ -0,0 +1,1632 @@
+---
+slug: "/reference/cpp/agents/swaig/function-result"
+title: "FunctionResult"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::swaig::FunctionResult"
+ parent: "signalwire::swaig"
+ module: "agents.swaig"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp"
+ visibility: "public"
+---
+# `FunctionResult`
+
+Builder for SWAIG function results with 40+ action methods. Every method returns \*this for chaining.
+
+## Signature
+
+```cpp
+class signalwire::swaig::FunctionResult
+```
+
+## Methods
+
+### add\_action
+
+#### Signature
+
+```cpp
+FunctionResult & add_action(const std::string & name, const json & data)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`FunctionResult &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 207.
+
+***
+
+### add\_actions
+
+#### Signature
+
+```cpp
+FunctionResult & add_actions(const std::vector< json > & actions)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`FunctionResult &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 208.
+
+***
+
+### add\_dynamic\_hints
+
+#### Signature
+
+```cpp
+FunctionResult & add_dynamic_hints(const json & hints)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`FunctionResult &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 284.
+
+***
+
+### clear\_dynamic\_hints
+
+#### Signature
+
+```cpp
+FunctionResult & clear_dynamic_hints()
+```
+
+#### Returns
+
+`FunctionResult &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 285.
+
+***
+
+### connect
+
+#### Signature
+
+```cpp
+FunctionResult & connect(
+ const std::string & destination,
+ bool final = true,
+ const std::string & from_addr = ""
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Returns
+
+`FunctionResult &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 214.
+
+***
+
+### create\_payment\_action
+
+**Modifiers:** `static`
+
+#### Signature
+
+```cpp
+json create_payment_action(
+ const std::string & action_type,
+ const std::string & phrase
+)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 405.
+
+***
+
+### create\_payment\_parameter
+
+**Modifiers:** `static`
+
+#### Signature
+
+```cpp
+json create_payment_parameter(
+ const std::string & name,
+ const std::string & value
+)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 407.
+
+***
+
+### create\_payment\_prompt
+
+**Modifiers:** `static`
+
+#### Signature
+
+```cpp
+json create_payment_prompt(
+ const std::string & for_situation,
+ const std::vector< json > & actions,
+ const std::string & card_type = "",
+ const std::string & error_type = ""
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 401.
+
+***
+
+### enable\_extensive\_data
+
+#### Signature
+
+```cpp
+FunctionResult & enable_extensive_data(bool enabled = true)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`FunctionResult &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 290.
+
+***
+
+### enable\_functions\_on\_timeout
+
+#### Signature
+
+```cpp
+FunctionResult & enable_functions_on_timeout(bool enabled = true)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`FunctionResult &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 289.
+
+***
+
+### execute\_rpc
+
+#### Signature
+
+```cpp
+FunctionResult & execute_rpc(
+ const std::string & method,
+ const json & params = json::object(),
+ const std::string & call_id = "",
+ const std::string & node_id = ""
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+#### Returns
+
+`FunctionResult &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 385.
+
+***
+
+### execute\_swml
+
+#### Signature
+
+```cpp
+FunctionResult & execute_swml(const json & swml_content, bool transfer = false)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`FunctionResult &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 298.
+
+***
+
+### FunctionResult
+
+**Modifiers:** `explicit`
+
+#### Signature
+
+```cpp
+void FunctionResult(
+ const std::string & response = "",
+ bool post_process = false
+)
+```
+
+#### Parameters
+
+
+
+
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 199.
+
+***
+
+### hangup
+
+#### Signature
+
+```cpp
+FunctionResult & hangup()
+```
+
+#### Returns
+
+`FunctionResult &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 218.
+
+***
+
+### hold
+
+#### Signature
+
+```cpp
+FunctionResult & hold(int timeout = 300)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`FunctionResult &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 219.
+
+***
+
+### join\_conference
+
+Join an ad-hoc audio conference (SWML join\_conference). Full parity with Python core/function\_result.py: 18 optional params past name, 7 validations, and simple (bare-name) vs full-object emission.
+Flat positional overload — mirrors the Python signature 1:1 so the cross-language audit lines up on parameter count/types. The closed-set params are bare std::string (Python uses bare str); the options-struct overload below adds the typed enum class affordance.
+
+#### Signature
+
+
+
+ ```cpp
+ FunctionResult & join_conference(
+ const std::string & name,
+ bool muted = false,
+ const std::string & beep = "true",
+ bool start_on_enter = true,
+ bool end_on_exit = false,
+ std::optional< std::string > wait_url = std::nullopt,
+ int max_participants = 250,
+ const std::string & record = "do-not-record",
+ std::optional< std::string > region = std::nullopt,
+ const std::string & trim = "trim-silence",
+ std::optional< std::string > coach = std::nullopt,
+ std::optional< std::string > status_callback_event = std::nullopt,
+ std::optional< std::string > status_callback = std::nullopt,
+ const std::string & status_callback_method = "POST",
+ std::optional< std::string > recording_status_callback = std::nullopt,
+ const std::string & recording_status_callback_method = "POST",
+ const std::string & recording_status_callback_event = "completed",
+ std::optional< json > result = std::nullopt
+ )
+ ```
+
+
+
+ ```cpp
+ FunctionResult & join_conference(
+ const std::string & name,
+ const JoinConferenceOptions & opts
+ )
+ ```
+
+
+
+#### Parameters (Overload 1)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#### Parameters (Overload 2)
+
+
+
+
+
+#### Returns (Overload 1)
+
+`FunctionResult &`
+
+#### Returns (Overload 2)
+
+`FunctionResult &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 308.
+
+***
+
+### join\_room
+
+#### Signature
+
+```cpp
+FunctionResult & join_room(const std::string & name)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`FunctionResult &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 333.
+
+***
+
+### pay
+
+#### Signature
+
+```cpp
+FunctionResult & pay(
+ const std::string & payment_connector_url,
+ const std::string & input_method = "dtmf",
+ const std::string & status_url = "",
+ const std::string & payment_method = "credit-card",
+ int timeout = 5,
+ int max_attempts = 1,
+ bool security_code = true,
+ const std::string & postal_code = "true",
+ int min_postal_code_length = 0,
+ const std::string & token_type = "reusable",
+ const std::string & charge_amount = "",
+ const std::string & currency = "usd",
+ const std::string & language = "en-US",
+ const std::string & voice = "woman",
+ const std::string & description = "",
+ const std::string & valid_card_types = "visa mastercard amex",
+ const std::vector< json > & parameters = {},
+ const std::vector< json > & prompts = {},
+ const std::string & ai_response = "The payment status is ${pay_result}, do not mention anything else about collecting payment if successful."
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#### Returns
+
+`FunctionResult &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 360.
+
+***
+
+### play\_background\_file
+
+#### Signature
+
+```cpp
+FunctionResult & play_background_file(
+ const std::string & filename,
+ bool wait = false
+)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`FunctionResult &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 247.
+
+***
+
+### record\_call
+
+Typed overload — format/direction as the RecordFormat / RecordDirection closed-set enums for call-site typo checking. Declared after the std::string overload (equal arity) so the enumerator's dedup keeps the string signature canonical; normalizes the enums to their wire strings via record\_format\_value/record\_direction\_value and delegates to the std::string record\_call, so the emitted SWML is byte-identical.
+
+#### Signature
+
+
+
+ ```cpp
+ FunctionResult & record_call(
+ const std::string & control_id = "",
+ bool stereo = false,
+ const std::string & format = "wav",
+ const std::string & direction = "both",
+ const std::string & terminators = "",
+ bool beep = false,
+ double input_sensitivity = 44.0,
+ std::optional< double > initial_timeout = std::nullopt,
+ std::optional< double > end_silence_timeout = std::nullopt,
+ std::optional< double > max_length = std::nullopt,
+ const std::string & status_url = ""
+ )
+ ```
+
+
+
+ ```cpp
+ FunctionResult & record_call(
+ const std::string & control_id,
+ bool stereo,
+ RecordFormat format,
+ RecordDirection direction,
+ const std::string & terminators = "",
+ bool beep = false,
+ double input_sensitivity = 44.0,
+ std::optional< double > initial_timeout = std::nullopt,
+ std::optional< double > end_silence_timeout = std::nullopt,
+ std::optional< double > max_length = std::nullopt,
+ const std::string & status_url = ""
+ )
+ ```
+
+
+
+#### Parameters (Overload 1)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#### Parameters (Overload 2)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#### Returns (Overload 1)
+
+`FunctionResult &`
+
+#### Returns (Overload 2)
+
+`FunctionResult &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 249.
+
+***
+
+### remove\_global\_data
+
+#### Signature
+
+```cpp
+FunctionResult & remove_global_data(const json & keys)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`FunctionResult &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 230.
+
+***
+
+### remove\_metadata
+
+#### Signature
+
+```cpp
+FunctionResult & remove_metadata(const json & keys)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`FunctionResult &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 232.
+
+***
+
+### replace\_in\_history
+
+#### Signature
+
+```cpp
+FunctionResult & replace_in_history(const json & text)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`FunctionResult &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 240.
+
+***
+
+### rpc\_ai\_message
+
+#### Signature
+
+```cpp
+FunctionResult & rpc_ai_message(
+ const std::string & call_id,
+ const std::string & message_text,
+ const std::string & role = "system"
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Returns
+
+`FunctionResult &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 391.
+
+***
+
+### rpc\_ai\_unhold
+
+#### Signature
+
+```cpp
+FunctionResult & rpc_ai_unhold(const std::string & call_id)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`FunctionResult &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 393.
+
+***
+
+### rpc\_dial
+
+#### Signature
+
+```cpp
+FunctionResult & rpc_dial(
+ const std::string & to_number,
+ const std::string & from_number,
+ const std::string & dest_swml,
+ const std::string & device_type = "phone"
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+#### Returns
+
+`FunctionResult &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 388.
+
+***
+
+### say
+
+#### Signature
+
+```cpp
+FunctionResult & say(const std::string & text)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`FunctionResult &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 246.
+
+***
+
+### send\_sms
+
+#### Signature
+
+```cpp
+FunctionResult & send_sms(
+ const std::string & to,
+ const std::string & from,
+ const std::string & body = "",
+ const std::vector< std::string > & media = {},
+ const std::vector< std::string > & tags = {},
+ const std::string & region = ""
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+
+
+
+
+#### Returns
+
+`FunctionResult &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 355.
+
+***
+
+### set\_end\_of\_speech\_timeout
+
+#### Signature
+
+```cpp
+FunctionResult & set_end_of_speech_timeout(int milliseconds)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`FunctionResult &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 286.
+
+***
+
+### set\_metadata
+
+#### Signature
+
+```cpp
+FunctionResult & set_metadata(const json & data)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`FunctionResult &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 231.
+
+***
+
+### set\_post\_process
+
+#### Signature
+
+```cpp
+FunctionResult & set_post_process(bool pp)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`FunctionResult &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 206.
+
+***
+
+### set\_response
+
+#### Signature
+
+```cpp
+FunctionResult & set_response(const std::string & response)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`FunctionResult &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 205.
+
+***
+
+### set\_speech\_event\_timeout
+
+#### Signature
+
+```cpp
+FunctionResult & set_speech_event_timeout(int milliseconds)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`FunctionResult &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 287.
+
+***
+
+### simulate\_user\_input
+
+#### Signature
+
+```cpp
+FunctionResult & simulate_user_input(const std::string & text)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`FunctionResult &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 292.
+
+***
+
+### sip\_refer
+
+#### Signature
+
+```cpp
+FunctionResult & sip_refer(const std::string & to_uri)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`FunctionResult &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 334.
+
+***
+
+### stop
+
+#### Signature
+
+```cpp
+FunctionResult & stop()
+```
+
+#### Returns
+
+`FunctionResult &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 223.
+
+***
+
+### stop\_background\_file
+
+#### Signature
+
+```cpp
+FunctionResult & stop_background_file()
+```
+
+#### Returns
+
+`FunctionResult &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 248.
+
+***
+
+### stop\_record\_call
+
+#### Signature
+
+```cpp
+FunctionResult & stop_record_call(const std::string & control_id = "")
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`FunctionResult &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 278.
+
+***
+
+### stop\_tap
+
+#### Signature
+
+```cpp
+FunctionResult & stop_tap(const std::string & control_id = "")
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`FunctionResult &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 354.
+
+***
+
+### switch\_context
+
+#### Signature
+
+```cpp
+FunctionResult & switch_context(
+ const std::string & system_prompt = "",
+ const std::string & user_prompt = "",
+ bool consolidate = false,
+ bool full_reset = false
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+#### Returns
+
+`FunctionResult &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 236.
+
+***
+
+### swml\_change\_context
+
+#### Signature
+
+```cpp
+FunctionResult & swml_change_context(const std::string & context_name)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`FunctionResult &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 235.
+
+***
+
+### swml\_change\_step
+
+#### Signature
+
+```cpp
+FunctionResult & swml_change_step(const std::string & step_name)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`FunctionResult &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 234.
+
+***
+
+### swml\_transfer
+
+#### Signature
+
+```cpp
+FunctionResult & swml_transfer(
+ const std::string & dest,
+ const std::string & ai_response,
+ bool final = true
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Returns
+
+`FunctionResult &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 216.
+
+***
+
+### swml\_user\_event
+
+#### Signature
+
+```cpp
+FunctionResult & swml_user_event(const json & event_data)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`FunctionResult &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 233.
+
+***
+
+### tap
+
+Typed overload — direction/codec as the TapDirection / Codec closed-set enums for call-site typo checking. Declared after the std::string overload (equal arity) so the enumerator's dedup keeps the string signature canonical; normalizes the enums via tap\_direction\_value/codec\_value and delegates to the std::string tap, so the emitted SWML is byte-identical. NOTE the tap direction set is \{speak,hear,both\} (hear, not record\_call's listen).
+
+#### Signature
+
+
+
+ ```cpp
+ FunctionResult & tap(
+ const std::string & uri,
+ const std::string & control_id = "",
+ const std::string & direction = "both",
+ const std::string & codec = "PCMU",
+ int rtp_ptime = 20,
+ const std::string & status_url = ""
+ )
+ ```
+
+
+
+ ```cpp
+ FunctionResult & tap(
+ const std::string & uri,
+ const std::string & control_id,
+ TapDirection direction,
+ Codec codec,
+ int rtp_ptime = 20,
+ const std::string & status_url = ""
+ )
+ ```
+
+
+
+#### Parameters (Overload 1)
+
+
+
+
+
+
+
+
+
+
+
+
+
+#### Parameters (Overload 2)
+
+
+
+
+
+
+
+
+
+
+
+
+
+#### Returns (Overload 1)
+
+`FunctionResult &`
+
+#### Returns (Overload 2)
+
+`FunctionResult &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 335.
+
+***
+
+### to\_json
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+json to_json() const
+```
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 418.
+
+***
+
+### to\_string
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+std::string to_string(int indent = -1) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 419.
+
+***
+
+### toggle\_functions
+
+#### Signature
+
+```cpp
+FunctionResult & toggle_functions(const json & function_toggles)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`FunctionResult &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 288.
+
+***
+
+### update\_global\_data
+
+#### Signature
+
+```cpp
+FunctionResult & update_global_data(const json & data)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`FunctionResult &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 229.
+
+***
+
+### update\_settings
+
+#### Signature
+
+```cpp
+FunctionResult & update_settings(const json & settings)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`FunctionResult &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 291.
+
+***
+
+### wait\_for\_user
+
+#### Signature
+
+```cpp
+FunctionResult & wait_for_user(
+ std::optional< bool > enabled = std::nullopt,
+ std::optional< int > timeout = std::nullopt,
+ bool answer_first = false
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Returns
+
+`FunctionResult &`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 220.
+
+## Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 197.
diff --git a/fern/products/sdk-reference/cpp/agents/swaig/index.mdx b/fern/products/sdk-reference/cpp/agents/swaig/index.mdx
new file mode 100644
index 0000000000..9859812ae3
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/swaig/index.mdx
@@ -0,0 +1,721 @@
+---
+slug: "/reference/cpp/agents/swaig"
+title: "swaig"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "module"
+ language: "cpp"
+ qualified_name: "signalwire::swaig"
+ parent: "agents"
+ module: "agents"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp"
+---
+# `swaig`
+
+## Signature
+
+```cpp
+namespace signalwire::swaig
+```
+
+## Classes
+
+
+
+ A closed-set field that accepts EITHER the typed enum OR a bare string. JoinConferenceOptions::beep = ConferenceBeep::OnEnter; and ... = "onEnter"; both compile and resolve to the same wire string; the open-string path keeps parity with Python's bare str (the validation in join\_conference then rejects out-of-set strings exactly as Python does). Templated on the enum type plus its \*\_value() mapper so one definition covers all four sets.
+
+
+
+ Builder for SWAIG function results with 40+ action methods. Every method returns \*this for chaining.
+
+
+
+ Options bag for FunctionResult::join\_conference. Every field is std::optional and unset means "Python default" — so a default-constructed JoinConferenceOptions collapses to the bare conference-name string form, matching the reference's simple case. Closed sets use the enum-or-string wrapper above; open fields are plain std::optional. result is a free-form json (Python's Optional\[Any]).
+
+
+
+ A typed, fluent builder for a SWAIG tool's parameters JSON-Schema object. Construct, chain property declarations, optionally mark some required, then call to\_json() to get the wire json. The result is byte-identical to the equivalent hand-written json::object(...) blob.
+
+
+
+ Definition of a SWAIG tool (function).
+
+
+
+## Functions
+
+### callback\_method\_value
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+std::string callback_method_value(CallbackMethod v)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 60.
+
+***
+
+### codec\_value
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+std::string codec_value(Codec v)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 131.
+
+***
+
+### codec\_values
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+std::vector< std::string > codec_values()
+```
+
+#### Returns
+
+`std::vector< std::string >`
+
+#### Source
+
+[`include/signalwire/swaig/parameter_schema.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/parameter_schema.hpp)
+
+Line 79.
+
+***
+
+### conference\_beep\_value
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+std::string conference_beep_value(ConferenceBeep v)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 37.
+
+***
+
+### conference\_record\_value
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+std::string conference_record_value(ConferenceRecord v)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 46.
+
+***
+
+### conference\_trim\_value
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+std::string conference_trim_value(ConferenceTrim v)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 53.
+
+***
+
+### record\_direction\_value
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+std::string record_direction_value(RecordDirection v)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 115.
+
+***
+
+### record\_direction\_values
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+std::vector< std::string > record_direction_values()
+```
+
+#### Returns
+
+`std::vector< std::string >`
+
+#### Source
+
+[`include/signalwire/swaig/parameter_schema.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/parameter_schema.hpp)
+
+Line 69.
+
+***
+
+### record\_format\_value
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+std::string record_format_value(RecordFormat v)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 107.
+
+***
+
+### record\_format\_values
+
+Helper: the closed-set values for the Tier-1 SWAIG enums, as the exact wire strings, ready to hand to enum\_of(...). These reuse the SAME \*\_value() normalization point as the typed FunctionResult overloads, so a schema built with record\_format\_values() lists precisely the strings FunctionResult::record\_call accepts — one source of truth for each set.
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+std::vector< std::string > record_format_values()
+```
+
+#### Returns
+
+`std::vector< std::string >`
+
+#### Source
+
+[`include/signalwire/swaig/parameter_schema.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/parameter_schema.hpp)
+
+Line 64.
+
+***
+
+### tap\_direction\_value
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+std::string tap_direction_value(TapDirection v)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 123.
+
+***
+
+### tap\_direction\_values
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+std::vector< std::string > tap_direction_values()
+```
+
+#### Returns
+
+`std::vector< std::string >`
+
+#### Source
+
+[`include/signalwire/swaig/parameter_schema.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/parameter_schema.hpp)
+
+Line 74.
+
+***
+
+### to\_string
+
+ADL to\_string overloads so these enums stringify the same way the \*\_value() mappers do (the single wire-string normalization point).
+
+**Modifiers:** `inline`
+
+#### Signature
+
+
+
+ ```cpp
+ std::string to_string(RecordFormat v)
+ ```
+
+
+
+ ```cpp
+ std::string to_string(RecordDirection v)
+ ```
+
+
+
+ ```cpp
+ std::string to_string(TapDirection v)
+ ```
+
+
+
+ ```cpp
+ std::string to_string(Codec v)
+ ```
+
+
+
+#### Parameters (Overload 1)
+
+
+
+#### Parameters (Overload 2)
+
+
+
+#### Parameters (Overload 3)
+
+
+
+#### Parameters (Overload 4)
+
+
+
+#### Returns (Overload 1)
+
+`std::string`
+
+#### Returns (Overload 2)
+
+`std::string`
+
+#### Returns (Overload 3)
+
+`std::string`
+
+#### Returns (Overload 4)
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 141.
+
+## Type Aliases
+
+### BeepField
+
+#### Signature
+
+```cpp
+typedef EnumOrString< ConferenceBeep, &conference_beep_value > BeepField
+```
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 163.
+
+***
+
+### json
+
+#### Signature
+
+```cpp
+typedef nlohmann::json json
+```
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 11.
+
+***
+
+### MethodField
+
+#### Signature
+
+```cpp
+typedef EnumOrString< CallbackMethod, &callback_method_value > MethodField
+```
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 166.
+
+***
+
+### RecordField
+
+#### Signature
+
+```cpp
+typedef EnumOrString< ConferenceRecord, &conference_record_value > RecordField
+```
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 164.
+
+***
+
+### ToolHandler
+
+#### Signature
+
+```cpp
+typedef std::function< FunctionResult(const json &args, const json &raw_data)> ToolHandler
+```
+
+#### Source
+
+[`include/signalwire/swaig/tool_definition.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/tool_definition.hpp)
+
+Line 12.
+
+***
+
+### TrimField
+
+#### Signature
+
+```cpp
+typedef EnumOrString< ConferenceTrim, &conference_trim_value > TrimField
+```
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 165.
+
+## Enums
+
+### CallbackMethod
+
+status\_callback\_method / recording\_status\_callback\_method — HTTP verb.
+
+#### Signature
+
+```cpp
+enum class CallbackMethod
+```
+
+#### Variants
+
+
+
+
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 32.
+
+***
+
+### Codec
+
+Media codec for FunctionResult::tap (SWAIG tap only). Mirrors the reference's codec in \{"PCMU","PCMA"\} validation. The wire strings are upper-case. Distinct from the wider RELAY codec set — do not unify.
+
+#### Signature
+
+```cpp
+enum class Codec
+```
+
+#### Variants
+
+
+
+
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 105.
+
+***
+
+### ConferenceBeep
+
+beep — when the conference plays an enter/leave tone.
+
+#### Signature
+
+```cpp
+enum class ConferenceBeep
+```
+
+#### Variants
+
+
+
+
+
+
+
+
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 26.
+
+***
+
+### ConferenceRecord
+
+record — conference recording mode.
+
+#### Signature
+
+```cpp
+enum class ConferenceRecord
+```
+
+#### Variants
+
+
+
+
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 28.
+
+***
+
+### ConferenceTrim
+
+trim — leading/trailing silence handling on recordings.
+
+#### Signature
+
+```cpp
+enum class ConferenceTrim
+```
+
+#### Variants
+
+
+
+
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 30.
+
+***
+
+### RecordDirection
+
+Audio direction for FunctionResult::record\_call. Mirrors the reference's direction in \{"speak","listen","both"\} validation. NOTE: differs from TapDirection — record\_call uses listen, tap uses hear.
+
+#### Signature
+
+```cpp
+enum class RecordDirection
+```
+
+#### Variants
+
+
+
+
+
+
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 95.
+
+***
+
+### RecordFormat
+
+Recording container format for FunctionResult::record\_call. Mirrors the reference's format in \{"wav","mp3","mp4"\} validation.
+
+#### Signature
+
+```cpp
+enum class RecordFormat
+```
+
+#### Variants
+
+
+
+
+
+
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 90.
+
+***
+
+### TapDirection
+
+Audio direction for FunctionResult::tap. Mirrors the reference's direction in \{"speak","hear","both"\} validation. NOTE: differs from RecordDirection — tap uses hear, record\_call uses listen.
+
+#### Signature
+
+```cpp
+enum class TapDirection
+```
+
+#### Variants
+
+
+
+
+
+
+
+#### Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 100.
+
+## Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 9.
diff --git a/fern/products/sdk-reference/cpp/agents/swaig/join-conference-options/index.mdx b/fern/products/sdk-reference/cpp/agents/swaig/join-conference-options/index.mdx
new file mode 100644
index 0000000000..16d018e17f
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/swaig/join-conference-options/index.mdx
@@ -0,0 +1,67 @@
+---
+slug: "/reference/cpp/agents/swaig/join-conference-options"
+title: "JoinConferenceOptions"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::swaig::JoinConferenceOptions"
+ parent: "signalwire::swaig"
+ module: "agents.swaig"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp"
+ visibility: "public"
+---
+# `JoinConferenceOptions`
+
+Options bag for FunctionResult::join\_conference.
+Every field is std::optional and unset means "Python default" — so a default-constructed JoinConferenceOptions collapses to the bare conference-name string form, matching the reference's simple case. Closed sets use the enum-or-string wrapper above; open fields are plain std::optional. result is a free-form json (Python's Optional\[Any]).
+
+## Signature
+
+```cpp
+struct signalwire::swaig::JoinConferenceOptions
+```
+
+## Properties
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Source
+
+[`include/signalwire/swaig/function_result.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/function_result.hpp)
+
+Line 175.
diff --git a/fern/products/sdk-reference/cpp/agents/swaig/parameter-schema/index.mdx b/fern/products/sdk-reference/cpp/agents/swaig/parameter-schema/index.mdx
new file mode 100644
index 0000000000..e46434af75
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/swaig/parameter-schema/index.mdx
@@ -0,0 +1,492 @@
+---
+slug: "/reference/cpp/agents/swaig/parameter-schema"
+title: "ParameterSchema"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::swaig::ParameterSchema"
+ parent: "signalwire::swaig"
+ module: "agents.swaig"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/parameter_schema.hpp"
+ visibility: "public"
+---
+# `ParameterSchema`
+
+A typed, fluent builder for a SWAIG tool's parameters JSON-Schema object.
+Construct, chain property declarations, optionally mark some required, then call to\_json() to get the wire json. The result is byte-identical to the equivalent hand-written json::object(...) blob.
+
+## Signature
+
+```cpp
+class signalwire::swaig::ParameterSchema
+```
+
+## Methods
+
+### array\_of
+
+Add a "type":"array" property whose items are the given scalar JSON kind (e.g. array\_of("tags", "string", "...") → \{"type":"array", "items":\{"type":"string"\}\}).
+
+**Modifiers:** `inline`
+
+#### Signature
+
+
+
+ ```cpp
+ ParameterSchema & array_of(
+ const std::string & name,
+ const std::string & item_type,
+ const std::string & description = ""
+ )
+ ```
+
+
+
+ ```cpp
+ ParameterSchema & array_of(
+ const std::string & name,
+ const ParameterSchema & item_schema,
+ const std::string & description = ""
+ )
+ ```
+
+
+
+#### Parameters (Overload 1)
+
+
+
+
+
+
+
+#### Parameters (Overload 2)
+
+
+
+
+
+
+
+#### Returns (Overload 1)
+
+`ParameterSchema &`
+
+#### Returns (Overload 2)
+
+`ParameterSchema &`
+
+#### Source
+
+[`include/signalwire/swaig/parameter_schema.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/parameter_schema.hpp)
+
+Line 147.
+
+***
+
+### boolean
+
+Add a "type":"boolean" property.
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+ParameterSchema & boolean(
+ const std::string & name,
+ const std::string & description = ""
+)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`ParameterSchema &`
+
+#### Source
+
+[`include/signalwire/swaig/parameter_schema.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/parameter_schema.hpp)
+
+Line 116.
+
+***
+
+### empty
+
+True if no properties have been declared yet.
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+bool empty() const
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/swaig/parameter_schema.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/parameter_schema.hpp)
+
+Line 246.
+
+***
+
+### enum\_of
+
+Add a "type":"string" property constrained to a closed set of values ("enum":\[...]). Pass the values explicitly, or feed one of the Tier-1 helpers (record\_format\_values(), codec\_values(), …) so the schema's accepted set matches the typed FunctionResult overloads exactly — INTEGRATING the RecordFormat/RecordDirection/TapDirection/ Codec enums via their \*\_value() wire strings.
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+ParameterSchema & enum_of(
+ const std::string & name,
+ const std::vector< std::string > & values,
+ const std::string & description = ""
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Returns
+
+`ParameterSchema &`
+
+#### Source
+
+[`include/signalwire/swaig/parameter_schema.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/parameter_schema.hpp)
+
+Line 129.
+
+***
+
+### integer
+
+Add a "type":"integer" property.
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+ParameterSchema & integer(
+ const std::string & name,
+ const std::string & description = ""
+)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`ParameterSchema &`
+
+#### Source
+
+[`include/signalwire/swaig/parameter_schema.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/parameter_schema.hpp)
+
+Line 110.
+
+***
+
+### number
+
+Add a "type":"number" property (JSON number — floating point).
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+ParameterSchema & number(
+ const std::string & name,
+ const std::string & description = ""
+)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`ParameterSchema &`
+
+#### Source
+
+[`include/signalwire/swaig/parameter_schema.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/parameter_schema.hpp)
+
+Line 104.
+
+***
+
+### object\_of
+
+Add a nested "type":"object" property, whose properties/required come from another ParameterSchema. The nested schema is rendered via to\_json() and merged with this property's description, producing the same \{"type":"object","properties":\{...\},"required":\[...]\} a hand-written nested blob would.
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+ParameterSchema & object_of(
+ const std::string & name,
+ const ParameterSchema & nested,
+ const std::string & description = ""
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Returns
+
+`ParameterSchema &`
+
+#### Source
+
+[`include/signalwire/swaig/parameter_schema.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/parameter_schema.hpp)
+
+Line 179.
+
+***
+
+### operator json
+
+Implicit conversion so a ParameterSchema can be passed straight to define\_tool(name, desc, schema, handler) (which takes const json&) without an explicit .to\_json(). Keeps the typed builder a drop-in for the raw-json parameter.
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+void operator json() const
+```
+
+#### Source
+
+[`include/signalwire/swaig/parameter_schema.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/parameter_schema.hpp)
+
+Line 241.
+
+***
+
+### ParameterSchema
+
+#### Signature
+
+```cpp
+void ParameterSchema()
+```
+
+#### Source
+
+[`include/signalwire/swaig/parameter_schema.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/parameter_schema.hpp)
+
+Line 91.
+
+***
+
+### property
+
+Add a property from a raw, pre-built JSON-Schema fragment, for shapes the typed kinds above don't cover (custom format, minimum, oneOf, …). Keeps the builder a strict superset of the hand-written path: you can always drop down to raw json for one property without abandoning the builder for the rest.
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+ParameterSchema & property(const std::string & name, const json & schema)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`ParameterSchema &`
+
+#### Source
+
+[`include/signalwire/swaig/parameter_schema.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/parameter_schema.hpp)
+
+Line 195.
+
+***
+
+### require
+
+Append a single name to the required list (additive variant).
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+ParameterSchema & require(const std::string & name)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`ParameterSchema &`
+
+#### Source
+
+[`include/signalwire/swaig/parameter_schema.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/parameter_schema.hpp)
+
+Line 211.
+
+***
+
+### required
+
+Mark one or more declared properties as required. Replaces any previously-set required list (call once with the full set, mirroring the single "required":\[...] array in the hand-written form).
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+ParameterSchema & required(const std::vector< std::string > & names)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`ParameterSchema &`
+
+#### Source
+
+[`include/signalwire/swaig/parameter_schema.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/parameter_schema.hpp)
+
+Line 205.
+
+***
+
+### size
+
+Number of declared properties.
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+std::size_t size() const
+```
+
+#### Returns
+
+`std::size_t`
+
+#### Source
+
+[`include/signalwire/swaig/parameter_schema.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/parameter_schema.hpp)
+
+Line 249.
+
+***
+
+### string
+
+Add a "type":"string" property.
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+ParameterSchema & string(
+ const std::string & name,
+ const std::string & description = ""
+)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`ParameterSchema &`
+
+#### Source
+
+[`include/signalwire/swaig/parameter_schema.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/parameter_schema.hpp)
+
+Line 98.
+
+***
+
+### to\_json
+
+Render to the wire json: a JSON-Schema object with properties and (when any were marked) required. BYTE-IDENTICAL to the equivalent hand-written json::object(\{\{"type","object"\},\{"properties",\{...\}\}, \{"required",\[...]\}\}).
+\[\[nodiscard]]: the rendered schema is the builder's whole output; discarding it discards the build.
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json to_json() const
+```
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/swaig/parameter_schema.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/parameter_schema.hpp)
+
+Line 225.
+
+## Source
+
+[`include/signalwire/swaig/parameter_schema.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/parameter_schema.hpp)
+
+Line 89.
diff --git a/fern/products/sdk-reference/cpp/agents/swaig/tool-definition/index.mdx b/fern/products/sdk-reference/cpp/agents/swaig/tool-definition/index.mdx
new file mode 100644
index 0000000000..d2df9cb468
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/swaig/tool-definition/index.mdx
@@ -0,0 +1,70 @@
+---
+slug: "/reference/cpp/agents/swaig/tool-definition"
+title: "ToolDefinition"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::swaig::ToolDefinition"
+ parent: "signalwire::swaig"
+ module: "agents.swaig"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/tool_definition.hpp"
+ visibility: "public"
+---
+# `ToolDefinition`
+
+Definition of a SWAIG tool (function).
+
+## Signature
+
+```cpp
+struct signalwire::swaig::ToolDefinition
+```
+
+## Properties
+
+
+
+
+
+
+
+
+
+
+
+## Methods
+
+### to\_swaig\_json
+
+Render to the SWAIG function JSON format (for inclusion in SWML) \[\[nodiscard]]: the rendered JSON is the output; discarding it is a bug.
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json to_swaig_json(const std::string & web_hook_url = "") const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/swaig/tool_definition.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/tool_definition.hpp)
+
+Line 24.
+
+## Source
+
+[`include/signalwire/swaig/tool_definition.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swaig/tool_definition.hpp)
+
+Line 15.
diff --git a/fern/products/sdk-reference/cpp/agents/swml/document/index.mdx b/fern/products/sdk-reference/cpp/agents/swml/document/index.mdx
new file mode 100644
index 0000000000..e542985701
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/swml/document/index.mdx
@@ -0,0 +1,274 @@
+---
+slug: "/reference/cpp/agents/swml/document"
+title: "Document"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::swml::Document"
+ parent: "signalwire::swml"
+ module: "agents.swml"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/document.hpp"
+ visibility: "public"
+---
+# `Document`
+
+A complete SWML document with version and sections.
+
+## Signature
+
+```cpp
+class signalwire::swml::Document
+```
+
+## Methods
+
+### add\_verb
+
+Add a verb to the main section.
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+Document & add_verb(const std::string & verb_name, const json & params)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`Document &`
+
+#### Source
+
+[`include/signalwire/swml/document.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/document.hpp)
+
+Line 81.
+
+***
+
+### add\_verb\_to\_section
+
+Add a verb to a specific section.
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+Document & add_verb_to_section(
+ const std::string & section_name,
+ const std::string & verb_name,
+ const json & params
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Returns
+
+`Document &`
+
+#### Source
+
+[`include/signalwire/swml/document.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/document.hpp)
+
+Line 87.
+
+***
+
+### Document
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void Document()
+```
+
+#### Source
+
+[`include/signalwire/swml/document.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/document.hpp)
+
+Line 55.
+
+***
+
+### has\_section
+
+Check if a section exists.
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+bool has_section(const std::string & name) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/swml/document.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/document.hpp)
+
+Line 95.
+
+***
+
+### main
+
+Get the main section.
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+Section & main()
+```
+
+#### Returns
+
+`Section &`
+
+#### Source
+
+[`include/signalwire/swml/document.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/document.hpp)
+
+Line 76.
+
+***
+
+### section
+
+Get or create a section by name.
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+Section & section(const std::string & name)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Section &`
+
+#### Source
+
+[`include/signalwire/swml/document.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/document.hpp)
+
+Line 66.
+
+***
+
+### set\_version
+
+Set the document version.
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+Document & set_version(const std::string & version)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Document &`
+
+#### Source
+
+[`include/signalwire/swml/document.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/document.hpp)
+
+Line 60.
+
+***
+
+### to\_json
+
+Render to JSON.
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json to_json() const
+```
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/swml/document.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/document.hpp)
+
+Line 100.
+
+***
+
+### to\_string
+
+Render to JSON string.
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+std::string to_string(int indent = -1) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/swml/document.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/document.hpp)
+
+Line 124.
+
+## Source
+
+[`include/signalwire/swml/document.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/document.hpp)
+
+Line 53.
diff --git a/fern/products/sdk-reference/cpp/agents/swml/index.mdx b/fern/products/sdk-reference/cpp/agents/swml/index.mdx
new file mode 100644
index 0000000000..e8c1f84a09
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/swml/index.mdx
@@ -0,0 +1,97 @@
+---
+slug: "/reference/cpp/agents/swml"
+title: "swml"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "module"
+ language: "cpp"
+ qualified_name: "signalwire::swml"
+ parent: "agents"
+ module: "agents"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/document.hpp"
+---
+# `swml`
+
+## Signature
+
+```cpp
+namespace signalwire::swml
+```
+
+## Constants
+
+
+
+## Classes
+
+
+
+ A complete SWML document with version and sections.
+
+
+
+ Schema loader that extracts verb definitions from schema.json.
+
+
+
+ A named section containing an ordered list of verbs.
+
+
+
+ Base SWML service providing HTTP server, auth, and verb methods. Also hosts SWAIG functions: any Service (sidecar, non-agent verb host) can register tools and serve them on /swaig without subclassing AgentBase.
+
+
+
+ Represents a single SWML verb instance, e.g. \{"answer": \{"max\_duration": 3600\}\}.
+
+
+
+ Represents a verb definition extracted from the SWML schema.
+
+
+
+## Functions
+
+### get\_embedded\_schema
+
+Get the embedded schema JSON string.
+
+#### Signature
+
+```cpp
+const std::string & get_embedded_schema()
+```
+
+#### Returns
+
+`const std::string &`
+
+#### Source
+
+[`src/swml/schema.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/swml/schema.cpp)
+
+Line 52.
+
+## Type Aliases
+
+### json
+
+#### Signature
+
+```cpp
+typedef nlohmann::json json
+```
+
+#### Source
+
+[`include/signalwire/swml/document.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/document.hpp)
+
+Line 12.
+
+## Source
+
+[`include/signalwire/swml/document.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/document.hpp)
+
+Line 10.
diff --git a/fern/products/sdk-reference/cpp/agents/swml/schema/index.mdx b/fern/products/sdk-reference/cpp/agents/swml/schema/index.mdx
new file mode 100644
index 0000000000..712d29ae12
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/swml/schema/index.mdx
@@ -0,0 +1,220 @@
+---
+slug: "/reference/cpp/agents/swml/schema"
+title: "Schema"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::swml::Schema"
+ parent: "signalwire::swml"
+ module: "agents.swml"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/schema.hpp"
+ visibility: "public"
+---
+# `Schema`
+
+Schema loader that extracts verb definitions from schema.json.
+
+## Signature
+
+```cpp
+class signalwire::swml::Schema
+```
+
+## Methods
+
+### find\_verb
+
+Get a specific verb definition by verb name.
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+const VerbDefinition * find_verb(const std::string & verb_name) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`const VerbDefinition *`
+
+#### Source
+
+[`include/signalwire/swml/schema.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/schema.hpp)
+
+Line 41.
+
+***
+
+### load\_embedded
+
+Load the embedded schema.
+
+#### Signature
+
+```cpp
+bool load_embedded()
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/swml/schema.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/schema.hpp)
+
+Line 35.
+
+***
+
+### load\_from\_file
+
+Load schema from a file path.
+
+#### Signature
+
+```cpp
+bool load_from_file(const std::string & path)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/swml/schema.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/schema.hpp)
+
+Line 32.
+
+***
+
+### load\_from\_string
+
+Load schema from a JSON string.
+
+#### Signature
+
+```cpp
+bool load_from_string(const std::string & schema_json)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/swml/schema.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/schema.hpp)
+
+Line 29.
+
+***
+
+### raw
+
+Get the raw schema JSON.
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const json & raw() const
+```
+
+#### Returns
+
+`const json &`
+
+#### Source
+
+[`include/signalwire/swml/schema.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/schema.hpp)
+
+Line 47.
+
+***
+
+### Schema
+
+#### Signature
+
+```cpp
+void Schema()
+```
+
+#### Source
+
+[`include/signalwire/swml/schema.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/schema.hpp)
+
+Line 24.
+
+***
+
+### verb\_definitions
+
+Get all verb definitions.
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const std::vector< VerbDefinition > & verb_definitions() const
+```
+
+#### Returns
+
+`const std::vector< VerbDefinition > &`
+
+#### Source
+
+[`include/signalwire/swml/schema.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/schema.hpp)
+
+Line 38.
+
+***
+
+### verb\_names
+
+Get all verb names.
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+std::vector< std::string > verb_names() const
+```
+
+#### Returns
+
+`std::vector< std::string >`
+
+#### Source
+
+[`include/signalwire/swml/schema.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/schema.hpp)
+
+Line 44.
+
+## Source
+
+[`include/signalwire/swml/schema.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/schema.hpp)
+
+Line 22.
diff --git a/fern/products/sdk-reference/cpp/agents/swml/section/index.mdx b/fern/products/sdk-reference/cpp/agents/swml/section/index.mdx
new file mode 100644
index 0000000000..271793a8cc
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/swml/section/index.mdx
@@ -0,0 +1,126 @@
+---
+slug: "/reference/cpp/agents/swml/section"
+title: "Section"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::swml::Section"
+ parent: "signalwire::swml"
+ module: "agents.swml"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/document.hpp"
+ visibility: "public"
+---
+# `Section`
+
+A named section containing an ordered list of verbs.
+
+## Signature
+
+```cpp
+struct signalwire::swml::Section
+```
+
+## Properties
+
+
+
+
+
+## Methods
+
+### add\_verb
+
+**Modifiers:** `inline`
+
+#### Signature
+
+
+
+ ```cpp
+ void add_verb(const Verb & verb)
+ ```
+
+
+
+ ```cpp
+ void add_verb(const std::string & verb_name, const json & params)
+ ```
+
+
+
+#### Parameters (Overload 1)
+
+
+
+#### Parameters (Overload 2)
+
+
+
+
+
+#### Source
+
+[`include/signalwire/swml/document.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/document.hpp)
+
+Line 35.
+
+***
+
+### Section
+
+#### Signature
+
+
+
+ ```cpp
+ void Section()
+ ```
+
+
+
+ ```cpp
+ void Section(std::string n)
+ ```
+
+
+
+#### Parameters (Overload 2)
+
+
+
+#### Source
+
+[`include/signalwire/swml/document.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/document.hpp)
+
+Line 32.
+
+***
+
+### to\_json
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json to_json() const
+```
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/swml/document.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/document.hpp)
+
+Line 43.
+
+## Source
+
+[`include/signalwire/swml/document.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/document.hpp)
+
+Line 28.
diff --git a/fern/products/sdk-reference/cpp/agents/swml/service/index.mdx b/fern/products/sdk-reference/cpp/agents/swml/service/index.mdx
new file mode 100644
index 0000000000..7fb5961bb6
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/swml/service/index.mdx
@@ -0,0 +1,2134 @@
+---
+slug: "/reference/cpp/agents/swml/service"
+title: "Service"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::swml::Service"
+ parent: "signalwire::swml"
+ module: "agents.swml"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp"
+ visibility: "public"
+---
+# `Service`
+
+Base SWML service providing HTTP server, auth, and verb methods. Also hosts SWAIG functions: any Service (sidecar, non-agent verb host) can register tools and serve them on /swaig without subclassing AgentBase.
+
+## Signature
+
+```cpp
+class signalwire::swml::Service
+```
+
+## Methods
+
+### ~Service
+
+**Modifiers:** `virtual`
+
+#### Signature
+
+```cpp
+void ~Service()
+```
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 36.
+
+***
+
+### add\_security\_headers
+
+Add security headers to response.
+
+**Modifiers:** `static`
+
+#### Signature
+
+```cpp
+void add_security_headers(httplib::Response & res)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 275.
+
+***
+
+### add\_verb
+
+#### Signature
+
+```cpp
+Service & add_verb(
+ const std::string & section,
+ const std::string & verb_name,
+ const json & params
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Returns
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 131.
+
+***
+
+### ai
+
+#### Signature
+
+```cpp
+Service & ai(const json & params = json::object())
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 89.
+
+***
+
+### amazon\_bedrock
+
+#### Signature
+
+```cpp
+Service & amazon_bedrock(const json & params = json::object())
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 90.
+
+***
+
+### answer
+
+#### Signature
+
+```cpp
+Service & answer(const json & params = json::object())
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 88.
+
+***
+
+### auth\_password
+
+Get the password for basic auth.
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const std::string & auth_password() const
+```
+
+#### Returns
+
+`const std::string &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 63.
+
+***
+
+### auth\_username
+
+Get the username for basic auth.
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const std::string & auth_username() const
+```
+
+#### Returns
+
+`const std::string &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 60.
+
+***
+
+### build\_tool\_registry\_json
+
+Build the introspect payload for the registered tools as a JSON string shaped like \{"tools":\[\]\}. Iterates tool\_order\_ first, falling back to map order for entries registered only via register\_swaig\_function. Stable across SDKs so the swaig-test --example CLI can parse output uniformly. Used by the SWAIG\_LIST\_TOOLS env-var path; pulled out as a separate helper so tests can assert content without invoking exit().
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+std::string build_tool_registry_json() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 204.
+
+***
+
+### cond
+
+#### Signature
+
+```cpp
+Service & cond(const json & params = json::array())
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 91.
+
+***
+
+### connect
+
+#### Signature
+
+```cpp
+Service & connect(const json & params = json::object())
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 92.
+
+***
+
+### define\_tool
+
+Define a SWAIG function the AI can call.
+
+#### Signature
+
+
+
+ ```cpp
+ Service & define_tool(
+ const std::string & name,
+ const std::string & description,
+ const json & parameters,
+ swaig::ToolHandler handler,
+ bool secure = false
+ )
+ ```
+
+
+
+ ```cpp
+ Service & define_tool(const swaig::ToolDefinition & tool)
+ ```
+
+
+
+#### Parameters (Overload 1)
+
+
+
+
+
+
+
+
+
+
+
+#### Parameters (Overload 2)
+
+
+
+#### Returns (Overload 1)
+
+`Service &`
+
+#### Returns (Overload 2)
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 156.
+
+***
+
+### denoise
+
+#### Signature
+
+```cpp
+Service & denoise(const json & params = json::object())
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 93.
+
+***
+
+### detect\_machine
+
+#### Signature
+
+```cpp
+Service & detect_machine(const json & params = json::object())
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 94.
+
+***
+
+### document
+
+Get the underlying SWML document.
+
+**Modifiers:** `inline`
+
+#### Signature
+
+
+
+ ```cpp
+ Document & document()
+ ```
+
+
+
+ ```cpp
+ const Document & document() const
+ ```
+
+
+
+#### Returns (Overload 1)
+
+`Document &`
+
+#### Returns (Overload 2)
+
+`const Document &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 138.
+
+***
+
+### enter\_queue
+
+#### Signature
+
+```cpp
+Service & enter_queue(const json & params = json::object())
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 95.
+
+***
+
+### execute
+
+#### Signature
+
+```cpp
+Service & execute(const json & params = json::object())
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 96.
+
+***
+
+### extract\_introspect\_payload
+
+Pure-string extractor: slice the JSON payload between **SWAIG\_TOOLS\_BEGIN** and **SWAIG\_TOOLS\_END** sentinels in a captured stdout. Returns empty string if either marker is missing or the order is wrong. Static so the swaig-test CLI / tests can reuse it.
+
+**Modifiers:** `static`
+
+#### Signature
+
+```cpp
+std::string extract_introspect_payload(const std::string & stdout_capture)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 209.
+
+***
+
+### generate\_random\_hex
+
+Generate a random hex string of given byte length.
+
+**Modifiers:** `static`
+
+#### Signature
+
+```cpp
+std::string generate_random_hex(size_t bytes)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 228.
+
+***
+
+### get\_all\_functions
+
+Snapshot of all registered SWAIG functions keyed by name. Returned by value so subsequent registrations don't mutate the snapshot. Python parity: ToolRegistry.get\_all\_functions.
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+std::map< std::string, swaig::ToolDefinition > get_all_functions() const
+```
+
+#### Returns
+
+`std::map< std::string, swaig::ToolDefinition >`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 190.
+
+***
+
+### get\_basic\_auth\_credentials
+
+Get (user, password) — Python-canonical name. Python parity: AuthMixin.get\_basic\_auth\_credentials.
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+std::pair< std::string, std::string > get_basic_auth_credentials() const
+```
+
+#### Returns
+
+`std::pair< std::string, std::string >`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 76.
+
+***
+
+### get\_basic\_auth\_credentials\_with\_source
+
+Get (user, password, source) where source is one of "provided", "environment", or "generated". Python parity: AuthMixin.get\_basic\_auth\_credentials(include\_source=True).
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+std::tuple< std::string, std::string, std::string > get_basic_auth_credentials_with_source() const
+```
+
+#### Returns
+
+`std::tuple< std::string, std::string, std::string >`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 82.
+
+***
+
+### get\_function
+
+Get a registered SWAIG function definition by name. Returns nullptr when no such function is registered. Python parity: ToolRegistry.get\_function.
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+const swaig::ToolDefinition * get_function(const std::string & name) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`const swaig::ToolDefinition *`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 185.
+
+***
+
+### goto\_section
+
+#### Signature
+
+```cpp
+Service & goto_section(const json & params = json::object())
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 97.
+
+***
+
+### handle\_swaig\_endpoint
+
+Handle GET/POST /swaig (lifted from AgentBase).
+
+#### Signature
+
+```cpp
+void handle_swaig_endpoint(
+ const httplib::Request & req,
+ httplib::Response & res
+)
+```
+
+#### Parameters
+
+
+
+
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 281.
+
+***
+
+### hangup
+
+#### Signature
+
+```cpp
+Service & hangup(const json & params = json::object())
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 98.
+
+***
+
+### has\_function
+
+Whether a SWAIG function with the given name is registered. Python parity: ToolRegistry.has\_function.
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+bool has_function(const std::string & name) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 180.
+
+***
+
+### has\_tool
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+bool has_tool(const std::string & name) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 171.
+
+***
+
+### join\_conference
+
+#### Signature
+
+```cpp
+Service & join_conference(const json & params = json::object())
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 99.
+
+***
+
+### join\_room
+
+#### Signature
+
+```cpp
+Service & join_room(const json & params = json::object())
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 100.
+
+***
+
+### label
+
+#### Signature
+
+```cpp
+Service & label(const json & params = json::object())
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 101.
+
+***
+
+### list\_tool\_names
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+std::vector< std::string > list_tool_names() const
+```
+
+#### Returns
+
+`std::vector< std::string >`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 172.
+
+***
+
+### live\_transcribe
+
+#### Signature
+
+```cpp
+Service & live_transcribe(const json & params = json::object())
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 102.
+
+***
+
+### live\_translate
+
+#### Signature
+
+```cpp
+Service & live_translate(const json & params = json::object())
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 103.
+
+***
+
+### name
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const std::string & name() const
+```
+
+#### Returns
+
+`const std::string &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 44.
+
+***
+
+### on\_function\_call
+
+Dispatch a function call to the registered handler. Returns a FunctionResult; if the function isn't registered, returns a FunctionResult with a "Function not found" response.
+
+**Modifiers:** `virtual`
+
+#### Signature
+
+```cpp
+swaig::FunctionResult on_function_call(
+ const std::string & name,
+ const json & args,
+ const json & raw_data
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Returns
+
+`swaig::FunctionResult`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 167.
+
+***
+
+### on\_render\_swml
+
+Override to customize SWML rendering.
+
+**Modifiers:** `const` `virtual`
+
+#### Signature
+
+```cpp
+json on_render_swml() const
+```
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 255.
+
+***
+
+### on\_request
+
+Customization hook called when SWML is requested. Default delegates to on\_swml\_request and returns its result. Subclasses typically override on\_swml\_request rather than this method.
+Returns std::nullopt to use the default SWML rendering, or a non-null JSON with modifications to merge into the rendered document.
+Python parity: WebMixin.on\_request(request\_data, callback\_path). The Python third request argument is FastAPI-specific and intentionally not mirrored on the cross-language API.
+
+**Modifiers:** `virtual`
+
+#### Signature
+
+```cpp
+std::optional< json > on_request(
+ const std::optional< json > & request_data = std::nullopt,
+ const std::optional< std::string > & callback_path = std::nullopt
+)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`std::optional< json >`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 241.
+
+***
+
+### on\_swml\_request
+
+Customization point for subclasses to modify SWML based on request data. Default returns std::nullopt (no modification).
+Python parity: WebMixin.on\_swml\_request(request\_data, callback\_path).
+
+**Modifiers:** `virtual`
+
+#### Signature
+
+```cpp
+std::optional< json > on_swml_request(
+ const std::optional< json > & request_data = std::nullopt,
+ const std::optional< std::string > & callback_path = std::nullopt
+)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`std::optional< json >`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 249.
+
+***
+
+### pay
+
+#### Signature
+
+```cpp
+Service & pay(const json & params = json::object())
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 104.
+
+***
+
+### play
+
+#### Signature
+
+```cpp
+Service & play(const json & params = json::object())
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 105.
+
+***
+
+### port
+
+Get the effective port.
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+int port() const
+```
+
+#### Returns
+
+`int`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 222.
+
+***
+
+### prompt
+
+#### Signature
+
+```cpp
+Service & prompt(const json & params = json::object())
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 106.
+
+***
+
+### receive\_fax
+
+#### Signature
+
+```cpp
+Service & receive_fax(const json & params = json::object())
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 107.
+
+***
+
+### record
+
+#### Signature
+
+```cpp
+Service & record(const json & params = json::object())
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 108.
+
+***
+
+### record\_call
+
+#### Signature
+
+```cpp
+Service & record_call(const json & params = json::object())
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 109.
+
+***
+
+### register\_additional\_routes
+
+Extension point: register additional HTTP routes. AgentBase uses this to add /post\_prompt, /mcp, etc.
+
+**Modifiers:** `virtual`
+
+#### Signature
+
+```cpp
+void register_additional_routes(httplib::Server & server)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 272.
+
+***
+
+### register\_swaig\_function
+
+Register a raw SWAIG function definition (e.g. DataMap tools).
+
+#### Signature
+
+```cpp
+Service & register_swaig_function(const json & func_def)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 162.
+
+***
+
+### remove\_function
+
+Remove a registered SWAIG function. Returns true when the function was found and removed; false when it wasn't registered. Python parity: ToolRegistry.remove\_function.
+
+#### Signature
+
+```cpp
+bool remove_function(const std::string & name)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 195.
+
+***
+
+### render\_main\_swml
+
+Extension point: render the SWML document for the main path or for GET /swaig. Default returns the currently-built Document. AgentBase overrides to emit prompt + AI verb at request time.
+
+**Modifiers:** `const` `virtual`
+
+#### Signature
+
+```cpp
+json render_main_swml(const httplib::Request & req) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 260.
+
+***
+
+### render\_swml
+
+Render the SWML document to JSON.
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+json render_swml() const
+```
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 149.
+
+***
+
+### request
+
+#### Signature
+
+```cpp
+Service & request(const json & params = json::object())
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 110.
+
+***
+
+### return\_section
+
+#### Signature
+
+```cpp
+Service & return_section(const json & params = json::object())
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 111.
+
+***
+
+### route
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const std::string & route() const
+```
+
+#### Returns
+
+`const std::string &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 48.
+
+***
+
+### schema\_utils
+
+SchemaUtils helper bound to this Service. Mirrors Python's self.schema\_utils instance attribute on SWMLService. Built lazily on first access; the underlying schema is cached so the helper is cheap to build.
+
+#### Signature
+
+
+
+ ```cpp
+ signalwire::utils::SchemaUtils & schema_utils()
+ ```
+
+
+
+ ```cpp
+ const signalwire::utils::SchemaUtils & schema_utils() const
+ ```
+
+
+
+#### Returns (Overload 1)
+
+`signalwire::utils::SchemaUtils &`
+
+#### Returns (Overload 2)
+
+`const signalwire::utils::SchemaUtils &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 145.
+
+***
+
+### send\_digits
+
+#### Signature
+
+```cpp
+Service & send_digits(const json & params = json::object())
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 112.
+
+***
+
+### send\_fax
+
+#### Signature
+
+```cpp
+Service & send_fax(const json & params = json::object())
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 113.
+
+***
+
+### send\_sms
+
+#### Signature
+
+```cpp
+Service & send_sms(const json & params = json::object())
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 114.
+
+***
+
+### serve
+
+Start the HTTP server (blocking).
+
+#### Signature
+
+```cpp
+void serve()
+```
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 216.
+
+***
+
+### Service
+
+#### Signature
+
+```cpp
+void Service()
+```
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 35.
+
+***
+
+### set
+
+#### Signature
+
+```cpp
+Service & set(const json & params = json::object())
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 115.
+
+***
+
+### set\_auth
+
+Set basic auth credentials (auto-generated if not set).
+
+#### Signature
+
+```cpp
+Service & set_auth(const std::string & username, const std::string & password)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 57.
+
+***
+
+### set\_host
+
+Set the host to bind to.
+
+#### Signature
+
+```cpp
+Service & set_host(const std::string & host)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 51.
+
+***
+
+### set\_name
+
+Set the service name (default: "service").
+
+#### Signature
+
+```cpp
+Service & set_name(const std::string & name)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 43.
+
+***
+
+### set\_port
+
+Set the port to listen on.
+
+#### Signature
+
+```cpp
+Service & set_port(int port)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 54.
+
+***
+
+### set\_route
+
+Set the route path for this service (default: "/").
+
+#### Signature
+
+```cpp
+Service & set_route(const std::string & route)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 47.
+
+***
+
+### setup\_routes
+
+#### Signature
+
+```cpp
+void setup_routes(httplib::Server & server)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 304.
+
+***
+
+### sip\_refer
+
+#### Signature
+
+```cpp
+Service & sip_refer(const json & params = json::object())
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 117.
+
+***
+
+### sleep
+
+#### Signature
+
+```cpp
+Service & sleep(int milliseconds)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 116.
+
+***
+
+### stop
+
+Stop the HTTP server.
+
+#### Signature
+
+```cpp
+void stop()
+```
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 219.
+
+***
+
+### stop\_denoise
+
+#### Signature
+
+```cpp
+Service & stop_denoise(const json & params = json::object())
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 118.
+
+***
+
+### stop\_record\_call
+
+#### Signature
+
+```cpp
+Service & stop_record_call(const json & params = json::object())
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 119.
+
+***
+
+### stop\_tap
+
+#### Signature
+
+```cpp
+Service & stop_tap(const json & params = json::object())
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 120.
+
+***
+
+### swaig\_pre\_dispatch
+
+Extension point: invoked between argument parsing and function dispatch on POST /swaig. Returns a target Service\* (defaults to this) and an optional short-circuit JSON. If short\_circuit is non-null, it's returned as the SWAIG response without calling on\_function\_call. AgentBase overrides for token validation.
+
+**Modifiers:** `virtual`
+
+#### Signature
+
+```cpp
+std::pair< Service *, std::optional< json > > swaig_pre_dispatch(
+ const json & request_data,
+ const std::string & func_name
+)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`std::pair< Service *, std::optional< json > >`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 268.
+
+***
+
+### switch\_section
+
+#### Signature
+
+```cpp
+Service & switch_section(const json & params = json::object())
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 121.
+
+***
+
+### tap
+
+#### Signature
+
+```cpp
+Service & tap(const json & params = json::object())
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 122.
+
+***
+
+### timing\_safe\_compare
+
+Timing-safe string comparison using CRYPTO\_memcmp.
+
+**Modifiers:** `static`
+
+#### Signature
+
+```cpp
+bool timing_safe_compare(const std::string & a, const std::string & b)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 225.
+
+***
+
+### transfer
+
+#### Signature
+
+```cpp
+Service & transfer(const json & params = json::object())
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 123.
+
+***
+
+### unset
+
+#### Signature
+
+```cpp
+Service & unset(const json & params = json::object())
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 124.
+
+***
+
+### user\_event
+
+#### Signature
+
+```cpp
+Service & user_event(const json & params = json::object())
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Service &`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 125.
+
+***
+
+### validate\_auth
+
+Validate basic auth from a request; returns true if valid.
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+bool validate_auth(const httplib::Request & req, httplib::Response & res) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 278.
+
+***
+
+### validate\_basic\_auth
+
+Validate provided basic-auth credentials against the configured ones using a constant-time comparison. Python parity: AuthMixin.validate\_basic\_auth(username, password).
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+bool validate_basic_auth(
+ const std::string & username,
+ const std::string & password
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 72.
+
+## Source
+
+[`include/signalwire/swml/service.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/service.hpp)
+
+Line 33.
diff --git a/fern/products/sdk-reference/cpp/agents/swml/verb-definition/index.mdx b/fern/products/sdk-reference/cpp/agents/swml/verb-definition/index.mdx
new file mode 100644
index 0000000000..e89ba06ba9
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/swml/verb-definition/index.mdx
@@ -0,0 +1,40 @@
+---
+slug: "/reference/cpp/agents/swml/verb-definition"
+title: "VerbDefinition"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::swml::VerbDefinition"
+ parent: "signalwire::swml"
+ module: "agents.swml"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/schema.hpp"
+ visibility: "public"
+---
+# `VerbDefinition`
+
+Represents a verb definition extracted from the SWML schema.
+
+## Signature
+
+```cpp
+struct signalwire::swml::VerbDefinition
+```
+
+## Properties
+
+
+
+
+
+
+
+
+
+## Source
+
+[`include/signalwire/swml/schema.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/schema.hpp)
+
+Line 14.
diff --git a/fern/products/sdk-reference/cpp/agents/swml/verb/index.mdx b/fern/products/sdk-reference/cpp/agents/swml/verb/index.mdx
new file mode 100644
index 0000000000..cabb3bb8b0
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/agents/swml/verb/index.mdx
@@ -0,0 +1,90 @@
+---
+slug: "/reference/cpp/agents/swml/verb"
+title: "Verb"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::swml::Verb"
+ parent: "signalwire::swml"
+ module: "agents.swml"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/document.hpp"
+ visibility: "public"
+---
+# `Verb`
+
+Represents a single SWML verb instance, e.g. \{"answer": \{"max\_duration": 3600\}\}.
+
+## Signature
+
+```cpp
+struct signalwire::swml::Verb
+```
+
+## Properties
+
+
+
+
+
+## Methods
+
+### to\_json
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json to_json() const
+```
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/swml/document.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/document.hpp)
+
+Line 22.
+
+***
+
+### Verb
+
+#### Signature
+
+
+
+ ```cpp
+ void Verb()
+ ```
+
+
+
+ ```cpp
+ void Verb(std::string n, json p)
+ ```
+
+
+
+#### Parameters (Overload 2)
+
+
+
+
+
+#### Source
+
+[`include/signalwire/swml/document.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/document.hpp)
+
+Line 19.
+
+## Source
+
+[`include/signalwire/swml/document.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/swml/document.hpp)
+
+Line 15.
diff --git a/fern/products/sdk-reference/cpp/core/core/index.mdx b/fern/products/sdk-reference/cpp/core/core/index.mdx
new file mode 100644
index 0000000000..6337f0394b
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/core/core/index.mdx
@@ -0,0 +1,33 @@
+---
+slug: "/reference/cpp/core/core"
+title: "core"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "module"
+ language: "cpp"
+ qualified_name: "signalwire::core"
+ parent: "core"
+ module: "core"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/core/logging_config.hpp"
+---
+# `core`
+
+## Signature
+
+```cpp
+namespace signalwire::core
+```
+
+## Modules
+
+
+
+
+
+## Source
+
+[`include/signalwire/core/logging_config.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/core/logging_config.hpp)
+
+Line 11.
diff --git a/fern/products/sdk-reference/cpp/core/core/logging-config/index.mdx b/fern/products/sdk-reference/cpp/core/core/logging-config/index.mdx
new file mode 100644
index 0000000000..e695ba751d
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/core/core/logging-config/index.mdx
@@ -0,0 +1,58 @@
+---
+slug: "/reference/cpp/core/core/logging-config"
+title: "logging_config"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "module"
+ language: "cpp"
+ qualified_name: "signalwire::core::logging_config"
+ parent: "signalwire::core"
+ module: "core.core"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/core/logging_config.hpp"
+---
+# `logging_config`
+
+## Signature
+
+```cpp
+namespace signalwire::core::logging_config
+```
+
+## Functions
+
+### get\_execution\_mode
+
+Cross-language SDK contract for serverless / deployment-mode detection.
+Mirrors signalwire.core.logging\_config.get\_execution\_mode in the Python reference. Order of precedence (FIRST match wins):
+
+GATEWAY\_INTERFACE -> "cgi"
+AWS\_LAMBDA\_FUNCTION\_NAME or LAMBDA\_TASK\_ROOT -> "lambda"
+FUNCTION\_TARGET, K\_SERVICE, or GOOGLE\_CLOUD\_PROJECT -> "google\_cloud\_function"
+AZURE\_FUNCTIONS\_ENVIRONMENT, FUNCTIONS\_WORKER\_RUNTIME, or AzureWebJobsStorage -> "azure\_function"
+otherwise -> "server"
+
+The detected mode as a canonical lower-case string. One of "cgi", "lambda", "google\_cloud\_function", "azure\_function", or "server".
+
+#### Signature
+
+```cpp
+std::string get_execution_mode()
+```
+
+#### Returns
+
+`std::string` — The detected mode as a canonical lower-case string. One of "cgi", "lambda", "google\_cloud\_function", "azure\_function", or "server".
+
+#### Source
+
+[`src/core/logging_config.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/core/logging_config.cpp)
+
+Line 24.
+
+## Source
+
+[`include/signalwire/core/logging_config.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/core/logging_config.hpp)
+
+Line 12.
diff --git a/fern/products/sdk-reference/cpp/core/index.mdx b/fern/products/sdk-reference/cpp/core/index.mdx
new file mode 100644
index 0000000000..6bfc994837
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/core/index.mdx
@@ -0,0 +1,32 @@
+---
+slug: "/reference/cpp/core"
+title: "core"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "module"
+ language: "cpp"
+ qualified_name: "core"
+---
+# `core`
+
+## Classes
+
+
+
+
+
+ SignalWire webhook signature validation. Implements both schemes from porting-sdk/webhooks.md:
+
+
+
+## Modules
+
+
+
+
+
+
+
+
diff --git a/fern/products/sdk-reference/cpp/core/logging/index.mdx b/fern/products/sdk-reference/cpp/core/logging/index.mdx
new file mode 100644
index 0000000000..90afe58f3a
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/core/logging/index.mdx
@@ -0,0 +1,213 @@
+---
+slug: "/reference/cpp/core/logging"
+title: "logging"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::logging"
+ parent: "core"
+ module: "core"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/logging/logger.hpp"
+---
+# `logging`
+
+## Signature
+
+```cpp
+class signalwire::logging::Logger
+```
+
+## Methods
+
+### debug
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+void debug(std::string_view msg) const
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/logging/logger.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/logging/logger.hpp)
+
+Line 35.
+
+***
+
+### error
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+void error(std::string_view msg) const
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/logging/logger.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/logging/logger.hpp)
+
+Line 47.
+
+***
+
+### info
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+void info(std::string_view msg) const
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/logging/logger.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/logging/logger.hpp)
+
+Line 39.
+
+***
+
+### Logger
+
+**Modifiers:** `explicit` `inline`
+
+#### Signature
+
+```cpp
+void Logger(const std::string & name)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/logging/logger.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/logging/logger.hpp)
+
+Line 29.
+
+***
+
+### warn
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+void warn(std::string_view msg) const
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/logging/logger.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/logging/logger.hpp)
+
+Line 43.
+
+## Functions
+
+### get\_log\_level
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+LogLevel get_log_level()
+```
+
+#### Returns
+
+`LogLevel`
+
+#### Source
+
+[`include/signalwire/logging/logger.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/logging/logger.hpp)
+
+Line 15.
+
+***
+
+### get\_logger
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+Logger get_logger(const std::string & name)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Logger`
+
+#### Source
+
+[`include/signalwire/logging/logger.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/logging/logger.hpp)
+
+Line 56.
+
+## Enums
+
+### LogLevel
+
+#### Signature
+
+```cpp
+enum class LogLevel
+```
+
+#### Variants
+
+
+
+
+
+
+
+
+
+
+
+#### Source
+
+[`include/signalwire/logging/logger.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/logging/logger.hpp)
+
+Line 13.
+
+## Source
+
+[`include/signalwire/logging/logger.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/logging/logger.hpp)
+
+Line 27.
diff --git a/fern/products/sdk-reference/cpp/core/security/index.mdx b/fern/products/sdk-reference/cpp/core/security/index.mdx
new file mode 100644
index 0000000000..193e8ecb05
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/core/security/index.mdx
@@ -0,0 +1,283 @@
+---
+slug: "/reference/cpp/core/security"
+title: "security"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "module"
+ language: "cpp"
+ qualified_name: "signalwire::security"
+ parent: "core"
+ module: "core"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/security/session_manager.hpp"
+---
+# `security`
+
+## Signature
+
+```cpp
+namespace signalwire::security
+```
+
+## Classes
+
+
+
+ Manages HMAC-SHA256 based session tokens for secure SWAIG tool calls. Token format: base64(functionName:callID:expiryTimestamp) + "." + hex(hmac\_signature)
+
+
+
+ Optional knobs for WrapWithSignatureValidation. trust\_proxy controls whether X-Forwarded-Proto / X-Forwarded-Host headers are honored when reconstructing the public URL — opt-in because proxy headers are spoofable. proxy\_url\_base is consulted before the proxy headers and is meant for SWML\_PROXY\_URL\_BASE callers.
+
+
+
+## Functions
+
+### ValidateRequest
+
+Legacy @signalwire/compatibility-api drop-in entry point.
+If params\_or\_raw\_body holds a std::string, delegates to ValidateWebhookSignature (Scheme A then Scheme B with parsed form).
+If it holds a FormParams, treats it as pre-parsed form params and runs Scheme B directly (with URL port normalization).
+
+std::invalid\_argument
+
+when signing\_key is empty.
+
+#### Signature
+
+```cpp
+bool ValidateRequest(
+ std::string_view signing_key,
+ std::string_view signature,
+ std::string_view url,
+ const ParamsOrBody & params_or_raw_body
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+#### Returns
+
+`bool`
+
+#### Throws
+
+- `std::invalid_argument` — when signing\_key is empty.
+
+#### Source
+
+[`src/security/webhook_validator.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/security/webhook_validator.cpp)
+
+Line 457.
+
+***
+
+### ValidateWebhookSignature
+
+Validate a SignalWire webhook signature against both schemes.
+Tries Scheme A (hex JSON) first; on miss falls back to Scheme B (base64 form) with URL port normalization, repeated-key handling, and optional ?bodySHA256= body-hash check for JSON bodies on the compat surface.
+
+signing\_key
+
+The customer's Signing Key. UTF-8 string. MUST NOT be empty — empty throws std::invalid\_argument, that's a programming error not a validation failure.
+
+signature
+
+The X-SignalWire-Signature header value (or the legacy X-Twilio-Signature alias). Empty returns false without throwing.
+
+url
+
+Full URL SignalWire POSTed to (scheme, host, optional port, path, query) — must match what the platform saw, see the URL-reconstruction section of porting-sdk/webhooks.md.
+
+raw\_body
+
+Raw request body bytes as a UTF-8 string, BEFORE any JSON / form parsing. Re-serialized JSON breaks Scheme A.
+
+true if either scheme matches; false otherwise.
+
+std::invalid\_argument
+
+when signing\_key is empty.
+
+#### Signature
+
+```cpp
+bool ValidateWebhookSignature(
+ std::string_view signing_key,
+ std::string_view signature,
+ std::string_view url,
+ std::string_view raw_body
+)
+```
+
+#### Parameters
+
+
+ The customer's Signing Key. UTF-8 string. MUST NOT be empty — empty throws std::invalid\_argument, that's a programming error not a validation failure.
+
+
+
+ The X-SignalWire-Signature header value (or the legacy X-Twilio-Signature alias). Empty returns false without throwing.
+
+
+
+ Full URL SignalWire POSTed to (scheme, host, optional port, path, query) — must match what the platform saw, see the URL-reconstruction section of porting-sdk/webhooks.md.
+
+
+
+ Raw request body bytes as a UTF-8 string, BEFORE any JSON / form parsing. Re-serialized JSON breaks Scheme A.
+
+
+#### Returns
+
+`bool` — true if either scheme matches; false otherwise.
+
+#### Throws
+
+- `std::invalid_argument` — when signing\_key is empty.
+
+#### Source
+
+[`src/security/webhook_validator.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/security/webhook_validator.cpp)
+
+Line 406.
+
+***
+
+### WrapWithSignatureValidation
+
+Wrap a downstream cpp-httplib POST handler with SignalWire webhook signature validation.
+Behavior:
+
+Read req.body (cpp-httplib has already buffered it).
+Pull X-SignalWire-Signature (or the X-Twilio-Signature legacy alias) from headers.
+Reconstruct the public URL the platform POSTed to (proxy-aware).
+Call ValidateWebhookSignature.
+On invalid / missing signature: respond 403 Forbidden with no body detail. The downstream handler is NOT called. Per the porting-sdk spec, the validator MUST NOT log which branch failed or the expected signature.
+On valid: call downstream(req, res). The handler can read req.body directly — cpp-httplib buffers it for repeat reads.
+
+signing\_key
+
+Customer's Signing Key (SignalWire Dashboard → API Credentials). MUST NOT be empty — empty throws std::invalid\_argument at wrap time, that's a programming error not a runtime failure.
+
+downstream
+
+Handler to invoke on a valid signature.
+
+opts
+
+Optional URL reconstruction knobs.
+
+A handler suitable for server.Post(path, handler).
+
+std::invalid\_argument
+
+if signing\_key is empty.
+
+#### Signature
+
+```cpp
+HttpHandler WrapWithSignatureValidation(
+ std::string_view signing_key,
+ HttpHandler downstream,
+ WebhookValidatorOptions opts = {}
+)
+```
+
+#### Parameters
+
+
+ Customer's Signing Key (SignalWire Dashboard → API Credentials). MUST NOT be empty — empty throws std::invalid\_argument at wrap time, that's a programming error not a runtime failure.
+
+
+
+ Handler to invoke on a valid signature.
+
+
+
+ Optional URL reconstruction knobs.
+
+
+#### Returns
+
+`HttpHandler` — A handler suitable for server.Post(path, handler).
+
+#### Throws
+
+- `std::invalid_argument` — if signing\_key is empty.
+
+#### Source
+
+[`src/security/webhook_middleware.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/security/webhook_middleware.cpp)
+
+Line 107.
+
+## Type Aliases
+
+### FormParams
+
+Pre-parsed form parameters for ValidateRequest: ordered list of (key, list-of-values) tuples. Repeated keys are represented as one entry whose values vector holds each occurrence in submission order.
+Used as one alternative in ParamsOrBody; the other alternative is the raw body string.
+
+#### Signature
+
+```cpp
+typedef std::vector< std::pair< std::string, std::vector< std::string > > > FormParams
+```
+
+#### Source
+
+[`include/signalwire/security/webhook_validator.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/security/webhook_validator.hpp)
+
+Line 32.
+
+***
+
+### HttpHandler
+
+A cpp-httplib handler signature, lifted into a typedef so the adapter stays framework-agnostic at the call site (the only deps needed by this header are a forward declaration of httplib::Request/Response).
+
+#### Signature
+
+```cpp
+typedef std::function< void(const httplib::Request &, httplib::Response &)> HttpHandler
+```
+
+#### Source
+
+[`include/signalwire/security/webhook_middleware.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/security/webhook_middleware.hpp)
+
+Line 19.
+
+***
+
+### ParamsOrBody
+
+Drop-in shape for ValidateRequest mirroring @signalwire/compatibility-api's RestClient.validateRequest: either a raw body string (delegates to the combined validator) or a pre-parsed form-params list (runs Scheme B directly).
+
+#### Signature
+
+```cpp
+typedef std::variant< std::string, FormParams > ParamsOrBody
+```
+
+#### Source
+
+[`include/signalwire/security/webhook_validator.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/security/webhook_validator.hpp)
+
+Line 38.
+
+## Source
+
+[`include/signalwire/security/session_manager.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/security/session_manager.hpp)
+
+Line 10.
diff --git a/fern/products/sdk-reference/cpp/core/security/session-manager/index.mdx b/fern/products/sdk-reference/cpp/core/security/session-manager/index.mdx
new file mode 100644
index 0000000000..70f1ef28ed
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/core/security/session-manager/index.mdx
@@ -0,0 +1,207 @@
+---
+slug: "/reference/cpp/core/security/session-manager"
+title: "SessionManager"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::security::SessionManager"
+ parent: "signalwire::security"
+ module: "core.security"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/security/session_manager.hpp"
+ visibility: "public"
+---
+# `SessionManager`
+
+Manages HMAC-SHA256 based session tokens for secure SWAIG tool calls.
+Token format: base64(functionName:callID:expiryTimestamp) + "." + hex(hmac\_signature)
+
+## Signature
+
+```cpp
+class signalwire::security::SessionManager
+```
+
+## Methods
+
+### create\_token
+
+Create a signed token for a function call
+
+function\_name
+
+The SWAIG function name
+
+call\_id
+
+The call identifier
+
+expiry\_seconds
+
+Seconds until expiry (default 3600)
+
+The signed token string
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+std::string create_token(
+ const std::string & function_name,
+ const std::string & call_id,
+ int expiry_seconds = 3600
+) const
+```
+
+#### Parameters
+
+
+ The SWAIG function name
+
+
+
+ The call identifier
+
+
+
+ Seconds until expiry (default 3600)
+
+
+#### Returns
+
+`std::string` — The signed token string
+
+#### Source
+
+[`include/signalwire/security/session_manager.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/security/session_manager.hpp)
+
+Line 28.
+
+***
+
+### SessionManager
+
+Construct with a random 32-byte secret.
+
+#### Signature
+
+
+
+ ```cpp
+ void SessionManager()
+ ```
+
+
+
+ ```cpp
+ void SessionManager(const std::vector< uint8_t > & secret)
+ ```
+
+
+
+#### Parameters (Overload 2)
+
+
+
+#### Source
+
+[`include/signalwire/security/session_manager.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/security/session_manager.hpp)
+
+Line 18.
+
+***
+
+### timing\_safe\_compare
+
+Timing-safe comparison of two byte sequences.
+
+**Modifiers:** `static`
+
+#### Signature
+
+```cpp
+bool timing_safe_compare(const std::string & a, const std::string & b)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/security/session_manager.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/security/session_manager.hpp)
+
+Line 47.
+
+***
+
+### validate\_token
+
+Validate a token
+
+token
+
+The token to validate
+
+function\_name
+
+Expected function name
+
+call\_id
+
+Expected call ID
+
+true if token is valid and not expired
+
+All three params are consumed read-only (parsed/compared, never stored), so they take std::string\_view — consistent with the webhook\_validator entry points in this module. \[\[nodiscard]]: the validity result is the reason to call it.
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+bool validate_token(
+ std::string_view token,
+ std::string_view function_name,
+ std::string_view call_id
+) const
+```
+
+#### Parameters
+
+
+ The token to validate
+
+
+
+ Expected function name
+
+
+
+ Expected call ID
+
+
+#### Returns
+
+`bool` — true if token is valid and not expired
+
+#### Source
+
+[`include/signalwire/security/session_manager.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/security/session_manager.hpp)
+
+Line 42.
+
+## Source
+
+[`include/signalwire/security/session_manager.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/security/session_manager.hpp)
+
+Line 15.
diff --git a/fern/products/sdk-reference/cpp/core/security/webhook-validator-options/index.mdx b/fern/products/sdk-reference/cpp/core/security/webhook-validator-options/index.mdx
new file mode 100644
index 0000000000..5a277c2f1b
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/core/security/webhook-validator-options/index.mdx
@@ -0,0 +1,40 @@
+---
+slug: "/reference/cpp/core/security/webhook-validator-options"
+title: "WebhookValidatorOptions"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::security::WebhookValidatorOptions"
+ parent: "signalwire::security"
+ module: "core.security"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/security/webhook_middleware.hpp"
+ visibility: "public"
+---
+# `WebhookValidatorOptions`
+
+Optional knobs for WrapWithSignatureValidation. trust\_proxy controls whether X-Forwarded-Proto / X-Forwarded-Host headers are honored when reconstructing the public URL — opt-in because proxy headers are spoofable. proxy\_url\_base is consulted before the proxy headers and is meant for SWML\_PROXY\_URL\_BASE callers.
+
+## Signature
+
+```cpp
+struct signalwire::security::WebhookValidatorOptions
+```
+
+## Properties
+
+
+ Optional base URL (e.g. https://abcd.ngrok.io) joined with the request path + query when reconstructing the URL. Wins over proxy headers and request.host.
+
+
+
+ If true, honor X-Forwarded-Proto / X-Forwarded-Host when reconstructing the URL. Default false.
+
+
+## Source
+
+[`include/signalwire/security/webhook_middleware.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/security/webhook_middleware.hpp)
+
+Line 26.
diff --git a/fern/products/sdk-reference/cpp/core/signalwire/index.mdx b/fern/products/sdk-reference/cpp/core/signalwire/index.mdx
new file mode 100644
index 0000000000..afb7d245ee
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/core/signalwire/index.mdx
@@ -0,0 +1,641 @@
+---
+slug: "/reference/cpp/core/signalwire"
+title: "signalwire"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire"
+ parent: "core"
+ module: "core"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/logging.hpp"
+---
+# `signalwire`
+
+SignalWire webhook signature validation.
+Implements both schemes from porting-sdk/webhooks.md:
+
+Scheme A (RELAY/SWML/JSON): hex(HMAC-SHA1(key, url + raw\_body))
+Scheme B (Compat/cXML form): base64(HMAC-SHA1(key, url + sortedFormParams)) with optional bodySHA256 query-param fallback for JSON-on-compat-surface.
+
+All comparisons use CRYPTO\_memcmp (constant-time) so the secret is not leaked over repeated requests. The implementation MUST NOT log keys, signatures, or which branch failed — that's a spec requirement.
+
+## Signature
+
+```cpp
+class signalwire::Logger
+```
+
+## Methods
+
+### debug
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void debug(std::string_view msg)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/logging.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/logging.hpp)
+
+Line 73.
+
+***
+
+### error
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void error(std::string_view msg)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/logging.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/logging.hpp)
+
+Line 76.
+
+***
+
+### info
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void info(std::string_view msg)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/logging.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/logging.hpp)
+
+Line 74.
+
+***
+
+### instance
+
+**Modifiers:** `static` `inline`
+
+#### Signature
+
+```cpp
+Logger & instance()
+```
+
+#### Returns
+
+`Logger &`
+
+#### Source
+
+[`include/signalwire/logging.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/logging.hpp)
+
+Line 22.
+
+***
+
+### is\_suppressed
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+bool is_suppressed() const
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/logging.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/logging.hpp)
+
+Line 46.
+
+***
+
+### level
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+LogLevel level() const
+```
+
+#### Returns
+
+`LogLevel`
+
+#### Source
+
+[`include/signalwire/logging.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/logging.hpp)
+
+Line 32.
+
+***
+
+### log
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void log(LogLevel level, std::string_view message)
+```
+
+#### Parameters
+
+
+
+
+
+#### Source
+
+[`include/signalwire/logging.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/logging.hpp)
+
+Line 53.
+
+***
+
+### set\_level
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void set_level(LogLevel level)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/logging.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/logging.hpp)
+
+Line 27.
+
+***
+
+### suppress
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void suppress()
+```
+
+#### Source
+
+[`include/signalwire/logging.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/logging.hpp)
+
+Line 36.
+
+***
+
+### unsuppress
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void unsuppress()
+```
+
+#### Source
+
+[`include/signalwire/logging.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/logging.hpp)
+
+Line 41.
+
+***
+
+### warn
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void warn(std::string_view msg)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/logging.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/logging.hpp)
+
+Line 75.
+
+## Functions
+
+### add\_skill\_directory
+
+Add a directory to search for skills.
+Mirrors Python's signalwire.add\_skill\_directory(path) — delegates to the singleton skills::SkillRegistry instance so third-party skill collections can be registered by path.
+
+std::invalid\_argument
+
+when the path doesn't exist or isn't a directory.
+
+#### Signature
+
+```cpp
+void add_skill_directory(const std::string & path)
+```
+
+#### Parameters
+
+
+
+#### Throws
+
+- `std::invalid_argument` — when the path doesn't exist or isn't a directory.
+
+#### Source
+
+[`src/signalwire.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/signalwire.cpp)
+
+Line 94.
+
+***
+
+### base64\_decode
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+std::string base64_decode(const std::string & input)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/common.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/common.hpp)
+
+Line 115.
+
+***
+
+### base64\_encode
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+std::string base64_encode(const std::string & input)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/common.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/common.hpp)
+
+Line 97.
+
+***
+
+### generate\_random\_password
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+std::string generate_random_password(int length = 32)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/common.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/common.hpp)
+
+Line 70.
+
+***
+
+### generate\_uuid
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+std::string generate_uuid()
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/common.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/common.hpp)
+
+Line 35.
+
+***
+
+### get\_env
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+std::string get_env(
+ const std::string & key,
+ const std::string & default_val = ""
+)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/common.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/common.hpp)
+
+Line 49.
+
+***
+
+### get\_logger
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+Logger & get_logger()
+```
+
+#### Returns
+
+`Logger &`
+
+#### Source
+
+[`include/signalwire/logging.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/logging.hpp)
+
+Line 103.
+
+***
+
+### list\_skills\_with\_params
+
+Get complete schema for all available skills.
+Mirrors Python's signalwire.list\_skills\_with\_params(). Returns a map keyed by skill name where each value contains parameter metadata. Useful for GUI configuration tools, API documentation, or programmatic skill discovery.
+C++ skills don't carry rich Python-style parameter introspection in v1, so each entry contains the skill name and an empty parameter map; built-in skills that expose parameter\_schema() via SkillBase get richer detail merged in.
+
+#### Signature
+
+```cpp
+std::map< std::string, std::map< std::string, std::string > > list_skills_with_params()
+```
+
+#### Returns
+
+`std::map< std::string, std::map< std::string, std::string > >`
+
+#### Source
+
+[`src/signalwire.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/signalwire.cpp)
+
+Line 99.
+
+***
+
+### register\_skill
+
+Register a custom skill class with the global skill registry.
+Mirrors Python's signalwire.register\_skill(skill\_class). Delegates to skills::SkillRegistry::register\_skill. The skill's name comes from the supplied skills::SkillBase factory (which instantiates a SkillBase to read its skill\_name() accessor).
+
+#### Signature
+
+```cpp
+void register_skill(skills::SkillFactory factory)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`src/signalwire.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/signalwire.cpp)
+
+Line 79.
+
+***
+
+### RestClient
+
+Top-level convenience entry points — mirror Python's signalwire/**init**.py package-level helpers (RestClient, register\_skill, add\_skill\_directory, list\_skills\_with\_params).
+The audit projects each free function onto the canonical Python signalwire.<name> path. RestClient preserves PascalCase to match Python's same-cased factory function name. Construct a rest::RestClient from positional or keyword credentials.
+Mirrors Python's top-level signalwire.RestClient(\*args, \*\*kwargs) factory — a thin wrapper that lazy-imports signalwire.rest.RestClient and instantiates it. Supports both positional credentials (args = \{project, token, space\}) and keyword credentials (kwargs\["project"] etc.) with environment-variable fallback.
+
+std::invalid\_argument
+
+when credentials cannot be derived from either args, kwargs, or the standard environment variables (SIGNALWIRE\_PROJECT\_ID, SIGNALWIRE\_API\_TOKEN, SIGNALWIRE\_SPACE).
+
+#### Signature
+
+```cpp
+rest::RestClient RestClient(
+ const std::vector< std::string > & args = {},
+ const std::map< std::string, std::string > & kwargs = {}
+)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`rest::RestClient`
+
+#### Throws
+
+- `std::invalid_argument` — when credentials cannot be derived from either args, kwargs, or the standard environment variables (SIGNALWIRE\_PROJECT\_ID, SIGNALWIRE\_API\_TOKEN, SIGNALWIRE\_SPACE).
+
+#### Source
+
+[`src/signalwire.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/signalwire.cpp)
+
+Line 46.
+
+***
+
+### timing\_safe\_compare
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+bool timing_safe_compare(const std::string & a, const std::string & b)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/common.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/common.hpp)
+
+Line 87.
+
+***
+
+### url\_encode
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+std::string url_encode(const std::string & value)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/common.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/common.hpp)
+
+Line 55.
+
+## Type Aliases
+
+### json
+
+#### Signature
+
+```cpp
+typedef nlohmann::json json
+```
+
+#### Source
+
+[`include/signalwire/common.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/common.hpp)
+
+Line 32.
+
+## Enums
+
+### LogLevel
+
+#### Signature
+
+```cpp
+enum class LogLevel
+```
+
+#### Variants
+
+
+
+
+
+
+
+
+
+
+
+#### Source
+
+[`include/signalwire/logging.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/logging.hpp)
+
+Line 12.
+
+## Source
+
+[`include/signalwire/logging.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/logging.hpp)
+
+Line 20.
diff --git a/fern/products/sdk-reference/cpp/core/utils/index.mdx b/fern/products/sdk-reference/cpp/core/utils/index.mdx
new file mode 100644
index 0000000000..88d97482fe
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/core/utils/index.mdx
@@ -0,0 +1,89 @@
+---
+slug: "/reference/cpp/core/utils"
+title: "utils"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "module"
+ language: "cpp"
+ qualified_name: "signalwire::utils"
+ parent: "core"
+ module: "core"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/utils/schema_utils.hpp"
+---
+# `utils`
+
+## Signature
+
+```cpp
+namespace signalwire::utils
+```
+
+## Classes
+
+
+
+ SchemaUtils — C++ port of signalwire.utils.schema\_utils.SchemaUtils.
+
+
+
+ SchemaValidationError — C++ port of signalwire.utils.schema\_utils.SchemaValidationError.
+
+
+
+ Verb metadata extracted from the schema.
+
+
+
+## Modules
+
+
+
+
+
+## Functions
+
+### is\_serverless\_mode
+
+Cross-language SDK contract: signalwire.utils.is\_serverless\_mode returns true whenever the SDK is running inside any short-lived / event-driven invocation environment (anything other than "server").
+Mirrors signalwire.utils.is\_serverless\_mode in the Python reference.
+true unless the detected mode is "server".
+
+#### Signature
+
+```cpp
+bool is_serverless_mode()
+```
+
+#### Returns
+
+`bool` — true unless the detected mode is "server".
+
+#### Source
+
+[`src/utils/serverless.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/utils/serverless.cpp)
+
+Line 13.
+
+## Type Aliases
+
+### json
+
+#### Signature
+
+```cpp
+typedef nlohmann::json json
+```
+
+#### Source
+
+[`include/signalwire/utils/schema_utils.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/utils/schema_utils.hpp)
+
+Line 30.
+
+## Source
+
+[`include/signalwire/utils/schema_utils.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/utils/schema_utils.hpp)
+
+Line 28.
diff --git a/fern/products/sdk-reference/cpp/core/utils/schema-utils/index.mdx b/fern/products/sdk-reference/cpp/core/utils/schema-utils/index.mdx
new file mode 100644
index 0000000000..c589c6df0b
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/core/utils/schema-utils/index.mdx
@@ -0,0 +1,332 @@
+---
+slug: "/reference/cpp/core/utils/schema-utils"
+title: "SchemaUtils"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::utils::SchemaUtils"
+ parent: "signalwire::utils"
+ module: "core.utils"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/utils/schema_utils.hpp"
+ visibility: "public"
+---
+# `SchemaUtils`
+
+SchemaUtils — C++ port of signalwire.utils.schema\_utils.SchemaUtils.
+
+## Signature
+
+```cpp
+class signalwire::utils::SchemaUtils
+```
+
+## Methods
+
+### full\_validation\_available
+
+Whether full JSON Schema validation is wired up. Mirrors Python's full\_validation\_available property.
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+bool full_validation_available() const
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/utils/schema_utils.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/utils/schema_utils.hpp)
+
+Line 69.
+
+***
+
+### generate\_method\_body
+
+Generate a Python-style method body string for a verb. Mirrors Python's generate\_method\_body(verb\_name).
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+std::string generate_method_body(const std::string & verb_name) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/utils/schema_utils.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/utils/schema_utils.hpp)
+
+Line 109.
+
+***
+
+### generate\_method\_signature
+
+Generate a Python-style method signature string for a verb. Mirrors Python's generate\_method\_signature(verb\_name).
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+std::string generate_method_signature(const std::string & verb_name) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/utils/schema_utils.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/utils/schema_utils.hpp)
+
+Line 105.
+
+***
+
+### get\_all\_verb\_names
+
+Sorted list of all known verb names. Mirrors Python's get\_all\_verb\_names().
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+std::vector< std::string > get_all_verb_names() const
+```
+
+#### Returns
+
+`std::vector< std::string >`
+
+#### Source
+
+[`include/signalwire/utils/schema_utils.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/utils/schema_utils.hpp)
+
+Line 76.
+
+***
+
+### get\_verb\_parameters
+
+Parameter-definition block used by code-gen tooling. Mirrors Python's get\_verb\_parameters(verb\_name).
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+json get_verb_parameters(const std::string & verb_name) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/utils/schema_utils.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/utils/schema_utils.hpp)
+
+Line 88.
+
+***
+
+### get\_verb\_properties
+
+The properties\[verb\_name] block for a verb, or empty when unknown. Mirrors Python's get\_verb\_properties(verb\_name).
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+json get_verb_properties(const std::string & verb_name) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/utils/schema_utils.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/utils/schema_utils.hpp)
+
+Line 80.
+
+***
+
+### get\_verb\_required\_properties
+
+The required list for a verb, or empty when unknown / not specified. Mirrors Python's get\_verb\_required\_properties(verb\_name).
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+std::vector< std::string > get_verb_required_properties(
+ const std::string & verb_name
+) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`std::vector< std::string >`
+
+#### Source
+
+[`include/signalwire/utils/schema_utils.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/utils/schema_utils.hpp)
+
+Line 84.
+
+***
+
+### load\_schema
+
+Read and parse the JSON Schema. Mirrors Python's load\_schema().
+
+#### Signature
+
+```cpp
+json load_schema()
+```
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/utils/schema_utils.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/utils/schema_utils.hpp)
+
+Line 72.
+
+***
+
+### SchemaUtils
+
+Construct a SchemaUtils. Mirrors Python's SchemaUtils(schema\_path=None, schema\_validation=True). Pass schema\_path = "" to use the embedded schema.
+
+#### Signature
+
+```cpp
+void SchemaUtils(
+ const std::string & schema_path = "",
+ bool schema_validation = true
+)
+```
+
+#### Parameters
+
+
+
+
+
+#### Source
+
+[`include/signalwire/utils/schema_utils.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/utils/schema_utils.hpp)
+
+Line 65.
+
+***
+
+### validate\_document
+
+Validate a complete SWML document. Mirrors Python's validate\_document(document). Returns (false, \["Schema validator not initialized"]) when no full validator is wired in.
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+std::pair< bool, std::vector< std::string > > validate_document(
+ const json & document
+) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`std::pair< bool, std::vector< std::string > >`
+
+#### Source
+
+[`include/signalwire/utils/schema_utils.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/utils/schema_utils.hpp)
+
+Line 101.
+
+***
+
+### validate\_verb
+
+Validate a verb config against the schema. Mirrors Python's validate\_verb(verb\_name, verb\_config). Returns (valid, errors) — Python's Tuple\[bool, List\[str]].
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+std::pair< bool, std::vector< std::string > > validate_verb(
+ const std::string & verb_name,
+ const json & verb_config
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`std::pair< bool, std::vector< std::string > >`
+
+#### Source
+
+[`include/signalwire/utils/schema_utils.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/utils/schema_utils.hpp)
+
+Line 94.
+
+## Source
+
+[`include/signalwire/utils/schema_utils.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/utils/schema_utils.hpp)
+
+Line 60.
diff --git a/fern/products/sdk-reference/cpp/core/utils/schema-validation-error/index.mdx b/fern/products/sdk-reference/cpp/core/utils/schema-validation-error/index.mdx
new file mode 100644
index 0000000000..12fbb4654a
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/core/utils/schema-validation-error/index.mdx
@@ -0,0 +1,105 @@
+---
+slug: "/reference/cpp/core/utils/schema-validation-error"
+title: "SchemaValidationError"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::utils::SchemaValidationError"
+ parent: "signalwire::utils"
+ module: "core.utils"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/utils/schema_utils.hpp"
+ visibility: "public"
+---
+# `SchemaValidationError`
+
+SchemaValidationError — C++ port of signalwire.utils.schema\_utils.SchemaValidationError.
+
+## Signature
+
+```cpp
+class signalwire::utils::SchemaValidationError : std::runtime_error
+```
+
+## Inheritance
+
+**Extends:** `std::runtime_error`
+
+## Methods
+
+### errors
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const std::vector< std::string > & errors() const
+```
+
+#### Returns
+
+`const std::vector< std::string > &`
+
+#### Source
+
+[`include/signalwire/utils/schema_utils.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/utils/schema_utils.hpp)
+
+Line 42.
+
+***
+
+### SchemaValidationError
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void SchemaValidationError(
+ std::string verb_name,
+ std::vector< std::string > errors
+)
+```
+
+#### Parameters
+
+
+
+
+
+#### Source
+
+[`include/signalwire/utils/schema_utils.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/utils/schema_utils.hpp)
+
+Line 36.
+
+***
+
+### verb\_name
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const std::string & verb_name() const
+```
+
+#### Returns
+
+`const std::string &`
+
+#### Source
+
+[`include/signalwire/utils/schema_utils.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/utils/schema_utils.hpp)
+
+Line 41.
+
+## Source
+
+[`include/signalwire/utils/schema_utils.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/utils/schema_utils.hpp)
+
+Line 34.
diff --git a/fern/products/sdk-reference/cpp/core/utils/url-validator/index.mdx b/fern/products/sdk-reference/cpp/core/utils/url-validator/index.mdx
new file mode 100644
index 0000000000..56434106c6
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/core/utils/url-validator/index.mdx
@@ -0,0 +1,117 @@
+---
+slug: "/reference/cpp/core/utils/url-validator"
+title: "url_validator"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "module"
+ language: "cpp"
+ qualified_name: "signalwire::utils::url_validator"
+ parent: "signalwire::utils"
+ module: "core.utils"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/utils/url_validator.hpp"
+---
+# `url_validator`
+
+## Signature
+
+```cpp
+namespace signalwire::utils::url_validator
+```
+
+## Constants
+
+
+ Cross-port SSRF block list. Order matches the Python reference for ease of cross-language review.
+
+
+## Functions
+
+### \_set\_resolver
+
+Install a custom resolver (for tests). Pass nullptr to clear.
+
+#### Signature
+
+```cpp
+void _set_resolver(ResolverFn resolver)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`src/utils/url_validator.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/utils/url_validator.cpp)
+
+Line 185.
+
+***
+
+### validate\_url
+
+Validate that a URL is safe to fetch.
+Mirrors Python's signalwire.utils.url\_validator.validate\_url(url, allow\_private=False) -> bool.
+
+url
+
+URL to validate.
+
+allow\_private
+
+When true, bypass the IP-blocklist check.
+
+True iff the URL is safe to fetch.
+
+#### Signature
+
+```cpp
+bool validate_url(const std::string & url, bool allow_private = false)
+```
+
+#### Parameters
+
+
+ URL to validate.
+
+
+
+ When true, bypass the IP-blocklist check.
+
+
+#### Returns
+
+`bool` — True iff the URL is safe to fetch.
+
+#### Source
+
+[`src/utils/url_validator.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/utils/url_validator.cpp)
+
+Line 189.
+
+## Type Aliases
+
+### ResolverFn
+
+Pluggable resolver. Tests inject a callable to keep the suite hermetic; production resolves via getaddrinfo. Returns nullopt on resolution failure.
+The signature: function(hostname) -> optional\> of IP-string addresses.
+
+#### Signature
+
+```cpp
+typedef std::function< std::optional< std::vector< std::string > >(const std::string &)> ResolverFn
+```
+
+#### Source
+
+[`include/signalwire/utils/url_validator.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/utils/url_validator.hpp)
+
+Line 32.
+
+## Source
+
+[`include/signalwire/utils/url_validator.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/utils/url_validator.hpp)
+
+Line 16.
diff --git a/fern/products/sdk-reference/cpp/core/utils/verb-info/index.mdx b/fern/products/sdk-reference/cpp/core/utils/verb-info/index.mdx
new file mode 100644
index 0000000000..c37e17c299
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/core/utils/verb-info/index.mdx
@@ -0,0 +1,38 @@
+---
+slug: "/reference/cpp/core/utils/verb-info"
+title: "VerbInfo"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::utils::VerbInfo"
+ parent: "signalwire::utils"
+ module: "core.utils"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/utils/schema_utils.hpp"
+ visibility: "public"
+---
+# `VerbInfo`
+
+Verb metadata extracted from the schema.
+
+## Signature
+
+```cpp
+struct signalwire::utils::VerbInfo
+```
+
+## Properties
+
+
+
+
+
+
+
+## Source
+
+[`include/signalwire/utils/schema_utils.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/utils/schema_utils.hpp)
+
+Line 52.
diff --git a/fern/products/sdk-reference/cpp/index.mdx b/fern/products/sdk-reference/cpp/index.mdx
new file mode 100644
index 0000000000..5eb406e921
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/index.mdx
@@ -0,0 +1,17 @@
+---
+title: "C++ SDK"
+slug: "/reference/cpp"
+lustri:
+ auto_generated: true
+ language: "cpp"
+ kind: "sdk"
+---
+# C++ SDK Reference
+
+## Modules
+
+- [`agents`](/docs/sdk-reference/reference/cpp/agents)
+- [`core`](/docs/sdk-reference/reference/cpp/core)
+- [`relay`](/docs/sdk-reference/reference/cpp/relay)
+- [`rest`](/docs/sdk-reference/reference/cpp/rest)
+
diff --git a/fern/products/sdk-reference/cpp/relay/action/index.mdx b/fern/products/sdk-reference/cpp/relay/action/index.mdx
new file mode 100644
index 0000000000..96b6155efc
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/relay/action/index.mdx
@@ -0,0 +1,640 @@
+---
+slug: "/reference/cpp/relay/action"
+title: "Action"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::relay::Action"
+ parent: "signalwire::relay"
+ module: "relay"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/action.hpp"
+ visibility: "public"
+---
+# `Action`
+
+Represents a controllable in-progress operation (play, record, collect, etc.) Uses shared internal state so the object can be copied/moved freely while maintaining a single underlying condition\_variable for synchronization.
+
+## Signature
+
+```cpp
+class signalwire::relay::Action
+```
+
+## Methods
+
+### Action
+
+#### Signature
+
+
+
+ ```cpp
+ void Action()
+ ```
+
+
+
+ ```cpp
+ void Action(const std::string & control_id)
+ ```
+
+
+
+ ```cpp
+ void Action(
+ const std::string & control_id,
+ RelayClient * client,
+ const std::string & call_id,
+ const std::string & node_id
+ )
+ ```
+
+
+
+#### Parameters (Overload 2)
+
+
+
+#### Parameters (Overload 3)
+
+
+
+
+
+
+
+
+
+#### Source
+
+[`include/signalwire/relay/action.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/action.hpp)
+
+Line 27.
+
+***
+
+### call\_id
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const std::string & call_id() const
+```
+
+#### Returns
+
+`const std::string &`
+
+#### Source
+
+[`include/signalwire/relay/action.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/action.hpp)
+
+Line 36.
+
+***
+
+### completed
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+bool completed() const
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/relay/action.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/action.hpp)
+
+Line 34.
+
+***
+
+### control\_id
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const std::string & control_id() const
+```
+
+#### Returns
+
+`const std::string &`
+
+#### Source
+
+[`include/signalwire/relay/action.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/action.hpp)
+
+Line 32.
+
+***
+
+### event\_type\_filter
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const std::vector< std::string > & event_type_filter() const
+```
+
+#### Returns
+
+`const std::vector< std::string > &`
+
+#### Source
+
+[`include/signalwire/relay/action.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/action.hpp)
+
+Line 56.
+
+***
+
+### event\_type\_matches
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+bool event_type_matches(const std::string & event_type) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/relay/action.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/action.hpp)
+
+Line 59.
+
+***
+
+### method\_prefix
+
+Method prefix used for sub-command frames (stop/pause/resume/...). Defaults to "calling.play"; set explicitly when an Action is built for a different verb (record, collect, detect, ...). The Call::execute\_action factory plumbs this through.
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const std::string & method_prefix() const
+```
+
+#### Returns
+
+`const std::string &`
+
+#### Source
+
+[`include/signalwire/relay/action.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/action.hpp)
+
+Line 43.
+
+***
+
+### node\_id
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const std::string & node_id() const
+```
+
+#### Returns
+
+`const std::string &`
+
+#### Source
+
+[`include/signalwire/relay/action.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/action.hpp)
+
+Line 37.
+
+***
+
+### on\_completed
+
+Set a callback to fire when the action completes.
+
+#### Signature
+
+```cpp
+void on_completed(CompletedCallback cb)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/relay/action.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/action.hpp)
+
+Line 112.
+
+***
+
+### pause
+
+Request the server to pause this action. extra\_params may carry e.g. \{"behavior": "continuous"\} for record-side pause.
+
+#### Signature
+
+```cpp
+void pause(const json & extra_params = json::object())
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/relay/action.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/action.hpp)
+
+Line 98.
+
+***
+
+### resolve
+
+Resolve the action immediately (used for call-gone scenarios).
+
+#### Signature
+
+```cpp
+void resolve(
+ const std::string & final_state = "finished",
+ const json & result = json::object()
+)
+```
+
+#### Parameters
+
+
+
+
+
+#### Source
+
+[`include/signalwire/relay/action.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/action.hpp)
+
+Line 118.
+
+***
+
+### resolve\_on\_detect
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+bool resolve_on_detect() const
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/relay/action.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/action.hpp)
+
+Line 74.
+
+***
+
+### resolve\_on\_result
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+bool resolve_on_result() const
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/relay/action.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/action.hpp)
+
+Line 82.
+
+***
+
+### result
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+const json & result() const
+```
+
+#### Returns
+
+`const json &`
+
+#### Source
+
+[`include/signalwire/relay/action.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/action.hpp)
+
+Line 35.
+
+***
+
+### resume
+
+Request the server to resume this action.
+
+#### Signature
+
+```cpp
+void resume()
+```
+
+#### Source
+
+[`include/signalwire/relay/action.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/action.hpp)
+
+Line 101.
+
+***
+
+### set\_event\_type\_filter
+
+Set the wire-event types the Action should accept state updates from. Empty (the default) means "match any component event whose
+control\_id matches this Action". Used by play\_and\_collect to listen on calling.call.collect only — a calling.call.play(finished) must NOT resolve a play\_and\_collect action.
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void set_event_type_filter(const std::vector< std::string > & types)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/relay/action.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/action.hpp)
+
+Line 53.
+
+***
+
+### set\_method\_prefix
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void set_method_prefix(const std::string & prefix)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/relay/action.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/action.hpp)
+
+Line 44.
+
+***
+
+### set\_resolve\_on\_detect
+
+Detect actions resolve on the first event carrying a detect payload, not on a state(finished) — see Python's DetectAction. When this flag is set the action's update\_state path resolves only when params.detect is present.
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void set_resolve_on_detect(bool flag)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/relay/action.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/action.hpp)
+
+Line 71.
+
+***
+
+### set\_resolve\_on\_result
+
+Collect actions resolve when an event carries a result payload. A play(finished) earlier in the timeline does NOT resolve a CollectAction — see Python's CollectAction terminal-event logic.
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void set_resolve_on_result(bool flag)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/relay/action.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/action.hpp)
+
+Line 79.
+
+***
+
+### start\_input\_timers
+
+Start the inter-digit / final-digit timers on a collect. The matching Python method is StandaloneCollectAction.start\_input\_timers.
+
+#### Signature
+
+```cpp
+void start_input_timers()
+```
+
+#### Source
+
+[`include/signalwire/relay/action.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/action.hpp)
+
+Line 109.
+
+***
+
+### state
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+const std::string & state() const
+```
+
+#### Returns
+
+`const std::string &`
+
+#### Source
+
+[`include/signalwire/relay/action.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/action.hpp)
+
+Line 33.
+
+***
+
+### stop
+
+Request the server to stop this action. Routes to \.stop so an Action returned by record() sends calling.record.stop rather than calling.play.stop.
+
+#### Signature
+
+```cpp
+void stop()
+```
+
+#### Source
+
+[`include/signalwire/relay/action.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/action.hpp)
+
+Line 93.
+
+***
+
+### update\_state
+
+Update internal state (called by Call/Client when events arrive).
+
+#### Signature
+
+```cpp
+void update_state(
+ const std::string & new_state,
+ const json & result = json::object()
+)
+```
+
+#### Parameters
+
+
+
+
+
+#### Source
+
+[`include/signalwire/relay/action.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/action.hpp)
+
+Line 115.
+
+***
+
+### volume
+
+Adjust playback volume (play only). The frame body carries the supplied amount in dB; positive boosts, negative attenuates.
+
+#### Signature
+
+```cpp
+void volume(double amount)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/relay/action.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/action.hpp)
+
+Line 105.
+
+***
+
+### wait
+
+Block until the action completes or times out. \[\[nodiscard]]: the bool tells you whether the action actually completed vs. timed out — dropping it (then treating the action as done) is a bug.
+
+#### Signature
+
+```cpp
+bool wait(int timeout_ms = 0)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/relay/action.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/action.hpp)
+
+Line 88.
+
+## Type Aliases
+
+### CompletedCallback
+
+#### Signature
+
+```cpp
+typedef std::function< void(const Action &)> CompletedCallback
+```
+
+#### Source
+
+[`include/signalwire/relay/action.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/action.hpp)
+
+Line 25.
+
+## Source
+
+[`include/signalwire/relay/action.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/action.hpp)
+
+Line 23.
diff --git a/fern/products/sdk-reference/cpp/relay/call-event/index.mdx b/fern/products/sdk-reference/cpp/relay/call-event/index.mdx
new file mode 100644
index 0000000000..fc2d40eb63
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/relay/call-event/index.mdx
@@ -0,0 +1,72 @@
+---
+slug: "/reference/cpp/relay/call-event"
+title: "CallEvent"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::relay::CallEvent"
+ parent: "signalwire::relay"
+ module: "relay"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/relay_event.hpp"
+ visibility: "public"
+---
+# `CallEvent`
+
+Call-specific event parsed from calling.call.state and other call events.
+
+## Signature
+
+```cpp
+struct signalwire::relay::CallEvent : signalwire::relay::RelayEvent
+```
+
+## Inheritance
+
+**Extends:** [signalwire::relay::RelayEvent](/docs/sdk-reference/reference/cpp/relay/relay-event)
+
+## Properties
+
+
+
+
+
+
+
+
+
+
+
+## Methods
+
+### from\_relay\_event
+
+**Modifiers:** `static` `inline`
+
+#### Signature
+
+```cpp
+CallEvent from_relay_event(const RelayEvent & ev)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`CallEvent`
+
+#### Source
+
+[`include/signalwire/relay/relay_event.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/relay_event.hpp)
+
+Line 46.
+
+## Source
+
+[`include/signalwire/relay/relay_event.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/relay_event.hpp)
+
+Line 39.
diff --git a/fern/products/sdk-reference/cpp/relay/call/index.mdx b/fern/products/sdk-reference/cpp/relay/call/index.mdx
new file mode 100644
index 0000000000..ecddc91a40
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/relay/call/index.mdx
@@ -0,0 +1,1761 @@
+---
+slug: "/reference/cpp/relay/call"
+title: "Call"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::relay::Call"
+ parent: "signalwire::relay"
+ module: "relay"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp"
+ visibility: "public"
+---
+# `Call`
+
+Represents a live call with methods for call control. Uses shared internal state so the object can be copied/returned by value. All command methods send JSON-RPC requests through the RelayClient.
+
+## Signature
+
+```cpp
+class signalwire::relay::Call
+```
+
+## Methods
+
+### ai
+
+#### Signature
+
+```cpp
+Action ai(const json & params, const std::string & control_id = "")
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`Action`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 144.
+
+***
+
+### answer
+
+#### Signature
+
+```cpp
+Action answer()
+```
+
+#### Returns
+
+`Action`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 60.
+
+***
+
+### Call
+
+#### Signature
+
+
+
+ ```cpp
+ void Call()
+ ```
+
+
+
+ ```cpp
+ void Call(const std::string & call_id, const std::string & node_id)
+ ```
+
+
+
+ ```cpp
+ void Call(
+ const std::string & call_id,
+ const std::string & node_id,
+ RelayClient * client
+ )
+ ```
+
+
+
+#### Parameters (Overload 2)
+
+
+
+
+
+#### Parameters (Overload 3)
+
+
+
+
+
+
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 35.
+
+***
+
+### call\_id
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const std::string & call_id() const
+```
+
+#### Returns
+
+`const std::string &`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 40.
+
+***
+
+### call\_state
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+std::optional< CallState > call_state() const
+```
+
+#### Returns
+
+`std::optional< CallState >`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 48.
+
+***
+
+### collect
+
+#### Signature
+
+```cpp
+Action collect(const json & params, const std::string & control_id = "")
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`Action`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 116.
+
+***
+
+### connect
+
+#### Signature
+
+```cpp
+Action connect(const json & devices)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Action`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 118.
+
+***
+
+### detect
+
+#### Signature
+
+```cpp
+Action detect(const json & params, const std::string & control_id = "")
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`Action`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 120.
+
+***
+
+### detect\_answering\_machine
+
+#### Signature
+
+```cpp
+Action detect_answering_machine(
+ const json & amd_params = json::object(),
+ double timeout = -1.0
+)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`Action`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 130.
+
+***
+
+### detect\_digit
+
+#### Signature
+
+```cpp
+Action detect_digit(const std::string & digits = "", double timeout = -1.0)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`Action`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 129.
+
+***
+
+### detect\_fax
+
+#### Signature
+
+```cpp
+Action detect_fax(const std::string & tone = "", double timeout = -1.0)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`Action`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 132.
+
+***
+
+### direction
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const std::string & direction() const
+```
+
+#### Returns
+
+`const std::string &`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 51.
+
+***
+
+### disconnect
+
+#### Signature
+
+```cpp
+Action disconnect()
+```
+
+#### Returns
+
+`Action`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 119.
+
+***
+
+### dispatch\_event
+
+#### Signature
+
+```cpp
+void dispatch_event(const CallEvent & ev)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 190.
+
+***
+
+### execute\_swml
+
+#### Signature
+
+```cpp
+Action execute_swml(const json & swml)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Action`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 159.
+
+***
+
+### find\_action
+
+#### Signature
+
+```cpp
+Action * find_action(const std::string & control_id)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Action *`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 195.
+
+***
+
+### from
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const std::string & from() const
+```
+
+#### Returns
+
+`const std::string &`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 52.
+
+***
+
+### hangup
+
+#### Signature
+
+```cpp
+Action hangup(const std::string & reason = "hangup")
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Action`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 61.
+
+***
+
+### hold
+
+#### Signature
+
+```cpp
+Action hold()
+```
+
+#### Returns
+
+`Action`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 154.
+
+***
+
+### is\_answered
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+bool is_answered() const
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 56.
+
+***
+
+### is\_ended
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+bool is_ended() const
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 57.
+
+***
+
+### join\_conference
+
+#### Signature
+
+```cpp
+Action join_conference(
+ const std::string & name,
+ const json & params = json::object()
+)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`Action`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 157.
+
+***
+
+### join\_room
+
+#### Signature
+
+```cpp
+Action join_room(const std::string & name)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Action`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 158.
+
+***
+
+### live\_transcribe
+
+#### Signature
+
+```cpp
+Action live_transcribe(const json & params = json::object())
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Action`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 140.
+
+***
+
+### live\_translate
+
+#### Signature
+
+```cpp
+Action live_translate(const json & params = json::object())
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Action`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 143.
+
+***
+
+### node\_id
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const std::string & node_id() const
+```
+
+#### Returns
+
+`const std::string &`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 41.
+
+***
+
+### on\_event
+
+#### Signature
+
+```cpp
+void on_event(CallEventHandler handler)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 162.
+
+***
+
+### pay
+
+#### Signature
+
+```cpp
+Action pay(const json & params, const std::string & control_id = "")
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`Action`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 146.
+
+***
+
+### play
+
+#### Signature
+
+```cpp
+Action play(
+ const json & media,
+ double volume = 0.0,
+ const std::string & control_id = ""
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Returns
+
+`Action`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 62.
+
+***
+
+### play\_and\_collect
+
+#### Signature
+
+```cpp
+Action play_and_collect(
+ const json & play_media,
+ const json & collect_params,
+ const std::string & control_id = ""
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Returns
+
+`Action`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 95.
+
+***
+
+### play\_audio
+
+#### Signature
+
+```cpp
+Action play_audio(const std::string & url, double volume = 0.0)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`Action`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 85.
+
+***
+
+### play\_ringtone
+
+#### Signature
+
+```cpp
+Action play_ringtone(
+ const std::string & name,
+ double duration = -1.0,
+ double volume = 0.0
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Returns
+
+`Action`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 87.
+
+***
+
+### play\_silence
+
+#### Signature
+
+```cpp
+Action play_silence(double duration)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Action`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 86.
+
+***
+
+### play\_tts
+
+#### Signature
+
+
+
+ ```cpp
+ Action play_tts(
+ const std::string & text,
+ const std::string & language = "",
+ const std::string & gender = "",
+ const std::string & voice = "",
+ double volume = 0.0
+ )
+ ```
+
+
+
+ ```cpp
+ Action play_tts(
+ const std::string & text,
+ const std::string & language,
+ Gender gender,
+ const std::string & voice = "",
+ double volume = 0.0
+ )
+ ```
+
+
+
+#### Parameters (Overload 1)
+
+
+
+
+
+
+
+
+
+
+
+#### Parameters (Overload 2)
+
+
+
+
+
+
+
+
+
+
+
+#### Returns (Overload 1)
+
+`Action`
+
+#### Returns (Overload 2)
+
+`Action`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 69.
+
+***
+
+### prompt
+
+#### Signature
+
+```cpp
+Action prompt(
+ const json & play_media,
+ const json & collect_params,
+ const std::string & control_id = ""
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Returns
+
+`Action`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 93.
+
+***
+
+### prompt\_audio
+
+#### Signature
+
+```cpp
+Action prompt_audio(
+ const std::string & url,
+ const json & collect,
+ double volume = 0.0
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Returns
+
+`Action`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 114.
+
+***
+
+### prompt\_tts
+
+#### Signature
+
+
+
+ ```cpp
+ Action prompt_tts(
+ const std::string & text,
+ const json & collect,
+ const std::string & language = "",
+ const std::string & gender = "",
+ const std::string & voice = "",
+ double volume = 0.0
+ )
+ ```
+
+
+
+ ```cpp
+ Action prompt_tts(
+ const std::string & text,
+ const json & collect,
+ const std::string & language,
+ Gender gender,
+ const std::string & voice = "",
+ double volume = 0.0
+ )
+ ```
+
+
+
+#### Parameters (Overload 1)
+
+
+
+
+
+
+
+
+
+
+
+
+
+#### Parameters (Overload 2)
+
+
+
+
+
+
+
+
+
+
+
+
+
+#### Returns (Overload 1)
+
+`Action`
+
+#### Returns (Overload 2)
+
+`Action`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 100.
+
+***
+
+### receive\_fax
+
+#### Signature
+
+```cpp
+Action receive_fax(const std::string & control_id = "")
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Action`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 151.
+
+***
+
+### record
+
+#### Signature
+
+```cpp
+Action record(
+ const json & params = json::object(),
+ const std::string & control_id = ""
+)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`Action`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 90.
+
+***
+
+### record\_call
+
+#### Signature
+
+```cpp
+Action record_call(const json & params = json::object())
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Action`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 92.
+
+***
+
+### register\_action
+
+#### Signature
+
+```cpp
+void register_action(const std::string & control_id, Action * action)
+```
+
+#### Parameters
+
+
+
+
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 193.
+
+***
+
+### resolve\_all\_actions
+
+#### Signature
+
+```cpp
+void resolve_all_actions(const std::string & final_state = "finished")
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 198.
+
+***
+
+### send\_digits
+
+#### Signature
+
+```cpp
+Action send_digits(const std::string & digits)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Action`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 138.
+
+***
+
+### send\_fax
+
+#### Signature
+
+```cpp
+Action send_fax(
+ const std::string & document_url,
+ const std::string & header = "",
+ const std::string & identity = "",
+ const std::string & control_id = ""
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+#### Returns
+
+`Action`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 148.
+
+***
+
+### set\_client
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void set_client(RelayClient * c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 188.
+
+***
+
+### set\_direction
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void set_direction(const std::string & dir)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 184.
+
+***
+
+### set\_from
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void set_from(const std::string & f)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 185.
+
+***
+
+### set\_tag
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void set_tag(const std::string & t)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 187.
+
+***
+
+### set\_to
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void set_to(const std::string & t)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 186.
+
+***
+
+### sip\_refer
+
+#### Signature
+
+```cpp
+Action sip_refer(const std::string & to_uri)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Action`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 156.
+
+***
+
+### state
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const std::string & state() const
+```
+
+#### Returns
+
+`const std::string &`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 42.
+
+***
+
+### stop\_tap
+
+#### Signature
+
+```cpp
+Action stop_tap(const std::string & control_id)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Action`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 137.
+
+***
+
+### stream
+
+#### Signature
+
+```cpp
+Action stream(const json & params, const std::string & control_id = "")
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`Action`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 152.
+
+***
+
+### tag
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const std::string & tag() const
+```
+
+#### Returns
+
+`const std::string &`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 54.
+
+***
+
+### tap
+
+#### Signature
+
+```cpp
+Action tap(const json & params, const std::string & control_id = "")
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`Action`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 135.
+
+***
+
+### tap\_audio
+
+#### Signature
+
+```cpp
+Action tap_audio(const json & params, const std::string & control_id = "")
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`Action`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 133.
+
+***
+
+### to
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const std::string & to() const
+```
+
+#### Returns
+
+`const std::string &`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 53.
+
+***
+
+### transcribe
+
+#### Signature
+
+```cpp
+Action transcribe(
+ const json & params = json::object(),
+ const std::string & control_id = ""
+)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`Action`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 141.
+
+***
+
+### transfer
+
+#### Signature
+
+```cpp
+Action transfer(const json & params)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Action`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 139.
+
+***
+
+### unhold
+
+#### Signature
+
+```cpp
+Action unhold()
+```
+
+#### Returns
+
+`Action`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 155.
+
+***
+
+### unregister\_action
+
+#### Signature
+
+```cpp
+void unregister_action(const std::string & control_id)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 194.
+
+***
+
+### update\_state
+
+#### Signature
+
+```cpp
+void update_state(const std::string & new_state)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 183.
+
+***
+
+### wait\_for\_answered
+
+#### Signature
+
+```cpp
+bool wait_for_answered(int timeout_ms = 0)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 178.
+
+***
+
+### wait\_for\_ended
+
+#### Signature
+
+```cpp
+bool wait_for_ended(int timeout_ms = 0)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 166.
+
+***
+
+### wait\_for\_ending
+
+#### Signature
+
+```cpp
+bool wait_for_ending(int timeout_ms = 0)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 180.
+
+***
+
+### wait\_for\_ringing
+
+#### Signature
+
+```cpp
+bool wait_for_ringing(int timeout_ms = 0)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 179.
+
+## Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 33.
diff --git a/fern/products/sdk-reference/cpp/relay/component-event/index.mdx b/fern/products/sdk-reference/cpp/relay/component-event/index.mdx
new file mode 100644
index 0000000000..ad6349d129
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/relay/component-event/index.mdx
@@ -0,0 +1,68 @@
+---
+slug: "/reference/cpp/relay/component-event"
+title: "ComponentEvent"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::relay::ComponentEvent"
+ parent: "signalwire::relay"
+ module: "relay"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/relay_event.hpp"
+ visibility: "public"
+---
+# `ComponentEvent`
+
+Play/Record/Collect component event with control\_id for action routing.
+
+## Signature
+
+```cpp
+struct signalwire::relay::ComponentEvent : signalwire::relay::RelayEvent
+```
+
+## Inheritance
+
+**Extends:** [signalwire::relay::RelayEvent](/docs/sdk-reference/reference/cpp/relay/relay-event)
+
+## Properties
+
+
+
+
+
+
+
+## Methods
+
+### from\_relay\_event
+
+**Modifiers:** `static` `inline`
+
+#### Signature
+
+```cpp
+ComponentEvent from_relay_event(const RelayEvent & ev)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`ComponentEvent`
+
+#### Source
+
+[`include/signalwire/relay/relay_event.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/relay_event.hpp)
+
+Line 72.
+
+## Source
+
+[`include/signalwire/relay/relay_event.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/relay_event.hpp)
+
+Line 67.
diff --git a/fern/products/sdk-reference/cpp/relay/device/index.mdx b/fern/products/sdk-reference/cpp/relay/device/index.mdx
new file mode 100644
index 0000000000..8015d6671d
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/relay/device/index.mdx
@@ -0,0 +1,94 @@
+---
+slug: "/reference/cpp/relay/device"
+title: "Device"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::relay::Device"
+ parent: "signalwire::relay"
+ module: "relay"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/device.hpp"
+ visibility: "public"
+---
+# `Device`
+
+## Signature
+
+```cpp
+struct signalwire::relay::Device
+```
+
+## Properties
+
+
+ Type-specific parameters (e.g. \{"to\_number","from\_number"\} for "phone"). Free json map — the wire schema is additionalProperties:true.
+
+
+
+ REQUIRED endpoint-type discriminant. Open set (not schema-enumerated) → kept a std::string. Common values: "phone", "sip", "webrtc".
+
+
+## Methods
+
+### Device
+
+#### Signature
+
+
+
+ ```cpp
+ void Device()
+ ```
+
+
+
+ ```cpp
+ void Device(std::string type_, json params_ = json::object())
+ ```
+
+
+
+#### Parameters (Overload 2)
+
+
+
+
+
+#### Source
+
+[`include/signalwire/relay/device.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/device.hpp)
+
+Line 40.
+
+***
+
+### to\_json
+
+Serialize to the exact RELAY device wire shape: \{"type":..,"params":..\}. Byte-identical to the hand-written map the raw-json call sites build.
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json to_json() const
+```
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/relay/device.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/device.hpp)
+
+Line 46.
+
+## Source
+
+[`include/signalwire/relay/device.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/device.hpp)
+
+Line 32.
diff --git a/fern/products/sdk-reference/cpp/relay/dial-event/index.mdx b/fern/products/sdk-reference/cpp/relay/dial-event/index.mdx
new file mode 100644
index 0000000000..8e18431289
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/relay/dial-event/index.mdx
@@ -0,0 +1,90 @@
+---
+slug: "/reference/cpp/relay/dial-event"
+title: "DialEvent"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::relay::DialEvent"
+ parent: "signalwire::relay"
+ module: "relay"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/relay_event.hpp"
+ visibility: "public"
+---
+# `DialEvent`
+
+Dial-specific event with nested call info and tag-based correlation.
+
+## Signature
+
+```cpp
+struct signalwire::relay::DialEvent : signalwire::relay::RelayEvent
+```
+
+## Inheritance
+
+**Extends:** [signalwire::relay::RelayEvent](/docs/sdk-reference/reference/cpp/relay/relay-event)
+
+## Properties
+
+
+
+
+
+
+
+## Methods
+
+### dial\_state\_enum
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+std::optional< DialState > dial_state_enum() const
+```
+
+#### Returns
+
+`std::optional< DialState >`
+
+#### Source
+
+[`include/signalwire/relay/relay_event.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/relay_event.hpp)
+
+Line 119.
+
+***
+
+### from\_relay\_event
+
+**Modifiers:** `static` `inline`
+
+#### Signature
+
+```cpp
+DialEvent from_relay_event(const RelayEvent & ev)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`DialEvent`
+
+#### Source
+
+[`include/signalwire/relay/relay_event.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/relay_event.hpp)
+
+Line 123.
+
+## Source
+
+[`include/signalwire/relay/relay_event.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/relay_event.hpp)
+
+Line 109.
diff --git a/fern/products/sdk-reference/cpp/relay/index.mdx b/fern/products/sdk-reference/cpp/relay/index.mdx
new file mode 100644
index 0000000000..4ad55ae62c
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/relay/index.mdx
@@ -0,0 +1,690 @@
+---
+slug: "/reference/cpp/relay"
+title: "relay"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "module"
+ language: "cpp"
+ qualified_name: "signalwire::relay"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/action.hpp"
+---
+# `relay`
+
+## Signature
+
+```cpp
+namespace signalwire::relay
+```
+
+## Constants
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Classes
+
+
+
+ Represents a controllable in-progress operation (play, record, collect, etc.) Uses shared internal state so the object can be copied/moved freely while maintaining a single underlying condition\_variable for synchronization.
+
+
+
+ Represents a live call with methods for call control. Uses shared internal state so the object can be copied/returned by value. All command methods send JSON-RPC requests through the RelayClient.
+
+
+
+ Call-specific event parsed from calling.call.state and other call events.
+
+
+
+ Play/Record/Collect component event with control\_id for action routing.
+
+
+
+
+
+ Dial-specific event with nested call info and tag-based correlation.
+
+
+
+ Represents an SMS/MMS message tracked through delivery states. States: "queued", "initiated", "sent", "delivered", "undelivered", "failed" Uses shared internal state so the object can be copied/returned by value — copies of a Message observe the same state updates as the underlying instance the registry tracks.
+
+
+
+ Messaging event for SMS/MMS state changes and inbound messages.
+
+
+
+ Real-time call control and messaging client over WebSocket. Implements the full JSON-RPC 2.0 protocol with four correlation mechanisms: JSON-RPC id -> pending map for RPC response matching call\_id -> Call object map for event routing control\_id -> Action per Call for action event routing tag -> pending dials map for dial event matching
+
+
+
+ Configuration for the RELAY client.
+
+
+
+ Base class for all RELAY events parsed from signalwire.event JSON-RPC messages.
+
+
+
+ WebSocket client for the RELAY JSON-RPC transport. Wraps IXWebSocket (cross-platform, OpenSSL-backed TLS) while preserving a minimal synchronous interface: connect() blocks until the handshake completes (or fails/times out), send() pushes a text frame, and the on\_message / on\_close / on\_error callbacks are invoked from IXWebSocket's background event thread. RFC 6455 framing, ping/pong, and TLS are handled by IXWebSocket — this class only adapts its async event model to the synchronous connect() contract relay::RelayClient depends on. TLS certificate verification is ALWAYS on for the connect() (wss://) path. To trust a private/self-signed CA (e.g. the porting-sdk test CA), set the SSL\_CERT\_FILE environment variable to the CA bundle — the same cross-port idiom the other ports honor; it is wired into ix::SocketTLSOptions::caFile. When unset, the system trust store is used (production / public CAs).
+
+
+
+## Functions
+
+### call\_state\_from\_string
+
+Parse a wire string into a CallState. Returns std::nullopt for any value not in the known set (server may introduce new states) — NEVER throws.
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+std::optional< CallState > call_state_from_string(const std::string & s)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`std::optional< CallState >`
+
+#### Source
+
+[`include/signalwire/relay/states.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/states.hpp)
+
+Line 83.
+
+***
+
+### call\_state\_value
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+std::string call_state_value(CallState v)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/relay/states.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/states.hpp)
+
+Line 67.
+
+***
+
+### dial\_state\_from\_string
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+std::optional< DialState > dial_state_from_string(const std::string & s)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`std::optional< DialState >`
+
+#### Source
+
+[`include/signalwire/relay/states.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/states.hpp)
+
+Line 121.
+
+***
+
+### dial\_state\_value
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+std::string dial_state_value(DialState v)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/relay/states.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/states.hpp)
+
+Line 110.
+
+***
+
+### is\_terminal
+
+Terminal == no further transitions. For a call that is ended.
+
+**Modifiers:** `inline`
+
+#### Signature
+
+
+
+ ```cpp
+ bool is_terminal(CallState v)
+ ```
+
+
+
+ ```cpp
+ bool is_terminal(DialState v)
+ ```
+
+
+
+ ```cpp
+ bool is_terminal(MessageState v)
+ ```
+
+
+
+#### Parameters (Overload 1)
+
+
+
+#### Parameters (Overload 2)
+
+
+
+#### Parameters (Overload 3)
+
+
+
+#### Returns (Overload 1)
+
+`bool`
+
+#### Returns (Overload 2)
+
+`bool`
+
+#### Returns (Overload 3)
+
+`bool`
+
+#### Source
+
+[`include/signalwire/relay/states.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/states.hpp)
+
+Line 93.
+
+***
+
+### message\_state\_from\_string
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+std::optional< MessageState > message_state_from_string(const std::string & s)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`std::optional< MessageState >`
+
+#### Source
+
+[`include/signalwire/relay/states.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/states.hpp)
+
+Line 168.
+
+***
+
+### message\_state\_value
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+std::string message_state_value(MessageState v)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/relay/states.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/states.hpp)
+
+Line 153.
+
+***
+
+### to\_string
+
+to\_string ADL overload — same wire string as call\_state\_value.
+
+**Modifiers:** `inline`
+
+#### Signature
+
+
+
+ ```cpp
+ std::string to_string(CallState v)
+ ```
+
+
+
+ ```cpp
+ std::string to_string(DialState v)
+ ```
+
+
+
+ ```cpp
+ std::string to_string(MessageState v)
+ ```
+
+
+
+ ```cpp
+ std::string to_string(Gender gender)
+ ```
+
+
+
+#### Parameters (Overload 1)
+
+
+
+#### Parameters (Overload 2)
+
+
+
+#### Parameters (Overload 3)
+
+
+
+#### Parameters (Overload 4)
+
+
+
+#### Returns (Overload 1)
+
+`std::string`
+
+#### Returns (Overload 2)
+
+`std::string`
+
+#### Returns (Overload 3)
+
+`std::string`
+
+#### Returns (Overload 4)
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/relay/states.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/states.hpp)
+
+Line 79.
+
+***
+
+### tts\_gender\_value
+
+Map a Gender to its canonical wire string (the value emitted under the TTS media params' gender key). This is the single normalization point shared by the typed play\_tts / prompt\_tts overloads, so their behavior is identical to passing the bare string.
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+std::string tts_gender_value(Gender gender)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/relay/tts_gender.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/tts_gender.hpp)
+
+Line 37.
+
+## Type Aliases
+
+### CallEventHandler
+
+Callback for call events.
+
+#### Signature
+
+```cpp
+typedef std::function< void(const CallEvent &)> CallEventHandler
+```
+
+#### Source
+
+[`include/signalwire/relay/call.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/call.hpp)
+
+Line 28.
+
+***
+
+### EventHandler
+
+Generic callback for any inbound signalwire.event. Fired in addition to the typed handlers (on\_call, on\_message, action callbacks). Useful for tracing and for tests/audits that need to assert event delivery.
+
+#### Signature
+
+```cpp
+typedef std::function< void(const RelayEvent &)> EventHandler
+```
+
+#### Source
+
+[`include/signalwire/relay/client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/client.hpp)
+
+Line 37.
+
+***
+
+### InboundCallHandler
+
+Callback for inbound calls.
+
+#### Signature
+
+```cpp
+typedef std::function< void(Call &)> InboundCallHandler
+```
+
+#### Source
+
+[`include/signalwire/relay/client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/client.hpp)
+
+Line 29.
+
+***
+
+### InboundMessageHandler
+
+Callback for inbound messages.
+
+#### Signature
+
+```cpp
+typedef std::function< void(const Message &)> InboundMessageHandler
+```
+
+#### Source
+
+[`include/signalwire/relay/client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/client.hpp)
+
+Line 32.
+
+***
+
+### json
+
+#### Signature
+
+```cpp
+typedef nlohmann::json json
+```
+
+#### Source
+
+[`include/signalwire/relay/action.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/action.hpp)
+
+Line 16.
+
+## Enums
+
+### CallState
+
+Call lifecycle state. Mirrors CALL\_STATE\_\* / CALL\_STATES in relay/constants.py. Server-emitted and may grow → call\_state\_from\_string returns an optional on an unknown value.
+
+#### Signature
+
+```cpp
+enum class CallState
+```
+
+#### Variants
+
+
+
+
+
+
+
+
+
+
+
+#### Source
+
+[`include/signalwire/relay/states.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/states.hpp)
+
+Line 59.
+
+***
+
+### DialState
+
+Outbound-dial outcome state on the calling.call.dial event's dial\_state field. Grounded in RELAY\_IMPLEMENTATION\_GUIDE.md line 193: dialing (progress), answered (success), failed (all legs failed). DISTINCT from CallState — failed is dial-only; the dial RPC resolves on answered/failed. Server-emitted → dial\_state\_from\_string is optional.
+
+#### Signature
+
+```cpp
+enum class DialState
+```
+
+#### Variants
+
+
+
+
+
+
+
+#### Source
+
+[`include/signalwire/relay/states.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/states.hpp)
+
+Line 104.
+
+***
+
+### Gender
+
+TTS speaker gender as a typed, compile-time-checked closed set.
+Call::play\_tts() / Call::prompt\_tts() accept this enum class OR a std::string for their gender argument. The enum gives editor autocompletion and makes a typo fail at the call site — a bare string like "femaie" only fails at runtime, on the TTS engine. The string overload keeps parity with the Python reference (which uses a bare Optional\[str]) and still allows engine-/voice-specific values that aren't one of the two canonical genders. call.play\_tts("hi", "en-US", Gender::Female); // typed, autocompleted
+call.play\_tts("hi", "en-US", "female"); // string still works
+call.play\_tts("hi", "en-US", "neutral"); // open set: engine value
+
+Members are the two canonical say\_gender values the calling/fabric OpenAPI documents (female is the default; male is the only other documented value). tts\_gender\_value() maps each member to that wire string, so the enum and string overloads emit the identical TTS frame.
+
+#### Signature
+
+```cpp
+enum class Gender
+```
+
+#### Variants
+
+
+
+
+
+#### Source
+
+[`include/signalwire/relay/tts_gender.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/tts_gender.hpp)
+
+Line 28.
+
+***
+
+### MessageState
+
+SMS/MMS delivery state. Mirrors MESSAGE\_STATE\_\* in relay/constants.py. Terminal set == MESSAGE\_TERMINAL\_STATES \{delivered, undelivered, failed\}. NOTE failed here is the MESSAGE failure state — NOT DialState::Failed; the two vocabularies are separate and must not be unified. Server-emitted → message\_state\_from\_string is optional.
+
+#### Signature
+
+```cpp
+enum class MessageState
+```
+
+#### Variants
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#### Source
+
+[`include/signalwire/relay/states.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/states.hpp)
+
+Line 143.
+
+## Source
+
+[`include/signalwire/relay/action.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/action.hpp)
+
+Line 14.
diff --git a/fern/products/sdk-reference/cpp/relay/message-event/index.mdx b/fern/products/sdk-reference/cpp/relay/message-event/index.mdx
new file mode 100644
index 0000000000..30f42091b4
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/relay/message-event/index.mdx
@@ -0,0 +1,72 @@
+---
+slug: "/reference/cpp/relay/message-event"
+title: "MessageEvent"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::relay::MessageEvent"
+ parent: "signalwire::relay"
+ module: "relay"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/relay_event.hpp"
+ visibility: "public"
+---
+# `MessageEvent`
+
+Messaging event for SMS/MMS state changes and inbound messages.
+
+## Signature
+
+```cpp
+struct signalwire::relay::MessageEvent : signalwire::relay::RelayEvent
+```
+
+## Inheritance
+
+**Extends:** [signalwire::relay::RelayEvent](/docs/sdk-reference/reference/cpp/relay/relay-event)
+
+## Properties
+
+
+
+
+
+
+
+
+
+
+
+## Methods
+
+### from\_relay\_event
+
+**Modifiers:** `static` `inline`
+
+#### Signature
+
+```cpp
+MessageEvent from_relay_event(const RelayEvent & ev)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`MessageEvent`
+
+#### Source
+
+[`include/signalwire/relay/relay_event.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/relay_event.hpp)
+
+Line 93.
+
+## Source
+
+[`include/signalwire/relay/relay_event.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/relay_event.hpp)
+
+Line 86.
diff --git a/fern/products/sdk-reference/cpp/relay/message/index.mdx b/fern/products/sdk-reference/cpp/relay/message/index.mdx
new file mode 100644
index 0000000000..c2023c44f6
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/relay/message/index.mdx
@@ -0,0 +1,404 @@
+---
+slug: "/reference/cpp/relay/message"
+title: "Message"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::relay::Message"
+ parent: "signalwire::relay"
+ module: "relay"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/message.hpp"
+ visibility: "public"
+---
+# `Message`
+
+Represents an SMS/MMS message tracked through delivery states. States: "queued", "initiated", "sent", "delivered", "undelivered", "failed" Uses shared internal state so the object can be copied/returned by value — copies of a Message observe the same state updates as the underlying instance the registry tracks.
+
+## Signature
+
+```cpp
+struct signalwire::relay::Message
+```
+
+## Properties
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Methods
+
+### ~Message
+
+#### Signature
+
+```cpp
+void ~Message()
+```
+
+#### Source
+
+[`include/signalwire/relay/message.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/message.hpp)
+
+Line 31.
+
+***
+
+### from\_params
+
+Parse from a RELAY event params object.
+
+**Modifiers:** `static`
+
+#### Signature
+
+```cpp
+Message from_params(const json & params)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Message`
+
+#### Source
+
+[`include/signalwire/relay/message.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/message.hpp)
+
+Line 34.
+
+***
+
+### is\_delivered
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+bool is_delivered() const
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/relay/message.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/message.hpp)
+
+Line 61.
+
+***
+
+### is\_failed
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+bool is_failed() const
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/relay/message.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/message.hpp)
+
+Line 62.
+
+***
+
+### is\_terminal
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+bool is_terminal() const
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/relay/message.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/message.hpp)
+
+Line 66.
+
+***
+
+### Message
+
+#### Signature
+
+
+
+ ```cpp
+ void Message()
+ ```
+
+
+
+ ```cpp
+ void Message(const Message &)
+ ```
+
+
+
+#### Parameters (Overload 2)
+
+
+
+#### Source
+
+[`include/signalwire/relay/message.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/message.hpp)
+
+Line 28.
+
+***
+
+### message\_state
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+std::optional< MessageState > message_state() const
+```
+
+#### Returns
+
+`std::optional< MessageState >`
+
+#### Source
+
+[`include/signalwire/relay/message.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/message.hpp)
+
+Line 54.
+
+***
+
+### on\_completed
+
+Set callback for when message reaches terminal state. If the message is already terminal the callback fires immediately.
+
+#### Signature
+
+```cpp
+void on_completed(CompletedCallback cb)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/relay/message.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/message.hpp)
+
+Line 80.
+
+***
+
+### operator=
+
+#### Signature
+
+```cpp
+Message & operator=(const Message &)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Message &`
+
+#### Source
+
+[`include/signalwire/relay/message.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/message.hpp)
+
+Line 30.
+
+***
+
+### reason
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+const std::string & reason() const
+```
+
+#### Returns
+
+`const std::string &`
+
+#### Source
+
+[`include/signalwire/relay/message.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/message.hpp)
+
+Line 57.
+
+***
+
+### set\_reason
+
+#### Signature
+
+```cpp
+void set_reason(const std::string & r)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/relay/message.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/message.hpp)
+
+Line 59.
+
+***
+
+### set\_state
+
+#### Signature
+
+```cpp
+void set_state(const std::string & s)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/relay/message.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/message.hpp)
+
+Line 58.
+
+***
+
+### state
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+const std::string & state() const
+```
+
+#### Returns
+
+`const std::string &`
+
+#### Source
+
+[`include/signalwire/relay/message.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/message.hpp)
+
+Line 49.
+
+***
+
+### update\_state
+
+Update state from a messaging.state event. Notifies waiters / callbacks when the state is terminal.
+
+#### Signature
+
+```cpp
+void update_state(const std::string & new_state)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/relay/message.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/message.hpp)
+
+Line 70.
+
+***
+
+### wait
+
+Block until message reaches a terminal state. Returns true if terminal, false on timeout. \[\[nodiscard]]: the delivered-vs-timed-out result is the reason you called wait() — dropping it is a bug.
+
+#### Signature
+
+```cpp
+bool wait(int timeout_ms = 0)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/relay/message.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/message.hpp)
+
+Line 76.
+
+## Type Aliases
+
+### CompletedCallback
+
+#### Signature
+
+```cpp
+typedef std::function< void(const Message &)> CompletedCallback
+```
+
+#### Source
+
+[`include/signalwire/relay/message.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/message.hpp)
+
+Line 26.
+
+## Source
+
+[`include/signalwire/relay/message.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/message.hpp)
+
+Line 25.
diff --git a/fern/products/sdk-reference/cpp/relay/relay-client/index.mdx b/fern/products/sdk-reference/cpp/relay/relay-client/index.mdx
new file mode 100644
index 0000000000..1bfc3a4760
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/relay/relay-client/index.mdx
@@ -0,0 +1,581 @@
+---
+slug: "/reference/cpp/relay/relay-client"
+title: "RelayClient"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::relay::RelayClient"
+ parent: "signalwire::relay"
+ module: "relay"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/client.hpp"
+ visibility: "public"
+---
+# `RelayClient`
+
+Real-time call control and messaging client over WebSocket. Implements the full JSON-RPC 2.0 protocol with four correlation mechanisms:
+JSON-RPC id -> pending map for RPC response matching
+call\_id -> Call object map for event routing
+control\_id -> Action per Call for action event routing
+tag -> pending dials map for dial event matching
+
+## Signature
+
+```cpp
+class signalwire::relay::RelayClient
+```
+
+## Methods
+
+### ~RelayClient
+
+#### Signature
+
+```cpp
+void ~RelayClient()
+```
+
+#### Source
+
+[`include/signalwire/relay/client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/client.hpp)
+
+Line 67.
+
+***
+
+### config
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const RelayConfig & config() const
+```
+
+#### Returns
+
+`const RelayConfig &`
+
+#### Source
+
+[`include/signalwire/relay/client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/client.hpp)
+
+Line 132.
+
+***
+
+### connect
+
+#### Signature
+
+```cpp
+bool connect()
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/relay/client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/client.hpp)
+
+Line 77.
+
+***
+
+### dial
+
+Dial outbound. The devices argument is the nested "device-of-leg-of-leg" array used by the Python SDK (\[\[\{type:phone,...\}]]). Returns a Call once the server emits calling.call.dial(answered) for the dial's tag, or an empty Call on timeout / failure.
+tag lets callers pin an explicit dial tag for journal-based assertions; if blank, a UUID is generated. dial\_timeout\_ms caps how long dial() blocks waiting for the server's terminal dial event. max\_duration (seconds) is forwarded into the calling.dial frame when non-zero.
+
+#### Signature
+
+```cpp
+Call dial(
+ const json & devices,
+ const std::string & tag = "",
+ int dial_timeout_ms = 120000,
+ int max_duration = 0
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+#### Returns
+
+`Call`
+
+#### Source
+
+[`include/signalwire/relay/client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/client.hpp)
+
+Line 97.
+
+***
+
+### disconnect
+
+#### Signature
+
+```cpp
+void disconnect()
+```
+
+#### Source
+
+[`include/signalwire/relay/client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/client.hpp)
+
+Line 78.
+
+***
+
+### execute
+
+#### Signature
+
+```cpp
+json execute(const std::string & method, const json & params)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/relay/client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/client.hpp)
+
+Line 136.
+
+***
+
+### find\_call
+
+#### Signature
+
+```cpp
+Call * find_call(const std::string & call_id)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Call *`
+
+#### Source
+
+[`include/signalwire/relay/client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/client.hpp)
+
+Line 141.
+
+***
+
+### from\_env
+
+Construct from environment variables: SIGNALWIRE\_PROJECT\_ID, SIGNALWIRE\_API\_TOKEN, SIGNALWIRE\_SPACE
+
+**Modifiers:** `static`
+
+#### Signature
+
+```cpp
+RelayClient from_env()
+```
+
+#### Returns
+
+`RelayClient`
+
+#### Source
+
+[`include/signalwire/relay/client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/client.hpp)
+
+Line 74.
+
+***
+
+### is\_connected
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+bool is_connected() const
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/relay/client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/client.hpp)
+
+Line 80.
+
+***
+
+### on\_call
+
+#### Signature
+
+```cpp
+void on_call(InboundCallHandler handler)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/relay/client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/client.hpp)
+
+Line 83.
+
+***
+
+### on\_event
+
+Register a generic event observer. Called for every dispatched signalwire.event after typed routing (on\_call/on\_message/action callbacks) has run. Multiple registrations are NOT supported — the most-recent registration wins.
+
+#### Signature
+
+```cpp
+void on_event(EventHandler handler)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/relay/client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/client.hpp)
+
+Line 106.
+
+***
+
+### on\_message
+
+#### Signature
+
+```cpp
+void on_message(InboundMessageHandler handler)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/relay/client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/client.hpp)
+
+Line 114.
+
+***
+
+### operator=
+
+#### Signature
+
+```cpp
+RelayClient & operator=(const RelayClient &)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`RelayClient &`
+
+#### Source
+
+[`include/signalwire/relay/client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/client.hpp)
+
+Line 70.
+
+***
+
+### register\_call
+
+#### Signature
+
+```cpp
+void register_call(const std::string & call_id, Call * call)
+```
+
+#### Parameters
+
+
+
+
+
+#### Source
+
+[`include/signalwire/relay/client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/client.hpp)
+
+Line 139.
+
+***
+
+### relay\_protocol
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const std::string & relay_protocol() const
+```
+
+#### Returns
+
+`const std::string &`
+
+#### Source
+
+[`include/signalwire/relay/client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/client.hpp)
+
+Line 133.
+
+***
+
+### RelayClient
+
+Construct from explicit configuration.
+
+**Modifiers:** `explicit`
+
+#### Signature
+
+
+
+ ```cpp
+ void RelayClient(const RelayConfig & config = RelayConfig{})
+ ```
+
+
+
+ ```cpp
+ void RelayClient(
+ const std::string & project,
+ const std::string & token,
+ const std::string & host = DEFAULT_HOST,
+ const std::vector< std::string > & contexts = {"default"}
+ )
+ ```
+
+
+
+ ```cpp
+ void RelayClient(const RelayClient &)
+ ```
+
+
+
+#### Parameters (Overload 1)
+
+
+
+#### Parameters (Overload 2)
+
+
+
+
+
+
+
+
+
+#### Parameters (Overload 3)
+
+
+
+#### Source
+
+[`include/signalwire/relay/client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/client.hpp)
+
+Line 59.
+
+***
+
+### run
+
+#### Signature
+
+```cpp
+void run()
+```
+
+#### Source
+
+[`include/signalwire/relay/client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/client.hpp)
+
+Line 79.
+
+***
+
+### send\_message
+
+Send an SMS/MMS message via messaging.send. Returns a Message tracker whose state advances as the server pushes messaging.state events. Use Message::wait() to block until the terminal state (delivered / undelivered / failed).
+
+#### Signature
+
+```cpp
+Message send_message(
+ const std::string & from,
+ const std::string & to,
+ const std::string & body,
+ const std::vector< std::string > & media = {},
+ const std::vector< std::string > & tags = {},
+ const std::string & region = "",
+ const std::string & context = ""
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#### Returns
+
+`Message`
+
+#### Source
+
+[`include/signalwire/relay/client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/client.hpp)
+
+Line 120.
+
+***
+
+### send\_raw\_request
+
+Send a JSON-RPC request to the server. Public so harnesses and tests can drive arbitrary methods (e.g. an explicit signalwire.subscribe ack frame for the audit fixture).
+
+#### Signature
+
+```cpp
+json send_raw_request(const std::string & method, const json & params)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/relay/client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/client.hpp)
+
+Line 111.
+
+***
+
+### subscribe
+
+#### Signature
+
+```cpp
+void subscribe(const std::vector< std::string > & contexts)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/relay/client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/client.hpp)
+
+Line 128.
+
+***
+
+### unregister\_call
+
+#### Signature
+
+```cpp
+void unregister_call(const std::string & call_id)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/relay/client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/client.hpp)
+
+Line 140.
+
+***
+
+### unsubscribe
+
+#### Signature
+
+```cpp
+void unsubscribe(const std::vector< std::string > & contexts)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/relay/client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/client.hpp)
+
+Line 129.
+
+## Source
+
+[`include/signalwire/relay/client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/client.hpp)
+
+Line 56.
diff --git a/fern/products/sdk-reference/cpp/relay/relay-config/index.mdx b/fern/products/sdk-reference/cpp/relay/relay-config/index.mdx
new file mode 100644
index 0000000000..4f15cda87b
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/relay/relay-config/index.mdx
@@ -0,0 +1,46 @@
+---
+slug: "/reference/cpp/relay/relay-config"
+title: "RelayConfig"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::relay::RelayConfig"
+ parent: "signalwire::relay"
+ module: "relay"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/client.hpp"
+ visibility: "public"
+---
+# `RelayConfig`
+
+Configuration for the RELAY client.
+
+## Signature
+
+```cpp
+struct signalwire::relay::RelayConfig
+```
+
+## Properties
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Source
+
+[`include/signalwire/relay/client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/client.hpp)
+
+Line 40.
diff --git a/fern/products/sdk-reference/cpp/relay/relay-event/index.mdx b/fern/products/sdk-reference/cpp/relay/relay-event/index.mdx
new file mode 100644
index 0000000000..81b3045691
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/relay/relay-event/index.mdx
@@ -0,0 +1,98 @@
+---
+slug: "/reference/cpp/relay/relay-event"
+title: "RelayEvent"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::relay::RelayEvent"
+ parent: "signalwire::relay"
+ module: "relay"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/relay_event.hpp"
+ visibility: "public"
+---
+# `RelayEvent`
+
+Base class for all RELAY events parsed from signalwire.event JSON-RPC messages.
+
+## Signature
+
+```cpp
+struct signalwire::relay::RelayEvent
+```
+
+## Properties
+
+
+
+
+
+
+
+
+
+## Methods
+
+### from\_json
+
+Parse from a signalwire.event params JSON. The outer params contains event\_type and the inner params with event-specific data.
+
+**Modifiers:** `static` `inline`
+
+#### Signature
+
+```cpp
+RelayEvent from_json(const json & j)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`RelayEvent`
+
+#### Source
+
+[`include/signalwire/relay/relay_event.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/relay_event.hpp)
+
+Line 29.
+
+***
+
+### RelayEvent
+
+#### Signature
+
+
+
+ ```cpp
+ void RelayEvent()
+ ```
+
+
+
+ ```cpp
+ void RelayEvent(const std::string & type)
+ ```
+
+
+
+#### Parameters (Overload 2)
+
+
+
+#### Source
+
+[`include/signalwire/relay/relay_event.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/relay_event.hpp)
+
+Line 24.
+
+## Source
+
+[`include/signalwire/relay/relay_event.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/relay_event.hpp)
+
+Line 17.
diff --git a/fern/products/sdk-reference/cpp/relay/web-socket-client/index.mdx b/fern/products/sdk-reference/cpp/relay/web-socket-client/index.mdx
new file mode 100644
index 0000000000..227824c055
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/relay/web-socket-client/index.mdx
@@ -0,0 +1,352 @@
+---
+slug: "/reference/cpp/relay/web-socket-client"
+title: "WebSocketClient"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::relay::WebSocketClient"
+ parent: "signalwire::relay"
+ module: "relay"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/websocket.hpp"
+ visibility: "public"
+---
+# `WebSocketClient`
+
+WebSocket client for the RELAY JSON-RPC transport.
+Wraps IXWebSocket (cross-platform, OpenSSL-backed TLS) while preserving a minimal synchronous interface: connect() blocks until the handshake completes (or fails/times out), send() pushes a text frame, and the on\_message / on\_close / on\_error callbacks are invoked from IXWebSocket's background event thread. RFC 6455 framing, ping/pong, and TLS are handled by IXWebSocket — this class only adapts its async event model to the synchronous connect() contract relay::RelayClient depends on.
+TLS certificate verification is ALWAYS on for the connect() (wss://) path. To trust a private/self-signed CA (e.g. the porting-sdk test CA), set the SSL\_CERT\_FILE environment variable to the CA bundle — the same cross-port idiom the other ports honor; it is wired into ix::SocketTLSOptions::caFile. When unset, the system trust store is used (production / public CAs).
+
+## Signature
+
+```cpp
+class signalwire::relay::WebSocketClient
+```
+
+## Methods
+
+### ~WebSocketClient
+
+#### Signature
+
+```cpp
+void ~WebSocketClient()
+```
+
+#### Source
+
+[`include/signalwire/relay/websocket.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/websocket.hpp)
+
+Line 42.
+
+***
+
+### close
+
+Close the WebSocket connection gracefully.
+
+#### Signature
+
+```cpp
+void close(int code = 1000, const std::string & reason = "")
+```
+
+#### Parameters
+
+
+
+
+
+#### Source
+
+[`include/signalwire/relay/websocket.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/websocket.hpp)
+
+Line 58.
+
+***
+
+### connect
+
+Connect to wss://host:port/ with TLS. Blocks until the WebSocket is open or the attempt fails/times out. Verifies the server certificate against the system store (or SSL\_CERT\_FILE when set).
+
+#### Signature
+
+```cpp
+bool connect(const std::string & host, int port = 443)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/relay/websocket.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/websocket.hpp)
+
+Line 50.
+
+***
+
+### connect\_plain
+
+Connect to ws://host:port/ without TLS (plain TCP). Used by audit fixtures and local dev servers that don't speak TLS. Production always uses TLS via the connect() overload above.
+
+#### Signature
+
+```cpp
+bool connect_plain(const std::string & host, int port)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/relay/websocket.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/websocket.hpp)
+
+Line 55.
+
+***
+
+### is\_connected
+
+Check if connected.
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+bool is_connected() const
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/relay/websocket.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/websocket.hpp)
+
+Line 64.
+
+***
+
+### on\_close
+
+Set callback for connection close.
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void on_close(CloseCallback cb)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/relay/websocket.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/websocket.hpp)
+
+Line 70.
+
+***
+
+### on\_error
+
+Set callback for errors.
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void on_error(ErrorCallback cb)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/relay/websocket.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/websocket.hpp)
+
+Line 73.
+
+***
+
+### on\_message
+
+Set callback for received text messages.
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void on_message(MessageCallback cb)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/relay/websocket.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/websocket.hpp)
+
+Line 67.
+
+***
+
+### operator=
+
+#### Signature
+
+```cpp
+WebSocketClient & operator=(const WebSocketClient &)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`WebSocketClient &`
+
+#### Source
+
+[`include/signalwire/relay/websocket.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/websocket.hpp)
+
+Line 45.
+
+***
+
+### send
+
+Send a text frame.
+
+#### Signature
+
+```cpp
+bool send(const std::string & message)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/relay/websocket.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/websocket.hpp)
+
+Line 61.
+
+***
+
+### WebSocketClient
+
+#### Signature
+
+
+
+ ```cpp
+ void WebSocketClient()
+ ```
+
+
+
+ ```cpp
+ void WebSocketClient(const WebSocketClient &)
+ ```
+
+
+
+#### Parameters (Overload 2)
+
+
+
+#### Source
+
+[`include/signalwire/relay/websocket.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/websocket.hpp)
+
+Line 41.
+
+## Type Aliases
+
+### CloseCallback
+
+#### Signature
+
+```cpp
+typedef std::function< void(int code, const std::string &reason)> CloseCallback
+```
+
+#### Source
+
+[`include/signalwire/relay/websocket.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/websocket.hpp)
+
+Line 38.
+
+***
+
+### ErrorCallback
+
+#### Signature
+
+```cpp
+typedef std::function< void(const std::string &error)> ErrorCallback
+```
+
+#### Source
+
+[`include/signalwire/relay/websocket.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/websocket.hpp)
+
+Line 39.
+
+***
+
+### MessageCallback
+
+#### Signature
+
+```cpp
+typedef std::function< void(const std::string &)> MessageCallback
+```
+
+#### Source
+
+[`include/signalwire/relay/websocket.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/websocket.hpp)
+
+Line 37.
+
+## Source
+
+[`include/signalwire/relay/websocket.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/relay/websocket.hpp)
+
+Line 35.
diff --git a/fern/products/sdk-reference/cpp/rest/crud-resource/index.mdx b/fern/products/sdk-reference/cpp/rest/crud-resource/index.mdx
new file mode 100644
index 0000000000..af46670525
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/crud-resource/index.mdx
@@ -0,0 +1,184 @@
+---
+slug: "/reference/cpp/rest/crud-resource"
+title: "CrudResource"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::CrudResource"
+ parent: "signalwire::rest"
+ module: "rest"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/http_client.hpp"
+ visibility: "public"
+---
+# `CrudResource`
+
+Generic CRUD resource for REST API namespaces.
+
+## Signature
+
+```cpp
+class signalwire::rest::CrudResource
+```
+
+## Methods
+
+### create
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+json create(const json & data) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/http_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/http_client.hpp)
+
+Line 96.
+
+***
+
+### CrudResource
+
+#### Signature
+
+```cpp
+void CrudResource(const HttpClient & client, const std::string & base_path)
+```
+
+#### Parameters
+
+
+
+
+
+#### Source
+
+[`include/signalwire/rest/http_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/http_client.hpp)
+
+Line 91.
+
+***
+
+### del
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+json del(const std::string & id) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/http_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/http_client.hpp)
+
+Line 99.
+
+***
+
+### get
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+json get(const std::string & id) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/http_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/http_client.hpp)
+
+Line 97.
+
+***
+
+### list
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+json list(const std::map< std::string, std::string > & params = {}) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/http_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/http_client.hpp)
+
+Line 95.
+
+***
+
+### update
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+json update(const std::string & id, const json & data) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/http_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/http_client.hpp)
+
+Line 98.
+
+## Source
+
+[`include/signalwire/rest/http_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/http_client.hpp)
+
+Line 89.
diff --git a/fern/products/sdk-reference/cpp/rest/http-client/index.mdx b/fern/products/sdk-reference/cpp/rest/http-client/index.mdx
new file mode 100644
index 0000000000..dd36b599e0
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/http-client/index.mdx
@@ -0,0 +1,299 @@
+---
+slug: "/reference/cpp/rest/http-client"
+title: "HttpClient"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::HttpClient"
+ parent: "signalwire::rest"
+ module: "rest"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/http_client.hpp"
+ visibility: "public"
+---
+# `HttpClient`
+
+HTTP client with Basic Auth support using cpp-httplib.
+
+## Signature
+
+```cpp
+class signalwire::rest::HttpClient
+```
+
+## Methods
+
+### base\_url
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const std::string & base_url() const
+```
+
+#### Returns
+
+`const std::string &`
+
+#### Source
+
+[`include/signalwire/rest/http_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/http_client.hpp)
+
+Line 74.
+
+***
+
+### del
+
+DELETE request.
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+json del(const std::string & path) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/http_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/http_client.hpp)
+
+Line 58.
+
+***
+
+### get
+
+GET request.
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+json get(
+ const std::string & path,
+ const std::map< std::string, std::string > & params = {}
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/http_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/http_client.hpp)
+
+Line 42.
+
+***
+
+### HttpClient
+
+#### Signature
+
+```cpp
+void HttpClient(
+ const std::string & base_url,
+ const std::string & username,
+ const std::string & password
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Source
+
+[`include/signalwire/rest/http_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/http_client.hpp)
+
+Line 33.
+
+***
+
+### patch
+
+PATCH request.
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+json patch(const std::string & path, const json & body = json::object()) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/http_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/http_client.hpp)
+
+Line 54.
+
+***
+
+### post
+
+POST request.
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+json post(const std::string & path, const json & body = json::object()) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/http_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/http_client.hpp)
+
+Line 46.
+
+***
+
+### put
+
+PUT request.
+
+**Modifiers:** `const`
+
+#### Signature
+
+```cpp
+json put(const std::string & path, const json & body = json::object()) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/http_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/http_client.hpp)
+
+Line 50.
+
+***
+
+### set\_ca\_cert\_path
+
+Trust a private/self-signed CA bundle (PEM) for https:// requests. Sets the underlying SSLClient's CA path and keeps server-certificate verification ON. Production (public CAs) needs no call — the system trust store is used, and SSL\_CERT\_FILE is also honored automatically. C++-only ergonomic hook (Python's requests-based client trusts a custom CA via the SSL\_CERT\_FILE / REQUESTS\_CA\_BUNDLE env vars instead).
+
+#### Signature
+
+```cpp
+void set_ca_cert_path(const std::string & path)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/http_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/http_client.hpp)
+
+Line 72.
+
+***
+
+### set\_header
+
+Set additional default headers.
+
+#### Signature
+
+```cpp
+void set_header(const std::string & key, const std::string & value)
+```
+
+#### Parameters
+
+
+
+
+
+#### Source
+
+[`include/signalwire/rest/http_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/http_client.hpp)
+
+Line 61.
+
+***
+
+### set\_timeout
+
+Set request timeout in seconds.
+
+#### Signature
+
+```cpp
+void set_timeout(int seconds)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/http_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/http_client.hpp)
+
+Line 64.
+
+## Source
+
+[`include/signalwire/rest/http_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/http_client.hpp)
+
+Line 31.
diff --git a/fern/products/sdk-reference/cpp/rest/index.mdx b/fern/products/sdk-reference/cpp/rest/index.mdx
new file mode 100644
index 0000000000..e07c3648bd
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/index.mdx
@@ -0,0 +1,256 @@
+---
+slug: "/reference/cpp/rest"
+title: "rest"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "module"
+ language: "cpp"
+ qualified_name: "signalwire::rest"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/http_client.hpp"
+---
+# `rest`
+
+## Signature
+
+```cpp
+namespace signalwire::rest
+```
+
+## Classes
+
+
+
+ Generic CRUD resource for REST API namespaces.
+
+
+
+ HTTP client with Basic Auth support using cpp-httplib.
+
+
+
+ Iterates items across paginated API responses. Mirrors signalwire-python's signalwire.rest.\_pagination.PaginatedIterator: fetches the configured path with the configured params, walks the data\_key array, then follows links.next (parsing its query string for the next page's params) until the response carries no links.next. Iteration is lazy the constructor records inputs but performs no HTTP. The first has\_next() / next() call performs the first fetch. Cursor query params are extracted by parsing links.next like Python's urllib.parse.urlparse + parse\_qs.
+
+
+
+ Top-level SignalWire REST client with all API namespaces.
+
+
+
+ Error thrown on non-2xx REST API responses.
+
+
+
+## Functions
+
+### make\_headers
+
+**Modifiers:** `static`
+
+#### Signature
+
+```cpp
+httplib::Headers make_headers(
+ const std::string & auth,
+ const std::map< std::string, std::string > & extra
+)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`httplib::Headers`
+
+#### Source
+
+[`src/rest/http_client.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/rest/http_client.cpp)
+
+Line 103.
+
+***
+
+### parse\_url
+
+**Modifiers:** `static`
+
+#### Signature
+
+```cpp
+std::pair< std::string, std::string > parse_url(const std::string & base_url)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`std::pair< std::string, std::string >`
+
+#### Source
+
+[`src/rest/http_client.cpp`](https://github.com/signalwire/signalwire-cpp/blob/main/src/rest/http_client.cpp)
+
+Line 91.
+
+***
+
+### to\_wire\_string
+
+Serialize a PhoneCallHandler to its wire string.
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+std::string to_wire_string(PhoneCallHandler h)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/rest/phone_call_handler.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/phone_call_handler.hpp)
+
+Line 54.
+
+## Type Aliases
+
+### json
+
+#### Signature
+
+```cpp
+typedef nlohmann::json json
+```
+
+#### Source
+
+[`include/signalwire/rest/http_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/http_client.hpp)
+
+Line 16.
+
+## Enums
+
+### PhoneCallHandler
+
+Enumeration of call\_handler values accepted by phone\_numbers.update.
+Setting a phone number's call\_handler + the handler-specific companion field routes inbound calls and auto-materializes the matching Fabric resource on the server. The typed set\_\* helpers on PhoneNumbersNamespace wrap the low-level update call with the right combination — prefer those over constructing the wire body by hand.
+Named PhoneCallHandler (not CallHandler) to avoid colliding with signalwire::relay::InboundCallHandler — the callback type used by the RELAY client for inbound-call events.
+
+Enum value\
+Wire value\
+Companion field\
+Auto-materializes
+
+RelayScript\
+relay\_script\
+call\_relay\_script\_url\
+swml\_webhook
+
+LamlWebhooks\
+laml\_webhooks\
+call\_request\_url\
+cxml\_webhook
+
+LamlApplication\
+laml\_application\
+call\_laml\_application\_id\
+cxml\_application
+
+AiAgent\
+ai\_agent\
+call\_ai\_agent\_id\
+ai\_agent
+
+CallFlow\
+call\_flow\
+call\_flow\_id\
+call\_flow
+
+RelayApplication\
+relay\_application\
+call\_relay\_application\
+relay\_application
+
+RelayTopic\
+relay\_topic\
+call\_relay\_topic\
+(RELAY routing)
+
+RelayContext\
+relay\_context\
+call\_relay\_context\
+(legacy)
+
+RelayConnector\
+relay\_connector\
+(connector config)\
+(internal)
+
+VideoRoom\
+video\_room\
+call\_video\_room\_id\
+(Video API)
+
+Dialogflow\
+dialogflow\
+call\_dialogflow\_agent\_id\
+(none)
+
+Note: LamlWebhooks (wire value laml\_webhooks) produces a cXML handler despite the plural name. For SWML, use RelayScript.
+
+#### Signature
+
+```cpp
+enum class PhoneCallHandler
+```
+
+#### Variants
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#### Source
+
+[`include/signalwire/rest/phone_call_handler.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/phone_call_handler.hpp)
+
+Line 39.
+
+## Source
+
+[`include/signalwire/rest/http_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/http_client.hpp)
+
+Line 14.
diff --git a/fern/products/sdk-reference/cpp/rest/paginated-iterator/index.mdx b/fern/products/sdk-reference/cpp/rest/paginated-iterator/index.mdx
new file mode 100644
index 0000000000..044499e2d1
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/paginated-iterator/index.mdx
@@ -0,0 +1,261 @@
+---
+slug: "/reference/cpp/rest/paginated-iterator"
+title: "PaginatedIterator"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::PaginatedIterator"
+ parent: "signalwire::rest"
+ module: "rest"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/http_client.hpp"
+ visibility: "public"
+---
+# `PaginatedIterator`
+
+Iterates items across paginated API responses.
+Mirrors signalwire-python's signalwire.rest.\_pagination.PaginatedIterator: fetches the configured path with the configured params, walks the data\_key array, then follows links.next (parsing its query string for the next page's params) until the response carries no links.next.
+Iteration is lazy the constructor records inputs but performs no HTTP. The first has\_next() / next() call performs the first fetch. Cursor query params are extracted by parsing links.next like Python's urllib.parse.urlparse + parse\_qs.
+
+## Signature
+
+```cpp
+class signalwire::rest::PaginatedIterator
+```
+
+## Methods
+
+### data\_key
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const std::string & data_key() const
+```
+
+#### Returns
+
+`const std::string &`
+
+#### Source
+
+[`include/signalwire/rest/http_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/http_client.hpp)
+
+Line 140.
+
+***
+
+### done
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+bool done() const
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/rest/http_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/http_client.hpp)
+
+Line 143.
+
+***
+
+### has\_next
+
+Returns true if another item can be fetched. Performs HTTP if the in-memory buffer is exhausted but more pages remain. \[\[nodiscard]]: this is the loop condition — discarding it loses the "more items?" answer (and the side-effecting page fetch is not why you'd call it).
+
+#### Signature
+
+```cpp
+bool has_next()
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`include/signalwire/rest/http_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/http_client.hpp)
+
+Line 129.
+
+***
+
+### http
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const HttpClient & http() const
+```
+
+#### Returns
+
+`const HttpClient &`
+
+#### Source
+
+[`include/signalwire/rest/http_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/http_client.hpp)
+
+Line 137.
+
+***
+
+### index
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+size_t index() const
+```
+
+#### Returns
+
+`size_t`
+
+#### Source
+
+[`include/signalwire/rest/http_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/http_client.hpp)
+
+Line 141.
+
+***
+
+### items
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const std::vector< json > & items() const
+```
+
+#### Returns
+
+`const std::vector< json > &`
+
+#### Source
+
+[`include/signalwire/rest/http_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/http_client.hpp)
+
+Line 142.
+
+***
+
+### next
+
+Returns the next item; throws std::out\_of\_range when the iterator is exhausted (mirrors Python's StopIteration). \[\[nodiscard]]: dropping the returned item silently consumes it.
+
+#### Signature
+
+```cpp
+json next()
+```
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/http_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/http_client.hpp)
+
+Line 134.
+
+***
+
+### PaginatedIterator
+
+#### Signature
+
+```cpp
+void PaginatedIterator(
+ const HttpClient & http,
+ const std::string & path,
+ const std::map< std::string, std::string > & params = {},
+ const std::string & data_key = "data"
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+#### Source
+
+[`include/signalwire/rest/http_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/http_client.hpp)
+
+Line 119.
+
+***
+
+### params
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const std::map< std::string, std::string > & params() const
+```
+
+#### Returns
+
+`const std::map< std::string, std::string > &`
+
+#### Source
+
+[`include/signalwire/rest/http_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/http_client.hpp)
+
+Line 139.
+
+***
+
+### path
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const std::string & path() const
+```
+
+#### Returns
+
+`const std::string &`
+
+#### Source
+
+[`include/signalwire/rest/http_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/http_client.hpp)
+
+Line 138.
+
+## Source
+
+[`include/signalwire/rest/http_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/http_client.hpp)
+
+Line 117.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/addresses-namespace/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/addresses-namespace/index.mdx
new file mode 100644
index 0000000000..f97d55e269
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/addresses-namespace/index.mdx
@@ -0,0 +1,54 @@
+---
+slug: "/reference/cpp/rest/rest-client/addresses-namespace"
+title: "AddressesNamespace"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::AddressesNamespace"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `AddressesNamespace`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::AddressesNamespace : signalwire::rest::CrudResource
+```
+
+## Inheritance
+
+**Extends:** [signalwire::rest::CrudResource](/docs/sdk-reference/reference/cpp/rest/crud-resource)
+
+## Methods
+
+### AddressesNamespace
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void AddressesNamespace(const HttpClient & c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1146.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1145.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/calling-namespace/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/calling-namespace/index.mdx
new file mode 100644
index 0000000000..9a0c1a149b
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/calling-namespace/index.mdx
@@ -0,0 +1,1413 @@
+---
+slug: "/reference/cpp/rest/rest-client/calling-namespace"
+title: "CallingNamespace"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::CallingNamespace"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `CallingNamespace`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::CallingNamespace
+```
+
+## Properties
+
+
+
+## Methods
+
+### ai\_hold
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json ai_hold(
+ const std::string & call_id,
+ const json & params = json::object()
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 394.
+
+***
+
+### ai\_message
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json ai_message(const std::string & call_id, const json & params) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 391.
+
+***
+
+### ai\_stop
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json ai_stop(
+ const std::string & call_id,
+ const json & params = json::object()
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 402.
+
+***
+
+### ai\_unhold
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json ai_unhold(
+ const std::string & call_id,
+ const json & params = json::object()
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 398.
+
+***
+
+### answer
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json answer(const std::string & id) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 446.
+
+***
+
+### CallingNamespace
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void CallingNamespace(const HttpClient & c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 275.
+
+***
+
+### collect
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json collect(const std::string & call_id, const json & params) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 338.
+
+***
+
+### collect\_start\_input\_timers
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json collect_start_input_timers(
+ const std::string & call_id,
+ const json & params
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 344.
+
+***
+
+### collect\_stop
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json collect_stop(const std::string & call_id, const json & params) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 341.
+
+***
+
+### connect
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json connect(const std::string & id, const json & data) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 444.
+
+***
+
+### denoise
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json denoise(
+ const std::string & call_id,
+ const json & params = json::object()
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 374.
+
+***
+
+### denoise\_stop
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json denoise_stop(const std::string & call_id, const json & params) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 378.
+
+***
+
+### detect
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json detect(const std::string & call_id, const json & params) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 350.
+
+***
+
+### detect\_stop
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json detect_stop(const std::string & call_id, const json & params) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 353.
+
+***
+
+### dial
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json dial(const json & params) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 294.
+
+***
+
+### disconnect
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json disconnect(
+ const std::string & call_id,
+ const json & params = json::object()
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 302.
+
+***
+
+### end
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json end(
+ const std::string & call_id,
+ const json & params = json::object()
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 296.
+
+***
+
+### end\_call
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json end_call(const std::string & id) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 443.
+
+***
+
+### execute
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json execute(
+ const std::string & command,
+ const json & params,
+ const std::optional< std::string > & call_id = std::nullopt
+) const
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 285.
+
+***
+
+### get\_call
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json get_call(const std::string & id) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 441.
+
+***
+
+### hangup
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json hangup(const std::string & id) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 447.
+
+***
+
+### hold
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json hold(const std::string & id) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 448.
+
+***
+
+### list\_calls
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json list_calls(const std::map< std::string, std::string > & p = {}) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 440.
+
+***
+
+### live\_transcribe
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json live_transcribe(const std::string & call_id, const json & params) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 408.
+
+***
+
+### live\_translate
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json live_translate(const std::string & call_id, const json & params) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 411.
+
+***
+
+### play
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json play(const std::string & call_id, const json & params) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 307.
+
+***
+
+### play\_pause
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json play_pause(const std::string & call_id, const json & params) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 310.
+
+***
+
+### play\_resume
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json play_resume(const std::string & call_id, const json & params) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 313.
+
+***
+
+### play\_stop
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json play_stop(const std::string & call_id, const json & params) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 316.
+
+***
+
+### play\_volume
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json play_volume(const std::string & call_id, const json & params) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 319.
+
+***
+
+### receive\_fax\_stop
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json receive_fax_stop(
+ const std::string & call_id,
+ const json & params = json::object()
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 420.
+
+***
+
+### record
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json record(const std::string & call_id, const json & params) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 324.
+
+***
+
+### record\_pause
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json record_pause(const std::string & call_id, const json & params) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 327.
+
+***
+
+### record\_resume
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json record_resume(const std::string & call_id, const json & params) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 330.
+
+***
+
+### record\_stop
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json record_stop(const std::string & call_id, const json & params) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 333.
+
+***
+
+### refer
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json refer(const std::string & call_id, const json & params) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 426.
+
+***
+
+### send\_digits
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json send_digits(const std::string & id, const json & data) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 445.
+
+***
+
+### send\_fax\_stop
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json send_fax_stop(
+ const std::string & call_id,
+ const json & params = json::object()
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 416.
+
+***
+
+### stream
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json stream(const std::string & call_id, const json & params) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 366.
+
+***
+
+### stream\_stop
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json stream_stop(const std::string & call_id, const json & params) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 369.
+
+***
+
+### tap
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json tap(const std::string & call_id, const json & params) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 358.
+
+***
+
+### tap\_stop
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json tap_stop(const std::string & call_id, const json & params) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 361.
+
+***
+
+### transcribe
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json transcribe(const std::string & call_id, const json & params) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 383.
+
+***
+
+### transcribe\_stop
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json transcribe_stop(const std::string & call_id, const json & params) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 386.
+
+***
+
+### transfer
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json transfer(const std::string & call_id, const json & params) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 299.
+
+***
+
+### unhold
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json unhold(const std::string & id) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 449.
+
+***
+
+### update
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json update(const json & params) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 295.
+
+***
+
+### update\_call
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json update_call(const std::string & id, const json & data) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 442.
+
+***
+
+### user\_event
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json user_event(const std::string & call_id, const json & params) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 431.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 272.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/chat-namespace/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/chat-namespace/index.mdx
new file mode 100644
index 0000000000..d70590c1bb
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/chat-namespace/index.mdx
@@ -0,0 +1,106 @@
+---
+slug: "/reference/cpp/rest/rest-client/chat-namespace"
+title: "ChatNamespace"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::ChatNamespace"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `ChatNamespace`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::ChatNamespace
+```
+
+## Properties
+
+
+
+## Methods
+
+### ChatNamespace
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void ChatNamespace(const HttpClient & c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1423.
+
+***
+
+### list\_messages
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json list_messages(const std::map< std::string, std::string > & p = {}) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1425.
+
+***
+
+### send\_message
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json send_message(const json & data) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1424.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1421.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/compat-accounts/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/compat-accounts/index.mdx
new file mode 100644
index 0000000000..daa01ced69
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/compat-accounts/index.mdx
@@ -0,0 +1,162 @@
+---
+slug: "/reference/cpp/rest/rest-client/compat-accounts"
+title: "CompatAccounts"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::CompatAccounts"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `CompatAccounts`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::CompatAccounts
+```
+
+## Properties
+
+
+
+
+
+## Methods
+
+### CompatAccounts
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void CompatAccounts(const HttpClient & c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 930.
+
+***
+
+### create
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json create(const json & data) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 934.
+
+***
+
+### get
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json get(const std::string & sid) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 935.
+
+***
+
+### list
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json list(const std::map< std::string, std::string > & params = {}) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 931.
+
+***
+
+### update
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json update(const std::string & sid, const json & data) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 939.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 927.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/compat-applications/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/compat-applications/index.mdx
new file mode 100644
index 0000000000..0fdf4dc428
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/compat-applications/index.mdx
@@ -0,0 +1,84 @@
+---
+slug: "/reference/cpp/rest/rest-client/compat-applications"
+title: "CompatApplications"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::CompatApplications"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `CompatApplications`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::CompatApplications : signalwire::rest::CrudResource
+```
+
+## Inheritance
+
+**Extends:** [signalwire::rest::CrudResource](/docs/sdk-reference/reference/cpp/rest/crud-resource)
+
+## Methods
+
+### CompatApplications
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void CompatApplications(const HttpClient & c, const std::string & base)
+```
+
+#### Parameters
+
+
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 945.
+
+***
+
+### update
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json update(const std::string & sid, const json & data) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 947.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 944.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/compat-calls/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/compat-calls/index.mdx
new file mode 100644
index 0000000000..fc2777d86e
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/compat-calls/index.mdx
@@ -0,0 +1,208 @@
+---
+slug: "/reference/cpp/rest/rest-client/compat-calls"
+title: "CompatCalls"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::CompatCalls"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `CompatCalls`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::CompatCalls : signalwire::rest::CrudResource
+```
+
+## Inheritance
+
+**Extends:** [signalwire::rest::CrudResource](/docs/sdk-reference/reference/cpp/rest/crud-resource)
+
+## Methods
+
+### CompatCalls
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void CompatCalls(const HttpClient & c, const std::string & base)
+```
+
+#### Parameters
+
+
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 803.
+
+***
+
+### start\_recording
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json start_recording(const std::string & call_sid, const json & data) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 812.
+
+***
+
+### start\_stream
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json start_stream(const std::string & call_sid, const json & data) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 822.
+
+***
+
+### stop\_stream
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json stop_stream(
+ const std::string & call_sid,
+ const std::string & stream_sid,
+ const json & data
+) const
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 825.
+
+***
+
+### update
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json update(const std::string & sid, const json & data) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 807.
+
+***
+
+### update\_recording
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json update_recording(
+ const std::string & call_sid,
+ const std::string & recording_sid,
+ const json & data
+) const
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 815.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 802.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/compat-conferences/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/compat-conferences/index.mdx
new file mode 100644
index 0000000000..e2d50408f4
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/compat-conferences/index.mdx
@@ -0,0 +1,454 @@
+---
+slug: "/reference/cpp/rest/rest-client/compat-conferences"
+title: "CompatConferences"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::CompatConferences"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `CompatConferences`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::CompatConferences
+```
+
+## Properties
+
+
+
+
+
+## Methods
+
+### CompatConferences
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void CompatConferences(const HttpClient & c, const std::string & base)
+```
+
+#### Parameters
+
+
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 963.
+
+***
+
+### delete\_recording
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json delete_recording(
+ const std::string & conference_sid,
+ const std::string & recording_sid
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1009.
+
+***
+
+### get
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json get(const std::string & sid) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 969.
+
+***
+
+### get\_participant
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json get_participant(
+ const std::string & conference_sid,
+ const std::string & call_sid
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 981.
+
+***
+
+### get\_recording
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json get_recording(
+ const std::string & conference_sid,
+ const std::string & recording_sid
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1000.
+
+***
+
+### list
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json list(const std::map< std::string, std::string > & params = {}) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 966.
+
+***
+
+### list\_participants
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json list_participants(
+ const std::string & conference_sid,
+ const std::map< std::string, std::string > & params = {}
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 977.
+
+***
+
+### list\_recordings
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json list_recordings(
+ const std::string & conference_sid,
+ const std::map< std::string, std::string > & params = {}
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 996.
+
+***
+
+### remove\_participant
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json remove_participant(
+ const std::string & conference_sid,
+ const std::string & call_sid
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 990.
+
+***
+
+### start\_stream
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json start_stream(const std::string & conference_sid, const json & data) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1015.
+
+***
+
+### stop\_stream
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json stop_stream(
+ const std::string & conference_sid,
+ const std::string & stream_sid,
+ const json & data
+) const
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1018.
+
+***
+
+### update
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json update(const std::string & sid, const json & data) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 972.
+
+***
+
+### update\_participant
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json update_participant(
+ const std::string & conference_sid,
+ const std::string & call_sid,
+ const json & data
+) const
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 985.
+
+***
+
+### update\_recording
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json update_recording(
+ const std::string & conference_sid,
+ const std::string & recording_sid,
+ const json & data
+) const
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1004.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 960.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/compat-faxes/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/compat-faxes/index.mdx
new file mode 100644
index 0000000000..024bf56529
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/compat-faxes/index.mdx
@@ -0,0 +1,174 @@
+---
+slug: "/reference/cpp/rest/rest-client/compat-faxes"
+title: "CompatFaxes"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::CompatFaxes"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `CompatFaxes`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::CompatFaxes : signalwire::rest::CrudResource
+```
+
+## Inheritance
+
+**Extends:** [signalwire::rest::CrudResource](/docs/sdk-reference/reference/cpp/rest/crud-resource)
+
+## Methods
+
+### CompatFaxes
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void CompatFaxes(const HttpClient & c, const std::string & base)
+```
+
+#### Parameters
+
+
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 855.
+
+***
+
+### delete\_media
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json delete_media(
+ const std::string & fax_sid,
+ const std::string & media_sid
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 870.
+
+***
+
+### get\_media
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json get_media(const std::string & fax_sid, const std::string & media_sid) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 866.
+
+***
+
+### list\_media
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json list_media(
+ const std::string & fax_sid,
+ const std::map< std::string, std::string > & params = {}
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 862.
+
+***
+
+### update
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json update(const std::string & sid, const json & data) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 858.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 854.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/compat-laml-bins/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/compat-laml-bins/index.mdx
new file mode 100644
index 0000000000..7101298e88
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/compat-laml-bins/index.mdx
@@ -0,0 +1,84 @@
+---
+slug: "/reference/cpp/rest/rest-client/compat-laml-bins"
+title: "CompatLamlBins"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::CompatLamlBins"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `CompatLamlBins`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::CompatLamlBins : signalwire::rest::CrudResource
+```
+
+## Inheritance
+
+**Extends:** [signalwire::rest::CrudResource](/docs/sdk-reference/reference/cpp/rest/crud-resource)
+
+## Methods
+
+### CompatLamlBins
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void CompatLamlBins(const HttpClient & c, const std::string & base)
+```
+
+#### Parameters
+
+
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 953.
+
+***
+
+### update
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json update(const std::string & sid, const json & data) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 955.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 952.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/compat-messages/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/compat-messages/index.mdx
new file mode 100644
index 0000000000..a7322ce90b
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/compat-messages/index.mdx
@@ -0,0 +1,177 @@
+---
+slug: "/reference/cpp/rest/rest-client/compat-messages"
+title: "CompatMessages"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::CompatMessages"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `CompatMessages`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::CompatMessages : signalwire::rest::CrudResource
+```
+
+## Inheritance
+
+**Extends:** [signalwire::rest::CrudResource](/docs/sdk-reference/reference/cpp/rest/crud-resource)
+
+## Methods
+
+### CompatMessages
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void CompatMessages(const HttpClient & c, const std::string & base)
+```
+
+#### Parameters
+
+
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 833.
+
+***
+
+### delete\_media
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json delete_media(
+ const std::string & message_sid,
+ const std::string & media_sid
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 848.
+
+***
+
+### get\_media
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json get_media(
+ const std::string & message_sid,
+ const std::string & media_sid
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 844.
+
+***
+
+### list\_media
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json list_media(
+ const std::string & message_sid,
+ const std::map< std::string, std::string > & params = {}
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 840.
+
+***
+
+### update
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json update(const std::string & sid, const json & data) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 836.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 832.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/compat-namespace/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/compat-namespace/index.mdx
new file mode 100644
index 0000000000..edd7334b68
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/compat-namespace/index.mdx
@@ -0,0 +1,186 @@
+---
+slug: "/reference/cpp/rest/rest-client/compat-namespace"
+title: "CompatNamespace"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::CompatNamespace"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `CompatNamespace`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::CompatNamespace
+```
+
+## Properties
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Methods
+
+### CompatNamespace
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void CompatNamespace(const HttpClient & c, const std::string & account_sid)
+```
+
+#### Parameters
+
+
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1111.
+
+***
+
+### create\_call
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json create_call(const json & data) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1131.
+
+***
+
+### list\_calls
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json list_calls(const std::map< std::string, std::string > & p = {}) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1133.
+
+***
+
+### list\_messages
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json list_messages(const std::map< std::string, std::string > & p = {}) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1134.
+
+***
+
+### send\_message
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json send_message(const json & data) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1132.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1093.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/compat-phone-numbers/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/compat-phone-numbers/index.mdx
new file mode 100644
index 0000000000..47c84083bb
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/compat-phone-numbers/index.mdx
@@ -0,0 +1,284 @@
+---
+slug: "/reference/cpp/rest/rest-client/compat-phone-numbers"
+title: "CompatPhoneNumbers"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::CompatPhoneNumbers"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `CompatPhoneNumbers`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::CompatPhoneNumbers
+```
+
+## Properties
+
+
+
+
+
+
+
+
+
+## Methods
+
+### CompatPhoneNumbers
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void CompatPhoneNumbers(const HttpClient & c, const std::string & account_base)
+```
+
+#### Parameters
+
+
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 882.
+
+***
+
+### get
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json get(const std::string & sid) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 891.
+
+***
+
+### import\_number
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json import_number(const json & data) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 903.
+
+***
+
+### list
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json list(const std::map< std::string, std::string > & params = {}) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 888.
+
+***
+
+### list\_available\_countries
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json list_available_countries(
+ const std::map< std::string, std::string > & params = {}
+) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 906.
+
+***
+
+### purchase
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json purchase(const json & data) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 900.
+
+***
+
+### search\_local
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json search_local(
+ const std::string & country,
+ const std::map< std::string, std::string > & params = {}
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 909.
+
+***
+
+### search\_toll\_free
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json search_toll_free(
+ const std::string & country,
+ const std::map< std::string, std::string > & params = {}
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 913.
+
+***
+
+### update
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json update(const std::string & sid, const json & data) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 894.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 876.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/compat-queues/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/compat-queues/index.mdx
new file mode 100644
index 0000000000..17f2e9d3e4
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/compat-queues/index.mdx
@@ -0,0 +1,180 @@
+---
+slug: "/reference/cpp/rest/rest-client/compat-queues"
+title: "CompatQueues"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::CompatQueues"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `CompatQueues`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::CompatQueues : signalwire::rest::CrudResource
+```
+
+## Inheritance
+
+**Extends:** [signalwire::rest::CrudResource](/docs/sdk-reference/reference/cpp/rest/crud-resource)
+
+## Methods
+
+### CompatQueues
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void CompatQueues(const HttpClient & c, const std::string & base)
+```
+
+#### Parameters
+
+
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1026.
+
+***
+
+### dequeue\_member
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json dequeue_member(
+ const std::string & queue_sid,
+ const std::string & call_sid,
+ const json & data
+) const
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1039.
+
+***
+
+### get\_member
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json get_member(
+ const std::string & queue_sid,
+ const std::string & call_sid
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1035.
+
+***
+
+### list\_members
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json list_members(
+ const std::string & queue_sid,
+ const std::map< std::string, std::string > & params = {}
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1031.
+
+***
+
+### update
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json update(const std::string & sid, const json & data) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1028.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1025.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/compat-recordings/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/compat-recordings/index.mdx
new file mode 100644
index 0000000000..994ce9b6a3
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/compat-recordings/index.mdx
@@ -0,0 +1,110 @@
+---
+slug: "/reference/cpp/rest/rest-client/compat-recordings"
+title: "CompatRecordings"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::CompatRecordings"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `CompatRecordings`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::CompatRecordings
+```
+
+## Properties
+
+
+
+
+
+## Methods
+
+### CompatRecordings
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void CompatRecordings(const HttpClient & c, const std::string & base)
+```
+
+#### Parameters
+
+
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1049.
+
+***
+
+### get
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json get(const std::string & sid) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1054.
+
+***
+
+### list
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json list(const std::map< std::string, std::string > & params = {}) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1051.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1046.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/compat-tokens/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/compat-tokens/index.mdx
new file mode 100644
index 0000000000..f6b4ea1e2a
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/compat-tokens/index.mdx
@@ -0,0 +1,112 @@
+---
+slug: "/reference/cpp/rest/rest-client/compat-tokens"
+title: "CompatTokens"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::CompatTokens"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `CompatTokens`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::CompatTokens
+```
+
+## Properties
+
+
+
+
+
+## Methods
+
+### CompatTokens
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void CompatTokens(const HttpClient & c, const std::string & base)
+```
+
+#### Parameters
+
+
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1081.
+
+***
+
+### create
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json create(const json & data) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1083.
+
+***
+
+### update
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json update(const std::string & token_id, const json & data) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1085.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1078.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/compat-transcriptions/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/compat-transcriptions/index.mdx
new file mode 100644
index 0000000000..5fce33cbcf
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/compat-transcriptions/index.mdx
@@ -0,0 +1,110 @@
+---
+slug: "/reference/cpp/rest/rest-client/compat-transcriptions"
+title: "CompatTranscriptions"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::CompatTranscriptions"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `CompatTranscriptions`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::CompatTranscriptions
+```
+
+## Properties
+
+
+
+
+
+## Methods
+
+### CompatTranscriptions
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void CompatTranscriptions(const HttpClient & c, const std::string & base)
+```
+
+#### Parameters
+
+
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1065.
+
+***
+
+### get
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json get(const std::string & sid) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1070.
+
+***
+
+### list
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json list(const std::map< std::string, std::string > & params = {}) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1067.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1062.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/datasphere-documents/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/datasphere-documents/index.mdx
new file mode 100644
index 0000000000..b2f11a6c4b
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/datasphere-documents/index.mdx
@@ -0,0 +1,173 @@
+---
+slug: "/reference/cpp/rest/rest-client/datasphere-documents"
+title: "DatasphereDocuments"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::DatasphereDocuments"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `DatasphereDocuments`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::DatasphereDocuments : signalwire::rest::CrudResource
+```
+
+## Inheritance
+
+**Extends:** [signalwire::rest::CrudResource](/docs/sdk-reference/reference/cpp/rest/crud-resource)
+
+## Methods
+
+### DatasphereDocuments
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void DatasphereDocuments(const HttpClient & c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 612.
+
+***
+
+### delete\_chunk
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json delete_chunk(
+ const std::string & document_id,
+ const std::string & chunk_id
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 625.
+
+***
+
+### get\_chunk
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json get_chunk(
+ const std::string & document_id,
+ const std::string & chunk_id
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 621.
+
+***
+
+### list\_chunks
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json list_chunks(
+ const std::string & document_id,
+ const std::map< std::string, std::string > & params = {}
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 617.
+
+***
+
+### search
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json search(const json & data) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 614.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 611.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/datasphere-namespace/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/datasphere-namespace/index.mdx
new file mode 100644
index 0000000000..f2633ca467
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/datasphere-namespace/index.mdx
@@ -0,0 +1,82 @@
+---
+slug: "/reference/cpp/rest/rest-client/datasphere-namespace"
+title: "DatasphereNamespace"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::DatasphereNamespace"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `DatasphereNamespace`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::DatasphereNamespace
+```
+
+## Properties
+
+
+
+
+
+## Methods
+
+### DatasphereNamespace
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void DatasphereNamespace(const HttpClient & c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 635.
+
+***
+
+### search
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json search(const json & data) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 641.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 631.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/fabric-addresses/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/fabric-addresses/index.mdx
new file mode 100644
index 0000000000..0a8718b557
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/fabric-addresses/index.mdx
@@ -0,0 +1,108 @@
+---
+slug: "/reference/cpp/rest/rest-client/fabric-addresses"
+title: "FabricAddresses"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::FabricAddresses"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `FabricAddresses`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::FabricAddresses
+```
+
+## Properties
+
+
+
+
+
+## Methods
+
+### FabricAddresses
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void FabricAddresses(const HttpClient & c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 151.
+
+***
+
+### get
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json get(const std::string & address_id) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 155.
+
+***
+
+### list
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json list(const std::map< std::string, std::string > & params = {}) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 152.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 148.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/fabric-call-flows/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/fabric-call-flows/index.mdx
new file mode 100644
index 0000000000..3ccbc7fe10
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/fabric-call-flows/index.mdx
@@ -0,0 +1,166 @@
+---
+slug: "/reference/cpp/rest/rest-client/fabric-call-flows"
+title: "FabricCallFlows"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::FabricCallFlows"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `FabricCallFlows`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::FabricCallFlows : signalwire::rest::RestClient::FabricResourcePUT
+```
+
+## Inheritance
+
+**Extends:** [signalwire::rest::RestClient::FabricResourcePUT](/docs/sdk-reference/reference/cpp/rest/rest-client/fabric-resource-put)
+
+## Methods
+
+### deploy\_version
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json deploy_version(const std::string & flow_id, const json & data) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 92.
+
+***
+
+### FabricCallFlows
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void FabricCallFlows(const HttpClient & c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 76.
+
+***
+
+### list\_addresses
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json list_addresses(
+ const std::string & flow_id,
+ const std::map< std::string, std::string > & params = {}
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 84.
+
+***
+
+### list\_versions
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json list_versions(
+ const std::string & flow_id,
+ const std::map< std::string, std::string > & params = {}
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 88.
+
+***
+
+### singular\_base
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+std::string singular_base() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 81.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 75.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/fabric-conference-rooms/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/fabric-conference-rooms/index.mdx
new file mode 100644
index 0000000000..e5cc9835d1
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/fabric-conference-rooms/index.mdx
@@ -0,0 +1,107 @@
+---
+slug: "/reference/cpp/rest/rest-client/fabric-conference-rooms"
+title: "FabricConferenceRooms"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::FabricConferenceRooms"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `FabricConferenceRooms`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::FabricConferenceRooms : signalwire::rest::RestClient::FabricResourcePUT
+```
+
+## Inheritance
+
+**Extends:** [signalwire::rest::RestClient::FabricResourcePUT](/docs/sdk-reference/reference/cpp/rest/rest-client/fabric-resource-put)
+
+## Methods
+
+### FabricConferenceRooms
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void FabricConferenceRooms(const HttpClient & c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 98.
+
+***
+
+### list\_addresses
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json list_addresses(
+ const std::string & room_id,
+ const std::map< std::string, std::string > & params = {}
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 105.
+
+***
+
+### singular\_base
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+std::string singular_base() const
+```
+
+#### Returns
+
+`std::string`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 102.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 97.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/fabric-cxml-applications/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/fabric-cxml-applications/index.mdx
new file mode 100644
index 0000000000..f7c3b2fde6
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/fabric-cxml-applications/index.mdx
@@ -0,0 +1,80 @@
+---
+slug: "/reference/cpp/rest/rest-client/fabric-cxml-applications"
+title: "FabricCxmlApplications"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::FabricCxmlApplications"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `FabricCxmlApplications`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::FabricCxmlApplications : signalwire::rest::RestClient::FabricResourcePUT
+```
+
+## Inheritance
+
+**Extends:** [signalwire::rest::RestClient::FabricResourcePUT](/docs/sdk-reference/reference/cpp/rest/rest-client/fabric-resource-put)
+
+## Methods
+
+### create
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json create(const json &) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 142.
+
+***
+
+### FabricCxmlApplications
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void FabricCxmlApplications(const HttpClient & c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 139.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 138.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/fabric-generic-resources/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/fabric-generic-resources/index.mdx
new file mode 100644
index 0000000000..80ce7d6844
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/fabric-generic-resources/index.mdx
@@ -0,0 +1,201 @@
+---
+slug: "/reference/cpp/rest/rest-client/fabric-generic-resources"
+title: "FabricGenericResources"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::FabricGenericResources"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `FabricGenericResources`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::FabricGenericResources
+```
+
+## Properties
+
+
+
+
+
+## Methods
+
+### assign\_domain\_application
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json assign_domain_application(
+ const std::string & resource_id,
+ const json & data
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 177.
+
+***
+
+### assign\_phone\_route
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json assign_phone_route(
+ const std::string & resource_id,
+ const json & data
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 182.
+
+***
+
+### FabricGenericResources
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void FabricGenericResources(const HttpClient & c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 163.
+
+***
+
+### get
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json get(const std::string & resource_id) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 167.
+
+***
+
+### list
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json list(const std::map< std::string, std::string > & params = {}) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 164.
+
+***
+
+### list\_addresses
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json list_addresses(
+ const std::string & resource_id,
+ const std::map< std::string, std::string > & params = {}
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 173.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 160.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/fabric-namespace/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/fabric-namespace/index.mdx
new file mode 100644
index 0000000000..5a30e301e6
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/fabric-namespace/index.mdx
@@ -0,0 +1,96 @@
+---
+slug: "/reference/cpp/rest/rest-client/fabric-namespace"
+title: "FabricNamespace"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::FabricNamespace"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `FabricNamespace`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::FabricNamespace
+```
+
+## Properties
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Methods
+
+### FabricNamespace
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void FabricNamespace(const HttpClient & c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 247.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 209.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/fabric-resource-put/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/fabric-resource-put/index.mdx
new file mode 100644
index 0000000000..f895bdaf1c
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/fabric-resource-put/index.mdx
@@ -0,0 +1,84 @@
+---
+slug: "/reference/cpp/rest/rest-client/fabric-resource-put"
+title: "FabricResourcePUT"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::FabricResourcePUT"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `FabricResourcePUT`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::FabricResourcePUT : signalwire::rest::RestClient::FabricResource
+```
+
+## Inheritance
+
+**Extends:** [signalwire::rest::RestClient::FabricResource](/docs/sdk-reference/reference/cpp/rest/rest-client/fabric-resource)
+
+## Methods
+
+### FabricResourcePUT
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void FabricResourcePUT(const HttpClient & c, const std::string & base)
+```
+
+#### Parameters
+
+
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 67.
+
+***
+
+### update
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json update(const std::string & resource_id, const json & data) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 70.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 66.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/fabric-resource/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/fabric-resource/index.mdx
new file mode 100644
index 0000000000..0da4100a78
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/fabric-resource/index.mdx
@@ -0,0 +1,87 @@
+---
+slug: "/reference/cpp/rest/rest-client/fabric-resource"
+title: "FabricResource"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::FabricResource"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `FabricResource`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::FabricResource : signalwire::rest::CrudResource
+```
+
+## Inheritance
+
+**Extends:** [signalwire::rest::CrudResource](/docs/sdk-reference/reference/cpp/rest/crud-resource)
+
+## Methods
+
+### FabricResource
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void FabricResource(const HttpClient & c, const std::string & base)
+```
+
+#### Parameters
+
+
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 57.
+
+***
+
+### list\_addresses
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json list_addresses(
+ const std::string & resource_id,
+ const std::map< std::string, std::string > & params = {}
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 60.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 56.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/fabric-subscribers/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/fabric-subscribers/index.mdx
new file mode 100644
index 0000000000..a1a61850e2
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/fabric-subscribers/index.mdx
@@ -0,0 +1,212 @@
+---
+slug: "/reference/cpp/rest/rest-client/fabric-subscribers"
+title: "FabricSubscribers"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::FabricSubscribers"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `FabricSubscribers`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::FabricSubscribers : signalwire::rest::RestClient::FabricResourcePUT
+```
+
+## Inheritance
+
+**Extends:** [signalwire::rest::RestClient::FabricResourcePUT](/docs/sdk-reference/reference/cpp/rest/rest-client/fabric-resource-put)
+
+## Methods
+
+### create\_sip\_endpoint
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json create_sip_endpoint(
+ const std::string & subscriber_id,
+ const json & data
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 119.
+
+***
+
+### delete\_sip\_endpoint
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json delete_sip_endpoint(
+ const std::string & subscriber_id,
+ const std::string & endpoint_id
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 132.
+
+***
+
+### FabricSubscribers
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void FabricSubscribers(const HttpClient & c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 112.
+
+***
+
+### get\_sip\_endpoint
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json get_sip_endpoint(
+ const std::string & subscriber_id,
+ const std::string & endpoint_id
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 122.
+
+***
+
+### list\_sip\_endpoints
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json list_sip_endpoints(
+ const std::string & subscriber_id,
+ const std::map< std::string, std::string > & params = {}
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 115.
+
+***
+
+### update\_sip\_endpoint
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json update_sip_endpoint(
+ const std::string & subscriber_id,
+ const std::string & endpoint_id,
+ const json & data
+) const
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 127.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 111.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/fabric-tokens/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/fabric-tokens/index.mdx
new file mode 100644
index 0000000000..0a60c7d206
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/fabric-tokens/index.mdx
@@ -0,0 +1,186 @@
+---
+slug: "/reference/cpp/rest/rest-client/fabric-tokens"
+title: "FabricTokens"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::FabricTokens"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `FabricTokens`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::FabricTokens
+```
+
+## Properties
+
+
+
+
+
+## Methods
+
+### create\_embed\_token
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json create_embed_token(const json & data) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 204.
+
+***
+
+### create\_guest\_token
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json create_guest_token(const json & data) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 201.
+
+***
+
+### create\_invite\_token
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json create_invite_token(const json & data) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 198.
+
+***
+
+### create\_subscriber\_token
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json create_subscriber_token(const json & data) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 192.
+
+***
+
+### FabricTokens
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void FabricTokens(const HttpClient & c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 190.
+
+***
+
+### refresh\_subscriber\_token
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json refresh_subscriber_token(const json & data) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 195.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 187.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/imported-numbers-namespace/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/imported-numbers-namespace/index.mdx
new file mode 100644
index 0000000000..7aee448aa8
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/imported-numbers-namespace/index.mdx
@@ -0,0 +1,80 @@
+---
+slug: "/reference/cpp/rest/rest-client/imported-numbers-namespace"
+title: "ImportedNumbersNamespace"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::ImportedNumbersNamespace"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `ImportedNumbersNamespace`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::ImportedNumbersNamespace : signalwire::rest::CrudResource
+```
+
+## Inheritance
+
+**Extends:** [signalwire::rest::CrudResource](/docs/sdk-reference/reference/cpp/rest/crud-resource)
+
+## Methods
+
+### create
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json create(const json & data) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1231.
+
+***
+
+### ImportedNumbersNamespace
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void ImportedNumbersNamespace(const HttpClient & c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1229.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1228.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/index.mdx
new file mode 100644
index 0000000000..9c1a521421
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/index.mdx
@@ -0,0 +1,750 @@
+---
+slug: "/reference/cpp/rest/rest-client"
+title: "RestClient"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient"
+ parent: "signalwire::rest"
+ module: "rest"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `RestClient`
+
+Top-level SignalWire REST client with all API namespaces.
+
+## Signature
+
+```cpp
+class signalwire::rest::RestClient
+```
+
+## Classes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Methods
+
+### addresses
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+AddressesNamespace & addresses()
+```
+
+#### Returns
+
+`AddressesNamespace &`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1438.
+
+***
+
+### calling
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+CallingNamespace & calling()
+```
+
+#### Returns
+
+`CallingNamespace &`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1433.
+
+***
+
+### chat
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+ChatNamespace & chat()
+```
+
+#### Returns
+
+`ChatNamespace &`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1452.
+
+***
+
+### compat
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+CompatNamespace & compat()
+```
+
+#### Returns
+
+`CompatNamespace &`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1437.
+
+***
+
+### datasphere
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+DatasphereNamespace & datasphere()
+```
+
+#### Returns
+
+`DatasphereNamespace &`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1435.
+
+***
+
+### fabric
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+FabricNamespace & fabric()
+```
+
+#### Returns
+
+`FabricNamespace &`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1432.
+
+***
+
+### from\_env
+
+Initialize from environment variables.
+
+**Modifiers:** `static`
+
+#### Signature
+
+```cpp
+RestClient from_env()
+```
+
+#### Returns
+
+`RestClient`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 25.
+
+***
+
+### http\_client
+
+Get the underlying HTTP client.
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const HttpClient & http_client() const
+```
+
+#### Returns
+
+`const HttpClient &`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1455.
+
+***
+
+### imported\_numbers
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+ImportedNumbersNamespace & imported_numbers()
+```
+
+#### Returns
+
+`ImportedNumbersNamespace &`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1446.
+
+***
+
+### logs
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+LogsNamespace & logs()
+```
+
+#### Returns
+
+`LogsNamespace &`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1449.
+
+***
+
+### lookup
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+LookupNamespace & lookup()
+```
+
+#### Returns
+
+`LookupNamespace &`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1444.
+
+***
+
+### mfa
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+MFANamespace & mfa()
+```
+
+#### Returns
+
+`MFANamespace &`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1447.
+
+***
+
+### number\_groups
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+NumberGroupsNamespace & number_groups()
+```
+
+#### Returns
+
+`NumberGroupsNamespace &`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1441.
+
+***
+
+### phone\_numbers
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+PhoneNumbersNamespace & phone_numbers()
+```
+
+#### Returns
+
+`PhoneNumbersNamespace &`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1434.
+
+***
+
+### project
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+ProjectNamespace & project()
+```
+
+#### Returns
+
+`ProjectNamespace &`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1450.
+
+***
+
+### project\_id
+
+Project ID accessor (read-only).
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const std::string & project_id() const
+```
+
+#### Returns
+
+`const std::string &`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 37.
+
+***
+
+### pubsub
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+PubSubNamespace & pubsub()
+```
+
+#### Returns
+
+`PubSubNamespace &`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1451.
+
+***
+
+### queues
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+QueuesNamespace & queues()
+```
+
+#### Returns
+
+`QueuesNamespace &`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1439.
+
+***
+
+### recordings
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+RecordingsNamespace & recordings()
+```
+
+#### Returns
+
+`RecordingsNamespace &`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1440.
+
+***
+
+### registry
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+RegistryNamespace & registry()
+```
+
+#### Returns
+
+`RegistryNamespace &`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1448.
+
+***
+
+### RestClient
+
+#### Signature
+
+```cpp
+void RestClient(
+ const std::string & space,
+ const std::string & project_id,
+ const std::string & token
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 20.
+
+***
+
+### short\_codes
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+ShortCodesNamespace & short_codes()
+```
+
+#### Returns
+
+`ShortCodesNamespace &`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1445.
+
+***
+
+### sip\_profile
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+SipProfileNamespace & sip_profile()
+```
+
+#### Returns
+
+`SipProfileNamespace &`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1443.
+
+***
+
+### verified\_callers
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+VerifiedCallersNamespace & verified_callers()
+```
+
+#### Returns
+
+`VerifiedCallersNamespace &`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1442.
+
+***
+
+### video
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+VideoNamespace & video()
+```
+
+#### Returns
+
+`VideoNamespace &`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1436.
+
+***
+
+### with\_base\_url
+
+Construct with an explicit pre-built base URL (http://... or https://...) instead of synthesizing one from the SignalWire space hostname. Used by audit harnesses pointing the client at loopback fixtures. The space-based constructor remains the production path.
+
+**Modifiers:** `static`
+
+#### Signature
+
+```cpp
+RestClient with_base_url(
+ const std::string & base_url,
+ const std::string & project_id,
+ const std::string & token
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Returns
+
+`RestClient`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 32.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 18.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/logs-conferences/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/logs-conferences/index.mdx
new file mode 100644
index 0000000000..2e246bc8ad
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/logs-conferences/index.mdx
@@ -0,0 +1,82 @@
+---
+slug: "/reference/cpp/rest/rest-client/logs-conferences"
+title: "LogsConferences"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::LogsConferences"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `LogsConferences`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::LogsConferences
+```
+
+## Properties
+
+
+
+
+
+## Methods
+
+### list
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json list(const std::map< std::string, std::string > & params = {}) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1377.
+
+***
+
+### LogsConferences
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void LogsConferences(const HttpClient & c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1376.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1373.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/logs-fax/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/logs-fax/index.mdx
new file mode 100644
index 0000000000..292fb8e64e
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/logs-fax/index.mdx
@@ -0,0 +1,108 @@
+---
+slug: "/reference/cpp/rest/rest-client/logs-fax"
+title: "LogsFax"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::LogsFax"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `LogsFax`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::LogsFax
+```
+
+## Properties
+
+
+
+
+
+## Methods
+
+### get
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json get(const std::string & log_id) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1368.
+
+***
+
+### list
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json list(const std::map< std::string, std::string > & params = {}) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1365.
+
+***
+
+### LogsFax
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void LogsFax(const HttpClient & c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1364.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1361.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/logs-messages/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/logs-messages/index.mdx
new file mode 100644
index 0000000000..c6438b1704
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/logs-messages/index.mdx
@@ -0,0 +1,108 @@
+---
+slug: "/reference/cpp/rest/rest-client/logs-messages"
+title: "LogsMessages"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::LogsMessages"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `LogsMessages`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::LogsMessages
+```
+
+## Properties
+
+
+
+
+
+## Methods
+
+### get
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json get(const std::string & log_id) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1340.
+
+***
+
+### list
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json list(const std::map< std::string, std::string > & params = {}) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1337.
+
+***
+
+### LogsMessages
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void LogsMessages(const HttpClient & c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1336.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1333.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/logs-namespace/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/logs-namespace/index.mdx
new file mode 100644
index 0000000000..fe27820f11
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/logs-namespace/index.mdx
@@ -0,0 +1,60 @@
+---
+slug: "/reference/cpp/rest/rest-client/logs-namespace"
+title: "LogsNamespace"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::LogsNamespace"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `LogsNamespace`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::LogsNamespace
+```
+
+## Properties
+
+
+
+
+
+
+
+
+
+## Methods
+
+### LogsNamespace
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void LogsNamespace(const HttpClient & c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1387.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1382.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/logs-voice/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/logs-voice/index.mdx
new file mode 100644
index 0000000000..7a8e21afdf
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/logs-voice/index.mdx
@@ -0,0 +1,139 @@
+---
+slug: "/reference/cpp/rest/rest-client/logs-voice"
+title: "LogsVoice"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::LogsVoice"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `LogsVoice`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::LogsVoice
+```
+
+## Properties
+
+
+
+
+
+## Methods
+
+### get
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json get(const std::string & log_id) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1352.
+
+***
+
+### list
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json list(const std::map< std::string, std::string > & params = {}) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1349.
+
+***
+
+### list\_events
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json list_events(
+ const std::string & log_id,
+ const std::map< std::string, std::string > & params = {}
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1355.
+
+***
+
+### LogsVoice
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void LogsVoice(const HttpClient & c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1348.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1345.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/lookup-namespace/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/lookup-namespace/index.mdx
new file mode 100644
index 0000000000..351cb3835a
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/lookup-namespace/index.mdx
@@ -0,0 +1,80 @@
+---
+slug: "/reference/cpp/rest/rest-client/lookup-namespace"
+title: "LookupNamespace"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::LookupNamespace"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `LookupNamespace`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::LookupNamespace
+```
+
+## Properties
+
+
+
+## Methods
+
+### lookup
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json lookup(const std::string & number) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1212.
+
+***
+
+### LookupNamespace
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void LookupNamespace(const HttpClient & c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1211.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1209.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/mfa-namespace/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/mfa-namespace/index.mdx
new file mode 100644
index 0000000000..1281ef5759
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/mfa-namespace/index.mdx
@@ -0,0 +1,186 @@
+---
+slug: "/reference/cpp/rest/rest-client/mfa-namespace"
+title: "MFANamespace"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::MFANamespace"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `MFANamespace`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::MFANamespace
+```
+
+## Properties
+
+
+
+## Methods
+
+### call
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json call(const json & data) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1241.
+
+***
+
+### MFANamespace
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void MFANamespace(const HttpClient & c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1238.
+
+***
+
+### request\_code
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json request_code(const json & data) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1246.
+
+***
+
+### sms
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json sms(const json & data) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1240.
+
+***
+
+### verify
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json verify(const std::string & request_id, const json & data) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1242.
+
+***
+
+### verify\_code
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json verify_code(const json & data) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1247.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1236.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/number-groups-namespace/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/number-groups-namespace/index.mdx
new file mode 100644
index 0000000000..a03a459678
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/number-groups-namespace/index.mdx
@@ -0,0 +1,193 @@
+---
+slug: "/reference/cpp/rest/rest-client/number-groups-namespace"
+title: "NumberGroupsNamespace"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::NumberGroupsNamespace"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `NumberGroupsNamespace`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::NumberGroupsNamespace : signalwire::rest::CrudResource
+```
+
+## Inheritance
+
+**Extends:** [signalwire::rest::CrudResource](/docs/sdk-reference/reference/cpp/rest/crud-resource)
+
+## Methods
+
+### add\_membership
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json add_membership(const std::string & group_id, const json & data) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1186.
+
+***
+
+### delete\_membership
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json delete_membership(const std::string & membership_id) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1192.
+
+***
+
+### get\_membership
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json get_membership(const std::string & membership_id) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1189.
+
+***
+
+### list\_memberships
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json list_memberships(
+ const std::string & group_id,
+ const std::map< std::string, std::string > & params = {}
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1182.
+
+***
+
+### NumberGroupsNamespace
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void NumberGroupsNamespace(const HttpClient & c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1176.
+
+***
+
+### update
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json update(const std::string & id, const json & data) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1178.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1175.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/phone-numbers-namespace/call-flow-options/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/phone-numbers-namespace/call-flow-options/index.mdx
new file mode 100644
index 0000000000..d7faa1d110
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/phone-numbers-namespace/call-flow-options/index.mdx
@@ -0,0 +1,36 @@
+---
+slug: "/reference/cpp/rest/rest-client/phone-numbers-namespace/call-flow-options"
+title: "CallFlowOptions"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::PhoneNumbersNamespace::CallFlowOptions"
+ parent: "signalwire::rest::RestClient::PhoneNumbersNamespace"
+ module: "rest.RestClient.PhoneNumbersNamespace"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `CallFlowOptions`
+
+Options for binding a phone number to a call flow.
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::PhoneNumbersNamespace::CallFlowOptions
+```
+
+## Properties
+
+
+ Accepts "working\_copy" or "current\_deployed" (server default when omitted).
+
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 479.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/phone-numbers-namespace/cxml-webhook-options/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/phone-numbers-namespace/cxml-webhook-options/index.mdx
new file mode 100644
index 0000000000..5541a74c4d
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/phone-numbers-namespace/cxml-webhook-options/index.mdx
@@ -0,0 +1,36 @@
+---
+slug: "/reference/cpp/rest/rest-client/phone-numbers-namespace/cxml-webhook-options"
+title: "CxmlWebhookOptions"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::PhoneNumbersNamespace::CxmlWebhookOptions"
+ parent: "signalwire::rest::RestClient::PhoneNumbersNamespace"
+ module: "rest.RestClient.PhoneNumbersNamespace"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `CxmlWebhookOptions`
+
+Options for binding a phone number to a cXML (Twilio-compat) webhook.
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::PhoneNumbersNamespace::CxmlWebhookOptions
+```
+
+## Properties
+
+
+
+
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 473.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/phone-numbers-namespace/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/phone-numbers-namespace/index.mdx
new file mode 100644
index 0000000000..1e81bf5a35
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/phone-numbers-namespace/index.mdx
@@ -0,0 +1,585 @@
+---
+slug: "/reference/cpp/rest/rest-client/phone-numbers-namespace"
+title: "PhoneNumbersNamespace"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::PhoneNumbersNamespace"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `PhoneNumbersNamespace`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::PhoneNumbersNamespace : signalwire::rest::CrudResource
+```
+
+## Inheritance
+
+**Extends:** [signalwire::rest::CrudResource](/docs/sdk-reference/reference/cpp/rest/crud-resource)
+
+## Classes
+
+
+
+ Options for binding a phone number to a call flow.
+
+
+
+ Options for binding a phone number to a cXML (Twilio-compat) webhook.
+
+
+
+ Options for binding a phone number to a RELAY topic.
+
+
+
+## Methods
+
+### buy
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json buy(const json & data) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 455.
+
+***
+
+### make\_ai\_agent\_body
+
+**Modifiers:** `static` `inline`
+
+#### Signature
+
+```cpp
+json make_ai_agent_body(const std::string & agent_id)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 517.
+
+***
+
+### make\_call\_flow\_body
+
+**Modifiers:** `static` `inline`
+
+#### Signature
+
+```cpp
+json make_call_flow_body(
+ const std::string & flow_id,
+ const CallFlowOptions & opts = {}
+)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 524.
+
+***
+
+### make\_cxml\_application\_body
+
+**Modifiers:** `static` `inline`
+
+#### Signature
+
+```cpp
+json make_cxml_application_body(const std::string & application_id)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 510.
+
+***
+
+### make\_cxml\_webhook\_body
+
+**Modifiers:** `static` `inline`
+
+#### Signature
+
+```cpp
+json make_cxml_webhook_body(
+ const std::string & url,
+ const CxmlWebhookOptions & opts = {}
+)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 499.
+
+***
+
+### make\_relay\_application\_body
+
+**Modifiers:** `static` `inline`
+
+#### Signature
+
+```cpp
+json make_relay_application_body(const std::string & name)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 534.
+
+***
+
+### make\_relay\_topic\_body
+
+**Modifiers:** `static` `inline`
+
+#### Signature
+
+```cpp
+json make_relay_topic_body(
+ const std::string & topic,
+ const RelayTopicOptions & opts = {}
+)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 541.
+
+***
+
+### make\_swml\_webhook\_body
+
+**Modifiers:** `static` `inline`
+
+#### Signature
+
+```cpp
+json make_swml_webhook_body(const std::string & url)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 492.
+
+***
+
+### PhoneNumbersNamespace
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void PhoneNumbersNamespace(const HttpClient & c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 453.
+
+***
+
+### release
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json release(const std::string & id) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 456.
+
+***
+
+### search
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json search(const std::map< std::string, std::string > & p) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 454.
+
+***
+
+### set\_ai\_agent
+
+Route inbound calls to an AI Agent Fabric resource by ID.
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json set_ai_agent(
+ const std::string & resource_id,
+ const std::string & agent_id
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 577.
+
+***
+
+### set\_call\_flow
+
+Route inbound calls to a Call Flow by ID. opts.version accepts "working\_copy" or "current\_deployed".
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json set_call_flow(
+ const std::string & resource_id,
+ const std::string & flow_id,
+ const CallFlowOptions & opts = {}
+) const
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 584.
+
+***
+
+### set\_cxml\_application
+
+Route inbound calls to an existing cXML application by ID.
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json set_cxml_application(
+ const std::string & resource_id,
+ const std::string & application_id
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 571.
+
+***
+
+### set\_cxml\_webhook
+
+Route inbound calls to a cXML (Twilio-compat / LAML) webhook. Despite the wire value laml\_webhooks being plural, this creates a single cxml\_webhook Fabric resource. Extra options populate fallback and status-callback fields.
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json set_cxml_webhook(
+ const std::string & resource_id,
+ const std::string & url,
+ const CxmlWebhookOptions & opts = {}
+) const
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 564.
+
+***
+
+### set\_relay\_application
+
+Route inbound calls to a named RELAY application.
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json set_relay_application(
+ const std::string & resource_id,
+ const std::string & name
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 591.
+
+***
+
+### set\_relay\_topic
+
+Route inbound calls to a RELAY topic (client subscription).
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json set_relay_topic(
+ const std::string & resource_id,
+ const std::string & topic,
+ const RelayTopicOptions & opts = {}
+) const
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 597.
+
+***
+
+### set\_swml\_webhook
+
+Route inbound calls to an SWML webhook URL. Server auto-creates a swml\_webhook Fabric resource keyed off this URL.
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json set_swml_webhook(
+ const std::string & resource_id,
+ const std::string & url
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 556.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 452.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/phone-numbers-namespace/relay-topic-options/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/phone-numbers-namespace/relay-topic-options/index.mdx
new file mode 100644
index 0000000000..10a7f2ca45
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/phone-numbers-namespace/relay-topic-options/index.mdx
@@ -0,0 +1,34 @@
+---
+slug: "/reference/cpp/rest/rest-client/phone-numbers-namespace/relay-topic-options"
+title: "RelayTopicOptions"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::PhoneNumbersNamespace::RelayTopicOptions"
+ parent: "signalwire::rest::RestClient::PhoneNumbersNamespace"
+ module: "rest.RestClient.PhoneNumbersNamespace"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `RelayTopicOptions`
+
+Options for binding a phone number to a RELAY topic.
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::PhoneNumbersNamespace::RelayTopicOptions
+```
+
+## Properties
+
+
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 486.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/project-namespace/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/project-namespace/index.mdx
new file mode 100644
index 0000000000..f423930d16
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/project-namespace/index.mdx
@@ -0,0 +1,104 @@
+---
+slug: "/reference/cpp/rest/rest-client/project-namespace"
+title: "ProjectNamespace"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::ProjectNamespace"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `ProjectNamespace`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::ProjectNamespace
+```
+
+## Properties
+
+
+
+
+
+## Methods
+
+### get\_project
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json get_project() const
+```
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1411.
+
+***
+
+### ProjectNamespace
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void ProjectNamespace(const HttpClient & c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1408.
+
+***
+
+### update\_project
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json update_project(const json & data) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1412.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1405.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/project-tokens/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/project-tokens/index.mdx
new file mode 100644
index 0000000000..7b0ec64dbc
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/project-tokens/index.mdx
@@ -0,0 +1,110 @@
+---
+slug: "/reference/cpp/rest/rest-client/project-tokens"
+title: "ProjectTokens"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::ProjectTokens"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `ProjectTokens`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::ProjectTokens
+```
+
+## Properties
+
+
+
+
+
+## Methods
+
+### create
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json create(const json & data) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1396.
+
+***
+
+### ProjectTokens
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void ProjectTokens(const HttpClient & c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1395.
+
+***
+
+### update
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json update(const std::string & token_id, const json & data) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1397.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1392.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/pub-sub-namespace/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/pub-sub-namespace/index.mdx
new file mode 100644
index 0000000000..ca2ece7578
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/pub-sub-namespace/index.mdx
@@ -0,0 +1,80 @@
+---
+slug: "/reference/cpp/rest/rest-client/pub-sub-namespace"
+title: "PubSubNamespace"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::PubSubNamespace"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `PubSubNamespace`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::PubSubNamespace
+```
+
+## Properties
+
+
+
+## Methods
+
+### publish
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json publish(const json & data) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1418.
+
+***
+
+### PubSubNamespace
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void PubSubNamespace(const HttpClient & c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1417.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1415.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/queues-namespace/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/queues-namespace/index.mdx
new file mode 100644
index 0000000000..8717bb6844
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/queues-namespace/index.mdx
@@ -0,0 +1,170 @@
+---
+slug: "/reference/cpp/rest/rest-client/queues-namespace"
+title: "QueuesNamespace"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::QueuesNamespace"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `QueuesNamespace`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::QueuesNamespace : signalwire::rest::CrudResource
+```
+
+## Inheritance
+
+**Extends:** [signalwire::rest::CrudResource](/docs/sdk-reference/reference/cpp/rest/crud-resource)
+
+## Methods
+
+### get\_member
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json get_member(
+ const std::string & queue_id,
+ const std::string & member_id
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1164.
+
+***
+
+### get\_next\_member
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json get_next_member(const std::string & queue_id) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1161.
+
+***
+
+### list\_members
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json list_members(
+ const std::string & queue_id,
+ const std::map< std::string, std::string > & params = {}
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1157.
+
+***
+
+### QueuesNamespace
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void QueuesNamespace(const HttpClient & c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1152.
+
+***
+
+### update
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json update(const std::string & id, const json & data) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1154.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1151.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/recordings-namespace/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/recordings-namespace/index.mdx
new file mode 100644
index 0000000000..e8b74b1fbc
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/recordings-namespace/index.mdx
@@ -0,0 +1,54 @@
+---
+slug: "/reference/cpp/rest/rest-client/recordings-namespace"
+title: "RecordingsNamespace"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::RecordingsNamespace"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `RecordingsNamespace`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::RecordingsNamespace : signalwire::rest::CrudResource
+```
+
+## Inheritance
+
+**Extends:** [signalwire::rest::CrudResource](/docs/sdk-reference/reference/cpp/rest/crud-resource)
+
+## Methods
+
+### RecordingsNamespace
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void RecordingsNamespace(const HttpClient & c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1170.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1169.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/registry-brands/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/registry-brands/index.mdx
new file mode 100644
index 0000000000..bf58e9159f
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/registry-brands/index.mdx
@@ -0,0 +1,193 @@
+---
+slug: "/reference/cpp/rest/rest-client/registry-brands"
+title: "RegistryBrands"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::RegistryBrands"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `RegistryBrands`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::RegistryBrands
+```
+
+## Properties
+
+
+
+
+
+## Methods
+
+### create
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json create(const json & data) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1261.
+
+***
+
+### create\_campaign
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json create_campaign(const std::string & brand_id, const json & data) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1269.
+
+***
+
+### get
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json get(const std::string & brand_id) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1262.
+
+***
+
+### list
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json list(const std::map< std::string, std::string > & params = {}) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1258.
+
+***
+
+### list\_campaigns
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json list_campaigns(
+ const std::string & brand_id,
+ const std::map< std::string, std::string > & params = {}
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1265.
+
+***
+
+### RegistryBrands
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void RegistryBrands(const HttpClient & c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1257.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1254.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/registry-campaigns/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/registry-campaigns/index.mdx
new file mode 100644
index 0000000000..9664ece022
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/registry-campaigns/index.mdx
@@ -0,0 +1,200 @@
+---
+slug: "/reference/cpp/rest/rest-client/registry-campaigns"
+title: "RegistryCampaigns"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::RegistryCampaigns"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `RegistryCampaigns`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::RegistryCampaigns
+```
+
+## Properties
+
+
+
+
+
+## Methods
+
+### create\_order
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json create_order(const std::string & campaign_id, const json & data) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1293.
+
+***
+
+### get
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json get(const std::string & campaign_id) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1278.
+
+***
+
+### list\_numbers
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json list_numbers(
+ const std::string & campaign_id,
+ const std::map< std::string, std::string > & params = {}
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1285.
+
+***
+
+### list\_orders
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json list_orders(
+ const std::string & campaign_id,
+ const std::map< std::string, std::string > & params = {}
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1289.
+
+***
+
+### RegistryCampaigns
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void RegistryCampaigns(const HttpClient & c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1277.
+
+***
+
+### update
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json update(const std::string & campaign_id, const json & data) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1282.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1274.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/registry-namespace/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/registry-namespace/index.mdx
new file mode 100644
index 0000000000..0479bec1f1
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/registry-namespace/index.mdx
@@ -0,0 +1,60 @@
+---
+slug: "/reference/cpp/rest/rest-client/registry-namespace"
+title: "RegistryNamespace"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::RegistryNamespace"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `RegistryNamespace`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::RegistryNamespace
+```
+
+## Properties
+
+
+
+
+
+
+
+
+
+## Methods
+
+### RegistryNamespace
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void RegistryNamespace(const HttpClient & c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1321.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1316.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/registry-numbers/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/registry-numbers/index.mdx
new file mode 100644
index 0000000000..87b8c12a7b
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/registry-numbers/index.mdx
@@ -0,0 +1,56 @@
+---
+slug: "/reference/cpp/rest/rest-client/registry-numbers"
+title: "RegistryNumbers"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::RegistryNumbers"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `RegistryNumbers`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::RegistryNumbers
+```
+
+## Properties
+
+
+
+
+
+## Methods
+
+### RegistryNumbers
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void RegistryNumbers(const HttpClient & c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1310.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1307.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/registry-orders/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/registry-orders/index.mdx
new file mode 100644
index 0000000000..23d08cc2ee
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/registry-orders/index.mdx
@@ -0,0 +1,82 @@
+---
+slug: "/reference/cpp/rest/rest-client/registry-orders"
+title: "RegistryOrders"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::RegistryOrders"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `RegistryOrders`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::RegistryOrders
+```
+
+## Properties
+
+
+
+
+
+## Methods
+
+### get
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json get(const std::string & order_id) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1302.
+
+***
+
+### RegistryOrders
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void RegistryOrders(const HttpClient & c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1301.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1298.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/short-codes-namespace/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/short-codes-namespace/index.mdx
new file mode 100644
index 0000000000..ec0ef73245
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/short-codes-namespace/index.mdx
@@ -0,0 +1,82 @@
+---
+slug: "/reference/cpp/rest/rest-client/short-codes-namespace"
+title: "ShortCodesNamespace"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::ShortCodesNamespace"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `ShortCodesNamespace`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::ShortCodesNamespace : signalwire::rest::CrudResource
+```
+
+## Inheritance
+
+**Extends:** [signalwire::rest::CrudResource](/docs/sdk-reference/reference/cpp/rest/crud-resource)
+
+## Methods
+
+### ShortCodesNamespace
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void ShortCodesNamespace(const HttpClient & c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1216.
+
+***
+
+### update
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json update(const std::string & id, const json & data) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1218.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1215.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/sip-profile-namespace/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/sip-profile-namespace/index.mdx
new file mode 100644
index 0000000000..021c853464
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/sip-profile-namespace/index.mdx
@@ -0,0 +1,102 @@
+---
+slug: "/reference/cpp/rest/rest-client/sip-profile-namespace"
+title: "SipProfileNamespace"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::SipProfileNamespace"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `SipProfileNamespace`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::SipProfileNamespace : signalwire::rest::CrudResource
+```
+
+## Inheritance
+
+**Extends:** [signalwire::rest::CrudResource](/docs/sdk-reference/reference/cpp/rest/crud-resource)
+
+## Methods
+
+### get
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json get() const
+```
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1205.
+
+***
+
+### SipProfileNamespace
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void SipProfileNamespace(const HttpClient & c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1204.
+
+***
+
+### update
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json update(const json & data) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1206.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1203.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/verified-callers-namespace/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/verified-callers-namespace/index.mdx
new file mode 100644
index 0000000000..48292c689e
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/verified-callers-namespace/index.mdx
@@ -0,0 +1,54 @@
+---
+slug: "/reference/cpp/rest/rest-client/verified-callers-namespace"
+title: "VerifiedCallersNamespace"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::VerifiedCallersNamespace"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `VerifiedCallersNamespace`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::VerifiedCallersNamespace : signalwire::rest::CrudResource
+```
+
+## Inheritance
+
+**Extends:** [signalwire::rest::CrudResource](/docs/sdk-reference/reference/cpp/rest/crud-resource)
+
+## Methods
+
+### VerifiedCallersNamespace
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void VerifiedCallersNamespace(const HttpClient & c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1198.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 1197.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/video-conference-tokens/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/video-conference-tokens/index.mdx
new file mode 100644
index 0000000000..124f8965c3
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/video-conference-tokens/index.mdx
@@ -0,0 +1,108 @@
+---
+slug: "/reference/cpp/rest/rest-client/video-conference-tokens"
+title: "VideoConferenceTokens"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::VideoConferenceTokens"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `VideoConferenceTokens`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::VideoConferenceTokens
+```
+
+## Properties
+
+
+
+
+
+## Methods
+
+### get
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json get(const std::string & token_id) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 747.
+
+***
+
+### reset
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json reset(const std::string & token_id) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 750.
+
+***
+
+### VideoConferenceTokens
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void VideoConferenceTokens(const HttpClient & c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 746.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 743.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/video-conferences/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/video-conferences/index.mdx
new file mode 100644
index 0000000000..69e7fe7b4b
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/video-conferences/index.mdx
@@ -0,0 +1,172 @@
+---
+slug: "/reference/cpp/rest/rest-client/video-conferences"
+title: "VideoConferences"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::VideoConferences"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `VideoConferences`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::VideoConferences : signalwire::rest::CrudResource
+```
+
+## Inheritance
+
+**Extends:** [signalwire::rest::CrudResource](/docs/sdk-reference/reference/cpp/rest/crud-resource)
+
+## Methods
+
+### create\_stream
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json create_stream(const std::string & conf_id, const json & data) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 738.
+
+***
+
+### list\_conference\_tokens
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json list_conference_tokens(
+ const std::string & conf_id,
+ const std::map< std::string, std::string > & params = {}
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 730.
+
+***
+
+### list\_streams
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json list_streams(
+ const std::string & conf_id,
+ const std::map< std::string, std::string > & params = {}
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 734.
+
+***
+
+### update
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json update(const std::string & conf_id, const json & data) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 727.
+
+***
+
+### VideoConferences
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void VideoConferences(const HttpClient & c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 724.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 723.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/video-namespace/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/video-namespace/index.mdx
new file mode 100644
index 0000000000..48d3b6a29a
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/video-namespace/index.mdx
@@ -0,0 +1,68 @@
+---
+slug: "/reference/cpp/rest/rest-client/video-namespace"
+title: "VideoNamespace"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::VideoNamespace"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `VideoNamespace`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::VideoNamespace
+```
+
+## Properties
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Methods
+
+### VideoNamespace
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void VideoNamespace(const HttpClient & c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 785.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 771.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/video-room-recordings/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/video-room-recordings/index.mdx
new file mode 100644
index 0000000000..81fbab6001
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/video-room-recordings/index.mdx
@@ -0,0 +1,139 @@
+---
+slug: "/reference/cpp/rest/rest-client/video-room-recordings"
+title: "VideoRoomRecordings"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::VideoRoomRecordings"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `VideoRoomRecordings`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::VideoRoomRecordings
+```
+
+## Properties
+
+
+
+
+
+## Methods
+
+### get
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json get(const std::string & recording_id) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 711.
+
+***
+
+### list
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json list(const std::map< std::string, std::string > & params = {}) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 708.
+
+***
+
+### list\_events
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json list_events(
+ const std::string & recording_id,
+ const std::map< std::string, std::string > & params = {}
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 717.
+
+***
+
+### VideoRoomRecordings
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void VideoRoomRecordings(const HttpClient & c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 707.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 704.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/video-room-sessions/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/video-room-sessions/index.mdx
new file mode 100644
index 0000000000..21ae7ef5d4
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/video-room-sessions/index.mdx
@@ -0,0 +1,201 @@
+---
+slug: "/reference/cpp/rest/rest-client/video-room-sessions"
+title: "VideoRoomSessions"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::VideoRoomSessions"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `VideoRoomSessions`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::VideoRoomSessions
+```
+
+## Properties
+
+
+
+
+
+## Methods
+
+### get
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json get(const std::string & session_id) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 687.
+
+***
+
+### list
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json list(const std::map< std::string, std::string > & params = {}) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 684.
+
+***
+
+### list\_events
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json list_events(
+ const std::string & session_id,
+ const std::map< std::string, std::string > & params = {}
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 690.
+
+***
+
+### list\_members
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json list_members(
+ const std::string & session_id,
+ const std::map< std::string, std::string > & params = {}
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 694.
+
+***
+
+### list\_recordings
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json list_recordings(
+ const std::string & session_id,
+ const std::map< std::string, std::string > & params = {}
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 698.
+
+***
+
+### VideoRoomSessions
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void VideoRoomSessions(const HttpClient & c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 683.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 680.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/video-room-tokens/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/video-room-tokens/index.mdx
new file mode 100644
index 0000000000..ca649fe078
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/video-room-tokens/index.mdx
@@ -0,0 +1,82 @@
+---
+slug: "/reference/cpp/rest/rest-client/video-room-tokens"
+title: "VideoRoomTokens"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::VideoRoomTokens"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `VideoRoomTokens`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::VideoRoomTokens
+```
+
+## Properties
+
+
+
+
+
+## Methods
+
+### create
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json create(const json & data) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 677.
+
+***
+
+### VideoRoomTokens
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void VideoRoomTokens(const HttpClient & c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 676.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 673.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/video-rooms/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/video-rooms/index.mdx
new file mode 100644
index 0000000000..5484f327cc
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/video-rooms/index.mdx
@@ -0,0 +1,141 @@
+---
+slug: "/reference/cpp/rest/rest-client/video-rooms"
+title: "VideoRooms"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::VideoRooms"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `VideoRooms`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::VideoRooms : signalwire::rest::CrudResource
+```
+
+## Inheritance
+
+**Extends:** [signalwire::rest::CrudResource](/docs/sdk-reference/reference/cpp/rest/crud-resource)
+
+## Methods
+
+### create\_stream
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json create_stream(const std::string & room_id, const json & data) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 668.
+
+***
+
+### list\_streams
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json list_streams(
+ const std::string & room_id,
+ const std::map< std::string, std::string > & params = {}
+) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 664.
+
+***
+
+### update
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json update(const std::string & room_id, const json & data) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 661.
+
+***
+
+### VideoRooms
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void VideoRooms(const HttpClient & c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 659.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 658.
diff --git a/fern/products/sdk-reference/cpp/rest/rest-client/video-streams/index.mdx b/fern/products/sdk-reference/cpp/rest/rest-client/video-streams/index.mdx
new file mode 100644
index 0000000000..b9770f2855
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/rest-client/video-streams/index.mdx
@@ -0,0 +1,110 @@
+---
+slug: "/reference/cpp/rest/rest-client/video-streams"
+title: "VideoStreams"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::RestClient::VideoStreams"
+ parent: "signalwire::rest::RestClient"
+ module: "rest.RestClient"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp"
+ visibility: "public"
+---
+# `VideoStreams`
+
+## Signature
+
+```cpp
+struct signalwire::rest::RestClient::VideoStreams
+```
+
+## Properties
+
+
+
+
+
+## Methods
+
+### get
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json get(const std::string & stream_id) const
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 759.
+
+***
+
+### update
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+json update(const std::string & stream_id, const json & data) const
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`json`
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 763.
+
+***
+
+### VideoStreams
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void VideoStreams(const HttpClient & c)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 758.
+
+## Source
+
+[`include/signalwire/rest/rest_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/rest_client.hpp)
+
+Line 755.
diff --git a/fern/products/sdk-reference/cpp/rest/signal-wire-rest-error/index.mdx b/fern/products/sdk-reference/cpp/rest/signal-wire-rest-error/index.mdx
new file mode 100644
index 0000000000..72f248263d
--- /dev/null
+++ b/fern/products/sdk-reference/cpp/rest/signal-wire-rest-error/index.mdx
@@ -0,0 +1,108 @@
+---
+slug: "/reference/cpp/rest/signal-wire-rest-error"
+title: "SignalWireRestError"
+sdk_label: "C++ SDK"
+icon: "cpp"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "cpp"
+ qualified_name: "signalwire::rest::SignalWireRestError"
+ parent: "signalwire::rest"
+ module: "rest"
+ source_url: "https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/http_client.hpp"
+ visibility: "public"
+---
+# `SignalWireRestError`
+
+Error thrown on non-2xx REST API responses.
+
+## Signature
+
+```cpp
+class signalwire::rest::SignalWireRestError : std::runtime_error
+```
+
+## Inheritance
+
+**Extends:** `std::runtime_error`
+
+## Methods
+
+### body
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+const std::string & body() const
+```
+
+#### Returns
+
+`const std::string &`
+
+#### Source
+
+[`include/signalwire/rest/http_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/http_client.hpp)
+
+Line 24.
+
+***
+
+### SignalWireRestError
+
+**Modifiers:** `inline`
+
+#### Signature
+
+```cpp
+void SignalWireRestError(
+ int status,
+ const std::string & message,
+ const std::string & body = ""
+)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Source
+
+[`include/signalwire/rest/http_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/http_client.hpp)
+
+Line 21.
+
+***
+
+### status
+
+**Modifiers:** `const` `inline`
+
+#### Signature
+
+```cpp
+int status() const
+```
+
+#### Returns
+
+`int`
+
+#### Source
+
+[`include/signalwire/rest/http_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/http_client.hpp)
+
+Line 23.
+
+## Source
+
+[`include/signalwire/rest/http_client.hpp`](https://github.com/signalwire/signalwire-cpp/blob/main/include/signalwire/rest/http_client.hpp)
+
+Line 19.
diff --git a/fern/products/sdk-reference/dotnet/_meta.json b/fern/products/sdk-reference/dotnet/_meta.json
new file mode 100644
index 0000000000..14e174a604
--- /dev/null
+++ b/fern/products/sdk-reference/dotnet/_meta.json
@@ -0,0 +1,10 @@
+{
+ "language": "dotnet",
+ "sdk_name": "dotnet-sdk",
+ "version": null,
+ "source_repo": "https://github.com/signalwire/signalwire-dotnet",
+ "format": "mdx",
+ "platform": "fern",
+ "base_slug": "/reference/dotnet",
+ "item_count": 1448
+}
\ No newline at end of file
diff --git a/fern/products/sdk-reference/dotnet/agents/agent/agent-base/index.mdx b/fern/products/sdk-reference/dotnet/agents/agent/agent-base/index.mdx
new file mode 100644
index 0000000000..7879254993
--- /dev/null
+++ b/fern/products/sdk-reference/dotnet/agents/agent/agent-base/index.mdx
@@ -0,0 +1,2064 @@
+---
+slug: "/reference/dotnet/agents/agent/agent-base"
+title: "AgentBase"
+sdk_label: ".NET SDK"
+icon: "dotnet"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "dotnet"
+ qualified_name: "SignalWire.Agent.AgentBase"
+ parent: "agents.agent"
+ module: "agents.agent"
+ source_url: "https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs"
+ visibility: "public"
+---
+# `AgentBase`
+
+AI agent built on <xref href="SignalWire.SWML.Service" data-throw-if-not-resolved="false"></xref>. Provides prompt management, SWAIG tool dispatch,
+context switching, skill stubs, and a 5-phase SWML rendering pipeline.
+All configuration methods return `this` for fluent chaining.
+
+## Signature
+
+```dotnet
+public class AgentBase : Service
+```
+
+## Inheritance
+
+**Extends:** [SignalWire.SWML.Service](/docs/sdk-reference/reference/dotnet/agents/swml/service)
+
+## Properties
+
+
+
+
+ True iff signature validation is enabled — i.e. either the `SigningKey` option or `SIGNALWIRE_SIGNING_KEY` env var was set at construction time. (Python parity: `bool(agent.signing_key)`.)
+
+
+
+ The prompt as a <xref href="SignalWire.POM.PromptObjectModel" data-throw-if-not-resolved="false"></xref> instance (Python parity: `agent.pom`). Returns null when `UsePom` is false. Materialised on each access from the internal list-of-dicts so mutations stay round-trip-safe. To inspect raw section dicts, use <xref href="SignalWire.Agent.AgentBase.GetPromptSections" data-throw-if-not-resolved="false"></xref>.
+
+
+
+ The configured Signing Key, or null when validation is disabled. Read-only — the resolution order (constructor arg → `SIGNALWIRE_SIGNING_KEY` env) is fixed at construction time. (Python parity: `agent.signing_key`.)
+
+
+
+ Skill manager (Python parity: `agent.skill_manager`).
+
+
+
+ The complete set of internal SWAIG function names that accept fillers, matching the SWAIGInternalFiller schema definition. Any name outside this set is silently ignored by the runtime — <xref href="SignalWire.Agent.AgentBase.SetInternalFillers(System.Collections.Generic.Dictionary%7bSystem.String%2cSystem.Collections.Generic.Dictionary%7bSystem.String%2cSystem.Collections.Generic.List%7bSystem.String%7d%7d%7d)" data-throw-if-not-resolved="false"></xref> and <xref href="SignalWire.Agent.AgentBase.AddInternalFiller(System.String%2cSystem.String%2cSystem.Collections.Generic.List%7bSystem.String%7d)" data-throw-if-not-resolved="false"></xref> warn if you pass an unknown name. Notable absences: `change_step`, `gather_submit`, or arbitrary user-defined SWAIG function names are NOT supported.
+
+
+## Methods
+
+### AddAnswerVerb
+
+Alias for <xref href="SignalWire.Agent.AgentBase.AddPostAnswerVerb(System.String%2cSystem.Collections.Generic.Dictionary%7bSystem.String%2cSystem.Object%7d)" data-throw-if-not-resolved="false"></xref>.
+
+#### Signature
+
+
+
+ ```dotnet
+ public AgentBase AddAnswerVerb(string verb, Dictionary config)
+ ```
+
+
+
+ ```dotnet
+ public AgentBase AddAnswerVerb(Dictionary config)
+ ```
+
+
+
+#### Parameters (Overload 1)
+
+
+
+
+
+#### Parameters (Overload 2)
+
+
+
+#### Returns (Overload 1)
+
+`SignalWire.Agent.AgentBase`
+
+#### Returns (Overload 2)
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 812.
+
+***
+
+### AddFunctionInclude(Dictionary\)
+
+#### Signature
+
+```dotnet
+public AgentBase AddFunctionInclude(Dictionary include)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 771.
+
+***
+
+### AddHint(string)
+
+#### Signature
+
+```dotnet
+public AgentBase AddHint(string hint)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 480.
+
+***
+
+### AddHints(List\)
+
+#### Signature
+
+```dotnet
+public AgentBase AddHints(List hints)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 486.
+
+***
+
+### AddInternalFiller
+
+Add internal fillers for a single internal function and language.
+
+<p>See
+<xref href="SignalWire.Agent.AgentBase.SetInternalFillers(System.Collections.Generic.Dictionary%7bSystem.String%2cSystem.Collections.Generic.Dictionary%7bSystem.String%2cSystem.Collections.Generic.List%7bSystem.String%7d%7d%7d)" data-throw-if-not-resolved="false"></xref>
+for the complete list of supported function names and what fillers
+do. Names outside the supported set log a warning.</p>
+
+#### Signature
+
+
+
+ ```dotnet
+ public AgentBase AddInternalFiller(string filler)
+ ```
+
+
+
+ ```dotnet
+ public AgentBase AddInternalFiller(string functionName, string languageCode, List fillers)
+ ```
+
+
+
+#### Parameters (Overload 1)
+
+
+
+#### Parameters (Overload 2)
+
+
+
+
+
+
+
+#### Returns (Overload 1)
+
+`SignalWire.Agent.AgentBase`
+
+#### Returns (Overload 2)
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 730.
+
+***
+
+### AddLanguage
+
+Add a language configuration with optional per-language engine-specific
+params (e.g. voice stability/similarity for ElevenLabs, model knobs).
+The `params` key is only emitted into SWML when non-empty, so
+existing language entries stay byte-identical when no params are passed.
+Mirrors signalwire-python's `AIConfigMixin.add_language(params=...)`.
+
+#### Signature
+
+
+
+ ```dotnet
+ public AgentBase AddLanguage(string name, string code, string voice)
+ ```
+
+
+
+ ```dotnet
+ public AgentBase AddLanguage(string name, string code, string voice, Dictionary? languageParams)
+ ```
+
+
+
+#### Parameters (Overload 1)
+
+
+
+
+
+
+
+#### Parameters (Overload 2)
+
+
+ Language name (e.g. "English").
+
+
+
+ Language code (e.g. "en-US").
+
+
+
+ TTS voice name or combined "engine.voice:model".
+
+
+
+ Optional engine-specific params dict. `null` or empty omits the SWML `params` key.
+
+
+#### Returns (Overload 1)
+
+`SignalWire.Agent.AgentBase`
+
+#### Returns (Overload 2)
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 498.
+
+***
+
+### AddPatternHint(string)
+
+#### Signature
+
+```dotnet
+public AgentBase AddPatternHint(string pattern)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 492.
+
+***
+
+### AddPostAiVerb(string, Dictionary\)
+
+#### Signature
+
+```dotnet
+public AgentBase AddPostAiVerb(string verb, Dictionary config)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 825.
+
+***
+
+### AddPostAnswerVerb(string, Dictionary\)
+
+#### Signature
+
+```dotnet
+public AgentBase AddPostAnswerVerb(string verb, Dictionary config)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 805.
+
+***
+
+### AddPreAnswerVerb(string, Dictionary\)
+
+#### Signature
+
+```dotnet
+public AgentBase AddPreAnswerVerb(string verb, Dictionary config)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 799.
+
+***
+
+### AddPronunciation(string, string, string)
+
+#### Signature
+
+```dotnet
+public AgentBase AddPronunciation(string replace, string with, string ignore = "")
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Returns
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 594.
+
+***
+
+### AddSkill
+
+Load and activate a skill by name. Resolves through <xref href="SignalWire.Skills.SkillRegistry" data-throw-if-not-resolved="false"></xref>,
+validates env vars, calls Setup/RegisterTools, and merges hints/globalData/prompts.
+
+#### Signature
+
+
+
+ ```dotnet
+ public AgentBase AddSkill(string name, Dictionary? parameters = null)
+ ```
+
+
+
+ ```dotnet
+ public AgentBase AddSkill(SkillName name, Dictionary? parameters = null)
+ ```
+
+
+
+#### Parameters (Overload 1)
+
+
+
+
+
+#### Parameters (Overload 2)
+
+
+
+
+
+#### Returns (Overload 1)
+
+`SignalWire.Agent.AgentBase`
+
+#### Returns (Overload 2)
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 927.
+
+***
+
+### AddSwaigQueryParams(Dictionary\)
+
+#### Signature
+
+```dotnet
+public AgentBase AddSwaigQueryParams(Dictionary parameters)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 1027.
+
+***
+
+### AgentBase(AgentOptions)
+
+#### Signature
+
+```dotnet
+public AgentBase(AgentOptions options)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 145.
+
+***
+
+### AutoMapSipUsernames()
+
+Enable auto-mapping of SIP usernames to this agent's
+route (Python parity: `agent.auto_map_sip_usernames()`).
+Chainable.
+
+#### Signature
+
+```dotnet
+public AgentBase AutoMapSipUsernames()
+```
+
+#### Returns
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 914.
+
+***
+
+### BuildAiVerb(Dictionary\?)
+
+Build the AI verb configuration block.
+
+#### Signature
+
+```dotnet
+public Dictionary BuildAiVerb(Dictionary? headers = null)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Dictionary`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 1165.
+
+***
+
+### ClearPostAiVerbs()
+
+#### Signature
+
+```dotnet
+public AgentBase ClearPostAiVerbs()
+```
+
+#### Returns
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 843.
+
+***
+
+### ClearPostAnswerVerbs()
+
+#### Signature
+
+```dotnet
+public AgentBase ClearPostAnswerVerbs()
+```
+
+#### Returns
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 837.
+
+***
+
+### ClearPreAnswerVerbs()
+
+#### Signature
+
+```dotnet
+public AgentBase ClearPreAnswerVerbs()
+```
+
+#### Returns
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 831.
+
+***
+
+### ClearSwaigQueryParams()
+
+#### Signature
+
+```dotnet
+public AgentBase ClearSwaigQueryParams()
+```
+
+#### Returns
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 1036.
+
+***
+
+### CloneForRequest()
+
+Create a deep copy of this agent for per-request customisation.
+Collections are deeply copied; callbacks are preserved by reference.
+
+#### Signature
+
+```dotnet
+public AgentBase CloneForRequest()
+```
+
+#### Returns
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 1448.
+
+***
+
+### Contexts()
+
+Alias for <xref href="SignalWire.Agent.AgentBase.DefineContexts" data-throw-if-not-resolved="false"></xref>.
+
+#### Signature
+
+```dotnet
+public ContextBuilder Contexts()
+```
+
+#### Returns
+
+`SignalWire.Contexts.ContextBuilder`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 871.
+
+***
+
+### CreateToolToken(string, string)
+
+Create a per-call SWAIG-function token. Returns empty
+string on failure. (Python parity: `StateMixin._create_tool_token`.)
+
+#### Signature
+
+```dotnet
+public string CreateToolToken(string toolName, string callId)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`string`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 441.
+
+***
+
+### DefineContexts()
+
+Return the ContextBuilder, creating it lazily on first access.
+The builder is wired to report registered SWAIG tool names back
+so its <xref href="SignalWire.Contexts.ContextBuilder.Validate" data-throw-if-not-resolved="false"></xref> can check for
+collisions with reserved native tool names (`next_step`,
+`change_context`, `gather_submit`).
+
+#### Signature
+
+```dotnet
+public ContextBuilder DefineContexts()
+```
+
+#### Returns
+
+`SignalWire.Contexts.ContextBuilder`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 860.
+
+***
+
+### EnableDebugEvents(string)
+
+#### Signature
+
+```dotnet
+public AgentBase EnableDebugEvents(string level = "all")
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 765.
+
+***
+
+### EnableSipRouting(bool, string)
+
+Enable SIP routing on this agent. `autoMap` opts into Python's
+auto-mapping behaviour (sip\_username = agent name); `path` lets
+the caller pin a specific SIP route prefix.
+
+#### Signature
+
+```dotnet
+public AgentBase EnableSipRouting(bool autoMap = false, string path = "")
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 1065.
+
+***
+
+### GetContexts()
+
+Return the contexts configuration if defined, else null.
+(Python parity: `PromptManager.get_contexts`.)
+
+#### Signature
+
+```dotnet
+public Dictionary? GetContexts()
+```
+
+#### Returns
+
+`Dictionary`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 392.
+
+***
+
+### GetLanguageParams(string)
+
+Read the per-language `params` dict for a previously-added
+language. Returns `null` when the params were never set or
+when the code is unknown — no exception path, matching Python.
+
+#### Signature
+
+```dotnet
+public Dictionary? GetLanguageParams(string code)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`Dictionary`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 571.
+
+***
+
+### GetName()
+
+Return the agent name (Python parity: `agent.get_name()`).
+
+#### Signature
+
+```dotnet
+public string GetName()
+```
+
+#### Returns
+
+`string`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 905.
+
+***
+
+### GetPostPrompt()
+
+Return the post-prompt text if set, else null.
+(Python parity: `PromptManager.get_post_prompt`.)
+
+#### Signature
+
+```dotnet
+public string? GetPostPrompt()
+```
+
+#### Returns
+
+`string`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 388.
+
+***
+
+### GetPrompt()
+
+Return the prompt payload: POM array if enabled and populated, otherwise raw text.
+
+#### Signature
+
+```dotnet
+public object GetPrompt()
+```
+
+#### Returns
+
+`object`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 373.
+
+***
+
+### GetPromptSections()
+
+The raw POM section dicts. Mirrors how the dotnet
+agent has historically stored its prompt-object data and how
+SWML rendering consumes it. Read-only snapshot.
+
+#### Signature
+
+```dotnet
+public IReadOnlyList> GetPromptSections()
+```
+
+#### Returns
+
+`IReadOnlyList>`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 437.
+
+***
+
+### GetRawPrompt()
+
+Return the raw prompt text if set, else null.
+(Python parity: `PromptManager.get_raw_prompt`.)
+
+#### Signature
+
+```dotnet
+public string? GetRawPrompt()
+```
+
+#### Returns
+
+`string`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 384.
+
+***
+
+### GetSkillManager()
+
+Return the skill manager, creating it lazily on first access.
+
+#### Signature
+
+```dotnet
+public SkillManager GetSkillManager()
+```
+
+#### Returns
+
+`SignalWire.Skills.SkillManager`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 895.
+
+***
+
+### HandlePostPrompt(Dictionary\?, Dictionary\)
+
+Handle the post-prompt callback.
+
+**Modifiers:** `override`
+
+#### Signature
+
+```dotnet
+protected override (int, Dictionary, string) HandlePostPrompt(Dictionary? requestData, Dictionary headers)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`System.ValueTuple,string>`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 1403.
+
+***
+
+### HandleRequest(string, string, Dictionary\, string?)
+
+Override the base dispatch to enforce webhook signature validation on
+POST requests targeting the signed routes (`/`, `/swaig`,
+`/post_prompt`) when <xref href="SignalWire.Agent.AgentBase.SigningKey" data-throw-if-not-resolved="false"></xref> is configured.
+
+<p>Validation is gated behind Basic Auth: callers must already
+satisfy the SWMLService basic-auth check (it always runs first in
+<xref href="SignalWire.SWML.Service.HandleRequest(System.String%2cSystem.String%2cSystem.Collections.Generic.Dictionary%7bSystem.String%2cSystem.String%7d%2cSystem.String)" data-throw-if-not-resolved="false"></xref>) before we even look at
+signatures, matching Python where `signing_key` is layered on
+top of `basic_auth`.</p>
+
+<p>On invalid signature: returns 403 directly without dispatching
+to the agent's POST handler. On valid signature (or non-POST, or
+non-signed route): delegates to <xref href="SignalWire.SWML.Service.HandleRequest(System.String%2cSystem.String%2cSystem.Collections.Generic.Dictionary%7bSystem.String%2cSystem.String%7d%2cSystem.String)" data-throw-if-not-resolved="false"></xref>.
+</p>
+
+<p>(Python parity: `web_mixin._register_routes` wraps the
+signed POST routes in a FastAPI `Depends(sig_dep)` dependency
+when `signing_key` is set; this is the .NET equivalent.)</p>
+
+**Modifiers:** `override`
+
+#### Signature
+
+```dotnet
+public override (int Status, Dictionary Headers, string Body) HandleRequest(string method, string path, Dictionary headers, string? body)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+#### Returns
+
+`System.ValueTuple,string>`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 1294.
+
+***
+
+### HandleSwmlRequest(string, Dictionary\?, Dictionary\)
+
+Handle the SWML document request. If a dynamic-config callback is registered,
+clone the agent, pass the clone to the callback, and render from the clone.
+
+**Modifiers:** `override`
+
+#### Signature
+
+```dotnet
+protected override (int, Dictionary, string) HandleSwmlRequest(string method, Dictionary? requestData, Dictionary headers)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Returns
+
+`System.ValueTuple,string>`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 1369.
+
+***
+
+### HasSkill
+
+Check if a skill is loaded by instance key.
+
+#### Signature
+
+
+
+ ```dotnet
+ public bool HasSkill(string name)
+ ```
+
+
+
+ ```dotnet
+ public bool HasSkill(SkillName name)
+ ```
+
+
+
+#### Parameters (Overload 1)
+
+
+
+#### Parameters (Overload 2)
+
+
+
+#### Returns (Overload 1)
+
+`bool`
+
+#### Returns (Overload 2)
+
+`bool`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 983.
+
+***
+
+### ListSkills()
+
+List all loaded skill instance keys.
+
+#### Signature
+
+```dotnet
+public List ListSkills()
+```
+
+#### Returns
+
+`List`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 973.
+
+***
+
+### ManualSetProxyUrl(string)
+
+Manually override the proxy URL used for SWAIG webhook construction.
+
+#### Signature
+
+```dotnet
+public AgentBase ManualSetProxyUrl(string url)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 1021.
+
+***
+
+### OnDebugEvent(Action\?, Dictionary\>)
+
+#### Signature
+
+```dotnet
+public AgentBase OnDebugEvent(Action?, Dictionary> callback)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 1049.
+
+***
+
+### OnSummary(Action\?, Dictionary\>)
+
+#### Signature
+
+```dotnet
+public AgentBase OnSummary(Action?, Dictionary> callback)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 1042.
+
+***
+
+### PromptAddSection(string, string, List\?, bool, bool, List\>?)
+
+Add a top-level POM section with an optional body, bullets,
+numbering, and subsections. (Python parity: `prompt_add_section`.)
+
+#### Signature
+
+```dotnet
+public AgentBase PromptAddSection(string title, string body = "", List? bullets = null, bool numbered = false, bool numberedBullets = false, List>? subsections = null)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+
+
+
+
+#### Returns
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 263.
+
+***
+
+### PromptAddSubsection(string, string, string, List\?)
+
+Add a subsection nested under an existing parent section.
+(Python parity: `prompt_add_subsection(parent_title, title, body, bullets)`.)
+
+#### Signature
+
+```dotnet
+public AgentBase PromptAddSubsection(string parentTitle, string title, string body = "", List? bullets = null)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+#### Returns
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 293.
+
+***
+
+### PromptAddToSection(string, string?, string?, List\?)
+
+Append body text, a single bullet, and/or bullets list to an
+existing section. (Python parity:
+`prompt_add_to_section(title, body, bullet, bullets)`.)
+
+#### Signature
+
+```dotnet
+public AgentBase PromptAddToSection(string title, string? body = null, string? bullet = null, List? bullets = null)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+#### Returns
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 327.
+
+***
+
+### PromptHasSection(string)
+
+Check whether a POM section with the given title exists.
+
+#### Signature
+
+```dotnet
+public bool PromptHasSection(string title)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 365.
+
+***
+
+### RegisterSipUsername
+
+Register a SIP username under this agent's own route — Python
+equivalent of `register_sip_username(self, sip_username)`.
+
+#### Signature
+
+
+
+ ```dotnet
+ public AgentBase RegisterSipUsername(string username, string route = "")
+ ```
+
+
+
+ ```dotnet
+ public AgentBase RegisterSipUsername(string username)
+ ```
+
+
+
+#### Parameters (Overload 1)
+
+
+
+
+
+#### Parameters (Overload 2)
+
+
+
+#### Returns (Overload 1)
+
+`SignalWire.Agent.AgentBase`
+
+#### Returns (Overload 2)
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 1073.
+
+***
+
+### RemoveSkill
+
+Remove a loaded skill by its instance key.
+
+#### Signature
+
+
+
+ ```dotnet
+ public AgentBase RemoveSkill(string name)
+ ```
+
+
+
+ ```dotnet
+ public AgentBase RemoveSkill(SkillName name)
+ ```
+
+
+
+#### Parameters (Overload 1)
+
+
+
+#### Parameters (Overload 2)
+
+
+
+#### Returns (Overload 1)
+
+`SignalWire.Agent.AgentBase`
+
+#### Returns (Overload 2)
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 959.
+
+***
+
+### RenderSwml()
+
+Build the complete SWML document.
+
+<p>Phases: 1) Pre-answer verbs 2) Answer 3) Record call
+4) Post-answer verbs 5) AI verb 6) Post-AI verbs</p>
+
+**Modifiers:** `override`
+
+#### Signature
+
+```dotnet
+public override Dictionary RenderSwml()
+```
+
+#### Returns
+
+`Dictionary`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 1097.
+
+***
+
+### RenderSwmlWithContext(Dictionary\?, Dictionary\)
+
+Render with request body and headers context.
+
+#### Signature
+
+```dotnet
+public Dictionary RenderSwmlWithContext(Dictionary? requestBody, Dictionary headers)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`Dictionary`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 1103.
+
+***
+
+### ResetContexts()
+
+Remove all contexts, returning the agent to a no-contexts state.
+This is a convenience wrapper around `DefineContexts().Reset()`.
+Use it in a dynamic config callback when you need to rebuild
+contexts from scratch for a specific request.
+
+#### Signature
+
+```dotnet
+public AgentBase ResetContexts()
+```
+
+#### Returns
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 882.
+
+***
+
+### SetDynamicConfigCallback(Action\?, Dictionary\?, Dictionary\, AgentBase>)
+
+#### Signature
+
+```dotnet
+public AgentBase SetDynamicConfigCallback(Action?, Dictionary?, Dictionary, AgentBase> callback)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 1001.
+
+***
+
+### SetFunctionIncludes(List\>)
+
+#### Signature
+
+```dotnet
+public AgentBase SetFunctionIncludes(List> includes)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 777.
+
+***
+
+### SetGlobalData(Dictionary\)
+
+#### Signature
+
+```dotnet
+public AgentBase SetGlobalData(Dictionary data)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 627.
+
+***
+
+### SetInternalFillers
+
+Set internal fillers for native SWAIG functions.
+
+<p>Internal fillers are short phrases the AI agent speaks (via
+TTS) while an internal/native function is running, so the caller
+doesn't hear dead air during transitions or background work.</p>
+
+<p>Supported function names (match the SWAIGInternalFiller
+schema): `hangup`, `check_time`, `wait_for_user`,
+`wait_seconds`, `adjust_response_latency`,
+`next_step`, `change_context`, `get_visual_input`,
+`get_ideal_strategy`. See
+<xref href="SignalWire.Agent.AgentBase.SupportedInternalFillerNames" data-throw-if-not-resolved="false"></xref>.</p>
+
+<p>Notably NOT supported: `change_step`,
+`gather_submit`, or arbitrary user-defined SWAIG function
+names. The runtime only honors fillers for the names listed above;
+everything else is silently ignored at the SWML level. This method
+warns at registration time if you pass an unknown name so you
+catch the typo early.</p>
+
+#### Signature
+
+
+
+ ```dotnet
+ public AgentBase SetInternalFillers(List fillers)
+ ```
+
+
+
+ ```dotnet
+ public AgentBase SetInternalFillers(Dictionary>> fillers)
+ ```
+
+
+
+#### Parameters (Overload 1)
+
+
+
+#### Parameters (Overload 2)
+
+
+
+#### Returns (Overload 1)
+
+`SignalWire.Agent.AgentBase`
+
+#### Returns (Overload 2)
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 672.
+
+***
+
+### SetLanguageParams(string, Dictionary\)
+
+Set (or replace) the per-language `params` dict on an
+already-added language. Useful when language entries are built
+up via <xref href="SignalWire.Agent.AgentBase.AddLanguage(System.String%2cSystem.String%2cSystem.String)" data-throw-if-not-resolved="false"></xref> first and
+engine-specific tuning is added later (e.g., from a config loader).
+Empty dict removes the key. No-op if <code class="paramref">code</code> isn't
+found — matches Python's silent-skip behavior.
+
+#### Signature
+
+```dotnet
+public AgentBase SetLanguageParams(string code, Dictionary languageParams)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 546.
+
+***
+
+### SetLanguages(List\>)
+
+#### Signature
+
+```dotnet
+public AgentBase SetLanguages(List> languages)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 588.
+
+***
+
+### SetNativeFunctions(List\)
+
+#### Signature
+
+```dotnet
+public AgentBase SetNativeFunctions(List functions)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 642.
+
+***
+
+### SetParam(string, object)
+
+#### Signature
+
+```dotnet
+public AgentBase SetParam(string key, object value)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 615.
+
+***
+
+### SetParams(Dictionary\)
+
+#### Signature
+
+```dotnet
+public AgentBase SetParams(Dictionary parameters)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 621.
+
+***
+
+### SetPostPrompt(string)
+
+#### Signature
+
+```dotnet
+public AgentBase SetPostPrompt(string text)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 255.
+
+***
+
+### SetPostPromptLlmParams(Dictionary\)
+
+#### Signature
+
+```dotnet
+public AgentBase SetPostPromptLlmParams(Dictionary parameters)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 789.
+
+***
+
+### SetPostPromptUrl(string)
+
+#### Signature
+
+```dotnet
+public AgentBase SetPostPromptUrl(string url)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 1014.
+
+***
+
+### SetPromptLlmParams(Dictionary\)
+
+#### Signature
+
+```dotnet
+public AgentBase SetPromptLlmParams(Dictionary parameters)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 783.
+
+***
+
+### SetPromptPom(List\>)
+
+Set the prompt as a list-of-section dicts (POM form).
+Throws when `UsePom` is false. (Python parity:
+`PromptManager.set_prompt_pom`.)
+
+#### Signature
+
+```dotnet
+public AgentBase SetPromptPom(List> pom)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 398.
+
+***
+
+### SetPromptText(string)
+
+#### Signature
+
+```dotnet
+public AgentBase SetPromptText(string text)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 249.
+
+***
+
+### SetPronunciations(List\>)
+
+#### Signature
+
+```dotnet
+public AgentBase SetPronunciations(List> pronunciations)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 609.
+
+***
+
+### SetWebHookUrl(string)
+
+#### Signature
+
+```dotnet
+public AgentBase SetWebHookUrl(string url)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 1008.
+
+***
+
+### UpdateGlobalData(Dictionary\)
+
+#### Signature
+
+```dotnet
+public AgentBase UpdateGlobalData(Dictionary data)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Agent.AgentBase`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 633.
+
+***
+
+### ValidateToolToken(string, string, string)
+
+Validate a per-call SWAIG-function token. Rejects
+when the function is not registered, when the SessionManager
+rejects the token, or on any error. (Python parity:
+`StateMixin.validate_tool_token`.)
+
+#### Signature
+
+```dotnet
+public bool ValidateToolToken(string functionName, string token, string callId)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 457.
+
+## Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 51.
diff --git a/fern/products/sdk-reference/dotnet/agents/agent/agent-options/index.mdx b/fern/products/sdk-reference/dotnet/agents/agent/agent-options/index.mdx
new file mode 100644
index 0000000000..9da79f6ab7
--- /dev/null
+++ b/fern/products/sdk-reference/dotnet/agents/agent/agent-options/index.mdx
@@ -0,0 +1,64 @@
+---
+slug: "/reference/dotnet/agents/agent/agent-options"
+title: "AgentOptions"
+sdk_label: ".NET SDK"
+icon: "dotnet"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "dotnet"
+ qualified_name: "SignalWire.Agent.AgentOptions"
+ parent: "agents.agent"
+ module: "agents.agent"
+ source_url: "https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs"
+ visibility: "public"
+---
+# `AgentOptions`
+
+Configuration options for an AI agent, extending the base SWML service options.
+
+**Modifiers:** `sealed`
+
+## Signature
+
+```dotnet
+public sealed class AgentOptions
+```
+
+## Properties
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Optional SignalWire Signing Key (from Dashboard → API Credentials). When set, webhook signature validation is enforced on POST /, /swaig, /post\_prompt — unsigned or invalidly-signed requests get a 403. Falls back to the `SIGNALWIRE_SIGNING_KEY` env var if not passed. See `porting-sdk/webhooks.md` for the contract. (Python parity: `AgentBase.__init__(signing_key=...)`.)
+
+
+
+ If true, honor `X-Forwarded-Proto` / `X-Forwarded-Host` headers when reconstructing the URL for signature validation. Default false because proxy headers are spoofable; opt in only when you control the proxy chain. (Python parity: `AgentBase.__init__(trust_proxy_for_signature=...)`.)
+
+
+
+
+## Source
+
+[`src/SignalWire/Agent/AgentBase.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Agent/AgentBase.cs)
+
+Line 12.
diff --git a/fern/products/sdk-reference/dotnet/agents/agent/index.mdx b/fern/products/sdk-reference/dotnet/agents/agent/index.mdx
new file mode 100644
index 0000000000..4da25dbd1f
--- /dev/null
+++ b/fern/products/sdk-reference/dotnet/agents/agent/index.mdx
@@ -0,0 +1,26 @@
+---
+slug: "/reference/dotnet/agents/agent"
+title: "agent"
+sdk_label: ".NET SDK"
+icon: "dotnet"
+lustri:
+ auto_generated: true
+ kind: "module"
+ language: "dotnet"
+ qualified_name: "agents.agent"
+ parent: "agents"
+ module: "agents"
+---
+# `agent`
+
+## Classes
+
+
+
+ AI agent built on <xref href="SignalWire.SWML.Service" data-throw-if-not-resolved="false"></xref>. Provides prompt management, SWAIG tool dispatch, context switching, skill stubs, and a 5-phase SWML rendering pipeline. All configuration methods return `this` for fluent chaining.
+
+
+
+ Configuration options for an AI agent, extending the base SWML service options.
+
+
diff --git a/fern/products/sdk-reference/dotnet/agents/contexts/context-builder/index.mdx b/fern/products/sdk-reference/dotnet/agents/contexts/context-builder/index.mdx
new file mode 100644
index 0000000000..8701fdf917
--- /dev/null
+++ b/fern/products/sdk-reference/dotnet/agents/contexts/context-builder/index.mdx
@@ -0,0 +1,236 @@
+---
+slug: "/reference/dotnet/agents/contexts/context-builder"
+title: "ContextBuilder"
+sdk_label: ".NET SDK"
+icon: "dotnet"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "dotnet"
+ qualified_name: "SignalWire.Contexts.ContextBuilder"
+ parent: "agents.contexts"
+ module: "agents.contexts"
+ source_url: "https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs"
+ visibility: "public"
+---
+# `ContextBuilder`
+
+Builder for multi-step, multi-context AI agent workflows.
+
+<p>A ContextBuilder owns one or more <xref href="SignalWire.Contexts.Context" data-throw-if-not-resolved="false"></xref>s; each
+context owns an ordered list of <xref href="SignalWire.Contexts.Step" data-throw-if-not-resolved="false"></xref>s. Only one context
+and one step is active at a time. Per chat turn, the runtime injects
+the current step's instructions as a system message, then asks the LLM
+for a response.</p>
+
+<p><b>Native tools auto-injected by the runtime:</b> When a step
+(or its enclosing context) declares valid_steps or valid_contexts, the
+runtime auto-injects two native tools so the model can navigate the
+flow: `next_step` and `change_context`. A third native tool,
+`gather_submit`, is injected during gather_info questioning.
+These three names are reserved: <xref href="SignalWire.Contexts.ContextBuilder.Validate" data-throw-if-not-resolved="false"></xref> rejects any
+agent that defines a SWAIG tool with one of them. See
+<xref href="SignalWire.Contexts.ReservedToolNames.Reserved" data-throw-if-not-resolved="false"></xref>.</p>
+
+<p><b>Function whitelisting (<xref href="SignalWire.Contexts.Step.SetFunctions(System.Object)" data-throw-if-not-resolved="false"></xref>):</b>
+Each step may declare a functions whitelist. The whitelist is applied
+in-memory at the start of each LLM turn. CRITICALLY: if a step does
+NOT declare a functions field, it INHERITS the previous step's active
+set. See <xref href="SignalWire.Contexts.Step.SetFunctions(System.Object)" data-throw-if-not-resolved="false"></xref> for details and examples.</p>
+
+## Signature
+
+```dotnet
+public class ContextBuilder
+```
+
+## Methods
+
+### AddContext(string)
+
+#### Signature
+
+```dotnet
+public Context AddContext(string name)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Contexts.Context`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 622.
+
+***
+
+### AttachToolNameSupplier(Func\>)
+
+Attach a supplier that returns registered SWAIG tool names so <xref href="SignalWire.Contexts.ContextBuilder.Validate" data-throw-if-not-resolved="false"></xref> can check them against <xref href="SignalWire.Contexts.ReservedToolNames.Reserved" data-throw-if-not-resolved="false"></xref>. Called internally by
+`AgentBase.DefineContexts()`.
+
+#### Signature
+
+```dotnet
+public ContextBuilder AttachToolNameSupplier(Func> supplier)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Contexts.ContextBuilder`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 604.
+
+***
+
+### CreateSimpleContext(string)
+
+**Modifiers:** `static`
+
+#### Signature
+
+```dotnet
+public static ContextBuilder CreateSimpleContext(string name)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Contexts.ContextBuilder`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 807.
+
+***
+
+### GetContext(string)
+
+#### Signature
+
+```dotnet
+public Context? GetContext(string name)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Contexts.Context`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 635.
+
+***
+
+### HasContexts()
+
+#### Signature
+
+```dotnet
+public bool HasContexts()
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 636.
+
+***
+
+### Reset()
+
+Remove all contexts, returning the builder to its initial state.
+Use this in a dynamic config callback when you need to rebuild
+contexts from scratch for a specific request.
+
+#### Signature
+
+```dotnet
+public ContextBuilder Reset()
+```
+
+#### Returns
+
+`SignalWire.Contexts.ContextBuilder`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 615.
+
+***
+
+### ToDict()
+
+#### Signature
+
+```dotnet
+public Dictionary ToDict()
+```
+
+#### Returns
+
+`Dictionary`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 793.
+
+***
+
+### Validate()
+
+#### Signature
+
+```dotnet
+public List Validate()
+```
+
+#### Returns
+
+`List`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 638.
+
+## Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 591.
diff --git a/fern/products/sdk-reference/dotnet/agents/contexts/context/index.mdx b/fern/products/sdk-reference/dotnet/agents/contexts/context/index.mdx
new file mode 100644
index 0000000000..5d034568f5
--- /dev/null
+++ b/fern/products/sdk-reference/dotnet/agents/contexts/context/index.mdx
@@ -0,0 +1,724 @@
+---
+slug: "/reference/dotnet/agents/contexts/context"
+title: "Context"
+sdk_label: ".NET SDK"
+icon: "dotnet"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "dotnet"
+ qualified_name: "SignalWire.Contexts.Context"
+ parent: "agents.contexts"
+ module: "agents.contexts"
+ source_url: "https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs"
+ visibility: "public"
+---
+# `Context`
+
+## Signature
+
+```dotnet
+public class Context
+```
+
+## Properties
+
+
+
+## Methods
+
+### AddBullets(string, List\)
+
+#### Signature
+
+```dotnet
+public Context AddBullets(string title, List bullets)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`SignalWire.Contexts.Context`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 413.
+
+***
+
+### AddEnterFiller(string, params string\[])
+
+#### Signature
+
+```dotnet
+public Context AddEnterFiller(string lang, params string[] fillers)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`SignalWire.Contexts.Context`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 495.
+
+***
+
+### AddExitFiller(string, params string\[])
+
+#### Signature
+
+```dotnet
+public Context AddExitFiller(string lang, params string[] fillers)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`SignalWire.Contexts.Context`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 503.
+
+***
+
+### AddSection(string, string)
+
+#### Signature
+
+```dotnet
+public Context AddSection(string title, string body)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`SignalWire.Contexts.Context`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 405.
+
+***
+
+### AddStep(string, Dictionary\?)
+
+#### Signature
+
+```dotnet
+public Step AddStep(string name, Dictionary? opts = null)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`SignalWire.Contexts.Step`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 350.
+
+***
+
+### AddSystemBullets(string, List\)
+
+#### Signature
+
+```dotnet
+public Context AddSystemBullets(string title, List bullets)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`SignalWire.Contexts.Context`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 439.
+
+***
+
+### AddSystemSection(string, string)
+
+#### Signature
+
+```dotnet
+public Context AddSystemSection(string title, string body)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`SignalWire.Contexts.Context`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 431.
+
+***
+
+### Context(string)
+
+#### Signature
+
+```dotnet
+public Context(string name)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 345.
+
+***
+
+### GetInitialStep()
+
+#### Signature
+
+```dotnet
+public string? GetInitialStep()
+```
+
+#### Returns
+
+`string`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 459.
+
+***
+
+### GetStep(string)
+
+#### Signature
+
+```dotnet
+public Step? GetStep(string name)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Contexts.Step`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 372.
+
+***
+
+### GetStepOrder()
+
+#### Signature
+
+```dotnet
+public List GetStepOrder()
+```
+
+#### Returns
+
+`List`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 393.
+
+***
+
+### GetSteps()
+
+#### Signature
+
+```dotnet
+public Dictionary GetSteps()
+```
+
+#### Returns
+
+`Dictionary`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 392.
+
+***
+
+### GetValidContexts()
+
+#### Signature
+
+```dotnet
+public List? GetValidContexts()
+```
+
+#### Returns
+
+`List`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 511.
+
+***
+
+### MoveStep(string, int)
+
+#### Signature
+
+```dotnet
+public Context MoveStep(string name, int position)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`SignalWire.Contexts.Context`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 383.
+
+***
+
+### RemoveStep(string)
+
+#### Signature
+
+```dotnet
+public Context RemoveStep(string name)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Contexts.Context`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 374.
+
+***
+
+### SetConsolidate(bool)
+
+#### Signature
+
+```dotnet
+public Context SetConsolidate(bool consolidate)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Contexts.Context`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 464.
+
+***
+
+### SetEnterFillers(Dictionary\>)
+
+#### Signature
+
+```dotnet
+public Context SetEnterFillers(Dictionary> fillers)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Contexts.Context`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 492.
+
+***
+
+### SetExitFillers(Dictionary\>)
+
+#### Signature
+
+```dotnet
+public Context SetExitFillers(Dictionary> fillers)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Contexts.Context`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 493.
+
+***
+
+### SetFullReset(bool)
+
+#### Signature
+
+```dotnet
+public Context SetFullReset(bool fullReset)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Contexts.Context`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 465.
+
+***
+
+### SetInitialStep(string)
+
+Set which step the context starts on when entered.
+
+<p>By default, a context starts on its first step (index 0). Use
+this to skip a preamble step on re-entry via
+`change_context`.</p>
+
+#### Signature
+
+```dotnet
+public Context SetInitialStep(string stepName)
+```
+
+#### Parameters
+
+
+ Name of the step to start on (must exist in this context).
+
+
+#### Returns
+
+`SignalWire.Contexts.Context`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 457.
+
+***
+
+### SetIsolated(bool)
+
+Mark this context as isolated — entering it wipes conversation
+history.
+
+<p>When <code class="paramref">isolated</code> = true and the context is
+entered via change_context, the runtime wipes the conversation
+array. The model starts fresh with only the new context's
+system_prompt + step instructions, with no memory of prior
+turns.</p>
+
+<p><b>EXCEPTION — reset overrides the wipe:</b> If the context
+also has a reset configuration (via <xref href="SignalWire.Contexts.Context.SetConsolidate(System.Boolean)" data-throw-if-not-resolved="false"></xref>
+or <xref href="SignalWire.Contexts.Context.SetFullReset(System.Boolean)" data-throw-if-not-resolved="false"></xref>), the wipe is skipped in favor of
+the reset behavior. Use reset with consolidate=true to summarize
+prior history into a single message instead of dropping it
+entirely.</p>
+
+<p>Use cases: switching to a sensitive billing flow that
+should not see prior small-talk; handing off to a different agent
+persona; resetting after a long off-topic detour.</p>
+
+#### Signature
+
+```dotnet
+public Context SetIsolated(bool isolated)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Contexts.Context`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 488.
+
+***
+
+### SetPostPrompt(string)
+
+#### Signature
+
+```dotnet
+public Context SetPostPrompt(string postPrompt)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Contexts.Context`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 463.
+
+***
+
+### SetPrompt(string)
+
+#### Signature
+
+```dotnet
+public Context SetPrompt(string prompt)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Contexts.Context`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 397.
+
+***
+
+### SetSystemPrompt(string)
+
+#### Signature
+
+```dotnet
+public Context SetSystemPrompt(string systemPrompt)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Contexts.Context`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 423.
+
+***
+
+### SetUserPrompt(string)
+
+#### Signature
+
+```dotnet
+public Context SetUserPrompt(string userPrompt)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Contexts.Context`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 466.
+
+***
+
+### SetValidContexts(List\)
+
+#### Signature
+
+```dotnet
+public Context SetValidContexts(List contexts)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Contexts.Context`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 461.
+
+***
+
+### SetValidSteps(List\)
+
+#### Signature
+
+```dotnet
+public Context SetValidSteps(List steps)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Contexts.Context`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 462.
+
+***
+
+### ToDict()
+
+#### Signature
+
+```dotnet
+public Dictionary ToDict()
+```
+
+#### Returns
+
+`Dictionary`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 535.
+
+## Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 324.
diff --git a/fern/products/sdk-reference/dotnet/agents/contexts/gather-info/index.mdx b/fern/products/sdk-reference/dotnet/agents/contexts/gather-info/index.mdx
new file mode 100644
index 0000000000..f956282a83
--- /dev/null
+++ b/fern/products/sdk-reference/dotnet/agents/contexts/gather-info/index.mdx
@@ -0,0 +1,102 @@
+---
+slug: "/reference/dotnet/agents/contexts/gather-info"
+title: "GatherInfo"
+sdk_label: ".NET SDK"
+icon: "dotnet"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "dotnet"
+ qualified_name: "SignalWire.Contexts.GatherInfo"
+ parent: "agents.contexts"
+ module: "agents.contexts"
+ source_url: "https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs"
+ visibility: "public"
+---
+# `GatherInfo`
+
+## Signature
+
+```dotnet
+public class GatherInfo
+```
+
+## Properties
+
+
+
+
+
+## Methods
+
+### AddQuestion(Dictionary\)
+
+#### Signature
+
+```dotnet
+public GatherInfo AddQuestion(Dictionary opts)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Contexts.GatherInfo`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 81.
+
+***
+
+### GatherInfo(string?, string?, string?)
+
+#### Signature
+
+```dotnet
+public GatherInfo(string? outputKey = null, string? completionAction = null, string? prompt = null)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 74.
+
+***
+
+### ToDict()
+
+#### Signature
+
+```dotnet
+public Dictionary ToDict()
+```
+
+#### Returns
+
+`Dictionary`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 90.
+
+## Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 67.
diff --git a/fern/products/sdk-reference/dotnet/agents/contexts/gather-question/index.mdx b/fern/products/sdk-reference/dotnet/agents/contexts/gather-question/index.mdx
new file mode 100644
index 0000000000..fbb876ecce
--- /dev/null
+++ b/fern/products/sdk-reference/dotnet/agents/contexts/gather-question/index.mdx
@@ -0,0 +1,72 @@
+---
+slug: "/reference/dotnet/agents/contexts/gather-question"
+title: "GatherQuestion"
+sdk_label: ".NET SDK"
+icon: "dotnet"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "dotnet"
+ qualified_name: "SignalWire.Contexts.GatherQuestion"
+ parent: "agents.contexts"
+ module: "agents.contexts"
+ source_url: "https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs"
+ visibility: "public"
+---
+# `GatherQuestion`
+
+## Signature
+
+```dotnet
+public class GatherQuestion
+```
+
+## Properties
+
+
+
+## Methods
+
+### GatherQuestion(Dictionary\)
+
+#### Signature
+
+```dotnet
+public GatherQuestion(Dictionary opts)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 38.
+
+***
+
+### ToDict()
+
+#### Signature
+
+```dotnet
+public Dictionary ToDict()
+```
+
+#### Returns
+
+`Dictionary`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 50.
+
+## Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 29.
diff --git a/fern/products/sdk-reference/dotnet/agents/contexts/index.mdx b/fern/products/sdk-reference/dotnet/agents/contexts/index.mdx
new file mode 100644
index 0000000000..02a7de713c
--- /dev/null
+++ b/fern/products/sdk-reference/dotnet/agents/contexts/index.mdx
@@ -0,0 +1,34 @@
+---
+slug: "/reference/dotnet/agents/contexts"
+title: "contexts"
+sdk_label: ".NET SDK"
+icon: "dotnet"
+lustri:
+ auto_generated: true
+ kind: "module"
+ language: "dotnet"
+ qualified_name: "agents.contexts"
+ parent: "agents"
+ module: "agents"
+---
+# `contexts`
+
+## Classes
+
+
+
+
+
+ Builder for multi-step, multi-context AI agent workflows. <p>A ContextBuilder owns one or more <xref href="SignalWire.Contexts.Context" data-throw-if-not-resolved="false"></xref>s; each context owns an ordered list of <xref href="SignalWire.Contexts.Step" data-throw-if-not-resolved="false"></xref>s. Only one context and one step is active at a time. Per chat turn, the runtime injects the current step's instructions as a system message, then asks the LLM for a response.</p> <p><b>Native tools auto-injected by the runtime:</b> When a step (or its enclosing context) declares valid\_steps or valid\_contexts, the runtime auto-injects two native tools so the model can navigate the flow: `next_step` and `change_context`. A third native tool, `gather_submit`, is injected during gather\_info questioning. These three names are reserved: <xref href="SignalWire.Contexts.ContextBuilder.Validate" data-throw-if-not-resolved="false"></xref> rejects any agent that defines a SWAIG tool with one of them. See <xref href="SignalWire.Contexts.ReservedToolNames.Reserved" data-throw-if-not-resolved="false"></xref>.</p> <p><b>Function whitelisting (<xref href="SignalWire.Contexts.Step.SetFunctions(System.Object)" data-throw-if-not-resolved="false"></xref>):</b> Each step may declare a functions whitelist. The whitelist is applied in-memory at the start of each LLM turn. CRITICALLY: if a step does NOT declare a functions field, it INHERITS the previous step's active set. See <xref href="SignalWire.Contexts.Step.SetFunctions(System.Object)" data-throw-if-not-resolved="false"></xref> for details and examples.</p>
+
+
+
+
+
+
+
+ Reserved tool names auto-injected by the runtime when contexts/steps are present. User-defined SWAIG tools must not collide with these names. <ul><li>`next_step` / `change_context` are injected when valid\_steps or valid\_contexts is set so the model can navigate the flow.</li><li>`gather_submit` is injected while a step's gather\_info is collecting answers.</li></ul> <xref href="SignalWire.Contexts.ContextBuilder.Validate" data-throw-if-not-resolved="false"></xref> rejects any agent that registers a user tool sharing one of these names — the runtime would never call the user tool because the native one wins.
+
+
+
+
diff --git a/fern/products/sdk-reference/dotnet/agents/contexts/reserved-tool-names/index.mdx b/fern/products/sdk-reference/dotnet/agents/contexts/reserved-tool-names/index.mdx
new file mode 100644
index 0000000000..fd26cabde6
--- /dev/null
+++ b/fern/products/sdk-reference/dotnet/agents/contexts/reserved-tool-names/index.mdx
@@ -0,0 +1,45 @@
+---
+slug: "/reference/dotnet/agents/contexts/reserved-tool-names"
+title: "ReservedToolNames"
+sdk_label: ".NET SDK"
+icon: "dotnet"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "dotnet"
+ qualified_name: "SignalWire.Contexts.ReservedToolNames"
+ parent: "agents.contexts"
+ module: "agents.contexts"
+ source_url: "https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs"
+ visibility: "public"
+---
+# `ReservedToolNames`
+
+Reserved tool names auto-injected by the runtime when contexts/steps are
+present. User-defined SWAIG tools must not collide with these names.
+
+<ul><li>`next_step` / `change_context` are injected when
+valid_steps or valid_contexts is set so the model can navigate the flow.</li><li>`gather_submit` is injected while a step's gather_info is
+collecting answers.</li></ul>
+
+<xref href="SignalWire.Contexts.ContextBuilder.Validate" data-throw-if-not-resolved="false"></xref> rejects any agent that registers a
+user tool sharing one of these names — the runtime would never call the
+user tool because the native one wins.
+
+**Modifiers:** `static`
+
+## Signature
+
+```dotnet
+public static class ReservedToolNames
+```
+
+## Properties
+
+
+
+## Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 17.
diff --git a/fern/products/sdk-reference/dotnet/agents/contexts/step/index.mdx b/fern/products/sdk-reference/dotnet/agents/contexts/step/index.mdx
new file mode 100644
index 0000000000..ad7d0ceb14
--- /dev/null
+++ b/fern/products/sdk-reference/dotnet/agents/contexts/step/index.mdx
@@ -0,0 +1,548 @@
+---
+slug: "/reference/dotnet/agents/contexts/step"
+title: "Step"
+sdk_label: ".NET SDK"
+icon: "dotnet"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "dotnet"
+ qualified_name: "SignalWire.Contexts.Step"
+ parent: "agents.contexts"
+ module: "agents.contexts"
+ source_url: "https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs"
+ visibility: "public"
+---
+# `Step`
+
+## Signature
+
+```dotnet
+public class Step
+```
+
+## Properties
+
+
+
+
+
+
+
+
+
+## Methods
+
+### AddBullets(string, List\)
+
+#### Signature
+
+```dotnet
+public Step AddBullets(string title, List bullets)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`SignalWire.Contexts.Step`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 143.
+
+***
+
+### AddGatherQuestion(Dictionary\)
+
+Add a question to this step's gather\_info. Initializes gather\_info
+if not yet set.
+
+<p><b>IMPORTANT — gather mode locks function access:</b> While
+the model is asking gather questions, the runtime forcibly
+deactivates ALL of the step's other functions. The only callable
+tools during a gather question are:</p>
+
+<ul><li>`gather_submit` (the native answer-submission tool)</li><li>Whatever names you pass in this question's `"functions"`
+option</li></ul>
+
+<p>`next_step` and `change_context` are also filtered
+out — the model cannot navigate away until the gather completes.
+This is by design: it forces a tight ask → submit → next-question
+loop.</p>
+
+<p>If a question needs to call out to a tool (e.g. validate an
+email, geocode a ZIP), list that tool name in this question's
+`"functions"` option. Functions listed here are active ONLY
+for this question.</p>
+
+#### Signature
+
+```dotnet
+public Step AddGatherQuestion(Dictionary opts)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Contexts.Step`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 255.
+
+***
+
+### AddSection(string, string)
+
+#### Signature
+
+```dotnet
+public Step AddSection(string title, string body)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`SignalWire.Contexts.Step`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 135.
+
+***
+
+### ClearSections()
+
+#### Signature
+
+```dotnet
+public Step ClearSections()
+```
+
+#### Returns
+
+`SignalWire.Contexts.Step`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 151.
+
+***
+
+### SetEnd(bool)
+
+Mark this step as terminal for the step flow.
+
+<p><b>IMPORTANT:</b> <code class="paramref">end</code> = true does NOT end
+the conversation or hang up the call. It exits step mode entirely
+after this step executes — clearing the steps list, current step
+index, valid_steps, and valid_contexts. The agent keeps running,
+but operates only under the base system prompt and the
+context-level prompt; no more step instructions are injected and
+no more `next_step` tool is offered.</p>
+
+<p>To actually end the call, call a hangup tool or define a
+hangup hook.</p>
+
+#### Signature
+
+```dotnet
+public Step SetEnd(bool end)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Contexts.Step`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 216.
+
+***
+
+### SetFunctions(object)
+
+Set which non-internal functions are callable while this step is
+active.
+
+<p><b>IMPORTANT — inheritance behavior:</b> If you do NOT call
+this method, the step inherits whichever function set was active on
+the previous step (or the previous context's last step). The
+server-side runtime only resets the active set when a step
+explicitly declares its `functions` field. This is the most
+common source of bugs in multi-step agents: forgetting
+<xref href="SignalWire.Contexts.Step.SetFunctions(System.Object)" data-throw-if-not-resolved="false"></xref> on a later step lets the previous step's
+tools leak through. Best practice is to call
+<xref href="SignalWire.Contexts.Step.SetFunctions(System.Object)" data-throw-if-not-resolved="false"></xref> explicitly on every step that should
+differ from the previous one.</p>
+
+<p>Keep the per-step active set small: LLM tool selection
+accuracy degrades noticeably past ~7-8 simultaneously-active tools
+per call. Use per-step whitelisting to partition large tool
+collections.</p>
+
+<p>Internal functions (e.g. `gather_submit`, hangup hook)
+are ALWAYS protected and cannot be deactivated by this whitelist.
+The native navigation tools `next_step` and
+`change_context` are injected automatically when
+<xref href="SignalWire.Contexts.Step.SetValidSteps(System.Collections.Generic.List%7bSystem.String%7d)" data-throw-if-not-resolved="false"></xref> / <xref href="SignalWire.Contexts.Step.SetValidContexts(System.Collections.Generic.List%7bSystem.String%7d)" data-throw-if-not-resolved="false"></xref> is
+used; they are not affected by this list.</p>
+
+#### Signature
+
+```dotnet
+public Step SetFunctions(object functions)
+```
+
+#### Parameters
+
+
+ One of: \\- \`List\\` — whitelist of function names allowed in this step.\
\- An empty list — explicit disable-all (no user functions callable).\
\- The string \`"none"\` — synonym for the empty list.\
\
+
+
+#### Returns
+
+`SignalWire.Contexts.Step`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 197.
+
+***
+
+### SetGatherInfo(Dictionary\)
+
+#### Signature
+
+```dotnet
+public Step SetGatherInfo(Dictionary opts)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Contexts.Step`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 221.
+
+***
+
+### SetResetConsolidate(bool)
+
+#### Signature
+
+```dotnet
+public Step SetResetConsolidate(bool consolidate)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Contexts.Step`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 264.
+
+***
+
+### SetResetFullReset(bool)
+
+#### Signature
+
+```dotnet
+public Step SetResetFullReset(bool fullReset)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Contexts.Step`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 265.
+
+***
+
+### SetResetSystemPrompt(string)
+
+#### Signature
+
+```dotnet
+public Step SetResetSystemPrompt(string systemPrompt)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Contexts.Step`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 262.
+
+***
+
+### SetResetUserPrompt(string)
+
+#### Signature
+
+```dotnet
+public Step SetResetUserPrompt(string userPrompt)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Contexts.Step`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 263.
+
+***
+
+### SetSkipToNextStep(bool)
+
+#### Signature
+
+```dotnet
+public Step SetSkipToNextStep(bool skip)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Contexts.Step`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 219.
+
+***
+
+### SetSkipUserTurn(bool)
+
+#### Signature
+
+```dotnet
+public Step SetSkipUserTurn(bool skip)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Contexts.Step`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 218.
+
+***
+
+### SetStepCriteria(string)
+
+#### Signature
+
+```dotnet
+public Step SetStepCriteria(string criteria)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Contexts.Step`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 158.
+
+***
+
+### SetText(string)
+
+#### Signature
+
+```dotnet
+public Step SetText(string text)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Contexts.Step`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 127.
+
+***
+
+### SetValidContexts(List\)
+
+#### Signature
+
+```dotnet
+public Step SetValidContexts(List contexts)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Contexts.Step`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 200.
+
+***
+
+### SetValidSteps(List\)
+
+#### Signature
+
+```dotnet
+public Step SetValidSteps(List steps)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.Contexts.Step`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 199.
+
+***
+
+### Step(string)
+
+#### Signature
+
+```dotnet
+public Step(string name)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 123.
+
+***
+
+### ToDict()
+
+#### Signature
+
+```dotnet
+public Dictionary ToDict()
+```
+
+#### Returns
+
+`Dictionary`
+
+#### Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 295.
+
+## Source
+
+[`src/SignalWire/Contexts/ContextBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Contexts/ContextBuilder.cs)
+
+Line 105.
diff --git a/fern/products/sdk-reference/dotnet/agents/data-map/index.mdx b/fern/products/sdk-reference/dotnet/agents/data-map/index.mdx
new file mode 100644
index 0000000000..b7ee8af26d
--- /dev/null
+++ b/fern/products/sdk-reference/dotnet/agents/data-map/index.mdx
@@ -0,0 +1,22 @@
+---
+slug: "/reference/dotnet/agents/data-map"
+title: "data-map"
+sdk_label: ".NET SDK"
+icon: "dotnet"
+lustri:
+ auto_generated: true
+ kind: "module"
+ language: "dotnet"
+ qualified_name: "agents.data-map"
+ parent: "agents"
+ module: "agents"
+---
+# `data-map`
+
+## Classes
+
+
+
+ Builds a SWAIG data-map function definition with parameters, expressions, webhooks, and output configuration. All builder methods return `this` for fluent chaining.
+
+
diff --git a/fern/products/sdk-reference/dotnet/agents/data-map/signal-wire.data-map/index.mdx b/fern/products/sdk-reference/dotnet/agents/data-map/signal-wire.data-map/index.mdx
new file mode 100644
index 0000000000..25171cec63
--- /dev/null
+++ b/fern/products/sdk-reference/dotnet/agents/data-map/signal-wire.data-map/index.mdx
@@ -0,0 +1,515 @@
+---
+slug: "/reference/dotnet/agents/data-map/signal-wire.data-map"
+title: "SignalWire.DataMap"
+sdk_label: ".NET SDK"
+icon: "dotnet"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "dotnet"
+ qualified_name: "SignalWire.DataMap"
+ parent: "agents.data-map"
+ module: "agents.data-map"
+ source_url: "https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/DataMap/DataMap.cs"
+---
+# `SignalWire.DataMap`
+
+Builds a SWAIG data-map function definition with parameters, expressions, webhooks,
+and output configuration. All builder methods return `this` for fluent chaining.
+
+## Signature
+
+```dotnet
+public class DataMap
+```
+
+## Methods
+
+### Body(Dictionary\)
+
+#### Signature
+
+```dotnet
+public DataMap Body(Dictionary data)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.DataMap.DataMap`
+
+#### Source
+
+[`src/SignalWire/DataMap/DataMap.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/DataMap/DataMap.cs)
+
+Line 172.
+
+***
+
+### CreateExpressionTool(string, string, List\>, List\>)
+
+**Modifiers:** `static`
+
+#### Signature
+
+```dotnet
+public static Dictionary CreateExpressionTool(string name, string purpose, List> parameters, List> expressions)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+#### Returns
+
+`Dictionary`
+
+#### Source
+
+[`src/SignalWire/DataMap/DataMap.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/DataMap/DataMap.cs)
+
+Line 263.
+
+***
+
+### CreateSimpleApiTool(string, string, List\>, string, string, object, Dictionary\?)
+
+**Modifiers:** `static`
+
+#### Signature
+
+```dotnet
+public static Dictionary CreateSimpleApiTool(string name, string purpose, List> parameters, string method, string url, object output, Dictionary? headers = null)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#### Returns
+
+`Dictionary`
+
+#### Source
+
+[`src/SignalWire/DataMap/DataMap.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/DataMap/DataMap.cs)
+
+Line 244.
+
+***
+
+### DataMap(string)
+
+#### Signature
+
+```dotnet
+public DataMap(string functionName)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`src/SignalWire/DataMap/DataMap.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/DataMap/DataMap.cs)
+
+Line 22.
+
+***
+
+### Description(string)
+
+Alias for <xref href="SignalWire.DataMap.DataMap.Purpose(System.String)" data-throw-if-not-resolved="false"></xref>. Sets the LLM-facing tool
+description. This string is read by the model to decide WHEN
+to call this tool. See <xref href="SignalWire.DataMap.DataMap.Purpose(System.String)" data-throw-if-not-resolved="false"></xref> for bad-vs-good
+examples.
+
+#### Signature
+
+```dotnet
+public DataMap Description(string desc)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.DataMap.DataMap`
+
+#### Source
+
+[`src/SignalWire/DataMap/DataMap.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/DataMap/DataMap.cs)
+
+Line 59.
+
+***
+
+### ErrorKeys(List\)
+
+#### Signature
+
+```dotnet
+public DataMap ErrorKeys(List keys)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.DataMap.DataMap`
+
+#### Source
+
+[`src/SignalWire/DataMap/DataMap.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/DataMap/DataMap.cs)
+
+Line 203.
+
+***
+
+### Expression(string, string, object, object?)
+
+#### Signature
+
+```dotnet
+public DataMap Expression(string testValue, string pattern, object output, object? nomatchOutput = null)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+#### Returns
+
+`SignalWire.DataMap.DataMap`
+
+#### Source
+
+[`src/SignalWire/DataMap/DataMap.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/DataMap/DataMap.cs)
+
+Line 109.
+
+***
+
+### FallbackOutput(object)
+
+#### Signature
+
+```dotnet
+public DataMap FallbackOutput(object result)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.DataMap.DataMap`
+
+#### Source
+
+[`src/SignalWire/DataMap/DataMap.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/DataMap/DataMap.cs)
+
+Line 196.
+
+***
+
+### ForEach(Dictionary\)
+
+#### Signature
+
+```dotnet
+public DataMap ForEach(Dictionary config)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.DataMap.DataMap`
+
+#### Source
+
+[`src/SignalWire/DataMap/DataMap.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/DataMap/DataMap.cs)
+
+Line 184.
+
+***
+
+### GlobalErrorKeys(List\)
+
+#### Signature
+
+```dotnet
+public DataMap GlobalErrorKeys(List keys)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.DataMap.DataMap`
+
+#### Source
+
+[`src/SignalWire/DataMap/DataMap.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/DataMap/DataMap.cs)
+
+Line 209.
+
+***
+
+### Output(object)
+
+#### Signature
+
+```dotnet
+public DataMap Output(object result)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.DataMap.DataMap`
+
+#### Source
+
+[`src/SignalWire/DataMap/DataMap.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/DataMap/DataMap.cs)
+
+Line 190.
+
+***
+
+### Parameter(string, string, string, bool, List\?)
+
+Add a parameter to this data-map tool — the <code class="paramref">description</code>
+is LLM-FACING.
+
+<p>Each parameter description is rendered into the OpenAI
+tool schema under `parameters.properties.<name>.description`
+and sent to the model. The model uses it to decide HOW to fill
+in the argument from user speech. It is prompt engineering, not
+developer FYI.</p>
+
+<p><b>Bad vs good:</b></p>
+<pre><code class="lang-csharp">BAD : .Parameter("city", "string", "the city")
+GOOD: .Parameter("city", "string",
+ "The name of the city to get weather for, e.g. "
+ + "'San Francisco'. Ask the user if they did not "
+ + "provide one. Include the state or country if the "
+ + "city name is ambiguous.")</code></pre>
+
+#### Signature
+
+```dotnet
+public DataMap Parameter(string name, string type, string description, bool required = false, List? enumValues = null)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+
+
+#### Returns
+
+`SignalWire.DataMap.DataMap`
+
+#### Source
+
+[`src/SignalWire/DataMap/DataMap.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/DataMap/DataMap.cs)
+
+Line 81.
+
+***
+
+### Params(Dictionary\)
+
+#### Signature
+
+```dotnet
+public DataMap Params(Dictionary data)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.DataMap.DataMap`
+
+#### Source
+
+[`src/SignalWire/DataMap/DataMap.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/DataMap/DataMap.cs)
+
+Line 178.
+
+***
+
+### Purpose(string)
+
+Set the LLM-facing tool description (the "purpose"). PROMPT
+ENGINEERING, not developer documentation.
+
+<p>The description string is rendered into the OpenAI tool
+schema `description` field on every LLM turn. The model
+reads it to decide WHEN to call this tool. A vague
+<xref href="SignalWire.DataMap.DataMap.Purpose(System.String)" data-throw-if-not-resolved="false"></xref> is the #1 cause of "the model has the
+right tool but doesn't call it" failures with data-map tools.</p>
+
+<p><b>Bad vs good:</b></p>
+<pre><code class="lang-csharp">BAD : .Purpose("weather api")
+GOOD: .Purpose("Get the current weather conditions and "
+ + "forecast for a specific city. Use this "
+ + "whenever the user asks about weather, "
+ + "temperature, rain, or similar conditions in a "
+ + "named location.")</code></pre>
+
+#### Signature
+
+```dotnet
+public DataMap Purpose(string desc)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.DataMap.DataMap`
+
+#### Source
+
+[`src/SignalWire/DataMap/DataMap.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/DataMap/DataMap.cs)
+
+Line 47.
+
+***
+
+### ToSwaigFunction()
+
+#### Signature
+
+```dotnet
+public Dictionary ToSwaigFunction()
+```
+
+#### Returns
+
+`Dictionary`
+
+#### Source
+
+[`src/SignalWire/DataMap/DataMap.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/DataMap/DataMap.cs)
+
+Line 215.
+
+***
+
+### Webhook(string, string, Dictionary\?, string, bool, List\?)
+
+#### Signature
+
+```dotnet
+public DataMap Webhook(string method, string url, Dictionary? headers = null, string formParam = "", bool inputArgsAsParams = false, List? requireArgs = null)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+
+
+
+
+#### Returns
+
+`SignalWire.DataMap.DataMap`
+
+#### Source
+
+[`src/SignalWire/DataMap/DataMap.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/DataMap/DataMap.cs)
+
+Line 131.
+
+***
+
+### WebhookExpressions(List\>)
+
+#### Signature
+
+```dotnet
+public DataMap WebhookExpressions(List> expressions)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.DataMap.DataMap`
+
+#### Source
+
+[`src/SignalWire/DataMap/DataMap.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/DataMap/DataMap.cs)
+
+Line 166.
+
+## Source
+
+[`src/SignalWire/DataMap/DataMap.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/DataMap/DataMap.cs)
+
+Line 8.
diff --git a/fern/products/sdk-reference/dotnet/agents/index.mdx b/fern/products/sdk-reference/dotnet/agents/index.mdx
new file mode 100644
index 0000000000..0a9ed63a7f
--- /dev/null
+++ b/fern/products/sdk-reference/dotnet/agents/index.mdx
@@ -0,0 +1,38 @@
+---
+slug: "/reference/dotnet/agents"
+title: "agents"
+sdk_label: ".NET SDK"
+icon: "dotnet"
+lustri:
+ auto_generated: true
+ kind: "module"
+ language: "dotnet"
+ qualified_name: "agents"
+---
+# `agents`
+
+## Modules
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/fern/products/sdk-reference/dotnet/agents/pom/index.mdx b/fern/products/sdk-reference/dotnet/agents/pom/index.mdx
new file mode 100644
index 0000000000..da6e0ce86b
--- /dev/null
+++ b/fern/products/sdk-reference/dotnet/agents/pom/index.mdx
@@ -0,0 +1,24 @@
+---
+slug: "/reference/dotnet/agents/pom"
+title: "pom"
+sdk_label: ".NET SDK"
+icon: "dotnet"
+lustri:
+ auto_generated: true
+ kind: "module"
+ language: "dotnet"
+ qualified_name: "agents.pom"
+ parent: "agents"
+ module: "agents"
+---
+# `pom`
+
+## Classes
+
+
+
+
+
+
+
+
diff --git a/fern/products/sdk-reference/dotnet/agents/pom/pom-builder/index.mdx b/fern/products/sdk-reference/dotnet/agents/pom/pom-builder/index.mdx
new file mode 100644
index 0000000000..2c3357fdf1
--- /dev/null
+++ b/fern/products/sdk-reference/dotnet/agents/pom/pom-builder/index.mdx
@@ -0,0 +1,323 @@
+---
+slug: "/reference/dotnet/agents/pom/pom-builder"
+title: "PomBuilder"
+sdk_label: ".NET SDK"
+icon: "dotnet"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "dotnet"
+ qualified_name: "SignalWire.POM.PomBuilder"
+ parent: "agents.pom"
+ module: "agents.pom"
+ source_url: "https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/POM/PomBuilder.cs"
+ visibility: "public"
+---
+# `PomBuilder`
+
+## Signature
+
+```dotnet
+public class PomBuilder
+```
+
+## Properties
+
+
+
+## Methods
+
+### AddSection(string, string, List\?, bool, bool, List\>?)
+
+Add a new section. (Python parity:
+`PomBuilder.add_section`.)
+
+#### Signature
+
+```dotnet
+public PomBuilder AddSection(string title, string body = "", List? bullets = null, bool numbered = false, bool numberedBullets = false, List>? subsections = null)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+
+
+
+
+#### Returns
+
+`SignalWire.POM.PomBuilder`
+
+#### Source
+
+[`src/SignalWire/POM/PomBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/POM/PomBuilder.cs)
+
+Line 25.
+
+***
+
+### AddSubsection(string, string, string, List\?)
+
+Add a subsection under an existing section
+(auto-vivifies parent if missing). (Python parity:
+`PomBuilder.add_subsection`.)
+
+#### Signature
+
+```dotnet
+public PomBuilder AddSubsection(string parentTitle, string title, string body = "", List? bullets = null)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+#### Returns
+
+`SignalWire.POM.PomBuilder`
+
+#### Source
+
+[`src/SignalWire/POM/PomBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/POM/PomBuilder.cs)
+
+Line 83.
+
+***
+
+### AddToSection(string, string?, string?, List\?)
+
+Add content to an existing section (auto-vivifies if
+missing). (Python parity: `PomBuilder.add_to_section`.)
+
+#### Signature
+
+```dotnet
+public PomBuilder AddToSection(string title, string? body = null, string? bullet = null, List? bullets = null)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+#### Returns
+
+`SignalWire.POM.PomBuilder`
+
+#### Source
+
+[`src/SignalWire/POM/PomBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/POM/PomBuilder.cs)
+
+Line 52.
+
+***
+
+### FromSections(List\>)
+
+Build a PomBuilder from a list of section dicts.
+(Python parity: `PomBuilder.from_sections` classmethod.)
+
+**Modifiers:** `static`
+
+#### Signature
+
+```dotnet
+public static PomBuilder FromSections(List> sections)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.POM.PomBuilder`
+
+#### Source
+
+[`src/SignalWire/POM/PomBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/POM/PomBuilder.cs)
+
+Line 120.
+
+***
+
+### GetSection(string)
+
+Get a section by title, or null if absent.
+(Python parity: `PomBuilder.get_section`.)
+
+#### Signature
+
+```dotnet
+public Section? GetSection(string title)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.POM.Section`
+
+#### Source
+
+[`src/SignalWire/POM/PomBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/POM/PomBuilder.cs)
+
+Line 103.
+
+***
+
+### HasSection(string)
+
+Check if a section with the given title exists.
+(Python parity: `PomBuilder.has_section`.)
+
+#### Signature
+
+```dotnet
+public bool HasSection(string title)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/SignalWire/POM/PomBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/POM/PomBuilder.cs)
+
+Line 99.
+
+***
+
+### PomBuilder()
+
+#### Signature
+
+```dotnet
+public PomBuilder()
+```
+
+#### Source
+
+[`src/SignalWire/POM/PomBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/POM/PomBuilder.cs)
+
+Line 17.
+
+***
+
+### RenderMarkdown()
+
+Render the POM as markdown.
+
+#### Signature
+
+```dotnet
+public string RenderMarkdown()
+```
+
+#### Returns
+
+`string`
+
+#### Source
+
+[`src/SignalWire/POM/PomBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/POM/PomBuilder.cs)
+
+Line 107.
+
+***
+
+### RenderXml()
+
+Render the POM as XML.
+
+#### Signature
+
+```dotnet
+public string RenderXml()
+```
+
+#### Returns
+
+`string`
+
+#### Source
+
+[`src/SignalWire/POM/PomBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/POM/PomBuilder.cs)
+
+Line 110.
+
+***
+
+### ToDict()
+
+Serialize the POM to a list of section dicts.
+
+#### Signature
+
+```dotnet
+public List> ToDict()
+```
+
+#### Returns
+
+`List>`
+
+#### Source
+
+[`src/SignalWire/POM/PomBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/POM/PomBuilder.cs)
+
+Line 113.
+
+***
+
+### ToJson()
+
+Serialize the POM to a JSON string.
+
+#### Signature
+
+```dotnet
+public string ToJson()
+```
+
+#### Returns
+
+`string`
+
+#### Source
+
+[`src/SignalWire/POM/PomBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/POM/PomBuilder.cs)
+
+Line 116.
+
+## Source
+
+[`src/SignalWire/POM/PomBuilder.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/POM/PomBuilder.cs)
+
+Line 12.
diff --git a/fern/products/sdk-reference/dotnet/agents/pom/prompt-object-model/index.mdx b/fern/products/sdk-reference/dotnet/agents/pom/prompt-object-model/index.mdx
new file mode 100644
index 0000000000..a00272a937
--- /dev/null
+++ b/fern/products/sdk-reference/dotnet/agents/pom/prompt-object-model/index.mdx
@@ -0,0 +1,330 @@
+---
+slug: "/reference/dotnet/agents/pom/prompt-object-model"
+title: "PromptObjectModel"
+sdk_label: ".NET SDK"
+icon: "dotnet"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "dotnet"
+ qualified_name: "SignalWire.POM.PromptObjectModel"
+ parent: "agents.pom"
+ module: "agents.pom"
+ source_url: "https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/POM/PromptObjectModel.cs"
+ visibility: "public"
+---
+# `PromptObjectModel`
+
+## Signature
+
+```dotnet
+public class PromptObjectModel
+```
+
+## Properties
+
+
+
+
+
+## Methods
+
+### AddPomAsSubsection
+
+Add a PromptObjectModel as a subsection of an existing
+section in this model, identified by title.
+(Python parity: `PromptObjectModel.add_pom_as_subsection`.)
+
+#### Signature
+
+
+
+ ```dotnet
+ public void AddPomAsSubsection(string targetTitle, PromptObjectModel pomToAdd)
+ ```
+
+
+
+ ```dotnet
+ public void AddPomAsSubsection(Section target, PromptObjectModel pomToAdd)
+ ```
+
+
+
+#### Parameters (Overload 1)
+
+
+
+
+
+#### Parameters (Overload 2)
+
+
+
+
+
+#### Source
+
+[`src/SignalWire/POM/PromptObjectModel.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/POM/PromptObjectModel.cs)
+
+Line 514.
+
+***
+
+### AddSection(string?, string, List\?, bool?, bool)
+
+Add a top-level section to the model, returning the new
+Section. Only the first added section may have a null title.
+(Python parity: `PromptObjectModel.add_section`.)
+
+#### Signature
+
+```dotnet
+public Section AddSection(string? title = null, string body = "", List? bullets = null, bool? numbered = null, bool numberedBullets = false)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+
+
+#### Returns
+
+`SignalWire.POM.Section`
+
+#### Source
+
+[`src/SignalWire/POM/PromptObjectModel.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/POM/PromptObjectModel.cs)
+
+Line 266.
+
+***
+
+### FindSection(string)
+
+Recursively find a section by title. Returns null if not
+found. (Python parity: `PromptObjectModel.find_section`.)
+
+#### Signature
+
+```dotnet
+public Section? FindSection(string title)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.POM.Section`
+
+#### Source
+
+[`src/SignalWire/POM/PromptObjectModel.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/POM/PromptObjectModel.cs)
+
+Line 283.
+
+***
+
+### FromJson(string)
+
+Construct a PromptObjectModel from JSON.
+(Python parity: `PromptObjectModel.from_json`.)
+
+**Modifiers:** `static`
+
+#### Signature
+
+```dotnet
+public static PromptObjectModel FromJson(string json)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.POM.PromptObjectModel`
+
+#### Source
+
+[`src/SignalWire/POM/PromptObjectModel.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/POM/PromptObjectModel.cs)
+
+Line 439.
+
+***
+
+### FromYaml(string)
+
+Construct a PromptObjectModel from YAML string.
+(Python parity: `PromptObjectModel.from_yaml`.)
+
+**Modifiers:** `static`
+
+#### Signature
+
+```dotnet
+public static PromptObjectModel FromYaml(string yaml)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.POM.PromptObjectModel`
+
+#### Source
+
+[`src/SignalWire/POM/PromptObjectModel.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/POM/PromptObjectModel.cs)
+
+Line 406.
+
+***
+
+### PromptObjectModel(bool)
+
+#### Signature
+
+```dotnet
+public PromptObjectModel(bool debug = false)
+```
+
+#### Parameters
+
+
+
+#### Source
+
+[`src/SignalWire/POM/PromptObjectModel.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/POM/PromptObjectModel.cs)
+
+Line 257.
+
+***
+
+### RenderMarkdown()
+
+Render the model as markdown. Mirrors Python's
+`PromptObjectModel.render_markdown` exactly.
+
+#### Signature
+
+```dotnet
+public string RenderMarkdown()
+```
+
+#### Returns
+
+`string`
+
+#### Source
+
+[`src/SignalWire/POM/PromptObjectModel.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/POM/PromptObjectModel.cs)
+
+Line 306.
+
+***
+
+### RenderXml()
+
+#### Signature
+
+```dotnet
+public string RenderXml()
+```
+
+#### Returns
+
+`string`
+
+#### Source
+
+[`src/SignalWire/POM/PromptObjectModel.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/POM/PromptObjectModel.cs)
+
+Line 337.
+
+***
+
+### ToDict()
+
+Serialize to a list of dicts (matches Python's to\_dict
+which returns a List rather than a Dict).
+
+#### Signature
+
+```dotnet
+public List> ToDict()
+```
+
+#### Returns
+
+`List>`
+
+#### Source
+
+[`src/SignalWire/POM/PromptObjectModel.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/POM/PromptObjectModel.cs)
+
+Line 372.
+
+***
+
+### ToJson()
+
+Serialize to JSON string with 2-space indent and Python
+dict-style formatting. Empty model emits `"[]"`.
+
+#### Signature
+
+```dotnet
+public string ToJson()
+```
+
+#### Returns
+
+`string`
+
+#### Source
+
+[`src/SignalWire/POM/PromptObjectModel.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/POM/PromptObjectModel.cs)
+
+Line 377.
+
+***
+
+### ToYaml()
+
+Serialize to YAML string. Matches PyYAML's
+`yaml.dump(data, default_flow_style=False, sort_keys=False)`
+exactly. Empty model emits `"[]\n"`.
+
+#### Signature
+
+```dotnet
+public string ToYaml()
+```
+
+#### Returns
+
+`string`
+
+#### Source
+
+[`src/SignalWire/POM/PromptObjectModel.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/POM/PromptObjectModel.cs)
+
+Line 393.
+
+## Source
+
+[`src/SignalWire/POM/PromptObjectModel.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/POM/PromptObjectModel.cs)
+
+Line 250.
diff --git a/fern/products/sdk-reference/dotnet/agents/pom/section/index.mdx b/fern/products/sdk-reference/dotnet/agents/pom/section/index.mdx
new file mode 100644
index 0000000000..0deca3a84e
--- /dev/null
+++ b/fern/products/sdk-reference/dotnet/agents/pom/section/index.mdx
@@ -0,0 +1,244 @@
+---
+slug: "/reference/dotnet/agents/pom/section"
+title: "Section"
+sdk_label: ".NET SDK"
+icon: "dotnet"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "dotnet"
+ qualified_name: "SignalWire.POM.Section"
+ parent: "agents.pom"
+ module: "agents.pom"
+ source_url: "https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/POM/PromptObjectModel.cs"
+ visibility: "public"
+---
+# `Section`
+
+## Signature
+
+```dotnet
+public class Section
+```
+
+## Properties
+
+
+
+
+
+
+ Three-state numbering: null = inherit, true = force on, false = force off. (Python parity: `numbered` is `Optional[bool]`.) Sibling propagation: if any sibling at the same level has Numbered==true, all siblings get numbered unless they have Numbered==false.
+
+
+
+
+
+
+
+ Section title. Null for the (allowed) first untitled top-level section. (Python parity: `Section.title` is `Optional[str]`.)
+
+
+## Methods
+
+### AddBody(string)
+
+Set or replace this section's body text.
+(Python parity: `Section.add_body`.)
+
+#### Signature
+
+```dotnet
+public Section AddBody(string body)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.POM.Section`
+
+#### Source
+
+[`src/SignalWire/POM/PromptObjectModel.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/POM/PromptObjectModel.cs)
+
+Line 66.
+
+***
+
+### AddBullets(List\)
+
+Append bullets to this section.
+(Python parity: `Section.add_bullets`.)
+
+#### Signature
+
+```dotnet
+public Section AddBullets(List bullets)
+```
+
+#### Parameters
+
+
+
+#### Returns
+
+`SignalWire.POM.Section`
+
+#### Source
+
+[`src/SignalWire/POM/PromptObjectModel.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/POM/PromptObjectModel.cs)
+
+Line 74.
+
+***
+
+### AddSubsection(string?, string, List\?, bool?, bool)
+
+Add a subsection under this section, returning the new
+Section. (Python parity: `Section.add_subsection`.)
+
+#### Signature
+
+```dotnet
+public Section AddSubsection(string? title = null, string body = "", List? bullets = null, bool? numbered = null, bool numberedBullets = false)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+
+
+#### Returns
+
+`SignalWire.POM.Section`
+
+#### Source
+
+[`src/SignalWire/POM/PromptObjectModel.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/POM/PromptObjectModel.cs)
+
+Line 82.
+
+***
+
+### RenderMarkdown(int, List\?)
+
+Render this section as a markdown fragment, indented at
+the given header level (default 2). Mirrors Python's
+`Section.render_markdown` exactly.
+
+#### Signature
+
+```dotnet
+public string RenderMarkdown(int level = 2, List? sectionNumber = null)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`string`
+
+#### Source
+
+[`src/SignalWire/POM/PromptObjectModel.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/POM/PromptObjectModel.cs)
+
+Line 99.
+
+***
+
+### RenderXml(int, List\?)
+
+#### Signature
+
+```dotnet
+public string RenderXml(int indent = 0, List? sectionNumber = null)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`string`
+
+#### Source
+
+[`src/SignalWire/POM/PromptObjectModel.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/POM/PromptObjectModel.cs)
+
+Line 164.
+
+***
+
+### Section(string?, string, List\?, bool?, bool)
+
+#### Signature
+
+```dotnet
+public Section(string? title = null, string body = "", List? bullets = null, bool? numbered = null, bool numberedBullets = false)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+
+
+
+
+#### Source
+
+[`src/SignalWire/POM/PromptObjectModel.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/POM/PromptObjectModel.cs)
+
+Line 49.
+
+***
+
+### ToDict()
+
+Serialize to a Dictionary suitable for JSON. Emits
+keys in this exact order: title, body, bullets, subsections,
+numbered, numberedBullets — and only when non-empty / non-null /
+non-default. Mirrors Python's `Section.to_dict`.
+
+#### Signature
+
+```dotnet
+public Dictionary ToDict()
+```
+
+#### Returns
+
+`Dictionary`
+
+#### Source
+
+[`src/SignalWire/POM/PromptObjectModel.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/POM/PromptObjectModel.cs)
+
+Line 229.
+
+## Source
+
+[`src/SignalWire/POM/PromptObjectModel.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/POM/PromptObjectModel.cs)
+
+Line 27.
diff --git a/fern/products/sdk-reference/dotnet/agents/prefabs/concierge-agent/index.mdx b/fern/products/sdk-reference/dotnet/agents/prefabs/concierge-agent/index.mdx
new file mode 100644
index 0000000000..55a58b54b1
--- /dev/null
+++ b/fern/products/sdk-reference/dotnet/agents/prefabs/concierge-agent/index.mdx
@@ -0,0 +1,177 @@
+---
+slug: "/reference/dotnet/agents/prefabs/concierge-agent"
+title: "ConciergeAgent"
+sdk_label: ".NET SDK"
+icon: "dotnet"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "dotnet"
+ qualified_name: "SignalWire.Prefabs.ConciergeAgent"
+ parent: "agents.prefabs"
+ module: "agents.prefabs"
+ source_url: "https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Prefabs/ConciergeAgent.cs"
+ visibility: "public"
+---
+# `ConciergeAgent`
+
+Prefab concierge agent for venue/hotel style interactions.
+Registers `check_availability` and `get_directions` tools.
+
+## Signature
+
+```dotnet
+public class ConciergeAgent : AgentBase
+```
+
+## Inheritance
+
+**Extends:** [SignalWire.SWML.Service](/docs/sdk-reference/reference/dotnet/agents/swml/service)
+
+## Methods
+
+### CheckAvailability(Dictionary\, Dictionary\)
+
+SWAIG tool handler for the `check_availability` tool.
+(Python parity: `ConciergeAgent.check_availability(args, raw_data)`.)
+
+#### Signature
+
+```dotnet
+public FunctionResult CheckAvailability(Dictionary args, Dictionary rawData)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`SignalWire.SWAIG.FunctionResult`
+
+#### Source
+
+[`src/SignalWire/Prefabs/ConciergeAgent.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Prefabs/ConciergeAgent.cs)
+
+Line 91.
+
+***
+
+### ConciergeAgent(string, Dictionary\, Dictionary\?)
+
+#### Signature
+
+```dotnet
+public ConciergeAgent(string name, Dictionary venueInfo, Dictionary? options = null)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Source
+
+[`src/SignalWire/Prefabs/ConciergeAgent.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Prefabs/ConciergeAgent.cs)
+
+Line 15.
+
+***
+
+### GetAmenities()
+
+#### Signature
+
+```dotnet
+public Dictionary> GetAmenities()
+```
+
+#### Returns
+
+`Dictionary>`
+
+#### Source
+
+[`src/SignalWire/Prefabs/ConciergeAgent.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Prefabs/ConciergeAgent.cs)
+
+Line 121.
+
+***
+
+### GetDirections(Dictionary\, Dictionary\)
+
+SWAIG tool handler for the `get_directions` tool.
+(Python parity: `ConciergeAgent.get_directions(args, raw_data)`.)
+
+#### Signature
+
+```dotnet
+public FunctionResult GetDirections(Dictionary args, Dictionary rawData)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`SignalWire.SWAIG.FunctionResult`
+
+#### Source
+
+[`src/SignalWire/Prefabs/ConciergeAgent.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Prefabs/ConciergeAgent.cs)
+
+Line 102.
+
+***
+
+### GetServices()
+
+#### Signature
+
+```dotnet
+public List GetServices()
+```
+
+#### Returns
+
+`List`
+
+#### Source
+
+[`src/SignalWire/Prefabs/ConciergeAgent.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Prefabs/ConciergeAgent.cs)
+
+Line 120.
+
+***
+
+### GetVenueName()
+
+#### Signature
+
+```dotnet
+public string GetVenueName()
+```
+
+#### Returns
+
+`string`
+
+#### Source
+
+[`src/SignalWire/Prefabs/ConciergeAgent.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Prefabs/ConciergeAgent.cs)
+
+Line 119.
+
+## Source
+
+[`src/SignalWire/Prefabs/ConciergeAgent.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Prefabs/ConciergeAgent.cs)
+
+Line 9.
diff --git a/fern/products/sdk-reference/dotnet/agents/prefabs/faq-bot-agent/index.mdx b/fern/products/sdk-reference/dotnet/agents/prefabs/faq-bot-agent/index.mdx
new file mode 100644
index 0000000000..8e00dfa168
--- /dev/null
+++ b/fern/products/sdk-reference/dotnet/agents/prefabs/faq-bot-agent/index.mdx
@@ -0,0 +1,129 @@
+---
+slug: "/reference/dotnet/agents/prefabs/faq-bot-agent"
+title: "FAQBotAgent"
+sdk_label: ".NET SDK"
+icon: "dotnet"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "dotnet"
+ qualified_name: "SignalWire.Prefabs.FAQBotAgent"
+ parent: "agents.prefabs"
+ module: "agents.prefabs"
+ source_url: "https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Prefabs/FAQBotAgent.cs"
+ visibility: "public"
+---
+# `FAQBotAgent`
+
+Prefab FAQ bot agent with keyword-scored search.
+Registers a `search_faqs` tool.
+
+## Signature
+
+```dotnet
+public class FAQBotAgent : AgentBase
+```
+
+## Inheritance
+
+**Extends:** [SignalWire.SWML.Service](/docs/sdk-reference/reference/dotnet/agents/swml/service)
+
+## Methods
+
+### FAQBotAgent(string, List\>, Dictionary\?)
+
+#### Signature
+
+```dotnet
+public FAQBotAgent(string name, List> faqs, Dictionary? options = null)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Source
+
+[`src/SignalWire/Prefabs/FAQBotAgent.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Prefabs/FAQBotAgent.cs)
+
+Line 14.
+
+***
+
+### GetFaqs()
+
+#### Signature
+
+```dotnet
+public List> GetFaqs()
+```
+
+#### Returns
+
+`List>`
+
+#### Source
+
+[`src/SignalWire/Prefabs/FAQBotAgent.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Prefabs/FAQBotAgent.cs)
+
+Line 98.
+
+***
+
+### GetSuggestRelated()
+
+#### Signature
+
+```dotnet
+public bool GetSuggestRelated()
+```
+
+#### Returns
+
+`bool`
+
+#### Source
+
+[`src/SignalWire/Prefabs/FAQBotAgent.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Prefabs/FAQBotAgent.cs)
+
+Line 99.
+
+***
+
+### SearchFaqs(Dictionary\, Dictionary\)
+
+SWAIG tool handler that searches the configured FAQ
+knowledge base for the best keyword-scored answer.
+(Python parity: `FAQBotAgent.search_faqs(args, raw_data)`.)
+
+#### Signature
+
+```dotnet
+public FunctionResult SearchFaqs(Dictionary args, Dictionary rawData)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`SignalWire.SWAIG.FunctionResult`
+
+#### Source
+
+[`src/SignalWire/Prefabs/FAQBotAgent.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Prefabs/FAQBotAgent.cs)
+
+Line 63.
+
+## Source
+
+[`src/SignalWire/Prefabs/FAQBotAgent.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Prefabs/FAQBotAgent.cs)
+
+Line 9.
diff --git a/fern/products/sdk-reference/dotnet/agents/prefabs/index.mdx b/fern/products/sdk-reference/dotnet/agents/prefabs/index.mdx
new file mode 100644
index 0000000000..062dcaccd1
--- /dev/null
+++ b/fern/products/sdk-reference/dotnet/agents/prefabs/index.mdx
@@ -0,0 +1,38 @@
+---
+slug: "/reference/dotnet/agents/prefabs"
+title: "prefabs"
+sdk_label: ".NET SDK"
+icon: "dotnet"
+lustri:
+ auto_generated: true
+ kind: "module"
+ language: "dotnet"
+ qualified_name: "agents.prefabs"
+ parent: "agents"
+ module: "agents"
+---
+# `prefabs`
+
+## Classes
+
+
+
+ Prefab concierge agent for venue/hotel style interactions. Registers `check_availability` and `get_directions` tools.
+
+
+
+ Prefab FAQ bot agent with keyword-scored search. Registers a `search_faqs` tool.
+
+
+
+ Prefab agent that gathers information by asking a series of questions. Registers `start_questions` and `submit_answer` tools.
+
+
+
+ Prefab agent that greets callers and transfers them to departments. Registers `collect_caller_info` and `transfer_call` tools.
+
+
+
+ Prefab agent that conducts surveys with typed question validation. Registers `validate_response` and `log_response` tools.
+
+
diff --git a/fern/products/sdk-reference/dotnet/agents/prefabs/info-gatherer-agent/index.mdx b/fern/products/sdk-reference/dotnet/agents/prefabs/info-gatherer-agent/index.mdx
new file mode 100644
index 0000000000..9d1a75c627
--- /dev/null
+++ b/fern/products/sdk-reference/dotnet/agents/prefabs/info-gatherer-agent/index.mdx
@@ -0,0 +1,143 @@
+---
+slug: "/reference/dotnet/agents/prefabs/info-gatherer-agent"
+title: "InfoGathererAgent"
+sdk_label: ".NET SDK"
+icon: "dotnet"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "dotnet"
+ qualified_name: "SignalWire.Prefabs.InfoGathererAgent"
+ parent: "agents.prefabs"
+ module: "agents.prefabs"
+ source_url: "https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Prefabs/InfoGathererAgent.cs"
+ visibility: "public"
+---
+# `InfoGathererAgent`
+
+Prefab agent that gathers information by asking a series of questions.
+Registers `start_questions` and `submit_answer` tools.
+
+## Signature
+
+```dotnet
+public class InfoGathererAgent : AgentBase
+```
+
+## Inheritance
+
+**Extends:** [SignalWire.SWML.Service](/docs/sdk-reference/reference/dotnet/agents/swml/service)
+
+## Methods
+
+### GetQuestions()
+
+#### Signature
+
+```dotnet
+public List> GetQuestions()
+```
+
+#### Returns
+
+`List>`
+
+#### Source
+
+[`src/SignalWire/Prefabs/InfoGathererAgent.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Prefabs/InfoGathererAgent.cs)
+
+Line 77.
+
+***
+
+### InfoGathererAgent(string, List\>, AgentOptions?)
+
+#### Signature
+
+```dotnet
+public InfoGathererAgent(string name, List> questions, AgentOptions? options = null)
+```
+
+#### Parameters
+
+
+ Agent name (defaults to "info\_gatherer").
+
+
+
+ List of question dicts with key\_name, question\_text, and optional confirm.
+
+
+
+ Additional <xref href="SignalWire.Agent.AgentOptions" data-throw-if-not-resolved="false"></xref> overrides.
+
+
+#### Source
+
+[`src/SignalWire/Prefabs/InfoGathererAgent.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Prefabs/InfoGathererAgent.cs)
+
+Line 16.
+
+***
+
+### StartQuestions(Dictionary\, Dictionary\)
+
+SWAIG tool handler for the `start_questions` tool.
+(Python parity: `InfoGathererAgent.start_questions`.)
+
+#### Signature
+
+```dotnet
+public FunctionResult StartQuestions(Dictionary args, Dictionary rawData)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`SignalWire.SWAIG.FunctionResult`
+
+#### Source
+
+[`src/SignalWire/Prefabs/InfoGathererAgent.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Prefabs/InfoGathererAgent.cs)
+
+Line 60.
+
+***
+
+### SubmitAnswer(Dictionary\, Dictionary\)
+
+SWAIG tool handler for the `submit_answer` tool.
+(Python parity: `InfoGathererAgent.submit_answer`.)
+
+#### Signature
+
+```dotnet
+public FunctionResult SubmitAnswer(Dictionary args, Dictionary rawData)
+```
+
+#### Parameters
+
+
+
+
+
+#### Returns
+
+`SignalWire.SWAIG.FunctionResult`
+
+#### Source
+
+[`src/SignalWire/Prefabs/InfoGathererAgent.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Prefabs/InfoGathererAgent.cs)
+
+Line 71.
+
+## Source
+
+[`src/SignalWire/Prefabs/InfoGathererAgent.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Prefabs/InfoGathererAgent.cs)
+
+Line 9.
diff --git a/fern/products/sdk-reference/dotnet/agents/prefabs/receptionist-agent/index.mdx b/fern/products/sdk-reference/dotnet/agents/prefabs/receptionist-agent/index.mdx
new file mode 100644
index 0000000000..1888694c7d
--- /dev/null
+++ b/fern/products/sdk-reference/dotnet/agents/prefabs/receptionist-agent/index.mdx
@@ -0,0 +1,99 @@
+---
+slug: "/reference/dotnet/agents/prefabs/receptionist-agent"
+title: "ReceptionistAgent"
+sdk_label: ".NET SDK"
+icon: "dotnet"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "dotnet"
+ qualified_name: "SignalWire.Prefabs.ReceptionistAgent"
+ parent: "agents.prefabs"
+ module: "agents.prefabs"
+ source_url: "https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Prefabs/ReceptionistAgent.cs"
+ visibility: "public"
+---
+# `ReceptionistAgent`
+
+Prefab agent that greets callers and transfers them to departments.
+Registers `collect_caller_info` and `transfer_call` tools.
+
+## Signature
+
+```dotnet
+public class ReceptionistAgent : AgentBase
+```
+
+## Inheritance
+
+**Extends:** [SignalWire.SWML.Service](/docs/sdk-reference/reference/dotnet/agents/swml/service)
+
+## Methods
+
+### GetDepartments()
+
+#### Signature
+
+```dotnet
+public List> GetDepartments()
+```
+
+#### Returns
+
+`List>`
+
+#### Source
+
+[`src/SignalWire/Prefabs/ReceptionistAgent.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Prefabs/ReceptionistAgent.cs)
+
+Line 94.
+
+***
+
+### GetGreeting()
+
+#### Signature
+
+```dotnet
+public string GetGreeting()
+```
+
+#### Returns
+
+`string`
+
+#### Source
+
+[`src/SignalWire/Prefabs/ReceptionistAgent.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Prefabs/ReceptionistAgent.cs)
+
+Line 95.
+
+***
+
+### ReceptionistAgent(string, List\>, Dictionary\?)
+
+#### Signature
+
+```dotnet
+public ReceptionistAgent(string name, List> departments, Dictionary? options = null)
+```
+
+#### Parameters
+
+
+
+
+
+
+
+#### Source
+
+[`src/SignalWire/Prefabs/ReceptionistAgent.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Prefabs/ReceptionistAgent.cs)
+
+Line 14.
+
+## Source
+
+[`src/SignalWire/Prefabs/ReceptionistAgent.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Prefabs/ReceptionistAgent.cs)
+
+Line 9.
diff --git a/fern/products/sdk-reference/dotnet/agents/prefabs/survey-agent/index.mdx b/fern/products/sdk-reference/dotnet/agents/prefabs/survey-agent/index.mdx
new file mode 100644
index 0000000000..258067c3c0
--- /dev/null
+++ b/fern/products/sdk-reference/dotnet/agents/prefabs/survey-agent/index.mdx
@@ -0,0 +1,157 @@
+---
+slug: "/reference/dotnet/agents/prefabs/survey-agent"
+title: "SurveyAgent"
+sdk_label: ".NET SDK"
+icon: "dotnet"
+lustri:
+ auto_generated: true
+ kind: "class"
+ language: "dotnet"
+ qualified_name: "SignalWire.Prefabs.SurveyAgent"
+ parent: "agents.prefabs"
+ module: "agents.prefabs"
+ source_url: "https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Prefabs/SurveyAgent.cs"
+ visibility: "public"
+---
+# `SurveyAgent`
+
+Prefab agent that conducts surveys with typed question validation.
+Registers `validate_response` and `log_response` tools.
+
+## Signature
+
+```dotnet
+public class SurveyAgent : AgentBase
+```
+
+## Inheritance
+
+**Extends:** [SignalWire.SWML.Service](/docs/sdk-reference/reference/dotnet/agents/swml/service)
+
+## Methods
+
+### GetSurveyName()
+
+#### Signature
+
+```dotnet
+public string GetSurveyName()
+```
+
+#### Returns
+
+`string`
+
+#### Source
+
+[`src/SignalWire/Prefabs/SurveyAgent.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Prefabs/SurveyAgent.cs)
+
+Line 141.
+
+***
+
+### GetSurveyQuestions()
+
+#### Signature
+
+```dotnet
+public List> GetSurveyQuestions()
+```
+
+#### Returns
+
+`List>`
+
+#### Source
+
+[`src/SignalWire/Prefabs/SurveyAgent.cs`](https://github.com/signalwire/signalwire-dotnet/blob/main/src/SignalWire/Prefabs/SurveyAgent.cs)
+
+Line 140.
+
+***
+
+### LogResponse(Dictionary\, Dictionary\)
+
+SWAIG tool handler for the `log_response` tool.
+(Python parity: `SurveyAgent.log_response`.)
+
+#### Signature
+
+```dotnet
+public FunctionResult LogResponse(Dictionary args, Dictionary