{"_id":"@eldritchlogic/bland-ai-sdk","_rev":"2-4c232ad30c5d6d0747e14e66accf8de8","name":"@eldritchlogic/bland-ai-sdk","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"@eldritchlogic/bland-ai-sdk","version":"0.1.0","keywords":["bland","bland-ai","ai","phone","voice","calls","tts","sdk","api-client","typescript"],"author":{"name":"Vincenzo","email":"vincenzo@cleartalk.ai"},"license":"MIT","_id":"@eldritchlogic/bland-ai-sdk@0.1.0","maintainers":[{"name":"eldritchlogic","email":"eldritchlogicllc@gmail.com"}],"dist":{"shasum":"1997cd8014185fe9bbce5ec80e065693e8f881eb","tarball":"https://registry.npmjs.org/@eldritchlogic/bland-ai-sdk/-/bland-ai-sdk-0.1.0.tgz","fileCount":9,"integrity":"sha512-kuxt4vYUfsKvWTMDL0w4nAHASO4N3MEdMmYR0yA3PJOGGXyM9p3GhAHDyNaBkmoGW5/ZwSpU9wJuXin5u/1hrQ==","signatures":[{"sig":"MEQCIHM6xdaY8awboshB6uUoN8oXK0xakDmLE6piBAwEW+cuAiA0+amNsHqf2cBzfkYylGRoXwB1aNh/wkptCH6l2SK2Aw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2885481},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.17.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm run test && npm run build"},"_npmUser":{"name":"eldritchlogic","email":"eldritchlogicllc@gmail.com"},"_npmVersion":"10.9.0","description":"TypeScript SDK for the Bland AI API — full coverage of every documented endpoint: calls, pathways, agents, voices, SMS, knowledge bases, evals, memory, SIP/BYOT, and more.","directories":{},"sideEffects":false,"_nodeVersion":"22.12.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.4.0","@types/node":"^26.1.1"},"_npmOperationalInternal":{"tmp":"tmp/bland-ai-sdk_0.1.0_1784408520787_0.8308717516683422","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@eldritchlogic/bland-ai-sdk","version":"0.2.0","description":"TypeScript SDK for the Bland AI API — full coverage of every documented endpoint: calls, pathways, agents, voices, SMS, knowledge bases, evals, memory, SIP/BYOT, and more.","keywords":["bland","bland-ai","ai","phone","voice","calls","tts","sdk","api-client","typescript"],"license":"MIT","author":{"name":"Vincenzo","email":"vincenzo@cleartalk.ai"},"type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"sideEffects":false,"publishConfig":{"access":"public"},"engines":{"node":">=18.17.0"},"scripts":{"build":"tsup","typecheck":"tsc --noEmit","test":"vitest run","prepublishOnly":"npm run typecheck && npm run test && npm run build"},"devDependencies":{"@types/node":"^26.1.1","tsup":"^8.0.0","typescript":"^5.4.0","vitest":"^2.0.0"},"_id":"@eldritchlogic/bland-ai-sdk@0.2.0","gitHead":"d581e908e53a565b15258e01059b675ba5b2056e","_nodeVersion":"22.12.0","_npmVersion":"10.9.0","dist":{"integrity":"sha512-iN64ndm/CZ0zSSZtzqJdBvHwxU9zAfflc8vdi5MMyTz+ARvZWxqJ0P2mTG8Q1ExNhMmdFgSLbm1KljvDjBeDzw==","shasum":"5e4ce1e4bf8509e2f27112fd18a7f72c4db6441b","tarball":"https://registry.npmjs.org/@eldritchlogic/bland-ai-sdk/-/bland-ai-sdk-0.2.0.tgz","fileCount":9,"unpackedSize":3041539,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIDn4QOLA/F+HagHjXkrhbYLR5Nigev0FKXkpVttF4XDlAiAMoDqaQfAFlCNw40futtn7ULRJ3OkQYTj+LKsyQo1bDg=="}]},"_npmUser":{"name":"eldritchlogic","email":"eldritchlogicllc@gmail.com"},"directories":{},"maintainers":[{"name":"eldritchlogic","email":"eldritchlogicllc@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/bland-ai-sdk_0.2.0_1784611816998_0.6004043021567635"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-18T21:02:00.642Z","modified":"2026-07-21T05:30:17.386Z","0.1.0":"2026-07-18T21:02:00.952Z","0.2.0":"2026-07-21T05:30:17.165Z"},"author":{"name":"Vincenzo","email":"vincenzo@cleartalk.ai"},"license":"MIT","keywords":["bland","bland-ai","ai","phone","voice","calls","tts","sdk","api-client","typescript"],"description":"TypeScript SDK for the Bland AI API — full coverage of every documented endpoint: calls, pathways, agents, voices, SMS, knowledge bases, evals, memory, SIP/BYOT, and more.","maintainers":[{"name":"eldritchlogic","email":"eldritchlogicllc@gmail.com"}],"readme":"# @eldritchlogic/bland-ai-sdk\n\nUnofficial TypeScript SDK for the [Bland AI](https://www.bland.ai) API with **full coverage of every documented endpoint** — all 329 routes across calls, conversational pathways, voices, TTS, SMS, knowledge bases, evals, agent testing, memory, SIP/BYOT trunking, triage, organizations, the v2 batches/tools APIs, and more.\n\n- **Complete**: every route on [docs.bland.ai](https://docs.bland.ai) has a typed method (enforced by an automated coverage test).\n- **Typed**: request params and responses are typed from the official docs, with JSDoc on every method and field.\n- **Zero dependencies**: built on the global `fetch`; works in Node ≥ 18.17, Bun, Deno, and modern browsers.\n- **Dual module**: ESM and CJS builds with full `.d.ts` declarations.\n\n## Install\n\n```sh\nnpm install @eldritchlogic/bland-ai-sdk\n```\n\n## Quickstart\n\n```ts\nimport BlandAI from \"@eldritchlogic/bland-ai-sdk\";\n\nconst bland = new BlandAI({ apiKey: process.env.BLAND_API_KEY });\n\n// Send a phone call\nconst { call_id } = await bland.calls.send({\n  phone_number: \"+15555555555\",\n  task: \"Call the customer, confirm their appointment for tomorrow at 10am.\",\n  voice: \"maya\",\n});\n\n// Fetch its details + transcript later\nconst call = await bland.calls.get(call_id);\nconsole.log(call.concatenated_transcript);\n```\n\n## Configuration\n\n```ts\nconst bland = new BlandAI({\n  apiKey: \"sk-...\",              // or set BLAND_API_KEY in the environment\n  baseUrl: \"https://api.bland.ai\", // or https://us.api.bland.ai / https://eu.api.bland.ai\n  encryptedKey: \"...\",           // BYOT (Bring Your Own Twilio) key, sent on every request\n  orgId: \"...\",                  // sent as x-bland-org-id on every request\n  timeoutMs: 60_000,             // per-request timeout (default 60s)\n  maxRetries: 2,                 // GET-only retries on 408/429/5xx (default 2)\n  fetch: customFetch,            // bring your own fetch implementation\n  defaultHeaders: { ... },       // merged into every request\n});\n```\n\nEvery method also accepts a final `options` argument for per-request control:\n\n```ts\nawait bland.calls.list({ limit: 10 }, {\n  signal: abortController.signal,\n  timeoutMs: 10_000,\n  headers: { \"x-custom\": \"1\" },\n  encryptedKey: \"per-request-byot-key\",\n});\n```\n\n## Error handling\n\n```ts\nimport { BlandAPIError, BlandTimeoutError, BlandConnectionError } from \"@eldritchlogic/bland-ai-sdk\";\n\ntry {\n  await bland.calls.send({ phone_number: \"+1555\", task: \"...\" });\n} catch (err) {\n  if (err instanceof BlandAPIError) {\n    console.error(err.status, err.code, err.message, err.body);\n  } else if (err instanceof BlandTimeoutError) {\n    // request exceeded timeoutMs\n  } else if (err instanceof BlandConnectionError) {\n    // network failure (DNS, reset, ...)\n  }\n}\n```\n\n## Resources\n\n| Client property | Area |\n| --- | --- |\n| `bland.calls` | Send/list/stop calls, analysis, recordings, live transcript streams |\n| `bland.pathways` | Conversational pathways: CRUD, versions, folders, chat, AI generation |\n| `bland.evals` | Evals platform: `agents`, `runs`, `workbench`, `templates`, status |\n| `bland.agentTesting` | Test scenarios, runs, batches, simulation sets, tornado |\n| `bland.voices` | Voice presets, cloning, samples, settings, ratings |\n| `bland.speak` | Text-to-speech generation and streaming, TTS models |\n| `bland.sms` | SMS conversations, sending, batches, numbers, webhooks |\n| `bland.inboundNumbers` | Inbound number purchase and configuration |\n| `bland.knowledge` | Knowledge bases: learn from text/files/web, crawl, chat |\n| `bland.vectors` | Legacy vector knowledge bases, media/text upload |\n| `bland.memory` | Persistent agent memory stores and users |\n| `bland.sip` | SIP / BYOT trunking, discovery, porting, test calls |\n| `bland.triage` | Issue triage: issues, flags, relations, comments, categories |\n| `bland.personas` | Personas, versions, inbound phone attachment |\n| `bland.widgets` | Web call widgets, threads, custom components |\n| `bland.organizations` | Org management, members, permissions, billing, versions |\n| `bland.account` | Account details, audit logs, encrypted (BYOT) keys |\n| `bland.tools` | Custom tools agents can call mid-conversation |\n| `bland.webAgents` | Web agents |\n| `bland.contacts` | Contacts CRUD, find, merge, resolve |\n| `bland.alarms` | Monitoring alarms and history |\n| `bland.guardRails` | Agent guard rails |\n| `bland.citationSchemas` | Post-call citation schemas |\n| `bland.blockedNumbers` | Blocked numbers |\n| `bland.customDialingPools` | Custom outbound dialing pools |\n| `bland.translationSessions` | Live translation sessions |\n| `bland.postcallWebhooks` | Post-call webhooks |\n| `bland.prompts` | Saved prompts |\n| `bland.v2` | API v2: call batches (`v2.batches`) and integration tools (`v2.tools`) |\n\nUndocumented or brand-new endpoint? Use the escape hatch:\n\n```ts\nawait bland.request({ method: \"POST\", path: \"/v1/some/new/endpoint\", body: { ... } });\n```\n\n## WebSocket streams\n\nTwo Bland features are WebSocket-based. The SDK ships the message types and the token/URL plumbing; bring your own `WebSocket` (native in browsers, Node ≥ 21, Bun, or the `ws` package):\n\n```ts\n// Live post-transfer transcript\nconst { data } = await bland.calls.getTranscriptStreamUrl(callId);\nconst ws = new WebSocket(data.url);\n\n// Bidirectional streaming TTS\nconst wsUrl = bland.speak.streamInputUrl(); // wss://api.bland.ai/v1/speak/stream-input\n```\n\n## Full API coverage\n\nEvery documented Bland AI endpoint and the SDK method that calls it. Generated from source by `scripts/gen-api-table.mjs`; a test suite asserts the mapping stays complete.\n\n<details>\n<summary>Show all endpoints</summary>\n\n<!-- generated by scripts/gen-api-table.mjs — 330 methods -->\n| SDK method | Endpoint |\n| --- | --- |\n| `Account.listAuditLogs()` | `GET /v1/audit/logs` |\n| `Account.get()` | `GET /v1/me` |\n| `Account.createEncryptedKey()` | `POST /v1/accounts` |\n| `Account.deleteEncryptedKey()` | `POST /v1/accounts/delete` |\n| `AgentTesting.deleteScenario()` | `DELETE /v1/agent-testing/scenarios/{id}` |\n| `AgentTesting.getAnalytics()` | `GET /v1/agent-testing/analytics/{pathwayId}` |\n| `AgentTesting.getEnhancedAnalytics()` | `GET /v1/agent-testing/analytics/{pathwayId}/enhanced` |\n| `AgentTesting.getBatch()` | `GET /v1/agent-testing/batches/{id}` |\n| `AgentTesting.listRuns()` | `GET /v1/agent-testing/runs` |\n| `AgentTesting.getRun()` | `GET /v1/agent-testing/runs/{id}` |\n| `AgentTesting.listScenarios()` | `GET /v1/agent-testing/scenarios` |\n| `AgentTesting.getScenario()` | `GET /v1/agent-testing/scenarios/{id}` |\n| `AgentTesting.getSimulationSet()` | `GET /v1/agent-testing/simulation-sets/{id}` |\n| `AgentTesting.listTemplates()` | `GET /v1/agent-testing/templates` |\n| `AgentTesting.getTornadoStatus()` | `GET /v1/agent-testing/tornado/{id}/status` |\n| `AgentTesting.getActiveTornado()` | `GET /v1/agent-testing/tornado/active` |\n| `AgentTesting.batchRun()` | `POST /v1/agent-testing/batch-run` |\n| `AgentTesting.analyzeRun()` | `POST /v1/agent-testing/runs/{id}/analyze` |\n| `AgentTesting.createScenario()` | `POST /v1/agent-testing/scenarios` |\n| `AgentTesting.runScenario()` | `POST /v1/agent-testing/scenarios/{id}/run` |\n| `AgentTesting.generateScenarioFromCall()` | `POST /v1/agent-testing/scenarios/generate-from-call` |\n| `AgentTesting.createSimulationSet()` | `POST /v1/agent-testing/simulation-sets` |\n| `AgentTesting.cloneTemplate()` | `POST /v1/agent-testing/templates/{id}/clone` |\n| `AgentTesting.cancelTornado()` | `POST /v1/agent-testing/tornado/{id}/cancel` |\n| `AgentTesting.startTornado()` | `POST /v1/agent-testing/tornado/start` |\n| `AgentTesting.updateScenario()` | `PUT /v1/agent-testing/scenarios/{id}` |\n| `Alarms.delete()` | `DELETE /v1/alarms/{id}` |\n| `Alarms.list()` | `GET /v1/alarms` |\n| `Alarms.get()` | `GET /v1/alarms/{id}` |\n| `Alarms.listEvents()` | `GET /v1/alarms/history` |\n| `Alarms.update()` | `PATCH /v1/alarms/{id}` |\n| `Alarms.create()` | `POST /v1/alarms` |\n| `Alarms.notify()` | `POST /v1/alarms/{id}/notify` |\n| `Alarms.toggle()` | `POST /v1/alarms/{id}/toggle` |\n| `Alarms.trigger()` | `POST /v1/alarms/{id}/trigger` |\n| `BlockedNumbers.delete()` | `DELETE /v1/blocked_numbers/{block_id}` |\n| `BlockedNumbers.list()` | `GET /v1/blocked_numbers` |\n| `BlockedNumbers.get()` | `GET /v1/blocked_numbers/{block_id}` |\n| `BlockedNumbers.create()` | `POST /v1/blocked_numbers` |\n| `BlockedNumbers.edit()` | `POST /v1/blocked_numbers/{block_id}/edit` |\n| `Calls.list()` | `GET /v1/calls` |\n| `Calls.get()` | `GET /v1/calls/{call_id}` |\n| `Calls.getCorrectedTranscript()` | `GET /v1/calls/{call_id}/correct` |\n| `Calls.listActive()` | `GET /v1/calls/active` |\n| `Calls.getEventStream()` | `GET /v1/event_stream/{call_id}` |\n| `Calls.getRecording()` | `GET /v1/recordings/{call_id}` |\n| `Calls.send()` | `POST /v1/calls` |\n| `Calls.sendSimple()` | `POST /v1/calls` |\n| `Calls.sendPathway()` | `POST /v1/calls` |\n| `Calls.analyze()` | `POST /v1/calls/{call_id}/analyze` |\n| `Calls.listen()` | `POST /v1/calls/{call_id}/listen` |\n| `Calls.stop()` | `POST /v1/calls/{call_id}/stop` |\n| `Calls.getTranscriptStreamUrl()` | `POST /v1/calls/{call_id}/transcript-stream/token` |\n| `Calls.stopAll()` | `POST /v1/calls/active/stop` |\n| `Calls.transfer()` | `POST /v1/calls/active/transfer` |\n| `CitationSchemas.get()` | `GET /v1/citation_schemas/` |\n| `CitationSchemas.backfillStatus()` | `GET /v1/citation_schemas/backfill/status/{workflow_id}` |\n| `CitationSchemas.list()` | `GET /v1/citation_schemas/list` |\n| `CitationSchemas.update()` | `PATCH /v1/citation_schemas/` |\n| `CitationSchemas.create()` | `POST /v1/citation_schemas/` |\n| `CitationSchemas.backfill()` | `POST /v1/citation_schemas/backfill` |\n| `Contacts.list()` | `GET /v1/contacts` |\n| `Contacts.get()` | `GET /v1/contacts/{contact_id}` |\n| `Contacts.update()` | `PATCH /v1/contacts/{contact_id}` |\n| `Contacts.find()` | `POST /v1/contacts/find` |\n| `Contacts.merge()` | `POST /v1/contacts/merge` |\n| `Contacts.resolve()` | `POST /v1/contacts/resolve` |\n| `CustomDialingPools.list()` | `GET /v1/custom-dialing-pools` |\n| `CustomDialingPools.get()` | `GET /v1/custom-dialing-pools/{pool_id}` |\n| `CustomDialingPools.create()` | `POST /v1/custom-dialing-pools` |\n| `CustomDialingPools.update()` | `POST /v1/custom-dialing-pools/{pool_id}/update` |\n| `Evals.status()` | `GET /v1/evals/status` |\n| `EvalsAgents.delete()` | `DELETE /v1/evals/agents/{eval_agent_id}` |\n| `EvalsAgents.list()` | `GET /v1/evals/agents` |\n| `EvalsAgents.get()` | `GET /v1/evals/agents/{eval_agent_id}` |\n| `EvalsAgents.listVersions()` | `GET /v1/evals/agents/{eval_agent_id}/versions` |\n| `EvalsAgents.getVersion()` | `GET /v1/evals/agents/{eval_agent_id}/versions/{version_id}` |\n| `EvalsAgents.update()` | `PATCH /v1/evals/agents/{eval_agent_id}` |\n| `EvalsAgents.updateVersion()` | `PATCH /v1/evals/agents/{eval_agent_id}/versions/{version_id}` |\n| `EvalsAgents.create()` | `POST /v1/evals/agents` |\n| `EvalsAgents.publish()` | `POST /v1/evals/agents/{eval_agent_id}/publications` |\n| `EvalsAgents.createVersion()` | `POST /v1/evals/agents/{eval_agent_id}/versions` |\n| `EvalsRuns.list()` | `GET /v1/evals/runs` |\n| `EvalsRuns.get()` | `GET /v1/evals/runs/{run_id}` |\n| `EvalsRuns.listAgentResults()` | `GET /v1/evals/runs/{run_id}/agent-results` |\n| `EvalsRuns.listAgentSnapshots()` | `GET /v1/evals/runs/{run_id}/agent-snapshots` |\n| `EvalsRuns.listCallResults()` | `GET /v1/evals/runs/{run_id}/call-results` |\n| `EvalsRuns.create()` | `POST /v1/evals/runs` |\n| `EvalsRuns.cancel()` | `POST /v1/evals/runs/{run_id}/cancellations` |\n| `EvalsRuns.estimate()` | `POST /v1/evals/runs/estimates` |\n| `EvalsTemplates.deleteUserTemplate()` | `DELETE /v1/evals/user-templates/{id}` |\n| `EvalsTemplates.listAgentTemplates()` | `GET /v1/evals/agent-templates` |\n| `EvalsTemplates.getAgentTemplate()` | `GET /v1/evals/agent-templates/{template_key}` |\n| `EvalsTemplates.listUserTemplates()` | `GET /v1/evals/user-templates` |\n| `EvalsTemplates.getUserTemplate()` | `GET /v1/evals/user-templates/{id}` |\n| `EvalsTemplates.updateUserTemplate()` | `PATCH /v1/evals/user-templates/{id}` |\n| `EvalsTemplates.createUserTemplate()` | `POST /v1/evals/user-templates` |\n| `EvalsWorkbench.delete()` | `DELETE /v1/evals/workbench-setups/{setup_id}` |\n| `EvalsWorkbench.list()` | `GET /v1/evals/workbench-setups` |\n| `EvalsWorkbench.get()` | `GET /v1/evals/workbench-setups/{setup_id}` |\n| `EvalsWorkbench.listVersions()` | `GET /v1/evals/workbench-setups/{setup_id}/versions` |\n| `EvalsWorkbench.getVersion()` | `GET /v1/evals/workbench-setups/{setup_id}/versions/{version_id}` |\n| `EvalsWorkbench.update()` | `PATCH /v1/evals/workbench-setups/{setup_id}` |\n| `EvalsWorkbench.updateVersion()` | `PATCH /v1/evals/workbench-setups/{setup_id}/versions/{version_id}` |\n| `EvalsWorkbench.create()` | `POST /v1/evals/workbench-setups` |\n| `EvalsWorkbench.publish()` | `POST /v1/evals/workbench-setups/{setup_id}/publications` |\n| `EvalsWorkbench.createVersion()` | `POST /v1/evals/workbench-setups/{setup_id}/versions` |\n| `GuardRails.delete()` | `DELETE /v1/guard_rails/{guard_rail_id}` |\n| `GuardRails.list()` | `GET /v1/guard_rails` |\n| `GuardRails.get()` | `GET /v1/guard_rails/{guard_rail_id}` |\n| `GuardRails.update()` | `PATCH /v1/guard_rails/{guard_rail_id}` |\n| `GuardRails.create()` | `POST /v1/guard_rails` |\n| `InboundNumbers.list()` | `GET /v1/inbound` |\n| `InboundNumbers.get()` | `GET /v1/inbound/{phone_number}` |\n| `InboundNumbers.updateLabel()` | `POST /inbound/update_label` |\n| `InboundNumbers.purchase()` | `POST /numbers/purchase` |\n| `InboundNumbers.update()` | `POST /v1/inbound/{phone_number}` |\n| `InboundNumbers.delete()` | `POST /v1/inbound/{phone_number}/delete` |\n| `InboundNumbers.insert()` | `POST /v1/inbound/insert` |\n| `InboundNumbers.createSession()` | `POST /v1/inbound/session` |\n| `Knowledge.delete()` | `DELETE /v1/knowledge/{knowledge_base_id}` |\n| `Knowledge.list()` | `GET /v1/knowledge` |\n| `Knowledge.get()` | `GET /v1/knowledge/{knowledge_base_id}` |\n| `Knowledge.chat()` | `POST /v1/knowledge/chat` |\n| `Knowledge.crawl()` | `POST /v1/knowledge/crawl` |\n| `Knowledge.learnText()` | `POST /v1/knowledge/learn` |\n| `Knowledge.learnFile()` | `POST /v1/knowledge/learn` |\n| `Knowledge.learnWeb()` | `POST /v1/knowledge/learn` |\n| `Knowledge.update()` | `PUT /v1/knowledge/{knowledge_base_id}` |\n| `Memory.list()` | `GET /v1/memory` |\n| `Memory.get()` | `GET /v1/memory/{memory_id}` |\n| `Memory.getChanges()` | `GET /v1/memory/changes` |\n| `Memory.getContact()` | `GET /v1/memory/contact/{memory_id}` |\n| `Memory.listContactMessages()` | `GET /v1/memory/contact/{memory_id}/messages` |\n| `Memory.getContext()` | `GET /v1/memory/context` |\n| `Memory.updateContactFacts()` | `PATCH /v1/memory/contact/{memory_id}/facts` |\n| `Memory.updateContactSummary()` | `PATCH /v1/memory/contact/{memory_id}/summary` |\n| `Memory.addCall()` | `POST /v1/memory/{memory_id}/add-call` |\n| `Memory.addUser()` | `POST /v1/memory/{memory_id}/add-user` |\n| `Memory.deleteCall()` | `POST /v1/memory/{memory_id}/call/{call_id}/delete` |\n| `Memory.delete()` | `POST /v1/memory/{memory_id}/delete` |\n| `Memory.update()` | `POST /v1/memory/{memory_id}/update` |\n| `Memory.getUser()` | `POST /v1/memory/{memory_id}/user` |\n| `Memory.deleteUser()` | `POST /v1/memory/{memory_id}/user/delete` |\n| `Memory.searchUserCalls()` | `POST /v1/memory/{memory_id}/user/search` |\n| `Memory.updateUser()` | `POST /v1/memory/{memory_id}/user/update` |\n| `Memory.createContact()` | `POST /v1/memory/contact` |\n| `Memory.create()` | `POST /v1/memory/create` |\n| `Memory.setEnabled()` | `POST /v1/memory/enable` |\n| `Memory.resetContact()` | `POST /v1/memory/reset` |\n| `Organizations.delete()` | `DELETE /v1/orgs/{org_id}` |\n| `Organizations.leave()` | `DELETE /v1/orgs/self/leave` |\n| `Organizations.get()` | `GET /v1/orgs/{org_id}` |\n| `Organizations.getBilling()` | `GET /v1/orgs/{org_id}/billing` |\n| `Organizations.getBillingRefill()` | `GET /v1/orgs/{org_id}/billing/refill` |\n| `Organizations.listMembers()` | `GET /v1/orgs/{org_id}/members` |\n| `Organizations.getCurrentVersion()` | `GET /v1/orgs/{org_id}/versions/{service}/current` |\n| `Organizations.listVersions()` | `GET /v1/orgs/{org_id}/versions/{service}/list` |\n| `Organizations.listSelfMemberships()` | `GET /v1/orgs/self/memberships` |\n| `Organizations.updateMembers()` | `PATCH /v1/orgs/{org_id}/members` |\n| `Organizations.updateMemberPermissions()` | `PATCH /v1/orgs/{org_id}/members/permissions` |\n| `Organizations.updateProperties()` | `PATCH /v1/orgs/{org_id}/properties` |\n| `Organizations.updateVersion()` | `PATCH /v1/orgs/{org_id}/versions/{service}` |\n| `Organizations.create()` | `POST /v1/orgs/create` |\n| `Pathways.delete()` | `DELETE /v1/pathway/{pathway_id}` |\n| `Pathways.deleteVersion()` | `DELETE /v1/pathway/{pathway_id}/version/{version_id}` |\n| `Pathways.deleteFolder()` | `DELETE /v1/pathway/folders/{folder_id}` |\n| `Pathways.getNodeTestRun()` | `GET /v1/node_tests/run/:id` |\n| `Pathways.list()` | `GET /v1/pathway` |\n| `Pathways.get()` | `GET /v1/pathway/{pathway_id}` |\n| `Pathways.getVersion()` | `GET /v1/pathway/{pathway_id}/version/{version_id}` |\n| `Pathways.listVersions()` | `GET /v1/pathway/{pathway_id}/versions` |\n| `Pathways.getChat()` | `GET /v1/pathway/chat/{id}` |\n| `Pathways.listFolders()` | `GET /v1/pathway/folders` |\n| `Pathways.listFolderPathways()` | `GET /v1/pathway/folders/{folder_id}/pathways` |\n| `Pathways.getGenerateStatus()` | `GET /v1/pathway/generate/status/{job_id}` |\n| `Pathways.getSession()` | `GET /v1/pathway/session` |\n| `Pathways.updateFolder()` | `PATCH /v1/pathway/folders/{folder_id}` |\n| `Pathways.invokeNodeTest()` | `POST /v1/node_tests/invoke` |\n| `Pathways.update()` | `POST /v1/pathway/{pathway_id}` |\n| `Pathways.promote()` | `POST /v1/pathway/{pathway_id}/publish` |\n| `Pathways.createVersion()` | `POST /v1/pathway/{pathway_id}/version` |\n| `Pathways.updateVersion()` | `POST /v1/pathway/{pathway_id}/version/{version_number}` |\n| `Pathways.sendChatMessage()` | `POST /v1/pathway/chat/{id}` |\n| `Pathways.createChat()` | `POST /v1/pathway/chat/create` |\n| `Pathways.create()` | `POST /v1/pathway/create` |\n| `Pathways.createFolder()` | `POST /v1/pathway/folders` |\n| `Pathways.moveToFolder()` | `POST /v1/pathway/folders/move` |\n| `Pathways.generate()` | `POST /v1/pathway/generate` |\n| `Personas.delete()` | `DELETE /v1/personas/{persona_id}` |\n| `Personas.list()` | `GET /v1/personas` |\n| `Personas.get()` | `GET /v1/personas/{persona_id}` |\n| `Personas.listVersions()` | `GET /v1/personas/{persona_id}/versions` |\n| `Personas.getVersion()` | `GET /v1/personas/{persona_id}/versions/{version_id}` |\n| `Personas.update()` | `PATCH /v1/personas/{persona_id}` |\n| `Personas.updateNumberSettings()` | `PATCH /v1/personas/{persona_id}/inbound/{phone_number}/settings` |\n| `Personas.create()` | `POST /v1/personas` |\n| `Personas.attachNumbers()` | `POST /v1/personas/{persona_id}/inbound/attach` |\n| `Personas.detachNumbers()` | `POST /v1/personas/{persona_id}/inbound/detach` |\n| `Personas.promoteVersion()` | `POST /v1/personas/{persona_id}/versions/promote` |\n| `PostCallWebhooks.get()` | `GET /v1/postcall/webhooks/{call_id}` |\n| `PostCallWebhooks.create()` | `POST /v1/postcall/webhooks/create` |\n| `PostCallWebhooks.resend()` | `POST /v1/postcall/webhooks/resend` |\n| `Prompts.list()` | `GET /v1/prompts` |\n| `Prompts.get()` | `GET /v1/prompts/{prompt_id}` |\n| `Prompts.create()` | `POST /v1/prompts` |\n| `Sip.cancelPort()` | `DELETE /v1/sip/port/{id}` |\n| `Sip.getConfig()` | `GET /v1/sip` |\n| `Sip.getCallLogs()` | `GET /v1/sip/calls` |\n| `Sip.getDiscoveryStatus()` | `GET /v1/sip/discover/status` |\n| `Sip.getFirewallIps()` | `GET /v1/sip/firewall-ips` |\n| `Sip.generatePassword()` | `GET /v1/sip/generate-password` |\n| `Sip.listNumbers()` | `GET /v1/sip/numbers` |\n| `Sip.getOutboundSetup()` | `GET /v1/sip/outbound-setup` |\n| `Sip.listPortRequests()` | `GET /v1/sip/port` |\n| `Sip.checkPortability()` | `GET /v1/sip/port/check` |\n| `Sip.getTrunkHealth()` | `GET /v1/sip/status` |\n| `Sip.getTestCallStatus()` | `GET /v1/sip/test-call/status` |\n| `Sip.updateConfig()` | `PATCH /v1/sip/config` |\n| `Sip.attach()` | `POST /v1/sip/attach` |\n| `Sip.detach()` | `POST /v1/sip/detach` |\n| `Sip.discover()` | `POST /v1/sip/discover` |\n| `Sip.parseDestination()` | `POST /v1/sip/parse-destination` |\n| `Sip.uploadPortDocument()` | `POST /v1/sip/port/document` |\n| `Sip.initiatePort()` | `POST /v1/sip/port/initiate` |\n| `Sip.sendTestCall()` | `POST /v1/sip/test-call` |\n| `Sip.updateDirection()` | `POST /v1/sip/update` |\n| `Sms.deleteConversation()` | `DELETE /v1/sms/conversations/{id}` |\n| `Sms.deleteMessages()` | `DELETE /v1/sms/conversations/{id}/messages` |\n| `Sms.listConversations()` | `GET /v1/sms/conversations` |\n| `Sms.getConversationWebhook()` | `GET /v1/sms/conversations/{conversationId}/webhook` |\n| `Sms.getConversation()` | `GET /v1/sms/conversations/{id}` |\n| `Sms.listNumbers()` | `GET /v1/sms/numbers` |\n| `Sms.updateConversation()` | `PATCH /v1/sms/conversations/{conversation_id}` |\n| `Sms.analyze()` | `POST /v1/sms/analyze` |\n| `Sms.sendBatch()` | `POST /v1/sms/batch` |\n| `Sms.createConversation()` | `POST /v1/sms/create` |\n| `Sms.updateNumber()` | `POST /v1/sms/number/update` |\n| `Sms.send()` | `POST /v1/sms/send` |\n| `Speak.listModels()` | `GET /v1/models` |\n| `Speak.listGenerations()` | `GET /v1/speak/samples` |\n| `Speak.getGeneration()` | `GET /v1/speak/samples/{id}` |\n| `Speak.generate()` | `POST /v1/speak` |\n| `Speak.stream()` | `POST /v1/speak/stream` |\n| `Speak.mintStreamInputToken()` | `POST /v1/speak/stream-input/token` |\n| `Speak.streamInputUrl()` | `WS wss://api.bland.ai/v1/speak/stream-input` |\n| `Tools.delete()` | `DELETE /v1/tools/{tool_id}` |\n| `Tools.list()` | `GET /v1/tools` |\n| `Tools.get()` | `GET /v1/tools/{tool_id}` |\n| `Tools.create()` | `POST /v1/tools` |\n| `Tools.update()` | `POST /v1/tools/{tool_id}` |\n| `TranslationSessions.end()` | `DELETE /v1/translation/sessions/{session_id}` |\n| `TranslationSessions.get()` | `GET /v1/translation/sessions/{session_id}` |\n| `TranslationSessions.create()` | `POST /v1/translation/sessions` |\n| `Triage.deleteIssue()` | `DELETE /v1/triage/issues/{id}` |\n| `Triage.detachCall()` | `DELETE /v1/triage/issues/{id}/calls/{call_id}` |\n| `Triage.removeFlag()` | `DELETE /v1/triage/issues/{id}/flags/{flag_id}` |\n| `Triage.removeRelation()` | `DELETE /v1/triage/issues/{id}/relations/{relation_id}` |\n| `Triage.removeResource()` | `DELETE /v1/triage/issues/{id}/resources/{resource_link_id}` |\n| `Triage.listAgents()` | `GET /v1/triage/agents` |\n| `Triage.listCategories()` | `GET /v1/triage/categories` |\n| `Triage.listFlagTypes()` | `GET /v1/triage/flag-types` |\n| `Triage.listIssues()` | `GET /v1/triage/issues` |\n| `Triage.getIssue()` | `GET /v1/triage/issues/{id}` |\n| `Triage.listActivity()` | `GET /v1/triage/issues/{id}/activity` |\n| `Triage.getAffectedContext()` | `GET /v1/triage/issues/{id}/affected` |\n| `Triage.listFlags()` | `GET /v1/triage/issues/{id}/flags` |\n| `Triage.listRelations()` | `GET /v1/triage/issues/{id}/relations` |\n| `Triage.listResources()` | `GET /v1/triage/issues/{id}/resources` |\n| `Triage.updateIssue()` | `PATCH /v1/triage/issues/{id}` |\n| `Triage.createCategory()` | `POST /v1/triage/categories` |\n| `Triage.createIssue()` | `POST /v1/triage/issues` |\n| `Triage.createAgentSession()` | `POST /v1/triage/issues/{id}/agent-sessions` |\n| `Triage.promptNorm()` | `POST /v1/triage/issues/{id}/agent-sessions/{session_id}/prompts` |\n| `Triage.addComment()` | `POST /v1/triage/issues/{id}/comments` |\n| `Triage.addFlag()` | `POST /v1/triage/issues/{id}/flags` |\n| `Triage.linkRelatedIssue()` | `POST /v1/triage/issues/{id}/relations` |\n| `Triage.attachResource()` | `POST /v1/triage/issues/{id}/resources` |\n| `Triage.attachCall()` | `PUT /v1/triage/issues/{id}/calls/{call_id}` |\n| `Triage.markViewed()` | `PUT /v1/triage/issues/{id}/view` |\n| `V2Batches.get()` | `GET /v2/batches/{batch_id}` |\n| `V2Batches.logs()` | `GET /v2/batches/{batch_id}/logs` |\n| `V2Batches.list()` | `GET /v2/batches/list` |\n| `V2Batches.stop()` | `POST /v2/batches/{batch_id}/stop` |\n| `V2Batches.create()` | `POST /v2/batches/create` |\n| `V2Tools.list()` | `GET /v2/tools` |\n| `V2Tools.logs()` | `GET /v2/tools/logs` |\n| `V2Tools.logStats()` | `GET /v2/tools/logs/stats` |\n| `V2Tools.create()` | `POST /v2/tools` |\n| `V2Tools.update()` | `POST /v2/tools/{tool_id}` |\n| `Vectors.delete()` | `DELETE /v1/knowledgebases/{vector_id}` |\n| `Vectors.list()` | `GET /v1/knowledgebases` |\n| `Vectors.get()` | `GET /v1/knowledgebases/{vector_id}` |\n| `Vectors.update()` | `PATCH /v1/knowledgebases/{vector_id}` |\n| `Vectors.create()` | `POST /v1/knowledgebases` |\n| `Vectors.uploadText()` | `POST /v1/knowledgebases/upload` |\n| `Vectors.uploadMedia()` | `POST /v1/knowledgebases/upload-media` |\n| `Voices.delete()` | `DELETE /v1/voices/{id}` |\n| `Voices.deleteRating()` | `DELETE /v1/voices/{id}/rate` |\n| `Voices.deleteSamples()` | `DELETE /v1/voices/{id}/samples` |\n| `Voices.list()` | `GET /v1/voices` |\n| `Voices.get()` | `GET /v1/voices/{id}` |\n| `Voices.listSamples()` | `GET /v1/voices/{id}/samples` |\n| `Voices.getSample()` | `GET /v1/voices/{id}/samples/{sample_id}` |\n| `Voices.getSettings()` | `GET /v1/voices/{id}/settings` |\n| `Voices.listShared()` | `GET /v1/voices/shared` |\n| `Voices.updateConfig()` | `PATCH /v1/voices/{id}/config` |\n| `Voices.rename()` | `PATCH /v1/voices/{id}/rename` |\n| `Voices.updateSampleTranscriptions()` | `PATCH /v1/voices/{id}/samples` |\n| `Voices.rate()` | `POST /v1/voices/{id}/rate` |\n| `Voices.updateSettings()` | `POST /v1/voices/{id}/settings` |\n| `Voices.checkNameAvailability()` | `POST /v1/voices/check_name_availability` |\n| `Voices.clone()` | `POST /v1/voices/clone` |\n| `Voices.addLibraryVoice()` | `POST /v1/voices/library/add/{id}` |\n| `Voices.addSamples()` | `POST /v1/voices/samples` |\n| `WebAgents.list()` | `GET /v1/agents` |\n| `WebAgents.create()` | `POST /v1/agents` |\n| `WebAgents.update()` | `POST /v1/agents/{agent_id}` |\n| `WebAgents.authorize()` | `POST /v1/agents/{agent_id}/authorize` |\n| `WebAgents.delete()` | `POST /v1/agents/{agent_id}/delete` |\n| `Widgets.deleteCustomComponent()` | `DELETE /v1/widget/custom_components/{id}` |\n| `Widgets.get()` | `GET /v1/widget/{id}` |\n| `Widgets.getThreads()` | `GET /v1/widget/{id}/threads` |\n| `Widgets.listCustomComponents()` | `GET /v1/widget/custom_components` |\n| `Widgets.list()` | `GET /v1/widgets` |\n| `Widgets.update()` | `PATCH /v1/widget/{id}` |\n| `Widgets.updateCustomComponent()` | `PATCH /v1/widget/custom_components/{id}` |\n| `Widgets.create()` | `POST /v1/widget` |\n| `Widgets.sendLiveAgentMessage()` | `POST /v1/widget/{id}/threads/{thread_id}/webhook` |\n| `Widgets.createCustomComponent()` | `POST /v1/widget/custom_components` |\n\n</details>\n\n## License\n\nMIT\n","readmeFilename":"README.md"}