Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "0.50.0"
".": "0.51.0"
}
6 changes: 3 additions & 3 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 183
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/zavu/zavudev-5d75bbdcac3a0b0a8b798c0b4ef0dacfbc64ad4a20605489dc46dda7c8d1d8d8.yml
openapi_spec_hash: bb242cfd8cc43354412164c2dceae89c
config_hash: 261e1b852ca7f8364e4a283a3edd350a
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/zavu/zavudev-be6c0709d91750e8a9ea4ac11c26c00ef39b0e09233beb454131452d10a99e95.yml
openapi_spec_hash: ba279d70955f6b4da3fcf63e92158406
config_hash: f6a05e2edf2cd1af3f762b8ac759b9a7
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,18 @@
# Changelog

## 0.51.0 (2026-09-16)

Full Changelog: [v0.50.0...v0.51.0](https://github.com/zavudev/sdk-python/compare/v0.50.0...v0.51.0)

### Features

* **api:** api update ([04a0b6d](https://github.com/zavudev/sdk-python/commit/04a0b6dbf002cc4c92180a3ce84cd8c0992ca5d6))
* **api:** api update ([0cf2295](https://github.com/zavudev/sdk-python/commit/0cf22951bce9cb1719aeac4690629d55aa1d3dab))
* **api:** api update ([aab53c7](https://github.com/zavudev/sdk-python/commit/aab53c77cf90c954c9dd644424aa3dccc921480b))
* **api:** api update ([b05594c](https://github.com/zavudev/sdk-python/commit/b05594c35e38a800ccd15ec1eeaa2e833b3ab5c6))
* **api:** api update ([9a3148c](https://github.com/zavudev/sdk-python/commit/9a3148cf7bbf2c9ac183e9c2d90ec8f3c6f4da24))
* **api:** api update ([77c03d9](https://github.com/zavudev/sdk-python/commit/77c03d988890df623ec37dad0c64f96d97ed32b2))

## 0.50.0 (2026-09-08)

Full Changelog: [v0.49.1...v0.50.0](https://github.com/zavudev/sdk-python/compare/v0.49.1...v0.50.0)
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "zavudev"
version = "0.50.0"
version = "0.51.0"
description = "The official Python library for the zavudev API"
dynamic = ["readme"]
license = "Apache-2.0"
Expand Down
2 changes: 1 addition & 1 deletion src/zavudev/_version.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.

__title__ = "zavudev"
__version__ = "0.50.0" # x-release-please-version
__version__ = "0.51.0" # x-release-please-version
58 changes: 38 additions & 20 deletions src/zavudev/resources/addresses.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,27 +48,34 @@ def create(
self,
*,
country_code: str,
first_name: str,
last_name: str,
locality: str,
postal_code: str,
street_address: str,
administrative_area: str | Omit = omit,
business_name: str | Omit = omit,
extended_address: str | Omit = omit,
first_name: str | Omit = omit,
last_name: str | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> AddressCreateResponse:
"""Create a regulatory address for phone number purchases.

Some countries require a
verified address before phone numbers can be activated.
"""
Create a regulatory address, to use as the value of an `address` requirement
when buying a phone number. It is registered for review when it is created, with
status `pending`.

Args:
first_name: First name of the person the address is registered to.

last_name: Last name of the person the address is registered to.

business_name: Business name, when the address belongs to a business. Defaults to the person's
full name.

extra_headers: Send extra headers

extra_query: Add additional query parameters to the request
Expand All @@ -82,14 +89,14 @@ def create(
body=maybe_transform(
{
"country_code": country_code,
"first_name": first_name,
"last_name": last_name,
"locality": locality,
"postal_code": postal_code,
"street_address": street_address,
"administrative_area": administrative_area,
"business_name": business_name,
"extended_address": extended_address,
"first_name": first_name,
"last_name": last_name,
},
address_create_params.AddressCreateParams,
),
Expand Down Expand Up @@ -186,9 +193,11 @@ def delete(
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> None:
"""Delete a regulatory address.
"""Delete a regulatory address from this project.

Cannot delete addresses that are in use.
Any address can be deleted,
whatever its status. Phone numbers already purchased with it are not affected,
and neither is information already submitted for later purchases in its country.

Args:
extra_headers: Send extra headers
Expand Down Expand Up @@ -235,27 +244,34 @@ async def create(
self,
*,
country_code: str,
first_name: str,
last_name: str,
locality: str,
postal_code: str,
street_address: str,
administrative_area: str | Omit = omit,
business_name: str | Omit = omit,
extended_address: str | Omit = omit,
first_name: str | Omit = omit,
last_name: str | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> AddressCreateResponse:
"""Create a regulatory address for phone number purchases.

Some countries require a
verified address before phone numbers can be activated.
"""
Create a regulatory address, to use as the value of an `address` requirement
when buying a phone number. It is registered for review when it is created, with
status `pending`.

Args:
first_name: First name of the person the address is registered to.

last_name: Last name of the person the address is registered to.

business_name: Business name, when the address belongs to a business. Defaults to the person's
full name.

extra_headers: Send extra headers

extra_query: Add additional query parameters to the request
Expand All @@ -269,14 +285,14 @@ async def create(
body=await async_maybe_transform(
{
"country_code": country_code,
"first_name": first_name,
"last_name": last_name,
"locality": locality,
"postal_code": postal_code,
"street_address": street_address,
"administrative_area": administrative_area,
"business_name": business_name,
"extended_address": extended_address,
"first_name": first_name,
"last_name": last_name,
},
address_create_params.AddressCreateParams,
),
Expand Down Expand Up @@ -373,9 +389,11 @@ async def delete(
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> None:
"""Delete a regulatory address.
"""Delete a regulatory address from this project.

Cannot delete addresses that are in use.
Any address can be deleted,
whatever its status. Phone numbers already purchased with it are not affected,
and neither is information already submitted for later purchases in its country.

Args:
extra_headers: Send extra headers
Expand Down
26 changes: 20 additions & 6 deletions src/zavudev/resources/messages.py
Original file line number Diff line number Diff line change
Expand Up @@ -258,9 +258,16 @@ def send(
**Plan allowances and email billing:**

- WhatsApp, Telegram, Instagram and Messenger share an allowance of 2,000
messages per month on Free. Over it, sends return 429 with code
`a2p_limit_exceeded` and upgrade details; the counter resets on the 1st of
each month. Paid plans have no message caps
messages per month on Free. **It counts messages in both directions**: a
message a contact sends you consumes one unit exactly as a message you send
them does, so a project that has sent 300 and received 1,700 has used the
whole allowance. Messages you send from the WhatsApp Business App on your own
phone under coexistence are mirrored into your inbox but never counted, and
neither are failed sends. Over the allowance, sends return 429 with code
`a2p_limit_exceeded` and upgrade details, **and inbound messages on those
channels are refused as well**: not stored, not shown in the inbox, and no
`message.inbound` webhook, and not delivered later when the month resets. The
counter resets on the 1st of each month. Paid plans have no message caps
- Email is billed from your prepaid balance in 1,000-message blocks: $0.40 per
1,000 transactional emails, $0.80 per 1,000 marketing (broadcast) emails. A
block is charged when your monthly count crosses each 1,000 boundary, and at
Expand Down Expand Up @@ -649,9 +656,16 @@ async def send(
**Plan allowances and email billing:**

- WhatsApp, Telegram, Instagram and Messenger share an allowance of 2,000
messages per month on Free. Over it, sends return 429 with code
`a2p_limit_exceeded` and upgrade details; the counter resets on the 1st of
each month. Paid plans have no message caps
messages per month on Free. **It counts messages in both directions**: a
message a contact sends you consumes one unit exactly as a message you send
them does, so a project that has sent 300 and received 1,700 has used the
whole allowance. Messages you send from the WhatsApp Business App on your own
phone under coexistence are mirrored into your inbox but never counted, and
neither are failed sends. Over the allowance, sends return 429 with code
`a2p_limit_exceeded` and upgrade details, **and inbound messages on those
channels are refused as well**: not stored, not shown in the inbox, and no
`message.inbound` webhook, and not delivered later when the month resets. The
counter resets on the 1st of each month. Paid plans have no message caps
- Email is billed from your prepaid balance in 1,000-message blocks: $0.40 per
1,000 transactional emails, $0.80 per 1,000 marketing (broadcast) emails. A
block is charged when your monthly count crosses each 1,000 boundary, and at
Expand Down
Loading
Loading