Repository navigation
Releases: didww/didww-v3-ruby
Release list
v6.2.1
v6.2.1 — Callback secret
DIDWW API version: 2026-04-16
DIDWW::Callback::RequestValidator is now documented and named around the callback secret enabled in the DIDWW User Panel (APIs → DIDWW API 3 → Callback Secrets). No breaking changes since v6.2.0.
Installation
gem install didww-v3 -v 6.2.1Changed
DIDWW::Callback::RequestValidator.new(callback_secret): the constructor argument is renamed fromapi_keytocallback_secret. It is positional, so existing code keeps working. Pass the callback secret value.- The signature algorithm and the
X-DIDWW-Signatureheader are unchanged. - README: the callback validation example and its introduction say where the callback secret comes from.
v6.2.0
What's Changed
- docs: add FILTERS.md server-side filter reference by @Fivell in #83
- fix: rename propated_mrc → prorated_mrc on DID/Capacity order items by @Fivell in #84
- feat: add rtp_ping attribute to VoiceOutTrunk by @Fivell in #85
- chore(fixtures): refresh meta.api_version to 2026-04-16 by @Fivell in #87
- feat: add description attribute to DidReservation by @Fivell in #86
- fix(fixtures): correct malformed and production hosts in recorded responses by @Fivell in #88
- fix: relax json_api_client pin to support Ruby 4.0 by @Fivell in #90
- chore(release): 6.2.0 by @Fivell in #91
Full Changelog: v6.1.1...v6.2.0
v6.1.1
v6.1.0
v6.1.0 — SIP Registration support (API 2026-04-16)
Backward-compatible feature release. Completes the SipConfiguration attribute set introduced in API 2026-04-16 — the previous 6.0.0 rollout shipped the
X-DIDWW-API-Version: 2026-04-16 default header but missed the SIP-registration attribute set from the server's voice-in trunk form (which is also absent from
the public Postman collection). This release closes that gap, adds default-output credential redaction, and ships an auto-cascade for the server-enforced field
dependencies on the SIP-registration toggle.
No breaking changes. Upgrade is a drop-in.
Highlights
1. Complete the SipConfiguration attribute set
Five new writable attributes:
| Attribute | Type | Notes |
|---|---|---|
enabled_sip_registration |
bool |
Enables SIP registration. When true, the API generates incoming_auth_* and the trunk's host / port must be |
| blank. | ||
use_did_in_ruri |
bool |
Uses the DID number in R-URI. Requires enabled_sip_registration to be true. |
network_protocol_priority |
string enum | force_ipv4 / force_ipv6 / any / prefer_ipv4 / prefer_ipv6. Constants: NETWORK_PROTOCOL_PRIORITY_* / |
NETWORK_PROTOCOL_PRIORITIES. |
||
diversion_inject_mode |
string enum | none / did_number. Constants: DIVERSION_INJECT_MODE_* / DIVERSION_INJECT_MODES. |
cnam_lookup |
bool |
Enables CNAM resolution for inbound calls. |
Two new read-only attributes:
SipConfiguration#incoming_auth_usernameSipConfiguration#incoming_auth_password
These are server-generated SIP authentication credentials returned on voice_in_trunks when enabled_sip_registration is true. The API rejects writes with
400 Param not allowed, so the SDK strips them from any PATCH/POST payload — round-tripping a loaded configuration is now safe.
ComplexObject::Base.property accepts a new read_only: true option to support that contract for any future read-only attribute.
2. Auto-cascade for server-enforced field dependencies
The server validates a small set of cross-field invariants on SipConfiguration and rejects mismatches with 422. The SDK now applies the cascades on
assignment so caller code does not have to enumerate the rule set:
| Setter call | Cascade |
|---|---|
enabled_sip_registration = true |
host and port set to nil (only when previously set) |
enabled_sip_registration = false |
use_did_in_ruri = false |
host = <non-blank> |
enabled_sip_registration = false, use_did_in_ruri = false |
Constructor / []= assignments bypass the cascade so server responses (which are already internally consistent) deserialize as-is.
# Enable: just flip the toggle. The cascade handles host / port.
trunk.configuration = DIDWW::ComplexObject::SipConfiguration.new.tap do |c|
c.enabled_sip_registration = true
c.use_did_in_ruri = true
end
# Disable: just set host. The cascade flips both toggles to false.
trunk.configuration = DIDWW::ComplexObject::SipConfiguration.new.tap do |c|
c.host = 'sip.example.com'
end3. Credential redaction in default #inspect
ComplexObject::Base.property accepts a new sensitive: true option. The default #inspect representation replaces those values with [FILTERED] so credentials
never leak through default logging / REPL / unhandled exception output. The wire payload is unchanged — #as_json still emits the real values.
Marked as sensitive in this release:
- SipConfiguration#auth_password
- SipConfiguration#incoming_auth_username / #incoming_auth_password
- AuthenticationMethod::CredentialsAndIp#username / #password
config.inspect
# => #<DIDWW::ComplexObject::SipConfiguration host="sip.example.com" auth_password="[FILTERED]" incoming_auth_username="[FILTERED]" ...>
config.as_json[:attributes][:auth_password]
# => "actual-password" (wire format unaffected) Documentation
- New "SIP Registration (2026-04-16)" subsection in the README — explains the cascade rules, shows the enable / disable examples.
- examples/voice_in_trunks.rb updated to surface the new attributes when reading a SIP trunk and to show a commented-out SIP-registration create snippet.
v6.0.0 — DIDWW API 2026-04-16
v6.0.0 — DIDWW API 2026-04-16
This release upgrades the Ruby SDK to DIDWW API version 2026-04-16. The gem 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 (5.x), where future 5.x patches will be released.
Installation
# Gemfile
gem 'didww-v3', '~> 6.0'Or:
gem install didww-v3 -v 6.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 an array 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#cancelled?renamed tocanceled?;Order::STATUS_CANCELLED→STATUS_CANCELEDto match wire format (status: "canceled").DidGroup: removedfeatures_humanandFEATURESconstant.
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. randomize_cliadded toOnCliMismatchActionconstants.- Fixtures and examples use RFC 5737 documentation IPs (
203.0.113.0/24).
Examples
New examples
did_historyemergency_requirementsemergency_requirement_validationsemergency_calling_servicesemergency_verificationsaddress_verificationsorders_emergencyemergency_scenario— end-to-end emergency flow
Updated examples
voice_out_trunks— polymorphicauthentication_methodexports— newfrom/tofilter semanticsidentities_and_proofs— includesbirth_countryorders,shared_capacity_groups,voice_in_trunk_groups,dids,did_groups— demonstrateexternal_reference_idand 2026-04-16 fields
Tests
- 510 examples, 99.6% line coverage.
- Shared rspec examples extracted for PATCH
external_reference_idand requirement validations POST→204. - PATCH dirty-tracking coverage for polymorphic
authentication_method.
Upgrading
- Update your Gemfile:
then
gem 'didww-v3', '~> 6.0'
bundle update didww-v3. - 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
cancelled?/STATUS_CANCELLEDreferences onOrderto theCanceledspellings. - If you used
DidGroup#features_humanorFEATURES, migrate to rawfeatures— those helpers were removed. - Review the refreshed README and
examples/directory.
Full Changelog: v5.3.1...v6.0.0
v5.3.1
v5.3.0
v5.2.0
What's Changed
- Fix README examples to match actual API usage by @Fivell in #56
- Fix: Use timing-safe comparison for callback signatures by @Fivell in #59
- Fix: Change is_expired boolean to expires_at date on Proof by @Fivell in #58
- Fix: Limit encryption fingerprint to first two public keys by @Fivell in #64
- Revert "Fix: Limit encryption fingerprint to first two public keys" by @Fivell in #66
- Fix: Add User-Agent header to export download by @Fivell in #63
- Fix date type attributes to use :time for ISO 8601 timestamps by @Fivell in #67
- Add requirement relationship to DidGroup by @Fivell in #62
- Add missing resource fields: reference, permanent, iso, contact_email by @Fivell in #61
- Add rejected address verification test fixture by @Fivell in #65
- Skip Api-Key header on public_keys endpoint by @Fivell in #68
- Add cross-SDK request validator test vectors and fix URL normalization by @Fivell in #57
- Refactor/dry cleanup by @Fivell in #69
- Document date and datetime field types in README by @Fivell in #70
- Add examples by @Fivell in #71
- bump 5.2.0 by @Fivell in #72
Full Changelog: v.5.1.0...v5.2.0
v.5.1.0
What's Changed
- Rename test fixtures from sample_N to self-descriptive names by @Fivell in #46
- Add X-DIDWW-API-Version header and update README link by @Fivell in #47
- Add coverage badge via GitHub Pages by @Fivell in #48
- Add JSON:API dependency note to README by @Fivell in #50
- Add missing client accessors and resource tests with fixtures by @Fivell in #53
- Exclusive relationship and dirty tracking by @Fivell in #52
- Export csv gz decompression by @Fivell in #51
- Add VoiceOutTrunk CRUD tests and wire up unused fixture files by @Fivell in #54
Full Changelog: v5.0.0...v5.1.0