Knowledge bases
The documents an agent can look things up in, mid-call.
A knowledge base is a set of documents an agent can search while it is talking to someone. Uploading does not make a document searchable straight away — it is chunked, embedded and indexed in the background, which is why every document carries a status. Poll until it reads `Indexed`.
The search endpoint asks exactly the question an agent asks mid-call and returns the same passages, which is how you check what an agent would have found before you put it on the phone.
List knowledge bases
Knowledge bases the key can reach, newest first.
/api/v1/knowledge-basesQuery parameters
| Parameter | Type | Description |
|---|---|---|
search | string | Match name or description. |
Responses
{"data": {"knowledgeBases": [{"id": "3c90…","name": "Plan documents 2026","description": "Summary of benefits, formulary, prior-auth rules.","documentCount": 41,"isOrgShared": true}]},"meta": {"requestId": "req_…"}}
curl -X GET "https://voice.evryhealth.com/api/v1/knowledge-bases" \-H "Authorization: Bearer YOUR_API_KEY"
Create a knowledge base
An empty knowledge base. `chunking` controls how documents are split before they are embedded; leave it out unless you have a reason.
/api/v1/knowledge-basesResponses
{"data": {"id": "3c90…","name": "Plan documents 2026","documentCount": 0},"meta": {"requestId": "req_…"}}
curl -X POST "https://voice.evryhealth.com/api/v1/knowledge-bases" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"name": "Plan documents 2026","description": "Summary of benefits and formulary."}'
Get a knowledge base
One knowledge base, with how many documents it holds.
/api/v1/knowledge-bases/{knowledgeBaseId}Path parameters
| Parameter | Type | Description |
|---|---|---|
knowledgeBaseIdrequired | string | Knowledge base id. |
Responses
{"data": {"id": "3c90…","name": "Plan documents 2026","documentCount": 41},"meta": {"requestId": "req_…"}}
curl -X GET "https://voice.evryhealth.com/api/v1/knowledge-bases/{knowledgeBaseId}" \-H "Authorization: Bearer YOUR_API_KEY"
Update a knowledge base
Rename it, change its description, or share it across the organization.
/api/v1/knowledge-bases/{knowledgeBaseId}Path parameters
| Parameter | Type | Description |
|---|---|---|
knowledgeBaseIdrequired | string | Knowledge base id. |
Responses
{"data": {"id": "3c90…","isOrgShared": true},"meta": {"requestId": "req_…"}}
curl -X PATCH "https://voice.evryhealth.com/api/v1/knowledge-bases/{knowledgeBaseId}" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"isOrgShared": true}'
Delete a knowledge base
Removes the documents, the stored files and the search index entries — a deleted knowledge base stops being searchable, not just listed.
/api/v1/knowledge-bases/{knowledgeBaseId}Path parameters
| Parameter | Type | Description |
|---|---|---|
knowledgeBaseIdrequired | string | Knowledge base id. |
Responses
{"data": {"deleted": true},"meta": {"requestId": "req_…"}}
curl -X DELETE "https://voice.evryhealth.com/api/v1/knowledge-bases/{knowledgeBaseId}" \-H "Authorization: Bearer YOUR_API_KEY"
List documents
Documents and their indexing status. Only an `Indexed` document is searchable; this is the endpoint to poll after an upload.
/api/v1/knowledge-bases/{knowledgeBaseId}/documentsPath parameters
| Parameter | Type | Description |
|---|---|---|
knowledgeBaseIdrequired | string | Knowledge base id. |
Query parameters
| Parameter | Type | Description |
|---|---|---|
search | string | Match the file name. |
status | string | Processing, Indexed or Failed. |
Responses
{"data": {"documents": [{"id": "88fa…","fileName": "formulary-2026.pdf","fileType": "application/pdf","fileSizeBytes": 2481923,"status": "Indexed","processingError": null}]},"meta": {"requestId": "req_…"}}
curl -X GET "https://voice.evryhealth.com/api/v1/knowledge-bases/{knowledgeBaseId}/documents" \-H "Authorization: Bearer YOUR_API_KEY"
Upload documents
`multipart/form-data` with one or more `files` parts. Returns what was stored and what was refused, because failing the whole request over one oversized file would lose the rest. A stored document is not searchable until it has been indexed.
/api/v1/knowledge-bases/{knowledgeBaseId}/documentsPath parameters
| Parameter | Type | Description |
|---|---|---|
knowledgeBaseIdrequired | string | Knowledge base id. |
Responses
{"data": {"documents": [{"id": "88fa…","fileName": "formulary-2026.pdf","status": "Processing"}],"rejected": [{"fileName": "recording.mov","reason": "File type is not supported"}]},"meta": {"requestId": "req_…"}}
curl -X POST "https://voice.evryhealth.com/api/v1/knowledge-bases/{knowledgeBaseId}/documents" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: multipart/form-data" \-d '{"files": ["formulary-2026.pdf"]}'
Delete a document
Removes the file, its chunks in the index, and the row.
/api/v1/knowledge-bases/{knowledgeBaseId}/documents/{documentId}Path parameters
| Parameter | Type | Description |
|---|---|---|
knowledgeBaseIdrequired | string | Knowledge base id. |
documentIdrequired | string | Document id. |
Responses
{"data": {"deleted": true},"meta": {"requestId": "req_…"}}
curl -X DELETE "https://voice.evryhealth.com/api/v1/knowledge-bases/{knowledgeBaseId}/documents/{documentId}" \-H "Authorization: Bearer YOUR_API_KEY"
Search
Ask what an agent asks. A POST rather than a GET because the question is natural language, may be long, and may carry PHI — and a question in a URL ends up in access logs. Ids the key cannot reach are dropped rather than refused, so searching everything works without knowing what everything is.
/api/v1/knowledge-bases/searchResponses
{"data": {"searched": ["3c90…"],"results": [{"knowledgeBaseId": "3c90…","fileName": "formulary-2026.pdf","content": "A 90-day supply of a tier 2 drug requires prior authorization when…","score": 0.83,"pageNumber": 14,"highlights": ["prior authorization"]}]},"meta": {"requestId": "req_…"}}
curl -X POST "https://voice.evryhealth.com/api/v1/knowledge-bases/search" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"query": "Is a prior authorization needed for a 90-day supply?","topK": 3}'