diff --git a/README.md b/README.md index e69de29..97194e4 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,152 @@ +# Vapi Python Library + +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-Built%20with%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=https%3A%2F%2Fgithub.com%2Ffern-demo%2Fvapi-python-sdk) +[![pypi](https://img.shields.io/pypi/v/Vapi)](https://pypi.python.org/pypi/Vapi) + +The Vapi Python library provides convenient access to the Vapi API from Python. + +## Installation + +```sh +pip install Vapi +``` + +## Reference + +A full reference for this library is available [here](./reference.md). + +## Usage + +Instantiate and use the client with the following: + +```python +from vapi import Vapi + +client = Vapi( + token="YOUR_TOKEN", +) +client.calls.create() +``` + +## Async Client + +The SDK also exports an `async` client so that you can make non-blocking calls to our API. + +```python +import asyncio + +from vapi import AsyncVapi + +client = AsyncVapi( + token="YOUR_TOKEN", +) + + +async def main() -> None: + await client.calls.create() + + +asyncio.run(main()) +``` + +## Exception Handling + +When the API returns a non-success status code (4xx or 5xx response), a subclass of the following error +will be thrown. + +```python +from vapi.core.api_error import ApiError + +try: + client.calls.create(...) +except ApiError as e: + print(e.status_code) + print(e.body) +``` + +## Pagination + +Paginated requests will return a `SyncPager` or `AsyncPager`, which can be used as generators for the underlying object. + +```python +from vapi import Vapi + +client = Vapi( + token="YOUR_TOKEN", +) +response = client.logs.get() +for item in response: + yield item +# alternatively, you can paginate page-by-page +for page in response.iter_pages(): + yield page +``` + +## Advanced + +### Retries + +The SDK is instrumented with automatic retries with exponential backoff. A request will be retried as long +as the request is deemed retriable and the number of retry attempts has not grown larger than the configured +retry limit (default: 2). + +A request is deemed retriable when any of the following HTTP status codes is returned: + +- [408](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/408) (Timeout) +- [429](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429) (Too Many Requests) +- [5XX](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/500) (Internal Server Errors) + +Use the `max_retries` request option to configure this behavior. + +```python +client.calls.create(..., request_options={ + "max_retries": 1 +}) +``` + +### Timeouts + +The SDK defaults to a 60 second timeout. You can configure this with a timeout option at the client or request level. + +```python + +from vapi import Vapi + +client = Vapi( + ..., + timeout=20.0, +) + + +# Override timeout for a specific method +client.calls.create(..., request_options={ + "timeout_in_seconds": 1 +}) +``` + +### Custom Client + +You can override the `httpx` client to customize it for your use-case. Some common use-cases include support for proxies +and transports. +```python +import httpx +from vapi import Vapi + +client = Vapi( + ..., + httpx_client=httpx.Client( + proxies="http://my.test.proxy.example.com", + transport=httpx.HTTPTransport(local_address="0.0.0.0"), + ), +) +``` + +## Contributing + +While we value open-source contributions to this SDK, this library is generated programmatically. +Additions made directly to this library would have to be moved over to our generation code, +otherwise they would be overwritten upon the next generated release. Feel free to open a PR as +a proof of concept, but know that we will not be able to merge it as-is. We suggest opening +an issue first to discuss with us! + +On the other hand, contributions to the README are always very welcome! diff --git a/pyproject.toml b/pyproject.toml index fb67c18..9c9d930 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "Vapi" -version = "0.0.0-alpha3" +version = "0.0.0-alpha4" description = "" readme = "README.md" authors = [] diff --git a/reference.md b/reference.md new file mode 100644 index 0000000..05a7373 --- /dev/null +++ b/reference.md @@ -0,0 +1,3662 @@ +# Reference +## Calls +
client.calls.list(...) +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from vapi import Vapi + +client = Vapi( + token="YOUR_TOKEN", +) +client.calls.list() + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**assistant_id:** `typing.Optional[str]` — This will return calls with the specified assistantId. + +
+
+ +
+
+ +**limit:** `typing.Optional[float]` — This is the maximum number of items to return. Defaults to 100. + +
+
+ +
+
+ +**created_at_gt:** `typing.Optional[dt.datetime]` — This will return items where the createdAt is greater than the specified value. + +
+
+ +
+
+ +**created_at_lt:** `typing.Optional[dt.datetime]` — This will return items where the createdAt is less than the specified value. + +
+
+ +
+
+ +**created_at_ge:** `typing.Optional[dt.datetime]` — This will return items where the createdAt is greater than or equal to the specified value. + +
+
+ +
+
+ +**created_at_le:** `typing.Optional[dt.datetime]` — This will return items where the createdAt is less than or equal to the specified value. + +
+
+ +
+
+ +**updated_at_gt:** `typing.Optional[dt.datetime]` — This will return items where the updatedAt is greater than the specified value. + +
+
+ +
+
+ +**updated_at_lt:** `typing.Optional[dt.datetime]` — This will return items where the updatedAt is less than the specified value. + +
+
+ +
+
+ +**updated_at_ge:** `typing.Optional[dt.datetime]` — This will return items where the updatedAt is greater than or equal to the specified value. + +
+
+ +
+
+ +**updated_at_le:** `typing.Optional[dt.datetime]` — This will return items where the updatedAt is less than or equal to the specified value. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.calls.create(...) +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from vapi import Vapi + +client = Vapi( + token="YOUR_TOKEN", +) +client.calls.create() + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**name:** `typing.Optional[str]` — This is the name of the call. This is just for your own reference. + +
+
+ +
+
+ +**assistant_id:** `typing.Optional[str]` — This is the assistant that will be used for the call. To use a transient assistant, use `assistant` instead. + +
+
+ +
+
+ +**assistant:** `typing.Optional[CreateAssistantDto]` — This is the assistant that will be used for the call. To use an existing assistant, use `assistantId` instead. + +
+
+ +
+
+ +**assistant_overrides:** `typing.Optional[AssistantOverrides]` — These are the overrides for the `assistant` or `assistantId`'s settings and template variables. + +
+
+ +
+
+ +**squad_id:** `typing.Optional[str]` — This is the squad that will be used for the call. To use a transient squad, use `squad` instead. + +
+
+ +
+
+ +**squad:** `typing.Optional[CreateSquadDto]` — This is a squad that will be used for the call. To use an existing squad, use `squadId` instead. + +
+
+ +
+
+ +**phone_number_id:** `typing.Optional[str]` + +This is the phone number that will be used for the call. To use a transient number, use `phoneNumber` instead. + +Only relevant for `outboundPhoneCall` and `inboundPhoneCall` type. + +
+
+ +
+
+ +**phone_number:** `typing.Optional[ImportTwilioPhoneNumberDto]` + +This is the phone number that will be used for the call. To use an existing number, use `phoneNumberId` instead. + +Only relevant for `outboundPhoneCall` and `inboundPhoneCall` type. + +
+
+ +
+
+ +**customer_id:** `typing.Optional[str]` + +This is the customer that will be called. To call a transient customer , use `customer` instead. + +Only relevant for `outboundPhoneCall` and `inboundPhoneCall` type. + +
+
+ +
+
+ +**customer:** `typing.Optional[CreateCustomerDto]` + +This is the customer that will be called. To call an existing customer, use `customerId` instead. + +Only relevant for `outboundPhoneCall` and `inboundPhoneCall` type. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.calls.get(...) +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from vapi import Vapi + +client = Vapi( + token="YOUR_TOKEN", +) +client.calls.get( + id="id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `str` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.calls.delete(...) +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from vapi import Vapi + +client = Vapi( + token="YOUR_TOKEN", +) +client.calls.delete( + id="id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `str` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.calls.update(...) +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from vapi import Vapi + +client = Vapi( + token="YOUR_TOKEN", +) +client.calls.update( + id="id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `str` + +
+
+ +
+
+ +**name:** `typing.Optional[str]` — This is the name of the call. This is just for your own reference. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +## Assistants +
client.assistants.list(...) +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from vapi import Vapi + +client = Vapi( + token="YOUR_TOKEN", +) +client.assistants.list() + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**limit:** `typing.Optional[float]` — This is the maximum number of items to return. Defaults to 100. + +
+
+ +
+
+ +**created_at_gt:** `typing.Optional[dt.datetime]` — This will return items where the createdAt is greater than the specified value. + +
+
+ +
+
+ +**created_at_lt:** `typing.Optional[dt.datetime]` — This will return items where the createdAt is less than the specified value. + +
+
+ +
+
+ +**created_at_ge:** `typing.Optional[dt.datetime]` — This will return items where the createdAt is greater than or equal to the specified value. + +
+
+ +
+
+ +**created_at_le:** `typing.Optional[dt.datetime]` — This will return items where the createdAt is less than or equal to the specified value. + +
+
+ +
+
+ +**updated_at_gt:** `typing.Optional[dt.datetime]` — This will return items where the updatedAt is greater than the specified value. + +
+
+ +
+
+ +**updated_at_lt:** `typing.Optional[dt.datetime]` — This will return items where the updatedAt is less than the specified value. + +
+
+ +
+
+ +**updated_at_ge:** `typing.Optional[dt.datetime]` — This will return items where the updatedAt is greater than or equal to the specified value. + +
+
+ +
+
+ +**updated_at_le:** `typing.Optional[dt.datetime]` — This will return items where the updatedAt is less than or equal to the specified value. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.assistants.create(...) +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from vapi import Vapi + +client = Vapi( + token="YOUR_TOKEN", +) +client.assistants.create() + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**transcriber:** `typing.Optional[CreateAssistantDtoTranscriber]` — These are the options for the assistant's transcriber. + +
+
+ +
+
+ +**model:** `typing.Optional[CreateAssistantDtoModel]` — These are the options for the assistant's LLM. + +
+
+ +
+
+ +**voice:** `typing.Optional[CreateAssistantDtoVoice]` — These are the options for the assistant's voice. + +
+
+ +
+
+ +**first_message_mode:** `typing.Optional[CreateAssistantDtoFirstMessageMode]` + +This is the mode for the first message. Default is 'assistant-speaks-first'. + +Use: + +- 'assistant-speaks-first' to have the assistant speak first. +- 'assistant-waits-for-user' to have the assistant wait for the user to speak first. +- 'assistant-speaks-first-with-model-generated-message' to have the assistant speak first with a message generated by the model based on the conversation state. (`assistant.model.messages` at call start, `call.messages` at squad transfer points). + +@default 'assistant-speaks-first' + +
+
+ +
+
+ +**hipaa_enabled:** `typing.Optional[bool]` — When this is enabled, no logs, recordings, or transcriptions will be stored. At the end of the call, you will still receive an end-of-call-report message to store on your server. Defaults to false. + +
+
+ +
+
+ +**client_messages:** `typing.Optional[typing.Sequence[CreateAssistantDtoClientMessagesItem]]` — These are the messages that will be sent to your Client SDKs. Default is conversation-update,function-call,hang,model-output,speech-update,status-update,transcript,tool-calls,user-interrupted,voice-input. You can check the shape of the messages in ClientMessage schema. + +
+
+ +
+
+ +**server_messages:** `typing.Optional[typing.Sequence[CreateAssistantDtoServerMessagesItem]]` — These are the messages that will be sent to your Server URL. Default is conversation-update,end-of-call-report,function-call,hang,speech-update,status-update,tool-calls,transfer-destination-request,user-interrupted. You can check the shape of the messages in ServerMessage schema. + +
+
+ +
+
+ +**silence_timeout_seconds:** `typing.Optional[float]` + +How many seconds of silence to wait before ending the call. Defaults to 30. + +@default 30 + +
+
+ +
+
+ +**max_duration_seconds:** `typing.Optional[float]` + +This is the maximum number of seconds that the call will last. When the call reaches this duration, it will be ended. + +@default 600 (10 minutes) + +
+
+ +
+
+ +**background_sound:** `typing.Optional[CreateAssistantDtoBackgroundSound]` — This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'. + +
+
+ +
+
+ +**backchanneling_enabled:** `typing.Optional[bool]` + +This determines whether the model says 'mhmm', 'ahem' etc. while user is speaking. + +Default `false` while in beta. + +@default false + +
+
+ +
+
+ +**background_denoising_enabled:** `typing.Optional[bool]` + +This enables filtering of noise and background speech while the user is talking. + +Default `false` while in beta. + +@default false + +
+
+ +
+
+ +**model_output_in_messages_enabled:** `typing.Optional[bool]` + +This determines whether the model's output is used in conversation history rather than the transcription of assistant's speech. + +Default `false` while in beta. + +@default false + +
+
+ +
+
+ +**transport_configurations:** `typing.Optional[typing.Sequence[TransportConfigurationTwilio]]` — These are the configurations to be passed to the transport providers of assistant's calls, like Twilio. You can store multiple configurations for different transport providers. For a call, only the configuration matching the call transport provider is used. + +
+
+ +
+
+ +**name:** `typing.Optional[str]` + +This is the name of the assistant. + +This is required when you want to transfer between assistants in a call. + +
+
+ +
+
+ +**first_message:** `typing.Optional[str]` + +This is the first message that the assistant will say. This can also be a URL to a containerized audio file (mp3, wav, etc.). + +If unspecified, assistant will wait for user to speak and use the model to respond once they speak. + +
+
+ +
+
+ +**voicemail_detection:** `typing.Optional[TwilioVoicemailDetection]` + +These are the settings to configure or disable voicemail detection. Alternatively, voicemail detection can be configured using the model.tools=[VoicemailTool]. +This uses Twilio's built-in detection while the VoicemailTool relies on the model to detect if a voicemail was reached. +You can use neither of them, one of them, or both of them. By default, Twilio built-in detection is enabled while VoicemailTool is not. + +
+
+ +
+
+ +**voicemail_message:** `typing.Optional[str]` + +This is the message that the assistant will say if the call is forwarded to voicemail. + +If unspecified, it will hang up. + +
+
+ +
+
+ +**end_call_message:** `typing.Optional[str]` + +This is the message that the assistant will say if it ends the call. + +If unspecified, it will hang up without saying anything. + +
+
+ +
+
+ +**end_call_phrases:** `typing.Optional[typing.Sequence[str]]` — This list contains phrases that, if spoken by the assistant, will trigger the call to be hung up. Case insensitive. + +
+
+ +
+
+ +**metadata:** `typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]` — This is for metadata you want to store on the assistant. + +
+
+ +
+
+ +**server_url:** `typing.Optional[str]` + +This is the URL Vapi will communicate with via HTTP GET and POST Requests. This is used for retrieving context, function calling, and end-of-call reports. + +All requests will be sent with the call object among other things relevant to that message. You can find more details in the Server URL documentation. + +This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: tool.server.url > assistant.serverUrl > phoneNumber.serverUrl > org.serverUrl + +
+
+ +
+
+ +**server_url_secret:** `typing.Optional[str]` + +This is the secret you can set that Vapi will send with every request to your server. Will be sent as a header called x-vapi-secret. + +Same precedence logic as serverUrl. + +
+
+ +
+
+ +**analysis_plan:** `typing.Optional[AnalysisPlan]` — This is the plan for analysis of assistant's calls. Stored in `call.analysis`. + +
+
+ +
+
+ +**artifact_plan:** `typing.Optional[ArtifactPlan]` + +This is the plan for artifacts generated during assistant's calls. Stored in `call.artifact`. + +Note: `recordingEnabled` is currently at the root level. It will be moved to `artifactPlan` in the future, but will remain backwards compatible. + +
+
+ +
+
+ +**message_plan:** `typing.Optional[MessagePlan]` + +This is the plan for static predefined messages that can be spoken by the assistant during the call, like `idleMessages`. + +Note: `firstMessage`, `voicemailMessage`, and `endCallMessage` are currently at the root level. They will be moved to `messagePlan` in the future, but will remain backwards compatible. + +
+
+ +
+
+ +**start_speaking_plan:** `typing.Optional[StartSpeakingPlan]` + +This is the plan for when the assistant should start talking. + +You should configure this if you're running into these issues: + +- The assistant is too slow to start talking after the customer is done speaking. +- The assistant is too fast to start talking after the customer is done speaking. +- The assistant is so fast that it's actually interrupting the customer. + +
+
+ +
+
+ +**stop_speaking_plan:** `typing.Optional[StopSpeakingPlan]` + +This is the plan for when assistant should stop talking on customer interruption. + +You should configure this if you're running into these issues: + +- The assistant is too slow to recognize customer's interruption. +- The assistant is too fast to recognize customer's interruption. +- The assistant is getting interrupted by phrases that are just acknowledgments. +- The assistant is getting interrupted by background noises. +- The assistant is not properly stopping -- it starts talking right after getting interrupted. + +
+
+ +
+
+ +**monitor_plan:** `typing.Optional[MonitorPlan]` + +This is the plan for real-time monitoring of the assistant's calls. + +Usage: + +- To enable live listening of the assistant's calls, set `monitorPlan.listenEnabled` to `true`. +- To enable live control of the assistant's calls, set `monitorPlan.controlEnabled` to `true`. + +Note, `serverMessages`, `clientMessages`, `serverUrl` and `serverUrlSecret` are currently at the root level but will be moved to `monitorPlan` in the future. Will remain backwards compatible + +
+
+ +
+
+ +**credential_ids:** `typing.Optional[typing.Sequence[str]]` — These are the credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can provide a subset using this. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.assistants.get(...) +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from vapi import Vapi + +client = Vapi( + token="YOUR_TOKEN", +) +client.assistants.get( + id="id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `str` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.assistants.delete(...) +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from vapi import Vapi + +client = Vapi( + token="YOUR_TOKEN", +) +client.assistants.delete( + id="id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `str` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.assistants.update(...) +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from vapi import Vapi + +client = Vapi( + token="YOUR_TOKEN", +) +client.assistants.update( + id="id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `str` + +
+
+ +
+
+ +**transcriber:** `typing.Optional[UpdateAssistantDtoTranscriber]` — These are the options for the assistant's transcriber. + +
+
+ +
+
+ +**model:** `typing.Optional[UpdateAssistantDtoModel]` — These are the options for the assistant's LLM. + +
+
+ +
+
+ +**voice:** `typing.Optional[UpdateAssistantDtoVoice]` — These are the options for the assistant's voice. + +
+
+ +
+
+ +**first_message_mode:** `typing.Optional[UpdateAssistantDtoFirstMessageMode]` + +This is the mode for the first message. Default is 'assistant-speaks-first'. + +Use: +- 'assistant-speaks-first' to have the assistant speak first. +- 'assistant-waits-for-user' to have the assistant wait for the user to speak first. +- 'assistant-speaks-first-with-model-generated-message' to have the assistant speak first with a message generated by the model based on the conversation state. (`assistant.model.messages` at call start, `call.messages` at squad transfer points). + +@default 'assistant-speaks-first' + +
+
+ +
+
+ +**hipaa_enabled:** `typing.Optional[bool]` — When this is enabled, no logs, recordings, or transcriptions will be stored. At the end of the call, you will still receive an end-of-call-report message to store on your server. Defaults to false. + +
+
+ +
+
+ +**client_messages:** `typing.Optional[typing.Sequence[UpdateAssistantDtoClientMessagesItem]]` — These are the messages that will be sent to your Client SDKs. Default is conversation-update,function-call,hang,model-output,speech-update,status-update,transcript,tool-calls,user-interrupted,voice-input. You can check the shape of the messages in ClientMessage schema. + +
+
+ +
+
+ +**server_messages:** `typing.Optional[typing.Sequence[UpdateAssistantDtoServerMessagesItem]]` — These are the messages that will be sent to your Server URL. Default is conversation-update,end-of-call-report,function-call,hang,speech-update,status-update,tool-calls,transfer-destination-request,user-interrupted. You can check the shape of the messages in ServerMessage schema. + +
+
+ +
+
+ +**silence_timeout_seconds:** `typing.Optional[float]` + +How many seconds of silence to wait before ending the call. Defaults to 30. + +@default 30 + +
+
+ +
+
+ +**max_duration_seconds:** `typing.Optional[float]` + +This is the maximum number of seconds that the call will last. When the call reaches this duration, it will be ended. + +@default 600 (10 minutes) + +
+
+ +
+
+ +**background_sound:** `typing.Optional[UpdateAssistantDtoBackgroundSound]` — This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'. + +
+
+ +
+
+ +**backchanneling_enabled:** `typing.Optional[bool]` + +This determines whether the model says 'mhmm', 'ahem' etc. while user is speaking. + +Default `false` while in beta. + +@default false + +
+
+ +
+
+ +**background_denoising_enabled:** `typing.Optional[bool]` + +This enables filtering of noise and background speech while the user is talking. + +Default `false` while in beta. + +@default false + +
+
+ +
+
+ +**model_output_in_messages_enabled:** `typing.Optional[bool]` + +This determines whether the model's output is used in conversation history rather than the transcription of assistant's speech. + +Default `false` while in beta. + +@default false + +
+
+ +
+
+ +**transport_configurations:** `typing.Optional[typing.Sequence[TransportConfigurationTwilio]]` — These are the configurations to be passed to the transport providers of assistant's calls, like Twilio. You can store multiple configurations for different transport providers. For a call, only the configuration matching the call transport provider is used. + +
+
+ +
+
+ +**name:** `typing.Optional[str]` + +This is the name of the assistant. + +This is required when you want to transfer between assistants in a call. + +
+
+ +
+
+ +**first_message:** `typing.Optional[str]` + +This is the first message that the assistant will say. This can also be a URL to a containerized audio file (mp3, wav, etc.). + +If unspecified, assistant will wait for user to speak and use the model to respond once they speak. + +
+
+ +
+
+ +**voicemail_detection:** `typing.Optional[TwilioVoicemailDetection]` + +These are the settings to configure or disable voicemail detection. Alternatively, voicemail detection can be configured using the model.tools=[VoicemailTool]. +This uses Twilio's built-in detection while the VoicemailTool relies on the model to detect if a voicemail was reached. +You can use neither of them, one of them, or both of them. By default, Twilio built-in detection is enabled while VoicemailTool is not. + +
+
+ +
+
+ +**voicemail_message:** `typing.Optional[str]` + +This is the message that the assistant will say if the call is forwarded to voicemail. + +If unspecified, it will hang up. + +
+
+ +
+
+ +**end_call_message:** `typing.Optional[str]` + +This is the message that the assistant will say if it ends the call. + +If unspecified, it will hang up without saying anything. + +
+
+ +
+
+ +**end_call_phrases:** `typing.Optional[typing.Sequence[str]]` — This list contains phrases that, if spoken by the assistant, will trigger the call to be hung up. Case insensitive. + +
+
+ +
+
+ +**metadata:** `typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]` — This is for metadata you want to store on the assistant. + +
+
+ +
+
+ +**server_url:** `typing.Optional[str]` + +This is the URL Vapi will communicate with via HTTP GET and POST Requests. This is used for retrieving context, function calling, and end-of-call reports. + +All requests will be sent with the call object among other things relevant to that message. You can find more details in the Server URL documentation. + +This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: tool.server.url > assistant.serverUrl > phoneNumber.serverUrl > org.serverUrl + +
+
+ +
+
+ +**server_url_secret:** `typing.Optional[str]` + +This is the secret you can set that Vapi will send with every request to your server. Will be sent as a header called x-vapi-secret. + +Same precedence logic as serverUrl. + +
+
+ +
+
+ +**analysis_plan:** `typing.Optional[AnalysisPlan]` — This is the plan for analysis of assistant's calls. Stored in `call.analysis`. + +
+
+ +
+
+ +**artifact_plan:** `typing.Optional[ArtifactPlan]` + +This is the plan for artifacts generated during assistant's calls. Stored in `call.artifact`. + +Note: `recordingEnabled` is currently at the root level. It will be moved to `artifactPlan` in the future, but will remain backwards compatible. + +
+
+ +
+
+ +**message_plan:** `typing.Optional[MessagePlan]` + +This is the plan for static predefined messages that can be spoken by the assistant during the call, like `idleMessages`. + +Note: `firstMessage`, `voicemailMessage`, and `endCallMessage` are currently at the root level. They will be moved to `messagePlan` in the future, but will remain backwards compatible. + +
+
+ +
+
+ +**start_speaking_plan:** `typing.Optional[StartSpeakingPlan]` + +This is the plan for when the assistant should start talking. + +You should configure this if you're running into these issues: +- The assistant is too slow to start talking after the customer is done speaking. +- The assistant is too fast to start talking after the customer is done speaking. +- The assistant is so fast that it's actually interrupting the customer. + +
+
+ +
+
+ +**stop_speaking_plan:** `typing.Optional[StopSpeakingPlan]` + +This is the plan for when assistant should stop talking on customer interruption. + +You should configure this if you're running into these issues: +- The assistant is too slow to recognize customer's interruption. +- The assistant is too fast to recognize customer's interruption. +- The assistant is getting interrupted by phrases that are just acknowledgments. +- The assistant is getting interrupted by background noises. +- The assistant is not properly stopping -- it starts talking right after getting interrupted. + +
+
+ +
+
+ +**monitor_plan:** `typing.Optional[MonitorPlan]` + +This is the plan for real-time monitoring of the assistant's calls. + +Usage: +- To enable live listening of the assistant's calls, set `monitorPlan.listenEnabled` to `true`. +- To enable live control of the assistant's calls, set `monitorPlan.controlEnabled` to `true`. + +Note, `serverMessages`, `clientMessages`, `serverUrl` and `serverUrlSecret` are currently at the root level but will be moved to `monitorPlan` in the future. Will remain backwards compatible + +
+
+ +
+
+ +**credential_ids:** `typing.Optional[typing.Sequence[str]]` — These are the credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can provide a subset using this. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +## PhoneNumbers +
client.phone_numbers.list(...) +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from vapi import Vapi + +client = Vapi( + token="YOUR_TOKEN", +) +client.phone_numbers.list() + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**limit:** `typing.Optional[float]` — This is the maximum number of items to return. Defaults to 100. + +
+
+ +
+
+ +**created_at_gt:** `typing.Optional[dt.datetime]` — This will return items where the createdAt is greater than the specified value. + +
+
+ +
+
+ +**created_at_lt:** `typing.Optional[dt.datetime]` — This will return items where the createdAt is less than the specified value. + +
+
+ +
+
+ +**created_at_ge:** `typing.Optional[dt.datetime]` — This will return items where the createdAt is greater than or equal to the specified value. + +
+
+ +
+
+ +**created_at_le:** `typing.Optional[dt.datetime]` — This will return items where the createdAt is less than or equal to the specified value. + +
+
+ +
+
+ +**updated_at_gt:** `typing.Optional[dt.datetime]` — This will return items where the updatedAt is greater than the specified value. + +
+
+ +
+
+ +**updated_at_lt:** `typing.Optional[dt.datetime]` — This will return items where the updatedAt is less than the specified value. + +
+
+ +
+
+ +**updated_at_ge:** `typing.Optional[dt.datetime]` — This will return items where the updatedAt is greater than or equal to the specified value. + +
+
+ +
+
+ +**updated_at_le:** `typing.Optional[dt.datetime]` — This will return items where the updatedAt is less than or equal to the specified value. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.phone_numbers.create(...) +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from vapi import CreateByoPhoneNumberDto, Vapi + +client = Vapi( + token="YOUR_TOKEN", +) +client.phone_numbers.create( + request=CreateByoPhoneNumberDto( + credential_id="credentialId", + ), +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request:** `PhoneNumbersCreateRequest` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.phone_numbers.get(...) +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from vapi import Vapi + +client = Vapi( + token="YOUR_TOKEN", +) +client.phone_numbers.get( + id="id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `str` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.phone_numbers.delete(...) +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from vapi import Vapi + +client = Vapi( + token="YOUR_TOKEN", +) +client.phone_numbers.delete( + id="id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `str` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.phone_numbers.update(...) +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from vapi import Vapi + +client = Vapi( + token="YOUR_TOKEN", +) +client.phone_numbers.update( + id="id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `str` + +
+
+ +
+
+ +**fallback_destination:** `typing.Optional[UpdatePhoneNumberDtoFallbackDestination]` + +This is the fallback destination an inbound call will be transferred to if: +1. `assistantId` is not set +2. `squadId` is not set +3. and, `assistant-request` message to the `serverUrl` fails + +If this is not set and above conditions are met, the inbound call is hung up with an error message. + +
+
+ +
+
+ +**name:** `typing.Optional[str]` — This is the name of the phone number. This is just for your own reference. + +
+
+ +
+
+ +**assistant_id:** `typing.Optional[str]` + +This is the assistant that will be used for incoming calls to this phone number. + +If neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected. + +
+
+ +
+
+ +**squad_id:** `typing.Optional[str]` + +This is the squad that will be used for incoming calls to this phone number. + +If neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected. + +
+
+ +
+
+ +**server_url:** `typing.Optional[str]` + +This is the server URL where messages will be sent for calls on this number. This includes the `assistant-request` message. + +You can see the shape of the messages sent in `ServerMessage`. + +This overrides the `org.serverUrl`. Order of precedence: tool.server.url > assistant.serverUrl > phoneNumber.serverUrl > org.serverUrl. + +
+
+ +
+
+ +**server_url_secret:** `typing.Optional[str]` + +This is the secret Vapi will send with every message to your server. It's sent as a header called x-vapi-secret. + +Same precedence logic as serverUrl. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +## Squads +
client.squads.list(...) +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from vapi import Vapi + +client = Vapi( + token="YOUR_TOKEN", +) +client.squads.list() + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**limit:** `typing.Optional[float]` — This is the maximum number of items to return. Defaults to 100. + +
+
+ +
+
+ +**created_at_gt:** `typing.Optional[dt.datetime]` — This will return items where the createdAt is greater than the specified value. + +
+
+ +
+
+ +**created_at_lt:** `typing.Optional[dt.datetime]` — This will return items where the createdAt is less than the specified value. + +
+
+ +
+
+ +**created_at_ge:** `typing.Optional[dt.datetime]` — This will return items where the createdAt is greater than or equal to the specified value. + +
+
+ +
+
+ +**created_at_le:** `typing.Optional[dt.datetime]` — This will return items where the createdAt is less than or equal to the specified value. + +
+
+ +
+
+ +**updated_at_gt:** `typing.Optional[dt.datetime]` — This will return items where the updatedAt is greater than the specified value. + +
+
+ +
+
+ +**updated_at_lt:** `typing.Optional[dt.datetime]` — This will return items where the updatedAt is less than the specified value. + +
+
+ +
+
+ +**updated_at_ge:** `typing.Optional[dt.datetime]` — This will return items where the updatedAt is greater than or equal to the specified value. + +
+
+ +
+
+ +**updated_at_le:** `typing.Optional[dt.datetime]` — This will return items where the updatedAt is less than or equal to the specified value. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.squads.create(...) +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from vapi import SquadMemberDto, Vapi + +client = Vapi( + token="YOUR_TOKEN", +) +client.squads.create( + members=[SquadMemberDto()], +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**members:** `typing.Sequence[SquadMemberDto]` + +This is the list of assistants that make up the squad. + +The call will start with the first assistant in the list. + +
+
+ +
+
+ +**name:** `typing.Optional[str]` — This is the name of the squad. + +
+
+ +
+
+ +**members_overrides:** `typing.Optional[AssistantOverrides]` + +This can be used to override all the assistants' settings and provide values for their template variables. + +Both `membersOverrides` and `members[n].assistantOverrides` can be used together. First, `members[n].assistantOverrides` is applied. Then, `membersOverrides` is applied as a global override. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.squads.get(...) +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from vapi import Vapi + +client = Vapi( + token="YOUR_TOKEN", +) +client.squads.get( + id="id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `str` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.squads.delete(...) +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from vapi import Vapi + +client = Vapi( + token="YOUR_TOKEN", +) +client.squads.delete( + id="id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `str` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.squads.update(...) +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from vapi import SquadMemberDto, Vapi + +client = Vapi( + token="YOUR_TOKEN", +) +client.squads.update( + id="id", + members=[SquadMemberDto()], +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `str` + +
+
+ +
+
+ +**members:** `typing.Sequence[SquadMemberDto]` + +This is the list of assistants that make up the squad. + +The call will start with the first assistant in the list. + +
+
+ +
+
+ +**name:** `typing.Optional[str]` — This is the name of the squad. + +
+
+ +
+
+ +**members_overrides:** `typing.Optional[AssistantOverrides]` + +This can be used to override all the assistants' settings and provide values for their template variables. + +Both `membersOverrides` and `members[n].assistantOverrides` can be used together. First, `members[n].assistantOverrides` is applied. Then, `membersOverrides` is applied as a global override. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +## Blocks +
client.blocks.list(...) +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from vapi import Vapi + +client = Vapi( + token="YOUR_TOKEN", +) +client.blocks.list() + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**limit:** `typing.Optional[float]` — This is the maximum number of items to return. Defaults to 100. + +
+
+ +
+
+ +**created_at_gt:** `typing.Optional[dt.datetime]` — This will return items where the createdAt is greater than the specified value. + +
+
+ +
+
+ +**created_at_lt:** `typing.Optional[dt.datetime]` — This will return items where the createdAt is less than the specified value. + +
+
+ +
+
+ +**created_at_ge:** `typing.Optional[dt.datetime]` — This will return items where the createdAt is greater than or equal to the specified value. + +
+
+ +
+
+ +**created_at_le:** `typing.Optional[dt.datetime]` — This will return items where the createdAt is less than or equal to the specified value. + +
+
+ +
+
+ +**updated_at_gt:** `typing.Optional[dt.datetime]` — This will return items where the updatedAt is greater than the specified value. + +
+
+ +
+
+ +**updated_at_lt:** `typing.Optional[dt.datetime]` — This will return items where the updatedAt is less than the specified value. + +
+
+ +
+
+ +**updated_at_ge:** `typing.Optional[dt.datetime]` — This will return items where the updatedAt is greater than or equal to the specified value. + +
+
+ +
+
+ +**updated_at_le:** `typing.Optional[dt.datetime]` — This will return items where the updatedAt is less than or equal to the specified value. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.blocks.create(...) +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from vapi import CreateConversationBlockDto, Vapi + +client = Vapi( + token="YOUR_TOKEN", +) +client.blocks.create( + request=CreateConversationBlockDto( + instruction="instruction", + ), +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request:** `BlocksCreateRequest` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.blocks.get(...) +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from vapi import Vapi + +client = Vapi( + token="YOUR_TOKEN", +) +client.blocks.get( + id="id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `str` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.blocks.delete(...) +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from vapi import Vapi + +client = Vapi( + token="YOUR_TOKEN", +) +client.blocks.delete( + id="id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `str` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.blocks.update(...) +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from vapi import Vapi + +client = Vapi( + token="YOUR_TOKEN", +) +client.blocks.update( + id="id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `str` + +
+
+ +
+
+ +**messages:** `typing.Optional[typing.Sequence[UpdateBlockDtoMessagesItem]]` — These are the pre-configured messages that will be spoken to the user while the block is running. + +
+
+ +
+
+ +**input_schema:** `typing.Optional[JsonSchema]` + +This is the input schema for the block. This is the input the block needs to run. It's given to the block as `steps[0].input` + +These are accessible as variables: +- ({{input.propertyName}}) in context of the block execution (step) +- ({{stepName.input.propertyName}}) in context of the workflow + +
+
+ +
+
+ +**output_schema:** `typing.Optional[JsonSchema]` + +This is the output schema for the block. This is the output the block will return to the workflow (`{{stepName.output}}`). + +These are accessible as variables: +- ({{output.propertyName}}) in context of the block execution (step) +- ({{stepName.output.propertyName}}) in context of the workflow (read caveat #1) +- ({{blockName.output.propertyName}}) in context of the workflow (read caveat #2) + +Caveats: +1. a workflow can execute a step multiple times. example, if a loop is used in the graph. {{stepName.output.propertyName}} will reference the latest usage of the step. +2. a workflow can execute a block multiple times. example, if a step is called multiple times or if a block is used in multiple steps. {{blockName.output.propertyName}} will reference the latest usage of the block. this liquid variable is just provided for convenience when creating blocks outside of a workflow with steps. + +
+
+ +
+
+ +**tool:** `typing.Optional[UpdateBlockDtoTool]` — This is the tool that the block will call. To use an existing tool, use `toolId`. + +
+
+ +
+
+ +**steps:** `typing.Optional[typing.Sequence[UpdateBlockDtoStepsItem]]` — These are the steps in the workflow. + +
+
+ +
+
+ +**name:** `typing.Optional[str]` — This is the name of the block. This is just for your reference. + +
+
+ +
+
+ +**instruction:** `typing.Optional[str]` + +This is the instruction to the model. + +You can reference any variable in the context of the current block execution (step): +- "{{input.your-property-name}}" for the current step's input +- "{{your-step-name.output.your-property-name}}" for another step's output (in the same workflow; read caveat #1) +- "{{your-step-name.input.your-property-name}}" for another step's input (in the same workflow; read caveat #1) +- "{{your-block-name.output.your-property-name}}" for another block's output (in the same workflow; read caveat #2) +- "{{your-block-name.input.your-property-name}}" for another block's input (in the same workflow; read caveat #2) +- "{{workflow.input.your-property-name}}" for the current workflow's input +- "{{global.your-property-name}}" for the global context + +This can be as simple or as complex as you want it to be. +- "say hello and ask the user about their day!" +- "collect the user's first and last name" +- "user is {{input.firstName}} {{input.lastName}}. their age is {{input.age}}. ask them about their salary and if they might be interested in buying a house. we offer {{input.offer}}" + +Caveats: +1. a workflow can execute a step multiple times. example, if a loop is used in the graph. {{stepName.output/input.propertyName}} will reference the latest usage of the step. +2. a workflow can execute a block multiple times. example, if a step is called multiple times or if a block is used in multiple steps. {{blockName.output/input.propertyName}} will reference the latest usage of the block. this liquid variable is just provided for convenience when creating blocks outside of a workflow with steps. + +
+
+ +
+
+ +**tool_id:** `typing.Optional[str]` — This is the id of the tool that the block will call. To use a transient tool, use `tool`. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +## Tools +
client.tools.list(...) +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from vapi import Vapi + +client = Vapi( + token="YOUR_TOKEN", +) +client.tools.list() + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**limit:** `typing.Optional[float]` — This is the maximum number of items to return. Defaults to 100. + +
+
+ +
+
+ +**created_at_gt:** `typing.Optional[dt.datetime]` — This will return items where the createdAt is greater than the specified value. + +
+
+ +
+
+ +**created_at_lt:** `typing.Optional[dt.datetime]` — This will return items where the createdAt is less than the specified value. + +
+
+ +
+
+ +**created_at_ge:** `typing.Optional[dt.datetime]` — This will return items where the createdAt is greater than or equal to the specified value. + +
+
+ +
+
+ +**created_at_le:** `typing.Optional[dt.datetime]` — This will return items where the createdAt is less than or equal to the specified value. + +
+
+ +
+
+ +**updated_at_gt:** `typing.Optional[dt.datetime]` — This will return items where the updatedAt is greater than the specified value. + +
+
+ +
+
+ +**updated_at_lt:** `typing.Optional[dt.datetime]` — This will return items where the updatedAt is less than the specified value. + +
+
+ +
+
+ +**updated_at_ge:** `typing.Optional[dt.datetime]` — This will return items where the updatedAt is greater than or equal to the specified value. + +
+
+ +
+
+ +**updated_at_le:** `typing.Optional[dt.datetime]` — This will return items where the updatedAt is less than or equal to the specified value. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.tools.create(...) +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from vapi import CreateDtmfToolDto, Vapi + +client = Vapi( + token="YOUR_TOKEN", +) +client.tools.create( + request=CreateDtmfToolDto(), +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request:** `ToolsCreateRequest` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.tools.get(...) +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from vapi import Vapi + +client = Vapi( + token="YOUR_TOKEN", +) +client.tools.get( + id="id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `str` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.tools.delete(...) +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from vapi import Vapi + +client = Vapi( + token="YOUR_TOKEN", +) +client.tools.delete( + id="id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `str` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.tools.update(...) +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from vapi import Vapi + +client = Vapi( + token="YOUR_TOKEN", +) +client.tools.update( + id="id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `str` + +
+
+ +
+
+ +**async_:** `typing.Optional[bool]` + +This determines if the tool is async. + +If async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server. + +If sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server. + +Defaults to synchronous (`false`). + +
+
+ +
+
+ +**messages:** `typing.Optional[typing.Sequence[UpdateToolDtoMessagesItem]]` + +These are the messages that will be spoken to the user as the tool is running. + +For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured. + +
+
+ +
+
+ +**function:** `typing.Optional[OpenAiFunction]` + +This is the function definition of the tool. + +For `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases. + +An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument. + +
+
+ +
+
+ +**server:** `typing.Optional[Server]` + +This is the server that will be hit when this tool is requested by the model. + +All requests will be sent with the call object among other things. You can find more details in the Server URL documentation. + +This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +## Files +
client.files.list() +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from vapi import Vapi + +client = Vapi( + token="YOUR_TOKEN", +) +client.files.list() + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.files.create(...) +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from vapi import Vapi + +client = Vapi( + token="YOUR_TOKEN", +) +client.files.create() + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**file:** `from __future__ import annotations + +core.File` — See core.File for more documentation + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.files.get(...) +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from vapi import Vapi + +client = Vapi( + token="YOUR_TOKEN", +) +client.files.get( + id="id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `str` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.files.delete(...) +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from vapi import Vapi + +client = Vapi( + token="YOUR_TOKEN", +) +client.files.delete( + id="id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `str` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.files.update(...) +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from vapi import Vapi + +client = Vapi( + token="YOUR_TOKEN", +) +client.files.update( + id="id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `str` + +
+
+ +
+
+ +**name:** `typing.Optional[str]` — This is the name of the file. This is just for your own reference. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +## Analytics +
client.analytics.get(...) +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from vapi import AnalyticsOperation, AnalyticsQuery, Vapi + +client = Vapi( + token="YOUR_TOKEN", +) +client.analytics.get( + queries=[ + AnalyticsQuery( + name="name", + operations=[ + AnalyticsOperation( + operation="sum", + column="id", + ) + ], + ) + ], +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**queries:** `typing.Sequence[AnalyticsQuery]` — This is the list of metric queries you want to perform. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +## Logs +
client.logs.get(...) +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from vapi import Vapi + +client = Vapi( + token="YOUR_TOKEN", +) +response = client.logs.get() +for item in response: + yield item +# alternatively, you can paginate page-by-page +for page in response.iter_pages(): + yield page + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**org_id:** `typing.Optional[str]` — This is the unique identifier for the org that this log belongs to. + +
+
+ +
+
+ +**type:** `typing.Optional[LogsGetRequestType]` — This is the type of the log. + +
+
+ +
+
+ +**assistant_id:** `typing.Optional[str]` — This is the ID of the assistant. + +
+
+ +
+
+ +**phone_number_id:** `typing.Optional[str]` — This is the ID of the phone number. + +
+
+ +
+
+ +**customer_id:** `typing.Optional[str]` — This is the ID of the customer. + +
+
+ +
+
+ +**squad_id:** `typing.Optional[str]` — This is the ID of the squad. + +
+
+ +
+
+ +**call_id:** `typing.Optional[str]` — This is the ID of the call. + +
+
+ +
+
+ +**page:** `typing.Optional[float]` — This is the page number to return. Defaults to 1. + +
+
+ +
+
+ +**sort_order:** `typing.Optional[LogsGetRequestSortOrder]` — This is the sort order for pagination. Defaults to 'ASC'. + +
+
+ +
+
+ +**limit:** `typing.Optional[float]` — This is the maximum number of items to return. Defaults to 100. + +
+
+ +
+
+ +**created_at_gt:** `typing.Optional[dt.datetime]` — This will return items where the createdAt is greater than the specified value. + +
+
+ +
+
+ +**created_at_lt:** `typing.Optional[dt.datetime]` — This will return items where the createdAt is less than the specified value. + +
+
+ +
+
+ +**created_at_ge:** `typing.Optional[dt.datetime]` — This will return items where the createdAt is greater than or equal to the specified value. + +
+
+ +
+
+ +**created_at_le:** `typing.Optional[dt.datetime]` — This will return items where the createdAt is less than or equal to the specified value. + +
+
+ +
+
+ +**updated_at_gt:** `typing.Optional[dt.datetime]` — This will return items where the updatedAt is greater than the specified value. + +
+
+ +
+
+ +**updated_at_lt:** `typing.Optional[dt.datetime]` — This will return items where the updatedAt is less than the specified value. + +
+
+ +
+
+ +**updated_at_ge:** `typing.Optional[dt.datetime]` — This will return items where the updatedAt is greater than or equal to the specified value. + +
+
+ +
+
+ +**updated_at_le:** `typing.Optional[dt.datetime]` — This will return items where the updatedAt is less than or equal to the specified value. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ diff --git a/src/vapi/__init__.py b/src/vapi/__init__.py index 11a9793..f468e54 100644 --- a/src/vapi/__init__.py +++ b/src/vapi/__init__.py @@ -45,8 +45,7 @@ AzureOpenAiCredentialModelsItem, AzureOpenAiCredentialRegion, AzureVoice, - AzureVoiceId, - AzureVoiceIdEnum, + AzureVoiceVoiceId, BlockCompleteMessage, BlockCompleteMessageConditionsItem, BlockStartMessage, @@ -198,15 +197,13 @@ DeepgramTranscriberLanguage, DeepgramTranscriberModel, DeepgramVoice, - DeepgramVoiceId, - DeepgramVoiceIdEnum, + DeepgramVoiceVoiceId, DtmfTool, DtmfToolMessagesItem, ElevenLabsCredential, ElevenLabsVoice, - ElevenLabsVoiceId, - ElevenLabsVoiceIdEnum, ElevenLabsVoiceModel, + ElevenLabsVoiceVoiceId, EndCallTool, EndCallToolMessagesItem, Error, @@ -251,8 +248,7 @@ KnowledgeBase, LmntCredential, LmntVoice, - LmntVoiceId, - LmntVoiceIdEnum, + LmntVoiceVoiceId, Log, LogRequestHttpMethod, LogResource, @@ -272,8 +268,7 @@ Monitor, MonitorPlan, NeetsVoice, - NeetsVoiceId, - NeetsVoiceIdEnum, + NeetsVoiceVoiceId, OpenAiCredential, OpenAiFunction, OpenAiFunctionParameters, @@ -284,7 +279,7 @@ OpenAiModelModel, OpenAiModelToolsItem, OpenAiVoice, - OpenAiVoiceId, + OpenAiVoiceVoiceId, OpenRouterCredential, OpenRouterModel, OpenRouterModelToolsItem, @@ -306,9 +301,8 @@ RegexReplacement, RimeAiCredential, RimeAiVoice, - RimeAiVoiceId, - RimeAiVoiceIdEnum, RimeAiVoiceModel, + RimeAiVoiceVoiceId, RuleBasedCondition, RuleBasedConditionOperator, RunpodCredential, @@ -584,8 +578,7 @@ "AzureOpenAiCredentialModelsItem", "AzureOpenAiCredentialRegion", "AzureVoice", - "AzureVoiceId", - "AzureVoiceIdEnum", + "AzureVoiceVoiceId", "BadRequestError", "BlockCompleteMessage", "BlockCompleteMessageConditionsItem", @@ -744,15 +737,13 @@ "DeepgramTranscriberLanguage", "DeepgramTranscriberModel", "DeepgramVoice", - "DeepgramVoiceId", - "DeepgramVoiceIdEnum", + "DeepgramVoiceVoiceId", "DtmfTool", "DtmfToolMessagesItem", "ElevenLabsCredential", "ElevenLabsVoice", - "ElevenLabsVoiceId", - "ElevenLabsVoiceIdEnum", "ElevenLabsVoiceModel", + "ElevenLabsVoiceVoiceId", "EndCallTool", "EndCallToolMessagesItem", "Error", @@ -797,8 +788,7 @@ "KnowledgeBase", "LmntCredential", "LmntVoice", - "LmntVoiceId", - "LmntVoiceIdEnum", + "LmntVoiceVoiceId", "Log", "LogRequestHttpMethod", "LogResource", @@ -820,8 +810,7 @@ "Monitor", "MonitorPlan", "NeetsVoice", - "NeetsVoiceId", - "NeetsVoiceIdEnum", + "NeetsVoiceVoiceId", "OpenAiCredential", "OpenAiFunction", "OpenAiFunctionParameters", @@ -832,7 +821,7 @@ "OpenAiModelModel", "OpenAiModelToolsItem", "OpenAiVoice", - "OpenAiVoiceId", + "OpenAiVoiceVoiceId", "OpenRouterCredential", "OpenRouterModel", "OpenRouterModelToolsItem", @@ -860,9 +849,8 @@ "RegexReplacement", "RimeAiCredential", "RimeAiVoice", - "RimeAiVoiceId", - "RimeAiVoiceIdEnum", "RimeAiVoiceModel", + "RimeAiVoiceVoiceId", "RuleBasedCondition", "RuleBasedConditionOperator", "RunpodCredential", diff --git a/src/vapi/analytics/client.py b/src/vapi/analytics/client.py index 06bc83e..8f7a9e7 100644 --- a/src/vapi/analytics/client.py +++ b/src/vapi/analytics/client.py @@ -35,6 +35,27 @@ def get( ------- typing.List[AnalyticsQueryResult] + + Examples + -------- + from vapi import AnalyticsOperation, AnalyticsQuery, Vapi + + client = Vapi( + token="YOUR_TOKEN", + ) + client.analytics.get( + queries=[ + AnalyticsQuery( + name="name", + operations=[ + AnalyticsOperation( + operation="sum", + column="id", + ) + ], + ) + ], + ) """ _response = self._client_wrapper.httpx_client.request( "analytics", @@ -82,6 +103,35 @@ async def get( ------- typing.List[AnalyticsQueryResult] + + Examples + -------- + import asyncio + + from vapi import AnalyticsOperation, AnalyticsQuery, AsyncVapi + + client = AsyncVapi( + token="YOUR_TOKEN", + ) + + + async def main() -> None: + await client.analytics.get( + queries=[ + AnalyticsQuery( + name="name", + operations=[ + AnalyticsOperation( + operation="sum", + column="id", + ) + ], + ) + ], + ) + + + asyncio.run(main()) """ _response = await self._client_wrapper.httpx_client.request( "analytics", diff --git a/src/vapi/assistants/client.py b/src/vapi/assistants/client.py index 084d37c..d654956 100644 --- a/src/vapi/assistants/client.py +++ b/src/vapi/assistants/client.py @@ -94,6 +94,15 @@ def list( ------- typing.List[Assistant] + + Examples + -------- + from vapi import Vapi + + client = Vapi( + token="YOUR_TOKEN", + ) + client.assistants.list() """ _response = self._client_wrapper.httpx_client.request( "assistant", @@ -325,6 +334,15 @@ def create( ------- Assistant + + Examples + -------- + from vapi import Vapi + + client = Vapi( + token="YOUR_TOKEN", + ) + client.assistants.create() """ _response = self._client_wrapper.httpx_client.request( "assistant", @@ -415,6 +433,17 @@ def get(self, id: str, *, request_options: typing.Optional[RequestOptions] = Non ------- Assistant + + Examples + -------- + from vapi import Vapi + + client = Vapi( + token="YOUR_TOKEN", + ) + client.assistants.get( + id="id", + ) """ _response = self._client_wrapper.httpx_client.request( f"assistant/{jsonable_encoder(id)}", @@ -448,6 +477,17 @@ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = ------- Assistant + + Examples + -------- + from vapi import Vapi + + client = Vapi( + token="YOUR_TOKEN", + ) + client.assistants.delete( + id="id", + ) """ _response = self._client_wrapper.httpx_client.request( f"assistant/{jsonable_encoder(id)}", @@ -667,6 +707,17 @@ def update( ------- Assistant + + Examples + -------- + from vapi import Vapi + + client = Vapi( + token="YOUR_TOKEN", + ) + client.assistants.update( + id="id", + ) """ _response = self._client_wrapper.httpx_client.request( f"assistant/{jsonable_encoder(id)}", @@ -800,6 +851,23 @@ async def list( ------- typing.List[Assistant] + + Examples + -------- + import asyncio + + from vapi import AsyncVapi + + client = AsyncVapi( + token="YOUR_TOKEN", + ) + + + async def main() -> None: + await client.assistants.list() + + + asyncio.run(main()) """ _response = await self._client_wrapper.httpx_client.request( "assistant", @@ -1031,6 +1099,23 @@ async def create( ------- Assistant + + Examples + -------- + import asyncio + + from vapi import AsyncVapi + + client = AsyncVapi( + token="YOUR_TOKEN", + ) + + + async def main() -> None: + await client.assistants.create() + + + asyncio.run(main()) """ _response = await self._client_wrapper.httpx_client.request( "assistant", @@ -1121,6 +1206,25 @@ async def get(self, id: str, *, request_options: typing.Optional[RequestOptions] ------- Assistant + + Examples + -------- + import asyncio + + from vapi import AsyncVapi + + client = AsyncVapi( + token="YOUR_TOKEN", + ) + + + async def main() -> None: + await client.assistants.get( + id="id", + ) + + + asyncio.run(main()) """ _response = await self._client_wrapper.httpx_client.request( f"assistant/{jsonable_encoder(id)}", @@ -1154,6 +1258,25 @@ async def delete(self, id: str, *, request_options: typing.Optional[RequestOptio ------- Assistant + + Examples + -------- + import asyncio + + from vapi import AsyncVapi + + client = AsyncVapi( + token="YOUR_TOKEN", + ) + + + async def main() -> None: + await client.assistants.delete( + id="id", + ) + + + asyncio.run(main()) """ _response = await self._client_wrapper.httpx_client.request( f"assistant/{jsonable_encoder(id)}", @@ -1373,6 +1496,25 @@ async def update( ------- Assistant + + Examples + -------- + import asyncio + + from vapi import AsyncVapi + + client = AsyncVapi( + token="YOUR_TOKEN", + ) + + + async def main() -> None: + await client.assistants.update( + id="id", + ) + + + asyncio.run(main()) """ _response = await self._client_wrapper.httpx_client.request( f"assistant/{jsonable_encoder(id)}", diff --git a/src/vapi/blocks/client.py b/src/vapi/blocks/client.py index 0ae2390..7071f64 100644 --- a/src/vapi/blocks/client.py +++ b/src/vapi/blocks/client.py @@ -81,6 +81,15 @@ def list( ------- typing.List[BlocksListResponseItem] + + Examples + -------- + from vapi import Vapi + + client = Vapi( + token="YOUR_TOKEN", + ) + client.blocks.list() """ _response = self._client_wrapper.httpx_client.request( "block", @@ -127,6 +136,19 @@ def create( ------- BlocksCreateResponse + + Examples + -------- + from vapi import CreateConversationBlockDto, Vapi + + client = Vapi( + token="YOUR_TOKEN", + ) + client.blocks.create( + request=CreateConversationBlockDto( + instruction="instruction", + ), + ) """ _response = self._client_wrapper.httpx_client.request( "block", @@ -164,6 +186,17 @@ def get(self, id: str, *, request_options: typing.Optional[RequestOptions] = Non ------- BlocksGetResponse + + Examples + -------- + from vapi import Vapi + + client = Vapi( + token="YOUR_TOKEN", + ) + client.blocks.get( + id="id", + ) """ _response = self._client_wrapper.httpx_client.request( f"block/{jsonable_encoder(id)}", @@ -197,6 +230,17 @@ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = ------- BlocksDeleteResponse + + Examples + -------- + from vapi import Vapi + + client = Vapi( + token="YOUR_TOKEN", + ) + client.blocks.delete( + id="id", + ) """ _response = self._client_wrapper.httpx_client.request( f"block/{jsonable_encoder(id)}", @@ -298,6 +342,17 @@ def update( ------- BlocksUpdateResponse + + Examples + -------- + from vapi import Vapi + + client = Vapi( + token="YOUR_TOKEN", + ) + client.blocks.update( + id="id", + ) """ _response = self._client_wrapper.httpx_client.request( f"block/{jsonable_encoder(id)}", @@ -395,6 +450,23 @@ async def list( ------- typing.List[BlocksListResponseItem] + + Examples + -------- + import asyncio + + from vapi import AsyncVapi + + client = AsyncVapi( + token="YOUR_TOKEN", + ) + + + async def main() -> None: + await client.blocks.list() + + + asyncio.run(main()) """ _response = await self._client_wrapper.httpx_client.request( "block", @@ -441,6 +513,27 @@ async def create( ------- BlocksCreateResponse + + Examples + -------- + import asyncio + + from vapi import AsyncVapi, CreateConversationBlockDto + + client = AsyncVapi( + token="YOUR_TOKEN", + ) + + + async def main() -> None: + await client.blocks.create( + request=CreateConversationBlockDto( + instruction="instruction", + ), + ) + + + asyncio.run(main()) """ _response = await self._client_wrapper.httpx_client.request( "block", @@ -478,6 +571,25 @@ async def get(self, id: str, *, request_options: typing.Optional[RequestOptions] ------- BlocksGetResponse + + Examples + -------- + import asyncio + + from vapi import AsyncVapi + + client = AsyncVapi( + token="YOUR_TOKEN", + ) + + + async def main() -> None: + await client.blocks.get( + id="id", + ) + + + asyncio.run(main()) """ _response = await self._client_wrapper.httpx_client.request( f"block/{jsonable_encoder(id)}", @@ -511,6 +623,25 @@ async def delete(self, id: str, *, request_options: typing.Optional[RequestOptio ------- BlocksDeleteResponse + + Examples + -------- + import asyncio + + from vapi import AsyncVapi + + client = AsyncVapi( + token="YOUR_TOKEN", + ) + + + async def main() -> None: + await client.blocks.delete( + id="id", + ) + + + asyncio.run(main()) """ _response = await self._client_wrapper.httpx_client.request( f"block/{jsonable_encoder(id)}", @@ -612,6 +743,25 @@ async def update( ------- BlocksUpdateResponse + + Examples + -------- + import asyncio + + from vapi import AsyncVapi + + client = AsyncVapi( + token="YOUR_TOKEN", + ) + + + async def main() -> None: + await client.blocks.update( + id="id", + ) + + + asyncio.run(main()) """ _response = await self._client_wrapper.httpx_client.request( f"block/{jsonable_encoder(id)}", diff --git a/src/vapi/calls/client.py b/src/vapi/calls/client.py index 371286d..5328d82 100644 --- a/src/vapi/calls/client.py +++ b/src/vapi/calls/client.py @@ -81,6 +81,15 @@ def list( ------- typing.List[Call] + + Examples + -------- + from vapi import Vapi + + client = Vapi( + token="YOUR_TOKEN", + ) + client.calls.list() """ _response = self._client_wrapper.httpx_client.request( "call", @@ -176,6 +185,15 @@ def create( ------- Call + + Examples + -------- + from vapi import Vapi + + client = Vapi( + token="YOUR_TOKEN", + ) + client.calls.create() """ _response = self._client_wrapper.httpx_client.request( "call", @@ -232,6 +250,17 @@ def get(self, id: str, *, request_options: typing.Optional[RequestOptions] = Non ------- Call + + Examples + -------- + from vapi import Vapi + + client = Vapi( + token="YOUR_TOKEN", + ) + client.calls.get( + id="id", + ) """ _response = self._client_wrapper.httpx_client.request( f"call/{jsonable_encoder(id)}", @@ -265,6 +294,17 @@ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = ------- Call + + Examples + -------- + from vapi import Vapi + + client = Vapi( + token="YOUR_TOKEN", + ) + client.calls.delete( + id="id", + ) """ _response = self._client_wrapper.httpx_client.request( f"call/{jsonable_encoder(id)}", @@ -303,6 +343,17 @@ def update( ------- Call + + Examples + -------- + from vapi import Vapi + + client = Vapi( + token="YOUR_TOKEN", + ) + client.calls.update( + id="id", + ) """ _response = self._client_wrapper.httpx_client.request( f"call/{jsonable_encoder(id)}", @@ -387,6 +438,23 @@ async def list( ------- typing.List[Call] + + Examples + -------- + import asyncio + + from vapi import AsyncVapi + + client = AsyncVapi( + token="YOUR_TOKEN", + ) + + + async def main() -> None: + await client.calls.list() + + + asyncio.run(main()) """ _response = await self._client_wrapper.httpx_client.request( "call", @@ -482,6 +550,23 @@ async def create( ------- Call + + Examples + -------- + import asyncio + + from vapi import AsyncVapi + + client = AsyncVapi( + token="YOUR_TOKEN", + ) + + + async def main() -> None: + await client.calls.create() + + + asyncio.run(main()) """ _response = await self._client_wrapper.httpx_client.request( "call", @@ -538,6 +623,25 @@ async def get(self, id: str, *, request_options: typing.Optional[RequestOptions] ------- Call + + Examples + -------- + import asyncio + + from vapi import AsyncVapi + + client = AsyncVapi( + token="YOUR_TOKEN", + ) + + + async def main() -> None: + await client.calls.get( + id="id", + ) + + + asyncio.run(main()) """ _response = await self._client_wrapper.httpx_client.request( f"call/{jsonable_encoder(id)}", @@ -571,6 +675,25 @@ async def delete(self, id: str, *, request_options: typing.Optional[RequestOptio ------- Call + + Examples + -------- + import asyncio + + from vapi import AsyncVapi + + client = AsyncVapi( + token="YOUR_TOKEN", + ) + + + async def main() -> None: + await client.calls.delete( + id="id", + ) + + + asyncio.run(main()) """ _response = await self._client_wrapper.httpx_client.request( f"call/{jsonable_encoder(id)}", @@ -609,6 +732,25 @@ async def update( ------- Call + + Examples + -------- + import asyncio + + from vapi import AsyncVapi + + client = AsyncVapi( + token="YOUR_TOKEN", + ) + + + async def main() -> None: + await client.calls.update( + id="id", + ) + + + asyncio.run(main()) """ _response = await self._client_wrapper.httpx_client.request( f"call/{jsonable_encoder(id)}", diff --git a/src/vapi/core/client_wrapper.py b/src/vapi/core/client_wrapper.py index 5eca670..2590054 100644 --- a/src/vapi/core/client_wrapper.py +++ b/src/vapi/core/client_wrapper.py @@ -22,7 +22,7 @@ def get_headers(self) -> typing.Dict[str, str]: headers: typing.Dict[str, str] = { "X-Fern-Language": "Python", "X-Fern-SDK-Name": "Vapi", - "X-Fern-SDK-Version": "0.0.0-alpha3", + "X-Fern-SDK-Version": "0.0.0-alpha4", } headers["Authorization"] = f"Bearer {self._get_token()}" return headers diff --git a/src/vapi/files/client.py b/src/vapi/files/client.py index c03032f..12af218 100644 --- a/src/vapi/files/client.py +++ b/src/vapi/files/client.py @@ -31,6 +31,15 @@ def list(self, *, request_options: typing.Optional[RequestOptions] = None) -> ty ------- typing.List[File] + + Examples + -------- + from vapi import Vapi + + client = Vapi( + token="YOUR_TOKEN", + ) + client.files.list() """ _response = self._client_wrapper.httpx_client.request( "file", @@ -65,6 +74,15 @@ def create(self, *, file: core.File, request_options: typing.Optional[RequestOpt ------- File File uploaded successfully + + Examples + -------- + from vapi import Vapi + + client = Vapi( + token="YOUR_TOKEN", + ) + client.files.create() """ _response = self._client_wrapper.httpx_client.request( "file", @@ -113,6 +131,17 @@ def get(self, id: str, *, request_options: typing.Optional[RequestOptions] = Non ------- File + + Examples + -------- + from vapi import Vapi + + client = Vapi( + token="YOUR_TOKEN", + ) + client.files.get( + id="id", + ) """ _response = self._client_wrapper.httpx_client.request( f"file/{jsonable_encoder(id)}", @@ -146,6 +175,17 @@ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = ------- File + + Examples + -------- + from vapi import Vapi + + client = Vapi( + token="YOUR_TOKEN", + ) + client.files.delete( + id="id", + ) """ _response = self._client_wrapper.httpx_client.request( f"file/{jsonable_encoder(id)}", @@ -184,6 +224,17 @@ def update( ------- File + + Examples + -------- + from vapi import Vapi + + client = Vapi( + token="YOUR_TOKEN", + ) + client.files.update( + id="id", + ) """ _response = self._client_wrapper.httpx_client.request( f"file/{jsonable_encoder(id)}", @@ -224,6 +275,23 @@ async def list(self, *, request_options: typing.Optional[RequestOptions] = None) ------- typing.List[File] + + Examples + -------- + import asyncio + + from vapi import AsyncVapi + + client = AsyncVapi( + token="YOUR_TOKEN", + ) + + + async def main() -> None: + await client.files.list() + + + asyncio.run(main()) """ _response = await self._client_wrapper.httpx_client.request( "file", @@ -258,6 +326,23 @@ async def create(self, *, file: core.File, request_options: typing.Optional[Requ ------- File File uploaded successfully + + Examples + -------- + import asyncio + + from vapi import AsyncVapi + + client = AsyncVapi( + token="YOUR_TOKEN", + ) + + + async def main() -> None: + await client.files.create() + + + asyncio.run(main()) """ _response = await self._client_wrapper.httpx_client.request( "file", @@ -306,6 +391,25 @@ async def get(self, id: str, *, request_options: typing.Optional[RequestOptions] ------- File + + Examples + -------- + import asyncio + + from vapi import AsyncVapi + + client = AsyncVapi( + token="YOUR_TOKEN", + ) + + + async def main() -> None: + await client.files.get( + id="id", + ) + + + asyncio.run(main()) """ _response = await self._client_wrapper.httpx_client.request( f"file/{jsonable_encoder(id)}", @@ -339,6 +443,25 @@ async def delete(self, id: str, *, request_options: typing.Optional[RequestOptio ------- File + + Examples + -------- + import asyncio + + from vapi import AsyncVapi + + client = AsyncVapi( + token="YOUR_TOKEN", + ) + + + async def main() -> None: + await client.files.delete( + id="id", + ) + + + asyncio.run(main()) """ _response = await self._client_wrapper.httpx_client.request( f"file/{jsonable_encoder(id)}", @@ -377,6 +500,25 @@ async def update( ------- File + + Examples + -------- + import asyncio + + from vapi import AsyncVapi + + client = AsyncVapi( + token="YOUR_TOKEN", + ) + + + async def main() -> None: + await client.files.update( + id="id", + ) + + + asyncio.run(main()) """ _response = await self._client_wrapper.httpx_client.request( f"file/{jsonable_encoder(id)}", diff --git a/src/vapi/logs/client.py b/src/vapi/logs/client.py index a1f38ed..2af9a92 100644 --- a/src/vapi/logs/client.py +++ b/src/vapi/logs/client.py @@ -108,6 +108,20 @@ def get( ------- SyncPager[Log] + + Examples + -------- + from vapi import Vapi + + client = Vapi( + token="YOUR_TOKEN", + ) + response = client.logs.get() + for item in response: + yield item + # alternatively, you can paginate page-by-page + for page in response.iter_pages(): + yield page """ page = page if page is not None else 1 _response = self._client_wrapper.httpx_client.request( @@ -265,6 +279,28 @@ async def get( ------- AsyncPager[Log] + + Examples + -------- + import asyncio + + from vapi import AsyncVapi + + client = AsyncVapi( + token="YOUR_TOKEN", + ) + + + async def main() -> None: + response = await client.logs.get() + async for item in response: + yield item + # alternatively, you can paginate page-by-page + async for page in response.iter_pages(): + yield page + + + asyncio.run(main()) """ page = page if page is not None else 1 _response = await self._client_wrapper.httpx_client.request( diff --git a/src/vapi/phone_numbers/client.py b/src/vapi/phone_numbers/client.py index 81ef76e..c1250c0 100644 --- a/src/vapi/phone_numbers/client.py +++ b/src/vapi/phone_numbers/client.py @@ -78,6 +78,15 @@ def list( ------- typing.List[PhoneNumbersListResponseItem] + + Examples + -------- + from vapi import Vapi + + client = Vapi( + token="YOUR_TOKEN", + ) + client.phone_numbers.list() """ _response = self._client_wrapper.httpx_client.request( "phone-number", @@ -124,6 +133,19 @@ def create( ------- PhoneNumbersCreateResponse + + Examples + -------- + from vapi import CreateByoPhoneNumberDto, Vapi + + client = Vapi( + token="YOUR_TOKEN", + ) + client.phone_numbers.create( + request=CreateByoPhoneNumberDto( + credential_id="credentialId", + ), + ) """ _response = self._client_wrapper.httpx_client.request( "phone-number", @@ -161,6 +183,17 @@ def get(self, id: str, *, request_options: typing.Optional[RequestOptions] = Non ------- PhoneNumbersGetResponse + + Examples + -------- + from vapi import Vapi + + client = Vapi( + token="YOUR_TOKEN", + ) + client.phone_numbers.get( + id="id", + ) """ _response = self._client_wrapper.httpx_client.request( f"phone-number/{jsonable_encoder(id)}", @@ -194,6 +227,17 @@ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = ------- PhoneNumbersDeleteResponse + + Examples + -------- + from vapi import Vapi + + client = Vapi( + token="YOUR_TOKEN", + ) + client.phone_numbers.delete( + id="id", + ) """ _response = self._client_wrapper.httpx_client.request( f"phone-number/{jsonable_encoder(id)}", @@ -271,6 +315,17 @@ def update( ------- PhoneNumbersUpdateResponse + + Examples + -------- + from vapi import Vapi + + client = Vapi( + token="YOUR_TOKEN", + ) + client.phone_numbers.update( + id="id", + ) """ _response = self._client_wrapper.httpx_client.request( f"phone-number/{jsonable_encoder(id)}", @@ -358,6 +413,23 @@ async def list( ------- typing.List[PhoneNumbersListResponseItem] + + Examples + -------- + import asyncio + + from vapi import AsyncVapi + + client = AsyncVapi( + token="YOUR_TOKEN", + ) + + + async def main() -> None: + await client.phone_numbers.list() + + + asyncio.run(main()) """ _response = await self._client_wrapper.httpx_client.request( "phone-number", @@ -404,6 +476,27 @@ async def create( ------- PhoneNumbersCreateResponse + + Examples + -------- + import asyncio + + from vapi import AsyncVapi, CreateByoPhoneNumberDto + + client = AsyncVapi( + token="YOUR_TOKEN", + ) + + + async def main() -> None: + await client.phone_numbers.create( + request=CreateByoPhoneNumberDto( + credential_id="credentialId", + ), + ) + + + asyncio.run(main()) """ _response = await self._client_wrapper.httpx_client.request( "phone-number", @@ -441,6 +534,25 @@ async def get(self, id: str, *, request_options: typing.Optional[RequestOptions] ------- PhoneNumbersGetResponse + + Examples + -------- + import asyncio + + from vapi import AsyncVapi + + client = AsyncVapi( + token="YOUR_TOKEN", + ) + + + async def main() -> None: + await client.phone_numbers.get( + id="id", + ) + + + asyncio.run(main()) """ _response = await self._client_wrapper.httpx_client.request( f"phone-number/{jsonable_encoder(id)}", @@ -476,6 +588,25 @@ async def delete( ------- PhoneNumbersDeleteResponse + + Examples + -------- + import asyncio + + from vapi import AsyncVapi + + client = AsyncVapi( + token="YOUR_TOKEN", + ) + + + async def main() -> None: + await client.phone_numbers.delete( + id="id", + ) + + + asyncio.run(main()) """ _response = await self._client_wrapper.httpx_client.request( f"phone-number/{jsonable_encoder(id)}", @@ -553,6 +684,25 @@ async def update( ------- PhoneNumbersUpdateResponse + + Examples + -------- + import asyncio + + from vapi import AsyncVapi + + client = AsyncVapi( + token="YOUR_TOKEN", + ) + + + async def main() -> None: + await client.phone_numbers.update( + id="id", + ) + + + asyncio.run(main()) """ _response = await self._client_wrapper.httpx_client.request( f"phone-number/{jsonable_encoder(id)}", diff --git a/src/vapi/squads/client.py b/src/vapi/squads/client.py index aead2db..6908413 100644 --- a/src/vapi/squads/client.py +++ b/src/vapi/squads/client.py @@ -74,6 +74,15 @@ def list( ------- typing.List[Squad] + + Examples + -------- + from vapi import Vapi + + client = Vapi( + token="YOUR_TOKEN", + ) + client.squads.list() """ _response = self._client_wrapper.httpx_client.request( "squad", @@ -136,6 +145,17 @@ def create( ------- Squad + + Examples + -------- + from vapi import SquadMemberDto, Vapi + + client = Vapi( + token="YOUR_TOKEN", + ) + client.squads.create( + members=[SquadMemberDto()], + ) """ _response = self._client_wrapper.httpx_client.request( "squad", @@ -179,6 +199,17 @@ def get(self, id: str, *, request_options: typing.Optional[RequestOptions] = Non ------- Squad + + Examples + -------- + from vapi import Vapi + + client = Vapi( + token="YOUR_TOKEN", + ) + client.squads.get( + id="id", + ) """ _response = self._client_wrapper.httpx_client.request( f"squad/{jsonable_encoder(id)}", @@ -212,6 +243,17 @@ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = ------- Squad + + Examples + -------- + from vapi import Vapi + + client = Vapi( + token="YOUR_TOKEN", + ) + client.squads.delete( + id="id", + ) """ _response = self._client_wrapper.httpx_client.request( f"squad/{jsonable_encoder(id)}", @@ -266,6 +308,18 @@ def update( ------- Squad + + Examples + -------- + from vapi import SquadMemberDto, Vapi + + client = Vapi( + token="YOUR_TOKEN", + ) + client.squads.update( + id="id", + members=[SquadMemberDto()], + ) """ _response = self._client_wrapper.httpx_client.request( f"squad/{jsonable_encoder(id)}", @@ -352,6 +406,23 @@ async def list( ------- typing.List[Squad] + + Examples + -------- + import asyncio + + from vapi import AsyncVapi + + client = AsyncVapi( + token="YOUR_TOKEN", + ) + + + async def main() -> None: + await client.squads.list() + + + asyncio.run(main()) """ _response = await self._client_wrapper.httpx_client.request( "squad", @@ -414,6 +485,25 @@ async def create( ------- Squad + + Examples + -------- + import asyncio + + from vapi import AsyncVapi, SquadMemberDto + + client = AsyncVapi( + token="YOUR_TOKEN", + ) + + + async def main() -> None: + await client.squads.create( + members=[SquadMemberDto()], + ) + + + asyncio.run(main()) """ _response = await self._client_wrapper.httpx_client.request( "squad", @@ -457,6 +547,25 @@ async def get(self, id: str, *, request_options: typing.Optional[RequestOptions] ------- Squad + + Examples + -------- + import asyncio + + from vapi import AsyncVapi + + client = AsyncVapi( + token="YOUR_TOKEN", + ) + + + async def main() -> None: + await client.squads.get( + id="id", + ) + + + asyncio.run(main()) """ _response = await self._client_wrapper.httpx_client.request( f"squad/{jsonable_encoder(id)}", @@ -490,6 +599,25 @@ async def delete(self, id: str, *, request_options: typing.Optional[RequestOptio ------- Squad + + Examples + -------- + import asyncio + + from vapi import AsyncVapi + + client = AsyncVapi( + token="YOUR_TOKEN", + ) + + + async def main() -> None: + await client.squads.delete( + id="id", + ) + + + asyncio.run(main()) """ _response = await self._client_wrapper.httpx_client.request( f"squad/{jsonable_encoder(id)}", @@ -544,6 +672,26 @@ async def update( ------- Squad + + Examples + -------- + import asyncio + + from vapi import AsyncVapi, SquadMemberDto + + client = AsyncVapi( + token="YOUR_TOKEN", + ) + + + async def main() -> None: + await client.squads.update( + id="id", + members=[SquadMemberDto()], + ) + + + asyncio.run(main()) """ _response = await self._client_wrapper.httpx_client.request( f"squad/{jsonable_encoder(id)}", diff --git a/src/vapi/tools/client.py b/src/vapi/tools/client.py index 9a099d4..e83f794 100644 --- a/src/vapi/tools/client.py +++ b/src/vapi/tools/client.py @@ -80,6 +80,15 @@ def list( ------- typing.List[ToolsListResponseItem] + + Examples + -------- + from vapi import Vapi + + client = Vapi( + token="YOUR_TOKEN", + ) + client.tools.list() """ _response = self._client_wrapper.httpx_client.request( "tool", @@ -126,6 +135,17 @@ def create( ------- ToolsCreateResponse + + Examples + -------- + from vapi import CreateDtmfToolDto, Vapi + + client = Vapi( + token="YOUR_TOKEN", + ) + client.tools.create( + request=CreateDtmfToolDto(), + ) """ _response = self._client_wrapper.httpx_client.request( "tool", @@ -163,6 +183,17 @@ def get(self, id: str, *, request_options: typing.Optional[RequestOptions] = Non ------- ToolsGetResponse + + Examples + -------- + from vapi import Vapi + + client = Vapi( + token="YOUR_TOKEN", + ) + client.tools.get( + id="id", + ) """ _response = self._client_wrapper.httpx_client.request( f"tool/{jsonable_encoder(id)}", @@ -196,6 +227,17 @@ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = ------- ToolsDeleteResponse + + Examples + -------- + from vapi import Vapi + + client = Vapi( + token="YOUR_TOKEN", + ) + client.tools.delete( + id="id", + ) """ _response = self._client_wrapper.httpx_client.request( f"tool/{jsonable_encoder(id)}", @@ -266,6 +308,17 @@ def update( ------- ToolsUpdateResponse + + Examples + -------- + from vapi import Vapi + + client = Vapi( + token="YOUR_TOKEN", + ) + client.tools.update( + id="id", + ) """ _response = self._client_wrapper.httpx_client.request( f"tool/{jsonable_encoder(id)}", @@ -353,6 +406,23 @@ async def list( ------- typing.List[ToolsListResponseItem] + + Examples + -------- + import asyncio + + from vapi import AsyncVapi + + client = AsyncVapi( + token="YOUR_TOKEN", + ) + + + async def main() -> None: + await client.tools.list() + + + asyncio.run(main()) """ _response = await self._client_wrapper.httpx_client.request( "tool", @@ -399,6 +469,25 @@ async def create( ------- ToolsCreateResponse + + Examples + -------- + import asyncio + + from vapi import AsyncVapi, CreateDtmfToolDto + + client = AsyncVapi( + token="YOUR_TOKEN", + ) + + + async def main() -> None: + await client.tools.create( + request=CreateDtmfToolDto(), + ) + + + asyncio.run(main()) """ _response = await self._client_wrapper.httpx_client.request( "tool", @@ -436,6 +525,25 @@ async def get(self, id: str, *, request_options: typing.Optional[RequestOptions] ------- ToolsGetResponse + + Examples + -------- + import asyncio + + from vapi import AsyncVapi + + client = AsyncVapi( + token="YOUR_TOKEN", + ) + + + async def main() -> None: + await client.tools.get( + id="id", + ) + + + asyncio.run(main()) """ _response = await self._client_wrapper.httpx_client.request( f"tool/{jsonable_encoder(id)}", @@ -469,6 +577,25 @@ async def delete(self, id: str, *, request_options: typing.Optional[RequestOptio ------- ToolsDeleteResponse + + Examples + -------- + import asyncio + + from vapi import AsyncVapi + + client = AsyncVapi( + token="YOUR_TOKEN", + ) + + + async def main() -> None: + await client.tools.delete( + id="id", + ) + + + asyncio.run(main()) """ _response = await self._client_wrapper.httpx_client.request( f"tool/{jsonable_encoder(id)}", @@ -539,6 +666,25 @@ async def update( ------- ToolsUpdateResponse + + Examples + -------- + import asyncio + + from vapi import AsyncVapi + + client = AsyncVapi( + token="YOUR_TOKEN", + ) + + + async def main() -> None: + await client.tools.update( + id="id", + ) + + + asyncio.run(main()) """ _response = await self._client_wrapper.httpx_client.request( f"tool/{jsonable_encoder(id)}", diff --git a/src/vapi/types/__init__.py b/src/vapi/types/__init__.py index b9561cc..3f3894a 100644 --- a/src/vapi/types/__init__.py +++ b/src/vapi/types/__init__.py @@ -44,8 +44,7 @@ from .azure_open_ai_credential_models_item import AzureOpenAiCredentialModelsItem from .azure_open_ai_credential_region import AzureOpenAiCredentialRegion from .azure_voice import AzureVoice -from .azure_voice_id import AzureVoiceId -from .azure_voice_id_enum import AzureVoiceIdEnum +from .azure_voice_voice_id import AzureVoiceVoiceId from .block_complete_message import BlockCompleteMessage from .block_complete_message_conditions_item import BlockCompleteMessageConditionsItem from .block_start_message import BlockStartMessage @@ -197,15 +196,13 @@ from .deepgram_transcriber_language import DeepgramTranscriberLanguage from .deepgram_transcriber_model import DeepgramTranscriberModel from .deepgram_voice import DeepgramVoice -from .deepgram_voice_id import DeepgramVoiceId -from .deepgram_voice_id_enum import DeepgramVoiceIdEnum +from .deepgram_voice_voice_id import DeepgramVoiceVoiceId from .dtmf_tool import DtmfTool from .dtmf_tool_messages_item import DtmfToolMessagesItem from .eleven_labs_credential import ElevenLabsCredential from .eleven_labs_voice import ElevenLabsVoice -from .eleven_labs_voice_id import ElevenLabsVoiceId -from .eleven_labs_voice_id_enum import ElevenLabsVoiceIdEnum from .eleven_labs_voice_model import ElevenLabsVoiceModel +from .eleven_labs_voice_voice_id import ElevenLabsVoiceVoiceId from .end_call_tool import EndCallTool from .end_call_tool_messages_item import EndCallToolMessagesItem from .error import Error @@ -250,8 +247,7 @@ from .knowledge_base import KnowledgeBase from .lmnt_credential import LmntCredential from .lmnt_voice import LmntVoice -from .lmnt_voice_id import LmntVoiceId -from .lmnt_voice_id_enum import LmntVoiceIdEnum +from .lmnt_voice_voice_id import LmntVoiceVoiceId from .log import Log from .log_request_http_method import LogRequestHttpMethod from .log_resource import LogResource @@ -271,8 +267,7 @@ from .monitor import Monitor from .monitor_plan import MonitorPlan from .neets_voice import NeetsVoice -from .neets_voice_id import NeetsVoiceId -from .neets_voice_id_enum import NeetsVoiceIdEnum +from .neets_voice_voice_id import NeetsVoiceVoiceId from .open_ai_credential import OpenAiCredential from .open_ai_function import OpenAiFunction from .open_ai_function_parameters import OpenAiFunctionParameters @@ -283,7 +278,7 @@ from .open_ai_model_model import OpenAiModelModel from .open_ai_model_tools_item import OpenAiModelToolsItem from .open_ai_voice import OpenAiVoice -from .open_ai_voice_id import OpenAiVoiceId +from .open_ai_voice_voice_id import OpenAiVoiceVoiceId from .open_router_credential import OpenRouterCredential from .open_router_model import OpenRouterModel from .open_router_model_tools_item import OpenRouterModelToolsItem @@ -305,9 +300,8 @@ from .regex_replacement import RegexReplacement from .rime_ai_credential import RimeAiCredential from .rime_ai_voice import RimeAiVoice -from .rime_ai_voice_id import RimeAiVoiceId -from .rime_ai_voice_id_enum import RimeAiVoiceIdEnum from .rime_ai_voice_model import RimeAiVoiceModel +from .rime_ai_voice_voice_id import RimeAiVoiceVoiceId from .rule_based_condition import RuleBasedCondition from .rule_based_condition_operator import RuleBasedConditionOperator from .runpod_credential import RunpodCredential @@ -541,8 +535,7 @@ "AzureOpenAiCredentialModelsItem", "AzureOpenAiCredentialRegion", "AzureVoice", - "AzureVoiceId", - "AzureVoiceIdEnum", + "AzureVoiceVoiceId", "BlockCompleteMessage", "BlockCompleteMessageConditionsItem", "BlockStartMessage", @@ -694,15 +687,13 @@ "DeepgramTranscriberLanguage", "DeepgramTranscriberModel", "DeepgramVoice", - "DeepgramVoiceId", - "DeepgramVoiceIdEnum", + "DeepgramVoiceVoiceId", "DtmfTool", "DtmfToolMessagesItem", "ElevenLabsCredential", "ElevenLabsVoice", - "ElevenLabsVoiceId", - "ElevenLabsVoiceIdEnum", "ElevenLabsVoiceModel", + "ElevenLabsVoiceVoiceId", "EndCallTool", "EndCallToolMessagesItem", "Error", @@ -747,8 +738,7 @@ "KnowledgeBase", "LmntCredential", "LmntVoice", - "LmntVoiceId", - "LmntVoiceIdEnum", + "LmntVoiceVoiceId", "Log", "LogRequestHttpMethod", "LogResource", @@ -768,8 +758,7 @@ "Monitor", "MonitorPlan", "NeetsVoice", - "NeetsVoiceId", - "NeetsVoiceIdEnum", + "NeetsVoiceVoiceId", "OpenAiCredential", "OpenAiFunction", "OpenAiFunctionParameters", @@ -780,7 +769,7 @@ "OpenAiModelModel", "OpenAiModelToolsItem", "OpenAiVoice", - "OpenAiVoiceId", + "OpenAiVoiceVoiceId", "OpenRouterCredential", "OpenRouterModel", "OpenRouterModelToolsItem", @@ -802,9 +791,8 @@ "RegexReplacement", "RimeAiCredential", "RimeAiVoice", - "RimeAiVoiceId", - "RimeAiVoiceIdEnum", "RimeAiVoiceModel", + "RimeAiVoiceVoiceId", "RuleBasedCondition", "RuleBasedConditionOperator", "RunpodCredential", diff --git a/src/vapi/types/azure_voice.py b/src/vapi/types/azure_voice.py index 56d30c4..bb65fd1 100644 --- a/src/vapi/types/azure_voice.py +++ b/src/vapi/types/azure_voice.py @@ -5,7 +5,7 @@ import typing from ..core.serialization import FieldMetadata import pydantic -from .azure_voice_id import AzureVoiceId +from .azure_voice_voice_id import AzureVoiceVoiceId from .chunk_plan import ChunkPlan from ..core.pydantic_utilities import IS_PYDANTIC_V2 @@ -25,7 +25,7 @@ class AzureVoice(UniversalBaseModel): This is the voice provider that will be used. """ - voice_id: typing_extensions.Annotated[AzureVoiceId, FieldMetadata(alias="voiceId")] = pydantic.Field() + voice_id: typing_extensions.Annotated[AzureVoiceVoiceId, FieldMetadata(alias="voiceId")] = pydantic.Field() """ This is the provider-specific ID that will be used. """ diff --git a/src/vapi/types/azure_voice_id.py b/src/vapi/types/azure_voice_id.py deleted file mode 100644 index eeaabe6..0000000 --- a/src/vapi/types/azure_voice_id.py +++ /dev/null @@ -1,6 +0,0 @@ -# This file was auto-generated by Fern from our API Definition. - -import typing -from .azure_voice_id_enum import AzureVoiceIdEnum - -AzureVoiceId = typing.Union[AzureVoiceIdEnum, str] diff --git a/src/vapi/types/azure_voice_id_enum.py b/src/vapi/types/azure_voice_id_enum.py deleted file mode 100644 index 5a9d854..0000000 --- a/src/vapi/types/azure_voice_id_enum.py +++ /dev/null @@ -1,5 +0,0 @@ -# This file was auto-generated by Fern from our API Definition. - -import typing - -AzureVoiceIdEnum = typing.Union[typing.Literal["andrew", "brian", "emma"], typing.Any] diff --git a/src/vapi/types/azure_voice_voice_id.py b/src/vapi/types/azure_voice_voice_id.py new file mode 100644 index 0000000..f08f3bb --- /dev/null +++ b/src/vapi/types/azure_voice_voice_id.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +AzureVoiceVoiceId = typing.Union[typing.Literal["andrew"], typing.Literal["brian"], typing.Literal["emma"], str] diff --git a/src/vapi/types/deepgram_voice.py b/src/vapi/types/deepgram_voice.py index f3becc5..f6bd9a0 100644 --- a/src/vapi/types/deepgram_voice.py +++ b/src/vapi/types/deepgram_voice.py @@ -5,7 +5,7 @@ import typing from ..core.serialization import FieldMetadata import pydantic -from .deepgram_voice_id import DeepgramVoiceId +from .deepgram_voice_voice_id import DeepgramVoiceVoiceId from .chunk_plan import ChunkPlan from ..core.pydantic_utilities import IS_PYDANTIC_V2 @@ -25,7 +25,7 @@ class DeepgramVoice(UniversalBaseModel): This is the voice provider that will be used. """ - voice_id: typing_extensions.Annotated[DeepgramVoiceId, FieldMetadata(alias="voiceId")] = pydantic.Field() + voice_id: typing_extensions.Annotated[DeepgramVoiceVoiceId, FieldMetadata(alias="voiceId")] = pydantic.Field() """ This is the provider-specific ID that will be used. """ diff --git a/src/vapi/types/deepgram_voice_id.py b/src/vapi/types/deepgram_voice_id.py deleted file mode 100644 index fc28b6c..0000000 --- a/src/vapi/types/deepgram_voice_id.py +++ /dev/null @@ -1,6 +0,0 @@ -# This file was auto-generated by Fern from our API Definition. - -import typing -from .deepgram_voice_id_enum import DeepgramVoiceIdEnum - -DeepgramVoiceId = typing.Union[DeepgramVoiceIdEnum, str] diff --git a/src/vapi/types/deepgram_voice_id_enum.py b/src/vapi/types/deepgram_voice_id_enum.py deleted file mode 100644 index 06d6eb8..0000000 --- a/src/vapi/types/deepgram_voice_id_enum.py +++ /dev/null @@ -1,10 +0,0 @@ -# This file was auto-generated by Fern from our API Definition. - -import typing - -DeepgramVoiceIdEnum = typing.Union[ - typing.Literal[ - "asteria", "luna", "stella", "athena", "hera", "orion", "arcas", "perseus", "angus", "orpheus", "helios", "zeus" - ], - typing.Any, -] diff --git a/src/vapi/types/deepgram_voice_voice_id.py b/src/vapi/types/deepgram_voice_voice_id.py new file mode 100644 index 0000000..00d6970 --- /dev/null +++ b/src/vapi/types/deepgram_voice_voice_id.py @@ -0,0 +1,19 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +DeepgramVoiceVoiceId = typing.Union[ + typing.Literal["asteria"], + typing.Literal["luna"], + typing.Literal["stella"], + typing.Literal["athena"], + typing.Literal["hera"], + typing.Literal["orion"], + typing.Literal["arcas"], + typing.Literal["perseus"], + typing.Literal["angus"], + typing.Literal["orpheus"], + typing.Literal["helios"], + typing.Literal["zeus"], + str, +] diff --git a/src/vapi/types/eleven_labs_voice.py b/src/vapi/types/eleven_labs_voice.py index 6620031..2749bbe 100644 --- a/src/vapi/types/eleven_labs_voice.py +++ b/src/vapi/types/eleven_labs_voice.py @@ -5,7 +5,7 @@ import typing from ..core.serialization import FieldMetadata import pydantic -from .eleven_labs_voice_id import ElevenLabsVoiceId +from .eleven_labs_voice_voice_id import ElevenLabsVoiceVoiceId from .eleven_labs_voice_model import ElevenLabsVoiceModel from .chunk_plan import ChunkPlan from ..core.pydantic_utilities import IS_PYDANTIC_V2 @@ -26,7 +26,7 @@ class ElevenLabsVoice(UniversalBaseModel): This is the voice provider that will be used. """ - voice_id: typing_extensions.Annotated[ElevenLabsVoiceId, FieldMetadata(alias="voiceId")] = pydantic.Field() + voice_id: typing_extensions.Annotated[ElevenLabsVoiceVoiceId, FieldMetadata(alias="voiceId")] = pydantic.Field() """ This is the provider-specific ID that will be used. Ensure the Voice is present in your 11Labs Voice Library. """ diff --git a/src/vapi/types/eleven_labs_voice_id.py b/src/vapi/types/eleven_labs_voice_id.py deleted file mode 100644 index 633af95..0000000 --- a/src/vapi/types/eleven_labs_voice_id.py +++ /dev/null @@ -1,6 +0,0 @@ -# This file was auto-generated by Fern from our API Definition. - -import typing -from .eleven_labs_voice_id_enum import ElevenLabsVoiceIdEnum - -ElevenLabsVoiceId = typing.Union[ElevenLabsVoiceIdEnum, str] diff --git a/src/vapi/types/eleven_labs_voice_id_enum.py b/src/vapi/types/eleven_labs_voice_id_enum.py deleted file mode 100644 index 1f9894b..0000000 --- a/src/vapi/types/eleven_labs_voice_id_enum.py +++ /dev/null @@ -1,24 +0,0 @@ -# This file was auto-generated by Fern from our API Definition. - -import typing - -ElevenLabsVoiceIdEnum = typing.Union[ - typing.Literal[ - "burt", - "marissa", - "andrea", - "sarah", - "phillip", - "steve", - "joseph", - "myra", - "paula", - "ryan", - "drew", - "paul", - "mrb", - "matilda", - "mark", - ], - typing.Any, -] diff --git a/src/vapi/types/eleven_labs_voice_voice_id.py b/src/vapi/types/eleven_labs_voice_voice_id.py new file mode 100644 index 0000000..b1f8f55 --- /dev/null +++ b/src/vapi/types/eleven_labs_voice_voice_id.py @@ -0,0 +1,22 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +ElevenLabsVoiceVoiceId = typing.Union[ + typing.Literal["burt"], + typing.Literal["marissa"], + typing.Literal["andrea"], + typing.Literal["sarah"], + typing.Literal["phillip"], + typing.Literal["steve"], + typing.Literal["joseph"], + typing.Literal["myra"], + typing.Literal["paula"], + typing.Literal["ryan"], + typing.Literal["drew"], + typing.Literal["paul"], + typing.Literal["mrb"], + typing.Literal["matilda"], + typing.Literal["mark"], + str, +] diff --git a/src/vapi/types/lmnt_voice.py b/src/vapi/types/lmnt_voice.py index 18d21ab..65fd95c 100644 --- a/src/vapi/types/lmnt_voice.py +++ b/src/vapi/types/lmnt_voice.py @@ -5,7 +5,7 @@ import typing from ..core.serialization import FieldMetadata import pydantic -from .lmnt_voice_id import LmntVoiceId +from .lmnt_voice_voice_id import LmntVoiceVoiceId from .chunk_plan import ChunkPlan from ..core.pydantic_utilities import IS_PYDANTIC_V2 @@ -25,7 +25,7 @@ class LmntVoice(UniversalBaseModel): This is the voice provider that will be used. """ - voice_id: typing_extensions.Annotated[LmntVoiceId, FieldMetadata(alias="voiceId")] = pydantic.Field() + voice_id: typing_extensions.Annotated[LmntVoiceVoiceId, FieldMetadata(alias="voiceId")] = pydantic.Field() """ This is the provider-specific ID that will be used. """ diff --git a/src/vapi/types/lmnt_voice_id.py b/src/vapi/types/lmnt_voice_id.py deleted file mode 100644 index c1d5c18..0000000 --- a/src/vapi/types/lmnt_voice_id.py +++ /dev/null @@ -1,6 +0,0 @@ -# This file was auto-generated by Fern from our API Definition. - -import typing -from .lmnt_voice_id_enum import LmntVoiceIdEnum - -LmntVoiceId = typing.Union[LmntVoiceIdEnum, str] diff --git a/src/vapi/types/lmnt_voice_id_enum.py b/src/vapi/types/lmnt_voice_id_enum.py deleted file mode 100644 index 482a8e3..0000000 --- a/src/vapi/types/lmnt_voice_id_enum.py +++ /dev/null @@ -1,5 +0,0 @@ -# This file was auto-generated by Fern from our API Definition. - -import typing - -LmntVoiceIdEnum = typing.Union[typing.Literal["lily", "daniel"], typing.Any] diff --git a/src/vapi/types/lmnt_voice_voice_id.py b/src/vapi/types/lmnt_voice_voice_id.py new file mode 100644 index 0000000..f7c5969 --- /dev/null +++ b/src/vapi/types/lmnt_voice_voice_id.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +LmntVoiceVoiceId = typing.Union[typing.Literal["lily"], typing.Literal["daniel"], str] diff --git a/src/vapi/types/neets_voice.py b/src/vapi/types/neets_voice.py index 6c77093..82285d9 100644 --- a/src/vapi/types/neets_voice.py +++ b/src/vapi/types/neets_voice.py @@ -5,7 +5,7 @@ import typing from ..core.serialization import FieldMetadata import pydantic -from .neets_voice_id import NeetsVoiceId +from .neets_voice_voice_id import NeetsVoiceVoiceId from .chunk_plan import ChunkPlan from ..core.pydantic_utilities import IS_PYDANTIC_V2 @@ -25,7 +25,7 @@ class NeetsVoice(UniversalBaseModel): This is the voice provider that will be used. """ - voice_id: typing_extensions.Annotated[NeetsVoiceId, FieldMetadata(alias="voiceId")] = pydantic.Field() + voice_id: typing_extensions.Annotated[NeetsVoiceVoiceId, FieldMetadata(alias="voiceId")] = pydantic.Field() """ This is the provider-specific ID that will be used. """ diff --git a/src/vapi/types/neets_voice_id.py b/src/vapi/types/neets_voice_id.py deleted file mode 100644 index 4389d43..0000000 --- a/src/vapi/types/neets_voice_id.py +++ /dev/null @@ -1,6 +0,0 @@ -# This file was auto-generated by Fern from our API Definition. - -import typing -from .neets_voice_id_enum import NeetsVoiceIdEnum - -NeetsVoiceId = typing.Union[NeetsVoiceIdEnum, str] diff --git a/src/vapi/types/neets_voice_id_enum.py b/src/vapi/types/neets_voice_id_enum.py deleted file mode 100644 index d000456..0000000 --- a/src/vapi/types/neets_voice_id_enum.py +++ /dev/null @@ -1,5 +0,0 @@ -# This file was auto-generated by Fern from our API Definition. - -import typing - -NeetsVoiceIdEnum = typing.Union[typing.Literal["vits"], typing.Any] diff --git a/src/vapi/types/neets_voice_voice_id.py b/src/vapi/types/neets_voice_voice_id.py new file mode 100644 index 0000000..f9b908f --- /dev/null +++ b/src/vapi/types/neets_voice_voice_id.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +NeetsVoiceVoiceId = typing.Union[typing.Literal["vits"], typing.Literal["vits"], str] diff --git a/src/vapi/types/open_ai_voice.py b/src/vapi/types/open_ai_voice.py index 5866ae4..78bb7c9 100644 --- a/src/vapi/types/open_ai_voice.py +++ b/src/vapi/types/open_ai_voice.py @@ -5,7 +5,7 @@ import typing from ..core.serialization import FieldMetadata import pydantic -from .open_ai_voice_id import OpenAiVoiceId +from .open_ai_voice_voice_id import OpenAiVoiceVoiceId from .chunk_plan import ChunkPlan from ..core.pydantic_utilities import IS_PYDANTIC_V2 @@ -25,7 +25,7 @@ class OpenAiVoice(UniversalBaseModel): This is the voice provider that will be used. """ - voice_id: typing_extensions.Annotated[OpenAiVoiceId, FieldMetadata(alias="voiceId")] = pydantic.Field() + voice_id: typing_extensions.Annotated[OpenAiVoiceVoiceId, FieldMetadata(alias="voiceId")] = pydantic.Field() """ This is the provider-specific ID that will be used. """ diff --git a/src/vapi/types/open_ai_voice_id.py b/src/vapi/types/open_ai_voice_id.py deleted file mode 100644 index 595f327..0000000 --- a/src/vapi/types/open_ai_voice_id.py +++ /dev/null @@ -1,5 +0,0 @@ -# This file was auto-generated by Fern from our API Definition. - -import typing - -OpenAiVoiceId = typing.Union[typing.Literal["alloy", "echo", "fable", "onyx", "nova", "shimmer"], typing.Any] diff --git a/src/vapi/types/open_ai_voice_voice_id.py b/src/vapi/types/open_ai_voice_voice_id.py new file mode 100644 index 0000000..97b1b8c --- /dev/null +++ b/src/vapi/types/open_ai_voice_voice_id.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +OpenAiVoiceVoiceId = typing.Union[typing.Literal["alloy", "echo", "fable", "onyx", "nova", "shimmer"], typing.Any] diff --git a/src/vapi/types/play_ht_voice_voice_id.py b/src/vapi/types/play_ht_voice_voice_id.py index 6e11183..07162b5 100644 --- a/src/vapi/types/play_ht_voice_voice_id.py +++ b/src/vapi/types/play_ht_voice_voice_id.py @@ -1,6 +1,17 @@ # This file was auto-generated by Fern from our API Definition. -from __future__ import annotations import typing -PlayHtVoiceVoiceId = typing.Union["PlayHtVoiceVoiceId", str] +PlayHtVoiceVoiceId = typing.Union[ + typing.Literal["jennifer"], + typing.Literal["melissa"], + typing.Literal["will"], + typing.Literal["chris"], + typing.Literal["matt"], + typing.Literal["jack"], + typing.Literal["ruby"], + typing.Literal["davis"], + typing.Literal["donna"], + typing.Literal["michael"], + str, +] diff --git a/src/vapi/types/rime_ai_voice.py b/src/vapi/types/rime_ai_voice.py index 8c8289a..433baac 100644 --- a/src/vapi/types/rime_ai_voice.py +++ b/src/vapi/types/rime_ai_voice.py @@ -5,7 +5,7 @@ import typing from ..core.serialization import FieldMetadata import pydantic -from .rime_ai_voice_id import RimeAiVoiceId +from .rime_ai_voice_voice_id import RimeAiVoiceVoiceId from .rime_ai_voice_model import RimeAiVoiceModel from .chunk_plan import ChunkPlan from ..core.pydantic_utilities import IS_PYDANTIC_V2 @@ -26,7 +26,7 @@ class RimeAiVoice(UniversalBaseModel): This is the voice provider that will be used. """ - voice_id: typing_extensions.Annotated[RimeAiVoiceId, FieldMetadata(alias="voiceId")] = pydantic.Field() + voice_id: typing_extensions.Annotated[RimeAiVoiceVoiceId, FieldMetadata(alias="voiceId")] = pydantic.Field() """ This is the provider-specific ID that will be used. """ diff --git a/src/vapi/types/rime_ai_voice_id.py b/src/vapi/types/rime_ai_voice_id.py deleted file mode 100644 index c22bbc0..0000000 --- a/src/vapi/types/rime_ai_voice_id.py +++ /dev/null @@ -1,6 +0,0 @@ -# This file was auto-generated by Fern from our API Definition. - -import typing -from .rime_ai_voice_id_enum import RimeAiVoiceIdEnum - -RimeAiVoiceId = typing.Union[RimeAiVoiceIdEnum, str] diff --git a/src/vapi/types/rime_ai_voice_id_enum.py b/src/vapi/types/rime_ai_voice_id_enum.py deleted file mode 100644 index a18c73b..0000000 --- a/src/vapi/types/rime_ai_voice_id_enum.py +++ /dev/null @@ -1,90 +0,0 @@ -# This file was auto-generated by Fern from our API Definition. - -import typing - -RimeAiVoiceIdEnum = typing.Union[ - typing.Literal[ - "marsh", - "bayou", - "creek", - "brook", - "flower", - "spore", - "glacier", - "gulch", - "alpine", - "cove", - "lagoon", - "tundra", - "steppe", - "mesa", - "grove", - "rainforest", - "moraine", - "wildflower", - "peak", - "boulder", - "abbie", - "allison", - "ally", - "alona", - "amber", - "ana", - "antoine", - "armon", - "brenda", - "brittany", - "carol", - "colin", - "courtney", - "elena", - "elliot", - "eva", - "geoff", - "gerald", - "hank", - "helen", - "hera", - "jen", - "joe", - "joy", - "juan", - "kendra", - "kendrick", - "kenneth", - "kevin", - "kris", - "linda", - "madison", - "marge", - "marina", - "marissa", - "marta", - "maya", - "nicholas", - "nyles", - "phil", - "reba", - "rex", - "rick", - "ritu", - "rob", - "rodney", - "rohan", - "rosco", - "samantha", - "sandy", - "selena", - "seth", - "sharon", - "stan", - "tamra", - "tanya", - "tibur", - "tj", - "tyler", - "viv", - "yadira", - ], - typing.Any, -] diff --git a/src/vapi/types/rime_ai_voice_voice_id.py b/src/vapi/types/rime_ai_voice_voice_id.py new file mode 100644 index 0000000..ff718ea --- /dev/null +++ b/src/vapi/types/rime_ai_voice_voice_id.py @@ -0,0 +1,88 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +RimeAiVoiceVoiceId = typing.Union[ + typing.Literal["marsh"], + typing.Literal["bayou"], + typing.Literal["creek"], + typing.Literal["brook"], + typing.Literal["flower"], + typing.Literal["spore"], + typing.Literal["glacier"], + typing.Literal["gulch"], + typing.Literal["alpine"], + typing.Literal["cove"], + typing.Literal["lagoon"], + typing.Literal["tundra"], + typing.Literal["steppe"], + typing.Literal["mesa"], + typing.Literal["grove"], + typing.Literal["rainforest"], + typing.Literal["moraine"], + typing.Literal["wildflower"], + typing.Literal["peak"], + typing.Literal["boulder"], + typing.Literal["abbie"], + typing.Literal["allison"], + typing.Literal["ally"], + typing.Literal["alona"], + typing.Literal["amber"], + typing.Literal["ana"], + typing.Literal["antoine"], + typing.Literal["armon"], + typing.Literal["brenda"], + typing.Literal["brittany"], + typing.Literal["carol"], + typing.Literal["colin"], + typing.Literal["courtney"], + typing.Literal["elena"], + typing.Literal["elliot"], + typing.Literal["eva"], + typing.Literal["geoff"], + typing.Literal["gerald"], + typing.Literal["hank"], + typing.Literal["helen"], + typing.Literal["hera"], + typing.Literal["jen"], + typing.Literal["joe"], + typing.Literal["joy"], + typing.Literal["juan"], + typing.Literal["kendra"], + typing.Literal["kendrick"], + typing.Literal["kenneth"], + typing.Literal["kevin"], + typing.Literal["kris"], + typing.Literal["linda"], + typing.Literal["madison"], + typing.Literal["marge"], + typing.Literal["marina"], + typing.Literal["marissa"], + typing.Literal["marta"], + typing.Literal["maya"], + typing.Literal["nicholas"], + typing.Literal["nyles"], + typing.Literal["phil"], + typing.Literal["reba"], + typing.Literal["rex"], + typing.Literal["rick"], + typing.Literal["ritu"], + typing.Literal["rob"], + typing.Literal["rodney"], + typing.Literal["rohan"], + typing.Literal["rosco"], + typing.Literal["samantha"], + typing.Literal["sandy"], + typing.Literal["selena"], + typing.Literal["seth"], + typing.Literal["sharon"], + typing.Literal["stan"], + typing.Literal["tamra"], + typing.Literal["tanya"], + typing.Literal["tibur"], + typing.Literal["tj"], + typing.Literal["tyler"], + typing.Literal["viv"], + typing.Literal["yadira"], + str, +]