Skip to content

Commit cf07f81

Browse files
committed
docs: capture server and squad config learnings
1 parent 26d10ee commit cf07f81

3 files changed

Lines changed: 47 additions & 2 deletions

File tree

docs/learnings/squads.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,18 @@ destinations:
140140

141141
Within a single assistant there is no equivalent. `request-complete` is a speech lever, `variableExtractionPlan` aliases give determinism but not invisibility, and tool responses are always in the next-completion conversation history. If the model must not see a value, your tool server must not place it in the response body in the first place. See [tools.md → Every tool result is in conversation history](tools.md#every-tool-result-is-in-conversation-history).
142142

143+
### Enabling PCI for every squad member
144+
145+
Squads do not have a first-class `squad.compliancePlan` field. To enable PCI mode for all members, set it through `membersOverrides`, which is applied to every resolved assistant before the call-level compliance plan is computed.
146+
147+
```yaml
148+
membersOverrides:
149+
compliancePlan:
150+
pciEnabled: true
151+
```
152+
153+
For a one-off call using an existing `squadId`, the same shape can be passed as `squadOverrides.compliancePlan.pciEnabled`. Org-level `org.compliancePlan.pciEnabled` also applies globally. The squad builder UI currently exposes model, voice, and transcriber overrides, but not a PCI toggle, so use API/gitops JSON for squad-level PCI.
154+
143155
---
144156

145157
## Override Merge Order

docs/learnings/tools.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,19 @@ Vapi ignores `async` on apiRequest tools. They always execute synchronously (HTT
9999

100100
If `credentialId` is set on the tool, that specific credential is used. If omitted, Vapi picks one from the call's available credentials automatically. If you have multiple webhook credentials, always set `credentialId` explicitly to avoid ambiguity.
101101

102+
### Timeout is top-level, not under `server`
103+
104+
For apiRequest tools, set `timeoutSeconds` directly on the tool. Do not put it under `server.timeoutSeconds` — apiRequest tools execute their own HTTP request path.
105+
106+
```yaml
107+
type: apiRequest
108+
url: https://your-api-endpoint.example.com/search
109+
method: POST
110+
timeoutSeconds: 45
111+
```
112+
113+
**Dashboard gotcha:** the current API Request tool form does not expose this field. Configure it through API/gitops JSON if you need a non-default timeout.
114+
102115
---
103116
104117
## function Tools
@@ -111,6 +124,19 @@ If `credentialId` is set on the tool, that specific credential is used. If omitt
111124

112125
**Recommendation:** Set `server.url` on the tool for clarity, or document which level provides the webhook URL.
113126

127+
### Timeout lives under `server.timeoutSeconds`
128+
129+
Function tools use the Server URL webhook path, so their per-tool timeout is configured on the tool's `server` block:
130+
131+
```yaml
132+
type: function
133+
server:
134+
url: https://your-webhook-endpoint.example.com/tool
135+
timeoutSeconds: 45
136+
```
137+
138+
This is separate from apiRequest's top-level `timeoutSeconds`.
139+
114140
### `async: true` changes execution flow significantly
115141

116142
- `async: false` (default): The LLM waits for the tool result before continuing. The user hears `request-start`, `request-response-delayed` messages while waiting.

docs/learnings/webhooks.md

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,9 @@ These are **two independent settings**:
2424

2525
| Setting | Controls | Default |
2626
|---------|----------|---------|
27-
| `server.timeoutSeconds` | Webhook delivery timeout (status-update, end-of-call-report, etc.) | Platform default (see API reference) |
28-
| `tool.timeoutSeconds` (apiRequest) | Individual tool HTTP call timeout | Platform default (see API reference) |
27+
| `server.timeoutSeconds` | Webhook delivery timeout (status-update, end-of-call-report, function tools using `server.url`, etc.) | Platform default (see API reference) |
28+
| `timeoutSeconds` (apiRequest tool) | Individual API request tool HTTP call timeout | Platform default (see API reference) |
29+
| `timeoutSeconds` (code tool) | Code tool execution timeout | Platform default, capped at 30s |
2930

3031
They don't inherit from each other.
3132

@@ -75,6 +76,12 @@ If `credentialId` is set on the server or tool, that specific credential is used
7576

7677
**Recommendation:** Always set `credentialId` explicitly when multiple credentials exist to avoid ambiguous selection.
7778

79+
### `X-Vapi-Secret` is legacy shared-secret auth
80+
81+
`server.secret` (or legacy `serverUrlSecret`) is sent to your server as the `X-Vapi-Secret` header. This is a simple shared-secret comparison, not an HMAC signature.
82+
83+
**Recommendation:** Prefer `server.credentialId` / webhook credentials for new integrations when you need OAuth2, Bearer, or HMAC auth. Keep `server.secret` for simple endpoints that only need a shared-secret check. Do not also set `X-Vapi-Secret` manually in `server.headers` unless you intentionally want to override the generated value.
84+
7885
---
7986

8087
## Webhook Payload Shape

0 commit comments

Comments
 (0)