VAP15-53 docs(server-url): document credential withholding on caller-supplied server urls - #1221
Draft
jeffrey-hoekman-vapi wants to merge 1 commit into
Conversation
…supplied server urls Org webhook credentials are attached only when the server URL comes from org configuration. When it arrives in the request itself - a transient assistant or assistantOverrides - Vapi sends the webhook without the org credential, and credential fields in the payload read [REDACTED]. Adds a Quick start warning so the unconditional "Vapi will now authenticate requests" promise carries its condition, and a "When credentials are not attached" section with the log-entry detail support needs: the literal string, the suppressed high-volume message types, and the trap that a missing entry does not mean credentials were sent. Scoped to VAPSEC-564/619/623. The message-options override paths (handoff-destination-request, tools, KB, custom voice) are VAPSEC-627 and are documented separately once that ships. Refs VAP15-53
Contributor
|
🌿 Preview your docs: https://vapi-preview-01a0a2ca-a75e-77bf-98ee-7c45740fcd23.docs.buildwithfern.com |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Linear ticket
VAP15-53 — https://linear.app/vapi/issue/VAP15-53
Value
V.A.L.U.E. tier: micro — docs-only, one file, no blast-radius path.
VAPSEC-564/619/623 changed a documented contract: when a server URL arrives in the request itself — a transient
assistant, orassistantOverrides— Vapi no longer attaches the org's webhook credential, and credential fields in the payload arrive as"[REDACTED]". The docs still promised the old behavior, so a customer hitting this sees an unauthenticated webhook and no explanation — indistinguishable from a broken listener.Affects: orgs on the caller-supplied server-URL path (97 in the VAPSEC-564 cohort), plus every org created after the VAPSEC-689 cutoff. Secondarily CS and FDE, who field the "my webhook stopped authenticating" ticket.
What changed
All in
fern/server-url/server-authentication.mdx:### When credentials are not attachedsection — which paths are caller-authored, the explicit contrast that saved assistants / phone numbers / tools keep their credentials, and the[REDACTED]payload note.#### Confirming a withheld send in your logs— what support actually needs: the literal log string, the suppressed high-volume message types, and the trap that a missing log entry does not mean credentials were sent.Why the rollout qualifier is here
Without it the page states the withholding unconditionally, while pre-cutoff orgs are still gated by
ENABLE_WEBHOOK_CREDENTIAL_BINDING. An unenrolled org could read "noX-Vapi-Secretheader" and conclude its org secret is not reaching a third-party URL — when it still is. That is an inaccuracy in the unsafe direction, so the qualifier is not optional polish.It deliberately does not tell a pre-cutoff org when their turn comes. The ramp is a hand-maintained override list with a limited number of slots, mostly already allocated; an invitation to request enrollment would be a promise we cannot service.
🚫 Blocker — do not merge as-is
The rollout qualifier contains the literal placeholder
ENFORCEMENT_DATE_TBD. The VAPSEC-689 cutoff (WEBHOOK_CREDENTIAL_BINDING_CUTOFF, currently defaulting to2026-10-01T00:00:00.000Zin https://github.com/VapiAI/vapi/pull/19995) is still being settled with the CISO, infosec, and the EM. An MDX comment at the insertion point marks it.Everything except that one token is ready for review now.
Merge gate
ENABLE_WEBHOOK_CREDENTIAL_BINDINGcohort, and — from the cutoff onward — unconditionally every newly created org.Follow-on obligations
Evidence
fern checkserverUrlFunctions.ts,serverMessageUtil.ts,serverUrlFunctions.secretBinding.spec.ts,sessionFunctions.secretBinding.spec.tsOut of scope
The message-options override paths (
handoff-destination-request, tools, KB, custom voice, endpointing) belong to VAPSEC-627 and are tracked in VAP15-54. Documenting them here would publish behavior that is not yet true and would disclose an open finding.Refs VAPSEC-564, VAPSEC-619, VAPSEC-623, VAPSEC-689.
🤖 Generated with Claude Code