Releases: didww/didww-api-3-python-sdk
v3.1.0 — SIP registration support
v3.1.0 — SIP registration support
DIDWW API version: 2026-04-16
This release adds SIP registration support, automatic field-dependency cascade, and credential redaction in default debug output. All changes are additive — no breaking changes since v3.0.0.
✨ Features
SIP registration on voice in trunks (API 2026-04-16)
Five new writable attributes plus two server-generated read-only credentials are now exposed on didww.resources.configuration.sip.SipConfiguration:
- Writable:
enabled_sip_registration,use_did_in_ruri,cnam_lookup,network_protocol_priority,diversion_inject_mode - Read-only (server-generated when sip_registration is on):
incoming_auth_username,incoming_auth_password
Read-only credentials are stripped from POST/PATCH bodies automatically; the API rejects writes to them with 400 Param not allowed.
Auto-cascade for sip_registration field dependencies
The server enforces multi-field invariants on the sip_registration toggle. The SDK now keeps the dependent fields aligned automatically so caller code never has to enumerate the rule set:
| When you set | The SDK cascades |
|---|---|
enabled_sip_registration = True |
host = None, port = None (always emitted on the wire, even on a fresh config) |
enabled_sip_registration = False |
use_did_in_ruri = False |
host = <non-blank> |
enabled_sip_registration = False, use_did_in_ruri = False |
The host/port nullification fires unconditionally so a PATCH against an existing trunk with persisted host/port is told to clear them — a conditional cascade silently dropped the fields and the server rejected the merged request with 422. (Fixes the re-enable PATCH flow.)
The cascade fires only on application-driven assignments; deserialization of server responses (which are already internally consistent) bypasses it so existing combinations are not clobbered.
Credential redaction in default repr()
__repr__ is overridden on SipConfiguration and CredentialsAndIpAuthenticationMethod to replace credential field values with [FILTERED] before they reach print(), logger output, debugger inspection, or unhandled exception traces. The wire payload is unaffected — serializers continue to emit the real values.
📚 Documentation
- New end-to-end example
examples/voice_in_trunk_sip_registration.pydemonstrating the full create → rename → disable → re-enable flow. - README gains a SIP-registration usage section explaining the cascade rules with copy-pasteable enable / disable snippets.
Full Changelog: v3.0.0...v3.1.0
v3.0.0 — DIDWW API 2026-04-16
v3.0.0 — DIDWW API 2026-04-16
This release upgrades the Python SDK to DIDWW API version 2026-04-16. The SDK now sends X-DIDWW-API-Version: 2026-04-16 with every request by default.
Users staying on API 2022-05-10 should pin to the 2022-05-10 branch (2.x), where future 2.x patches will be released.
Installation
pip install didww==3.0.0Breaking Changes
API / resource renames
- Default
X-DIDWW-API-Versionheader is now2026-04-16. - Resource
requirement_validationsrenamed toaddress_requirement_validations. - Resource
requirementsrenamed toaddress_requirements. AddressRequirementValidation.requirementrelationship renamed toaddress_requirement.DidGroup.requirementrelationship renamed toaddress_requirement.DidReservation.expire_atrenamed toexpires_at.EncryptedFile.expire_atrenamed toexpires_at.
Attribute / value changes
AddressVerification.reject_reasonsis now a list of strings.- Dropped
sms_outfromDidGroupfeatures. EncryptedFilePOST now accepts a single file per request.Exportyear/month filters replaced withfrom/todatetime range (frominclusive,toexclusive).VoiceInTrunkSIP configuration gainsdiversion_relay_policy.- Attribute values standardized to lowercase
snake_caseon the wire (status/area-level enums, etc.). Order.is_cancelledrenamed tois_canceled;STATUS_CANCELLED→STATUS_CANCELEDto match wire format (status: "canceled").
VoiceOutTrunk authentication
Flat credentials (username / password / auth_type) replaced with a polymorphic authentication_method relationship. Supported types:
CredentialsAuthenticationMethodIpAuthenticationMethodCredentialsAndIpAuthenticationMethodTwilioAuthenticationMethodGenericAuthenticationMethod(forward-compatible fallback for unknown types)
New Resources
DidHistory—/v3/did_history, withmeta.billing_cycles_count_changed.EmergencyRequirement—/v3/emergency_requirements.EmergencyRequirementValidation—/v3/emergency_requirement_validations.EmergencyCallingService—/v3/emergency_calling_services, withaddresshas-one relationship.EmergencyVerification—/v3/emergency_verifications.
New Attributes & Relationships
external_reference_id
Added to Address, AddressVerification, Export, EmergencyVerification, Order, PermanentSupportingDocument, Proof, SharedCapacityGroup, VoiceInTrunkGroup, VoiceInTrunk, VoiceOutTrunk.
PATCH supported on:
PATCH /v3/address_verifications/:idPATCH /v3/exports/:idPATCH /v3/emergency_verifications/:id
VoiceOutTrunk
emergency_enable_allattributertp_timeoutattributeemergency_didshas-many relationship- Status predicate helpers
Did
emergency_enabledattributeemergency_calling_servicehas-one relationshipemergency_verificationhas-one relationshipidentityhas-one relationship- Supports PATCH to unassign
emergency_calling_service
Identity
birth_countryhas-one relationship
DidGroup
- New features:
p2p,a2p,emergency,cnam_out service_restrictionsattribute
AddressVerification
reject_commentattribute
Order
- New
EmergencyOrderItemcomplex object
Helpers & Polish
- Status predicate helpers added to
VoiceOutTrunk,EmergencyCallingService,AddressVerification,EmergencyVerification, andOrder. Exportnow exposesSTATUS_PENDINGandSTATUS_PROCESSING.- Unknown
authentication_methodtypes are wrapped inGenericfor forward compatibility. - Resource-level meta support for
EmergencyCallingServiceandEmergencyRequirement. - Fixtures and examples use RFC 5737 documentation IPs (
203.0.113.0/24).
Tests
- 291 tests passing on Python 3.9 – 3.13.
- PATCH dirty-tracking coverage for polymorphic
authentication_method.
Upgrading
- Update your dependency:
pip install --upgrade didww==3.0.0
- Rename any references to
requirement_validations→address_requirement_validationsandrequirements→address_requirements. - Migrate
VoiceOutTrunkcredentials to the new polymorphicauthentication_methodrelationship. - Replace
expire_atwithexpires_atonDidReservationandEncryptedFile. - Update
Exportfilters fromyear/monthtofrom/todatetime range. - Update any
is_cancelled/STATUS_CANCELLEDreferences onOrderto theCanceledspellings. - Review the refreshed README and
examples/directory.
Full Changelog: v2.0.0...v3.0.0
v2.0.0
What's Changed
- improve release README by @senid231 in #18
- Implement dirty-only PATCH serialization with explicit null clears by @Fivell in #17
- Add coverage badge via GitHub Pages by @Fivell in #19
- Add JSON:API dependency note to README by @Fivell in #21
- Export csv gz decompression by @Fivell in #20
- Add User-Agent header to all API requests by @Fivell in #22
- Add missing metered_channels_count to SharedCapacityGroup README example by @Fivell in #23
- Add Requirement relationship to DidGroup by @Fivell in #26
- Add Region relationship to NanpaPrefix by @Fivell in #25
- Feat/nanpa prefix region relationship by @Fivell in #30
- Add rejected address verification test fixture by @Fivell in #28
- Add requirement relationship to DidGroup, remove unused _relationship_id methods by @Fivell in #29
- Add cross-SDK request validator test vectors and fix URL normalization by @Fivell in #27
- Refactor/dry cleanup by @Fivell in #31
- Add orders_nanpa example by @Fivell in #33
- Add DatetimeAttributeField, use it for datetime fields by @Fivell in #32
New Contributors
Full Changelog: v1.1.0...v2.0.0
v1.1.0
What's Changed
- Improvements by @Fivell in #12
- Add custom session support for proxy and advanced HTTP configuration by @Fivell in #13
- Add missing relationship declarations and comprehensive include tests by @Fivell in #14
- Clean up test fixtures and add missing tests by @Fivell in #15
- Add X-DIDWW-API-Version header and update README link by @Fivell in #16
Full Changelog: v1.0.0...v1.1.0