From 96b35443c2c085a35cc4a48febc01eb3670846e9 Mon Sep 17 00:00:00 2001 From: Igor Fedoronchuk Date: Fri, 13 Mar 2026 12:38:14 +0100 Subject: [PATCH 1/6] Document date and datetime field types in README --- README.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/README.md b/README.md index 4c0b130..b08188f 100644 --- a/README.md +++ b/README.md @@ -574,6 +574,22 @@ try { > **Note:** `StockKeepingUnit` and `QtyBasedPricing` have no standalone API endpoints. > Access them via `include` on `didGroups` and `capacityPools` respectively. +## Date and Datetime Fields + +The SDK distinguishes between date-only and datetime fields: + +- **Datetime fields** (`created_at`, `expires_at`, `expire_at`) are deserialized as `OffsetDateTime`. +- **Date-only fields** (`birth_date`, `renew_date`) are deserialized as `LocalDate`. +- **Billing range fields** (`billed_from`, `billed_to`) remain as `String`. + +```java +Did did = client.dids().find("uuid").getData(); +System.out.println(did.getCreatedAt()); // OffsetDateTime + +Identity identity = client.identities().find("uuid").getData(); +System.out.println(identity.getBirthDate()); // LocalDate +``` + ## Enums The SDK provides enum classes in `com.didww.sdk.resource.enums`: From aeb950b8289c0aa9cdb298019f55d9366262ea82 Mon Sep 17 00:00:00 2001 From: Igor Fedoronchuk Date: Fri, 13 Mar 2026 15:17:48 +0100 Subject: [PATCH 2/6] Clarify datetime fields with resource names in README --- README.md | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index b08188f..78f377c 100644 --- a/README.md +++ b/README.md @@ -578,16 +578,23 @@ try { The SDK distinguishes between date-only and datetime fields: -- **Datetime fields** (`created_at`, `expires_at`, `expire_at`) are deserialized as `OffsetDateTime`. -- **Date-only fields** (`birth_date`, `renew_date`) are deserialized as `LocalDate`. -- **Billing range fields** (`billed_from`, `billed_to`) remain as `String`. +- **Datetime fields** — deserialized as `OffsetDateTime`: + - `Did.getCreatedAt()`, `Did.getExpiresAt()` + - `EncryptedFile.getCreatedAt()`, `EncryptedFile.getExpireAt()` + - `DidReservation.getCreatedAt()`, `DidReservation.getExpireAt()` + - `Proof.getCreatedAt()`, `Proof.getExpiresAt()` + - `Order.getCreatedAt()`, `Identity.getCreatedAt()`, `Address.getCreatedAt()`, `VoiceInTrunk.getCreatedAt()`, `VoiceInTrunkGroup.getCreatedAt()`, `VoiceOutTrunk.getCreatedAt()`, `SharedCapacityGroup.getCreatedAt()`, `Export.getCreatedAt()`, `AddressVerification.getCreatedAt()`, `PermanentSupportingDocument.getCreatedAt()` +- **Date-only fields** — deserialized as `LocalDate`: + - `Identity.getBirthDate()`, `CapacityPool.getRenewDate()` +- **Billing range fields** (`DidOrderItem.getBilledFrom()`, `DidOrderItem.getBilledTo()`) remain as `String`. ```java Did did = client.dids().find("uuid").getData(); -System.out.println(did.getCreatedAt()); // OffsetDateTime +System.out.println(did.getCreatedAt()); // 2024-01-15T10:00:00Z (OffsetDateTime) +System.out.println(did.getExpiresAt()); // null or 2025-01-15T10:00:00Z Identity identity = client.identities().find("uuid").getData(); -System.out.println(identity.getBirthDate()); // LocalDate +System.out.println(identity.getBirthDate()); // 1990-05-20 (LocalDate) ``` ## Enums From 3074d7b52be3fbb72001f3cce8bafe6d6d069097 Mon Sep 17 00:00:00 2001 From: Igor Fedoronchuk Date: Fri, 13 Mar 2026 15:20:31 +0100 Subject: [PATCH 3/6] Remove EncryptedFile.createdAt (not in API), fix README --- README.md | 2 +- src/main/java/com/didww/sdk/resource/EncryptedFile.java | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/README.md b/README.md index 78f377c..840137c 100644 --- a/README.md +++ b/README.md @@ -580,7 +580,7 @@ The SDK distinguishes between date-only and datetime fields: - **Datetime fields** — deserialized as `OffsetDateTime`: - `Did.getCreatedAt()`, `Did.getExpiresAt()` - - `EncryptedFile.getCreatedAt()`, `EncryptedFile.getExpireAt()` + - `EncryptedFile.getExpireAt()` (no `created_at` on this resource) - `DidReservation.getCreatedAt()`, `DidReservation.getExpireAt()` - `Proof.getCreatedAt()`, `Proof.getExpiresAt()` - `Order.getCreatedAt()`, `Identity.getCreatedAt()`, `Address.getCreatedAt()`, `VoiceInTrunk.getCreatedAt()`, `VoiceInTrunkGroup.getCreatedAt()`, `VoiceOutTrunk.getCreatedAt()`, `SharedCapacityGroup.getCreatedAt()`, `Export.getCreatedAt()`, `AddressVerification.getCreatedAt()`, `PermanentSupportingDocument.getCreatedAt()` diff --git a/src/main/java/com/didww/sdk/resource/EncryptedFile.java b/src/main/java/com/didww/sdk/resource/EncryptedFile.java index df236ff..c2b37d4 100644 --- a/src/main/java/com/didww/sdk/resource/EncryptedFile.java +++ b/src/main/java/com/didww/sdk/resource/EncryptedFile.java @@ -17,9 +17,6 @@ public class EncryptedFile extends BaseResource { @JsonProperty(value = "expire_at", access = JsonProperty.Access.WRITE_ONLY) private OffsetDateTime expireAt; - @JsonProperty(value = "created_at", access = JsonProperty.Access.WRITE_ONLY) - private OffsetDateTime createdAt; - public void setDescription(String description) { this.description = markDirty("description", description); } From ab61a11d430ecffdb19e21562f99ab0f053c5c53 Mon Sep 17 00:00:00 2001 From: Igor Fedoronchuk Date: Fri, 13 Mar 2026 15:55:50 +0100 Subject: [PATCH 4/6] Revert renew_date to String for consistency with other date-only fields --- README.md | 4 ++-- src/main/java/com/didww/sdk/resource/CapacityPool.java | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 840137c..f62315d 100644 --- a/README.md +++ b/README.md @@ -585,8 +585,8 @@ The SDK distinguishes between date-only and datetime fields: - `Proof.getCreatedAt()`, `Proof.getExpiresAt()` - `Order.getCreatedAt()`, `Identity.getCreatedAt()`, `Address.getCreatedAt()`, `VoiceInTrunk.getCreatedAt()`, `VoiceInTrunkGroup.getCreatedAt()`, `VoiceOutTrunk.getCreatedAt()`, `SharedCapacityGroup.getCreatedAt()`, `Export.getCreatedAt()`, `AddressVerification.getCreatedAt()`, `PermanentSupportingDocument.getCreatedAt()` - **Date-only fields** — deserialized as `LocalDate`: - - `Identity.getBirthDate()`, `CapacityPool.getRenewDate()` -- **Billing range fields** (`DidOrderItem.getBilledFrom()`, `DidOrderItem.getBilledTo()`) remain as `String`. + - `Identity.getBirthDate()` +- **Date-only fields kept as strings** (`CapacityPool.getRenewDate()`, `DidOrderItem.getBilledFrom()`, `DidOrderItem.getBilledTo()`) — remain as `String`. ```java Did did = client.dids().find("uuid").getData(); diff --git a/src/main/java/com/didww/sdk/resource/CapacityPool.java b/src/main/java/com/didww/sdk/resource/CapacityPool.java index da95e86..ad0526b 100644 --- a/src/main/java/com/didww/sdk/resource/CapacityPool.java +++ b/src/main/java/com/didww/sdk/resource/CapacityPool.java @@ -5,7 +5,6 @@ import com.github.jasminb.jsonapi.annotations.Type; import lombok.Getter; -import java.time.LocalDate; import java.util.List; @Type("capacity_pools") @@ -17,7 +16,7 @@ public class CapacityPool extends BaseResource { private String name; @JsonProperty(value = "renew_date", access = JsonProperty.Access.WRITE_ONLY) - private LocalDate renewDate; + private String renewDate; @JsonProperty("total_channels_count") private Integer totalChannelsCount; From 69701e6dcfeac698775e543a076c035de48bd529 Mon Sep 17 00:00:00 2001 From: Igor Fedoronchuk Date: Fri, 13 Mar 2026 16:01:40 +0100 Subject: [PATCH 5/6] Simplify date/datetime README section: replace class list with generic rule --- README.md | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index f62315d..9f94445 100644 --- a/README.md +++ b/README.md @@ -579,11 +579,8 @@ try { The SDK distinguishes between date-only and datetime fields: - **Datetime fields** — deserialized as `OffsetDateTime`: - - `Did.getCreatedAt()`, `Did.getExpiresAt()` - - `EncryptedFile.getExpireAt()` (no `created_at` on this resource) - - `DidReservation.getCreatedAt()`, `DidReservation.getExpireAt()` - - `Proof.getCreatedAt()`, `Proof.getExpiresAt()` - - `Order.getCreatedAt()`, `Identity.getCreatedAt()`, `Address.getCreatedAt()`, `VoiceInTrunk.getCreatedAt()`, `VoiceInTrunkGroup.getCreatedAt()`, `VoiceOutTrunk.getCreatedAt()`, `SharedCapacityGroup.getCreatedAt()`, `Export.getCreatedAt()`, `AddressVerification.getCreatedAt()`, `PermanentSupportingDocument.getCreatedAt()` + - All `getCreatedAt()` methods — present on most resources (`EncryptedFile` has no `created_at`) + - Expiry fields: `Did.getExpiresAt()`, `DidReservation.getExpireAt()`, `Proof.getExpiresAt()`, `EncryptedFile.getExpireAt()` - **Date-only fields** — deserialized as `LocalDate`: - `Identity.getBirthDate()` - **Date-only fields kept as strings** (`CapacityPool.getRenewDate()`, `DidOrderItem.getBilledFrom()`, `DidOrderItem.getBilledTo()`) — remain as `String`. From 1ddeea9cf767a75637489551437cb9e96ac395b2 Mon Sep 17 00:00:00 2001 From: Igor Fedoronchuk Date: Fri, 13 Mar 2026 17:44:45 +0100 Subject: [PATCH 6/6] Remove EncryptedFile no-created_at note from README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9f94445..c94d6b5 100644 --- a/README.md +++ b/README.md @@ -579,7 +579,7 @@ try { The SDK distinguishes between date-only and datetime fields: - **Datetime fields** — deserialized as `OffsetDateTime`: - - All `getCreatedAt()` methods — present on most resources (`EncryptedFile` has no `created_at`) + - All `getCreatedAt()` methods — present on most resources - Expiry fields: `Did.getExpiresAt()`, `DidReservation.getExpireAt()`, `Proof.getExpiresAt()`, `EncryptedFile.getExpireAt()` - **Date-only fields** — deserialized as `LocalDate`: - `Identity.getBirthDate()`