DELETE/api/v1/assistants/{id}/tools/{toolId}
Assistants
Unassign Tool
Removes a tool from the assistant's selected_tools list using an idempotent $pull — unassigning a tool that is not currently assigned is a no-op. Both the assistant and the tool must belong to the authenticated user. Returns the full updated AssistantDTO.
Request
Endpoint
DELETE
/api/v1/assistants/{id}/tools/{toolId}Authentication
x-api-keyorAuthorization: BearerPath Parameters
| Name | Type | Description |
|---|---|---|
idrequired | ObjectId | MongoDB ObjectId for the assistant. Invalid ids return 400. |
toolIdrequired | ObjectId | MongoDB ObjectId for the user tool to remove. Invalid ids return 400. |
Notes
No request body is needed — the tool to remove is identified by the URL path parameter.
Removing a tool that is not assigned is a no-op — the response reflects the current state.
Response Example
response.json
{
"success": true,
"data": {
"id": "665f1a2b3c4d5e6f7a8b9c0d",
"name": "Sales Bot",
"system_prompt": "You are a concise sales assistant.",
"welcome_message": "Hi! How can I help?",
"ai_provider": "openai",
"model": "gpt-4.1-mini",
"max_tokens": 256,
"temperature": 0.3,
"voice": {
"provider": "azure",
"name": "hi-IN-AartiNeural",
"speed": 1,
"language": "hi-IN",
"stability": 0.75,
"similarity_boost": 0.8,
"tts_model": null,
"instructions": "Indian Accent"
},
"transcription": {
"provider": "azure",
"language": "hi-IN",
"mode": "single",
"prompt": null,
"deepgram": {
"model": "nova-2",
"utterance_end_ms": 1200,
"endpointing": 300,
"vad_events": true,
"diarize": true
},
"cartesia": {
"model": "ink-whisper",
"min_volume": 0.3,
"max_silence_duration_secs": 2
},
"gladia": {
"model": "fast",
"languages": [],
"main_language": "en"
},
"smallest_ai": {
"diarize": false,
"redact_pii": false,
"emotion": false,
"word_timestamps": false
}
},
"maintain_context": false,
"maximum_duration": 600,
"silence_timeout": 12,
"inactivity_message": "Are you still there?",
"timeout_end_message": "Thank you for calling. Goodbye!",
"filler_words_enabled": true,
"filler_words": "",
"dynamic_welcome_enabled": false,
"dynamic_welcome_message": "Hello {{name}}",
"selected_tools": [],
"created_at": "2026-05-01T10:00:00.000Z",
"updated_at": "2026-05-02T08:30:00.000Z"
}
}Status Codes
| HTTP | Meaning | Description |
|---|---|---|
| 200 | OK | Request succeeded. |
| 400 | Bad request | Malformed input, invalid ObjectId, or no updatable fields. |
| 401 | Unauthorized | Missing, invalid, inactive, or origin-restricted API key. |
| 404 | Not found | Resource was not found inside the authenticated user's scope. |
| 429 | Rate limited | Per-IP or per-key request budget was exceeded. |
Security Model
User-scoped by default
This endpoint only sees resources owned by the user attached to the API key. If another user's id is supplied, the API responds as if the resource does not exist.