Hi kendrick lmao,
Thank you for providing all these details — I understand how frustrating it can be when the assistant isn’t using your direct response as expected, especially when the Return Document option works correctly. I also appreciate you noticing the discrepancy between the documented request structure and the actual value passed by Vapi, as that can definitely make troubleshooting more confusing. I’m happy to help clarify what might be causing this and how to get your direct response working properly.
• Vapi can silently ignore "Direct Response" returns in some pipelines (normalized transcription, cached model outputs, or memory replay). Returning documents reliably injects content into the model context; direct-message payloads sometimes get dropped before LLM calls.
• Confirm you’re seeing the actual request/response in Call Logs → webhook delivery; the docs URL for Custom KB is here:
https://docs.vapi.ai/knowledge-base/custom-knowledge-base
• Workarounds that are reliable:
1. Return documents instead of direct responses (best short-term fix).
2. If you must return a direct response, include that text in the assistant LLM input by setting it into model.output_text (or persist it into conversation state) so the LLM receives it explicitly.
3. Ensure your webhook response exactly matches the runtime shape Vapi sends/accepts (check Call Logs for the real request body and signature headers). UUIDs must be valid UUIDs for document mode or Vapi will reject documents silently.
• Quick checklist to debug:
• Check Webhook Logs in Observe → Webhook Logs for the exact request body and any validation errors.
• If direct response still ignored, persist the text into conversation state (assistant overrides / model.output_text) so the LLM will definitely see it.