From 39e4623d63b58bc9f048cc6a2592e657cf1706b8 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 3 Aug 2026 18:16:26 +0000 Subject: [PATCH 1/6] chore(internal): codegen related update --- scripts/upload-artifacts | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/upload-artifacts b/scripts/upload-artifacts index 10f3c7055..5c1fbefc4 100755 --- a/scripts/upload-artifacts +++ b/scripts/upload-artifacts @@ -91,6 +91,7 @@ generate_instructions() { Maven Repo +

Stainless SDK Maven Repository

From 9507834f2c34614684d100e960b40a1dca2ce9c5 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 3 Aug 2026 21:54:11 +0000 Subject: [PATCH 2/6] feat(api): add limitCashAmount/limitCashCount fields to VelocityLimitParams --- .stats.yml | 4 +- .../lithic/api/models/VelocityLimitParams.kt | 148 +++++++++++++++++- .../api/models/VelocityLimitParamsTest.kt | 6 + 3 files changed, 153 insertions(+), 5 deletions(-) diff --git a/.stats.yml b/.stats.yml index a57158191..51c96b22b 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 214 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic/lithic-59c09c7355b21b663e001d2ee1086ebd0a70d9b5433823282bca296eedff9eb0.yml -openapi_spec_hash: d9c3b932c810809abc6e973d662ad376 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic/lithic-1d6c7b672aa49dfe0fe5175965307f63a0ed42c13697b2f9f3b9275f32331937.yml +openapi_spec_hash: 06e73960c7506484c589d718fa1ddad8 config_hash: 337a99d8cc30006358b7bc2531401669 diff --git a/lithic-java-core/src/main/kotlin/com/lithic/api/models/VelocityLimitParams.kt b/lithic-java-core/src/main/kotlin/com/lithic/api/models/VelocityLimitParams.kt index 58113d288..b5c0d3e10 100644 --- a/lithic-java-core/src/main/kotlin/com/lithic/api/models/VelocityLimitParams.kt +++ b/lithic-java-core/src/main/kotlin/com/lithic/api/models/VelocityLimitParams.kt @@ -25,6 +25,8 @@ private constructor( private val scope: JsonField, private val filters: JsonField, private val limitAmount: JsonField, + private val limitCashAmount: JsonField, + private val limitCashCount: JsonField, private val limitCount: JsonField, private val additionalProperties: MutableMap, ) { @@ -41,8 +43,23 @@ private constructor( @JsonProperty("limit_amount") @ExcludeMissing limitAmount: JsonField = JsonMissing.of(), + @JsonProperty("limit_cash_amount") + @ExcludeMissing + limitCashAmount: JsonField = JsonMissing.of(), + @JsonProperty("limit_cash_count") + @ExcludeMissing + limitCashCount: JsonField = JsonMissing.of(), @JsonProperty("limit_count") @ExcludeMissing limitCount: JsonField = JsonMissing.of(), - ) : this(period, scope, filters, limitAmount, limitCount, mutableMapOf()) + ) : this( + period, + scope, + filters, + limitAmount, + limitCashAmount, + limitCashCount, + limitCount, + mutableMapOf(), + ) /** * Velocity over the current day since 00:00 / 12 AM in Eastern Time @@ -75,6 +92,29 @@ private constructor( */ fun limitAmount(): Optional = limitAmount.getOptional("limit_amount") + /** + * The maximum amount of cash spend velocity allowed in the period in minor units (the smallest + * unit of a currency, e.g. cents for USD). Cash spend covers ATM withdrawals, cash + * disbursements, and purchases with cashback. Transactions exceeding this limit will be + * declined. + * + * @throws LithicInvalidDataException if the JSON field has an unexpected type (e.g. if the + * server responded with an unexpected value). + */ + fun limitCashAmount(): Optional = limitCashAmount.getOptional("limit_cash_amount") + + /** + * The number of cash spend velocity impacting transactions may not exceed this limit in the + * period. Transactions exceeding this limit will be declined. A cash velocity impacting + * transaction is an ATM withdrawal, cash disbursement, or purchase with cashback that has been + * authorized, and optionally settled, or a force post (a transaction that settled without prior + * authorization). + * + * @throws LithicInvalidDataException if the JSON field has an unexpected type (e.g. if the + * server responded with an unexpected value). + */ + fun limitCashCount(): Optional = limitCashCount.getOptional("limit_cash_count") + /** * The number of spend velocity impacting transactions may not exceed this limit in the period. * Transactions exceeding this limit will be declined. A spend velocity impacting transaction is @@ -116,6 +156,24 @@ private constructor( */ @JsonProperty("limit_amount") @ExcludeMissing fun _limitAmount(): JsonField = limitAmount + /** + * Returns the raw JSON value of [limitCashAmount]. + * + * Unlike [limitCashAmount], this method doesn't throw if the JSON field has an unexpected type. + */ + @JsonProperty("limit_cash_amount") + @ExcludeMissing + fun _limitCashAmount(): JsonField = limitCashAmount + + /** + * Returns the raw JSON value of [limitCashCount]. + * + * Unlike [limitCashCount], this method doesn't throw if the JSON field has an unexpected type. + */ + @JsonProperty("limit_cash_count") + @ExcludeMissing + fun _limitCashCount(): JsonField = limitCashCount + /** * Returns the raw JSON value of [limitCount]. * @@ -156,6 +214,8 @@ private constructor( private var scope: JsonField? = null private var filters: JsonField = JsonMissing.of() private var limitAmount: JsonField = JsonMissing.of() + private var limitCashAmount: JsonField = JsonMissing.of() + private var limitCashCount: JsonField = JsonMissing.of() private var limitCount: JsonField = JsonMissing.of() private var additionalProperties: MutableMap = mutableMapOf() @@ -165,6 +225,8 @@ private constructor( scope = velocityLimitParams.scope filters = velocityLimitParams.filters limitAmount = velocityLimitParams.limitAmount + limitCashAmount = velocityLimitParams.limitCashAmount + limitCashCount = velocityLimitParams.limitCashCount limitCount = velocityLimitParams.limitCount additionalProperties = velocityLimitParams.additionalProperties.toMutableMap() } @@ -262,6 +324,69 @@ private constructor( */ fun limitAmount(limitAmount: JsonField) = apply { this.limitAmount = limitAmount } + /** + * The maximum amount of cash spend velocity allowed in the period in minor units (the + * smallest unit of a currency, e.g. cents for USD). Cash spend covers ATM withdrawals, cash + * disbursements, and purchases with cashback. Transactions exceeding this limit will be + * declined. + */ + fun limitCashAmount(limitCashAmount: Long?) = + limitCashAmount(JsonField.ofNullable(limitCashAmount)) + + /** + * Alias for [Builder.limitCashAmount]. + * + * This unboxed primitive overload exists for backwards compatibility. + */ + fun limitCashAmount(limitCashAmount: Long) = limitCashAmount(limitCashAmount as Long?) + + /** Alias for calling [Builder.limitCashAmount] with `limitCashAmount.orElse(null)`. */ + fun limitCashAmount(limitCashAmount: Optional) = + limitCashAmount(limitCashAmount.getOrNull()) + + /** + * Sets [Builder.limitCashAmount] to an arbitrary JSON value. + * + * You should usually call [Builder.limitCashAmount] with a well-typed [Long] value instead. + * This method is primarily for setting the field to an undocumented or not yet supported + * value. + */ + fun limitCashAmount(limitCashAmount: JsonField) = apply { + this.limitCashAmount = limitCashAmount + } + + /** + * The number of cash spend velocity impacting transactions may not exceed this limit in the + * period. Transactions exceeding this limit will be declined. A cash velocity impacting + * transaction is an ATM withdrawal, cash disbursement, or purchase with cashback that has + * been authorized, and optionally settled, or a force post (a transaction that settled + * without prior authorization). + */ + fun limitCashCount(limitCashCount: Long?) = + limitCashCount(JsonField.ofNullable(limitCashCount)) + + /** + * Alias for [Builder.limitCashCount]. + * + * This unboxed primitive overload exists for backwards compatibility. + */ + fun limitCashCount(limitCashCount: Long) = limitCashCount(limitCashCount as Long?) + + /** Alias for calling [Builder.limitCashCount] with `limitCashCount.orElse(null)`. */ + fun limitCashCount(limitCashCount: Optional) = + limitCashCount(limitCashCount.getOrNull()) + + /** + * Sets [Builder.limitCashCount] to an arbitrary JSON value. + * + * You should usually call [Builder.limitCashCount] with a well-typed [Long] value instead. + * This method is primarily for setting the field to an undocumented or not yet supported + * value. + */ + fun limitCashCount(limitCashCount: JsonField) = apply { + this.limitCashCount = limitCashCount + } + /** * The number of spend velocity impacting transactions may not exceed this limit in the * period. Transactions exceeding this limit will be declined. A spend velocity impacting @@ -326,6 +451,8 @@ private constructor( checkRequired("scope", scope), filters, limitAmount, + limitCashAmount, + limitCashCount, limitCount, additionalProperties.toMutableMap(), ) @@ -350,6 +477,8 @@ private constructor( scope().validate() filters().ifPresent { it.validate() } limitAmount() + limitCashAmount() + limitCashCount() limitCount() validated = true } @@ -373,6 +502,8 @@ private constructor( (scope.asKnown().getOrNull()?.validity() ?: 0) + (filters.asKnown().getOrNull()?.validity() ?: 0) + (if (limitAmount.asKnown().isPresent) 1 else 0) + + (if (limitCashAmount.asKnown().isPresent) 1 else 0) + + (if (limitCashCount.asKnown().isPresent) 1 else 0) + (if (limitCount.asKnown().isPresent) 1 else 0) /** The scope the velocity is calculated for */ @@ -524,16 +655,27 @@ private constructor( scope == other.scope && filters == other.filters && limitAmount == other.limitAmount && + limitCashAmount == other.limitCashAmount && + limitCashCount == other.limitCashCount && limitCount == other.limitCount && additionalProperties == other.additionalProperties } private val hashCode: Int by lazy { - Objects.hash(period, scope, filters, limitAmount, limitCount, additionalProperties) + Objects.hash( + period, + scope, + filters, + limitAmount, + limitCashAmount, + limitCashCount, + limitCount, + additionalProperties, + ) } override fun hashCode(): Int = hashCode override fun toString() = - "VelocityLimitParams{period=$period, scope=$scope, filters=$filters, limitAmount=$limitAmount, limitCount=$limitCount, additionalProperties=$additionalProperties}" + "VelocityLimitParams{period=$period, scope=$scope, filters=$filters, limitAmount=$limitAmount, limitCashAmount=$limitCashAmount, limitCashCount=$limitCashCount, limitCount=$limitCount, additionalProperties=$additionalProperties}" } diff --git a/lithic-java-core/src/test/kotlin/com/lithic/api/models/VelocityLimitParamsTest.kt b/lithic-java-core/src/test/kotlin/com/lithic/api/models/VelocityLimitParamsTest.kt index 91d3b1462..41610a04a 100644 --- a/lithic-java-core/src/test/kotlin/com/lithic/api/models/VelocityLimitParamsTest.kt +++ b/lithic-java-core/src/test/kotlin/com/lithic/api/models/VelocityLimitParamsTest.kt @@ -30,6 +30,8 @@ internal class VelocityLimitParamsTest { .build() ) .limitAmount(10000L) + .limitCashAmount(5000L) + .limitCashCount(0L) .limitCount(0L) .build() @@ -54,6 +56,8 @@ internal class VelocityLimitParamsTest { .build() ) assertThat(velocityLimitParams.limitAmount()).contains(10000L) + assertThat(velocityLimitParams.limitCashAmount()).contains(5000L) + assertThat(velocityLimitParams.limitCashCount()).contains(0L) assertThat(velocityLimitParams.limitCount()).contains(0L) } @@ -79,6 +83,8 @@ internal class VelocityLimitParamsTest { .build() ) .limitAmount(10000L) + .limitCashAmount(5000L) + .limitCashCount(0L) .limitCount(0L) .build() From 3ac18071466c0d8e43570f4cdf878ec1a506a40c Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 4 Aug 2026 14:24:28 +0000 Subject: [PATCH 3/6] feat(api): add blockchain_addresses field to FinancialAccount and webhook events --- .stats.yml | 4 +- .../com/lithic/api/models/FinancialAccount.kt | 173 +++++++++++++++++- .../FinancialAccountCreatedWebhookEvent.kt | 62 ++++++- .../FinancialAccountUpdatedWebhookEvent.kt | 62 ++++++- ...FinancialAccountCreatedWebhookEventTest.kt | 26 +++ .../FinancialAccountListPageResponseTest.kt | 25 +++ .../lithic/api/models/FinancialAccountTest.kt | 26 +++ ...FinancialAccountUpdatedWebhookEventTest.kt | 26 +++ .../api/models/ParsedWebhookEventTest.kt | 32 ++++ 9 files changed, 431 insertions(+), 5 deletions(-) diff --git a/.stats.yml b/.stats.yml index 51c96b22b..12c884dec 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 214 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic/lithic-1d6c7b672aa49dfe0fe5175965307f63a0ed42c13697b2f9f3b9275f32331937.yml -openapi_spec_hash: 06e73960c7506484c589d718fa1ddad8 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic/lithic-81febc26f7987ef8f74f2038dddd4799a1e77b2c64d2fe36c2c9f2eb5079476b.yml +openapi_spec_hash: 91e4b19977ca68b988862e967be57d26 config_hash: 337a99d8cc30006358b7bc2531401669 diff --git a/lithic-java-core/src/main/kotlin/com/lithic/api/models/FinancialAccount.kt b/lithic-java-core/src/main/kotlin/com/lithic/api/models/FinancialAccount.kt index 74626780e..91d86a59a 100644 --- a/lithic-java-core/src/main/kotlin/com/lithic/api/models/FinancialAccount.kt +++ b/lithic-java-core/src/main/kotlin/com/lithic/api/models/FinancialAccount.kt @@ -12,6 +12,7 @@ import com.lithic.api.core.JsonField import com.lithic.api.core.JsonMissing import com.lithic.api.core.JsonValue import com.lithic.api.core.checkRequired +import com.lithic.api.core.toImmutable import com.lithic.api.errors.LithicInvalidDataException import java.time.OffsetDateTime import java.util.Collections @@ -34,6 +35,7 @@ private constructor( private val updated: JsonField, private val userDefinedStatus: JsonField, private val accountNumber: JsonField, + private val blockchainAddresses: JsonField, private val routingNumber: JsonField, private val additionalProperties: MutableMap, ) { @@ -70,6 +72,9 @@ private constructor( @JsonProperty("account_number") @ExcludeMissing accountNumber: JsonField = JsonMissing.of(), + @JsonProperty("blockchain_addresses") + @ExcludeMissing + blockchainAddresses: JsonField = JsonMissing.of(), @JsonProperty("routing_number") @ExcludeMissing routingNumber: JsonField = JsonMissing.of(), @@ -86,6 +91,7 @@ private constructor( updated, userDefinedStatus, accountNumber, + blockchainAddresses, routingNumber, mutableMapOf(), ) @@ -173,6 +179,16 @@ private constructor( */ fun accountNumber(): Optional = accountNumber.getOptional("account_number") + /** + * Provisioned blockchain deposit addresses for this financial account, keyed by the blockchain + * network that each address belongs to + * + * @throws LithicInvalidDataException if the JSON field has an unexpected type (e.g. if the + * server responded with an unexpected value). + */ + fun blockchainAddresses(): Optional = + blockchainAddresses.getOptional("blockchain_addresses") + /** * @throws LithicInvalidDataException if the JSON field has an unexpected type (e.g. if the * server responded with an unexpected value). @@ -279,6 +295,16 @@ private constructor( @ExcludeMissing fun _accountNumber(): JsonField = accountNumber + /** + * Returns the raw JSON value of [blockchainAddresses]. + * + * Unlike [blockchainAddresses], this method doesn't throw if the JSON field has an unexpected + * type. + */ + @JsonProperty("blockchain_addresses") + @ExcludeMissing + fun _blockchainAddresses(): JsonField = blockchainAddresses + /** * Returns the raw JSON value of [routingNumber]. * @@ -338,6 +364,7 @@ private constructor( private var updated: JsonField? = null private var userDefinedStatus: JsonField? = null private var accountNumber: JsonField = JsonMissing.of() + private var blockchainAddresses: JsonField = JsonMissing.of() private var routingNumber: JsonField = JsonMissing.of() private var additionalProperties: MutableMap = mutableMapOf() @@ -355,6 +382,7 @@ private constructor( updated = financialAccount.updated userDefinedStatus = financialAccount.userDefinedStatus accountNumber = financialAccount.accountNumber + blockchainAddresses = financialAccount.blockchainAddresses routingNumber = financialAccount.routingNumber additionalProperties = financialAccount.additionalProperties.toMutableMap() } @@ -534,6 +562,30 @@ private constructor( this.accountNumber = accountNumber } + /** + * Provisioned blockchain deposit addresses for this financial account, keyed by the + * blockchain network that each address belongs to + */ + fun blockchainAddresses(blockchainAddresses: BlockchainAddresses?) = + blockchainAddresses(JsonField.ofNullable(blockchainAddresses)) + + /** + * Alias for calling [Builder.blockchainAddresses] with `blockchainAddresses.orElse(null)`. + */ + fun blockchainAddresses(blockchainAddresses: Optional) = + blockchainAddresses(blockchainAddresses.getOrNull()) + + /** + * Sets [Builder.blockchainAddresses] to an arbitrary JSON value. + * + * You should usually call [Builder.blockchainAddresses] with a well-typed + * [BlockchainAddresses] value instead. This method is primarily for setting the field to an + * undocumented or not yet supported value. + */ + fun blockchainAddresses(blockchainAddresses: JsonField) = apply { + this.blockchainAddresses = blockchainAddresses + } + fun routingNumber(routingNumber: String?) = routingNumber(JsonField.ofNullable(routingNumber)) @@ -607,6 +659,7 @@ private constructor( checkRequired("updated", updated), checkRequired("userDefinedStatus", userDefinedStatus), accountNumber, + blockchainAddresses, routingNumber, additionalProperties.toMutableMap(), ) @@ -639,6 +692,7 @@ private constructor( updated() userDefinedStatus() accountNumber() + blockchainAddresses().ifPresent { it.validate() } routingNumber() validated = true } @@ -670,6 +724,7 @@ private constructor( (if (updated.asKnown().isPresent) 1 else 0) + (if (userDefinedStatus.asKnown().isPresent) 1 else 0) + (if (accountNumber.asKnown().isPresent) 1 else 0) + + (blockchainAddresses.asKnown().getOrNull()?.validity() ?: 0) + (if (routingNumber.asKnown().isPresent) 1 else 0) class FinancialAccountCreditConfig @@ -1776,6 +1831,120 @@ private constructor( override fun toString() = value.toString() } + /** + * Provisioned blockchain deposit addresses for this financial account, keyed by the blockchain + * network that each address belongs to + */ + class BlockchainAddresses + @JsonCreator + private constructor( + @com.fasterxml.jackson.annotation.JsonValue + private val additionalProperties: Map + ) { + + @JsonAnyGetter + @ExcludeMissing + fun _additionalProperties(): Map = additionalProperties + + fun toBuilder() = Builder().from(this) + + companion object { + + /** Returns a mutable builder for constructing an instance of [BlockchainAddresses]. */ + @JvmStatic fun builder() = Builder() + } + + /** A builder for [BlockchainAddresses]. */ + class Builder internal constructor() { + + private var additionalProperties: MutableMap = mutableMapOf() + + @JvmSynthetic + internal fun from(blockchainAddresses: BlockchainAddresses) = apply { + additionalProperties = blockchainAddresses.additionalProperties.toMutableMap() + } + + fun additionalProperties(additionalProperties: Map) = apply { + this.additionalProperties.clear() + putAllAdditionalProperties(additionalProperties) + } + + fun putAdditionalProperty(key: String, value: JsonValue) = apply { + additionalProperties.put(key, value) + } + + fun putAllAdditionalProperties(additionalProperties: Map) = apply { + this.additionalProperties.putAll(additionalProperties) + } + + fun removeAdditionalProperty(key: String) = apply { additionalProperties.remove(key) } + + fun removeAllAdditionalProperties(keys: Set) = apply { + keys.forEach(::removeAdditionalProperty) + } + + /** + * Returns an immutable instance of [BlockchainAddresses]. + * + * Further updates to this [Builder] will not mutate the returned instance. + */ + fun build(): BlockchainAddresses = + BlockchainAddresses(additionalProperties.toImmutable()) + } + + private var validated: Boolean = false + + /** + * Validates that the types of all values in this object match their expected types + * recursively. + * + * This method is _not_ forwards compatible with new types from the API for existing fields. + * + * @throws LithicInvalidDataException if any value type in this object doesn't match its + * expected type. + */ + fun validate(): BlockchainAddresses = apply { + if (validated) { + return@apply + } + + validated = true + } + + fun isValid(): Boolean = + try { + validate() + true + } catch (e: LithicInvalidDataException) { + false + } + + /** + * Returns a score indicating how many valid values are contained in this object + * recursively. + * + * Used for best match union deserialization. + */ + @JvmSynthetic + internal fun validity(): Int = + additionalProperties.count { (_, value) -> !value.isNull() && !value.isMissing() } + + override fun equals(other: Any?): Boolean { + if (this === other) { + return true + } + + return other is BlockchainAddresses && + additionalProperties == other.additionalProperties + } + + private val hashCode: Int by lazy { Objects.hash(additionalProperties) } + + override fun hashCode(): Int = hashCode + + override fun toString() = "BlockchainAddresses{additionalProperties=$additionalProperties}" + } + override fun equals(other: Any?): Boolean { if (this === other) { return true @@ -1794,6 +1963,7 @@ private constructor( updated == other.updated && userDefinedStatus == other.userDefinedStatus && accountNumber == other.accountNumber && + blockchainAddresses == other.blockchainAddresses && routingNumber == other.routingNumber && additionalProperties == other.additionalProperties } @@ -1812,6 +1982,7 @@ private constructor( updated, userDefinedStatus, accountNumber, + blockchainAddresses, routingNumber, additionalProperties, ) @@ -1820,5 +1991,5 @@ private constructor( override fun hashCode(): Int = hashCode override fun toString() = - "FinancialAccount{token=$token, accountToken=$accountToken, created=$created, creditConfiguration=$creditConfiguration, isForBenefitOf=$isForBenefitOf, nickname=$nickname, status=$status, substatus=$substatus, type=$type, updated=$updated, userDefinedStatus=$userDefinedStatus, accountNumber=$accountNumber, routingNumber=$routingNumber, additionalProperties=$additionalProperties}" + "FinancialAccount{token=$token, accountToken=$accountToken, created=$created, creditConfiguration=$creditConfiguration, isForBenefitOf=$isForBenefitOf, nickname=$nickname, status=$status, substatus=$substatus, type=$type, updated=$updated, userDefinedStatus=$userDefinedStatus, accountNumber=$accountNumber, blockchainAddresses=$blockchainAddresses, routingNumber=$routingNumber, additionalProperties=$additionalProperties}" } diff --git a/lithic-java-core/src/main/kotlin/com/lithic/api/models/FinancialAccountCreatedWebhookEvent.kt b/lithic-java-core/src/main/kotlin/com/lithic/api/models/FinancialAccountCreatedWebhookEvent.kt index 1e252bc70..7955d55a2 100644 --- a/lithic-java-core/src/main/kotlin/com/lithic/api/models/FinancialAccountCreatedWebhookEvent.kt +++ b/lithic-java-core/src/main/kotlin/com/lithic/api/models/FinancialAccountCreatedWebhookEvent.kt @@ -34,6 +34,7 @@ private constructor( private val updated: JsonField, private val userDefinedStatus: JsonField, private val accountNumber: JsonField, + private val blockchainAddresses: JsonField, private val routingNumber: JsonField, private val eventType: JsonField, private val additionalProperties: MutableMap, @@ -74,6 +75,9 @@ private constructor( @JsonProperty("account_number") @ExcludeMissing accountNumber: JsonField = JsonMissing.of(), + @JsonProperty("blockchain_addresses") + @ExcludeMissing + blockchainAddresses: JsonField = JsonMissing.of(), @JsonProperty("routing_number") @ExcludeMissing routingNumber: JsonField = JsonMissing.of(), @@ -93,6 +97,7 @@ private constructor( updated, userDefinedStatus, accountNumber, + blockchainAddresses, routingNumber, eventType, mutableMapOf(), @@ -112,6 +117,7 @@ private constructor( .updated(updated) .userDefinedStatus(userDefinedStatus) .accountNumber(accountNumber) + .blockchainAddresses(blockchainAddresses) .routingNumber(routingNumber) .build() @@ -199,6 +205,16 @@ private constructor( */ fun accountNumber(): Optional = accountNumber.getOptional("account_number") + /** + * Provisioned blockchain deposit addresses for this financial account, keyed by the blockchain + * network that each address belongs to + * + * @throws LithicInvalidDataException if the JSON field has an unexpected type (e.g. if the + * server responded with an unexpected value). + */ + fun blockchainAddresses(): Optional = + blockchainAddresses.getOptional("blockchain_addresses") + /** * @throws LithicInvalidDataException if the JSON field has an unexpected type (e.g. if the * server responded with an unexpected value). @@ -314,6 +330,17 @@ private constructor( @ExcludeMissing fun _accountNumber(): JsonField = accountNumber + /** + * Returns the raw JSON value of [blockchainAddresses]. + * + * Unlike [blockchainAddresses], this method doesn't throw if the JSON field has an unexpected + * type. + */ + @JsonProperty("blockchain_addresses") + @ExcludeMissing + fun _blockchainAddresses(): JsonField = + blockchainAddresses + /** * Returns the raw JSON value of [routingNumber]. * @@ -383,6 +410,8 @@ private constructor( private var updated: JsonField? = null private var userDefinedStatus: JsonField? = null private var accountNumber: JsonField = JsonMissing.of() + private var blockchainAddresses: JsonField = + JsonMissing.of() private var routingNumber: JsonField = JsonMissing.of() private var eventType: JsonField? = null private var additionalProperties: MutableMap = mutableMapOf() @@ -403,6 +432,7 @@ private constructor( updated = financialAccountCreatedWebhookEvent.updated userDefinedStatus = financialAccountCreatedWebhookEvent.userDefinedStatus accountNumber = financialAccountCreatedWebhookEvent.accountNumber + blockchainAddresses = financialAccountCreatedWebhookEvent.blockchainAddresses routingNumber = financialAccountCreatedWebhookEvent.routingNumber eventType = financialAccountCreatedWebhookEvent.eventType additionalProperties = @@ -588,6 +618,31 @@ private constructor( this.accountNumber = accountNumber } + /** + * Provisioned blockchain deposit addresses for this financial account, keyed by the + * blockchain network that each address belongs to + */ + fun blockchainAddresses(blockchainAddresses: FinancialAccount.BlockchainAddresses?) = + blockchainAddresses(JsonField.ofNullable(blockchainAddresses)) + + /** + * Alias for calling [Builder.blockchainAddresses] with `blockchainAddresses.orElse(null)`. + */ + fun blockchainAddresses( + blockchainAddresses: Optional + ) = blockchainAddresses(blockchainAddresses.getOrNull()) + + /** + * Sets [Builder.blockchainAddresses] to an arbitrary JSON value. + * + * You should usually call [Builder.blockchainAddresses] with a well-typed + * [FinancialAccount.BlockchainAddresses] value instead. This method is primarily for + * setting the field to an undocumented or not yet supported value. + */ + fun blockchainAddresses( + blockchainAddresses: JsonField + ) = apply { this.blockchainAddresses = blockchainAddresses } + fun routingNumber(routingNumber: String?) = routingNumber(JsonField.ofNullable(routingNumber)) @@ -674,6 +729,7 @@ private constructor( checkRequired("updated", updated), checkRequired("userDefinedStatus", userDefinedStatus), accountNumber, + blockchainAddresses, routingNumber, checkRequired("eventType", eventType), additionalProperties.toMutableMap(), @@ -707,6 +763,7 @@ private constructor( updated() userDefinedStatus() accountNumber() + blockchainAddresses().ifPresent { it.validate() } routingNumber() eventType().validate() validated = true @@ -739,6 +796,7 @@ private constructor( (if (updated.asKnown().isPresent) 1 else 0) + (if (userDefinedStatus.asKnown().isPresent) 1 else 0) + (if (accountNumber.asKnown().isPresent) 1 else 0) + + (blockchainAddresses.asKnown().getOrNull()?.validity() ?: 0) + (if (routingNumber.asKnown().isPresent) 1 else 0) + (eventType.asKnown().getOrNull()?.validity() ?: 0) @@ -891,6 +949,7 @@ private constructor( updated == other.updated && userDefinedStatus == other.userDefinedStatus && accountNumber == other.accountNumber && + blockchainAddresses == other.blockchainAddresses && routingNumber == other.routingNumber && eventType == other.eventType && additionalProperties == other.additionalProperties @@ -910,6 +969,7 @@ private constructor( updated, userDefinedStatus, accountNumber, + blockchainAddresses, routingNumber, eventType, additionalProperties, @@ -919,5 +979,5 @@ private constructor( override fun hashCode(): Int = hashCode override fun toString() = - "FinancialAccountCreatedWebhookEvent{token=$token, accountToken=$accountToken, created=$created, creditConfiguration=$creditConfiguration, isForBenefitOf=$isForBenefitOf, nickname=$nickname, status=$status, substatus=$substatus, type=$type, updated=$updated, userDefinedStatus=$userDefinedStatus, accountNumber=$accountNumber, routingNumber=$routingNumber, eventType=$eventType, additionalProperties=$additionalProperties}" + "FinancialAccountCreatedWebhookEvent{token=$token, accountToken=$accountToken, created=$created, creditConfiguration=$creditConfiguration, isForBenefitOf=$isForBenefitOf, nickname=$nickname, status=$status, substatus=$substatus, type=$type, updated=$updated, userDefinedStatus=$userDefinedStatus, accountNumber=$accountNumber, blockchainAddresses=$blockchainAddresses, routingNumber=$routingNumber, eventType=$eventType, additionalProperties=$additionalProperties}" } diff --git a/lithic-java-core/src/main/kotlin/com/lithic/api/models/FinancialAccountUpdatedWebhookEvent.kt b/lithic-java-core/src/main/kotlin/com/lithic/api/models/FinancialAccountUpdatedWebhookEvent.kt index 48d29c4ca..0285afdf5 100644 --- a/lithic-java-core/src/main/kotlin/com/lithic/api/models/FinancialAccountUpdatedWebhookEvent.kt +++ b/lithic-java-core/src/main/kotlin/com/lithic/api/models/FinancialAccountUpdatedWebhookEvent.kt @@ -34,6 +34,7 @@ private constructor( private val updated: JsonField, private val userDefinedStatus: JsonField, private val accountNumber: JsonField, + private val blockchainAddresses: JsonField, private val routingNumber: JsonField, private val eventType: JsonField, private val additionalProperties: MutableMap, @@ -74,6 +75,9 @@ private constructor( @JsonProperty("account_number") @ExcludeMissing accountNumber: JsonField = JsonMissing.of(), + @JsonProperty("blockchain_addresses") + @ExcludeMissing + blockchainAddresses: JsonField = JsonMissing.of(), @JsonProperty("routing_number") @ExcludeMissing routingNumber: JsonField = JsonMissing.of(), @@ -93,6 +97,7 @@ private constructor( updated, userDefinedStatus, accountNumber, + blockchainAddresses, routingNumber, eventType, mutableMapOf(), @@ -112,6 +117,7 @@ private constructor( .updated(updated) .userDefinedStatus(userDefinedStatus) .accountNumber(accountNumber) + .blockchainAddresses(blockchainAddresses) .routingNumber(routingNumber) .build() @@ -199,6 +205,16 @@ private constructor( */ fun accountNumber(): Optional = accountNumber.getOptional("account_number") + /** + * Provisioned blockchain deposit addresses for this financial account, keyed by the blockchain + * network that each address belongs to + * + * @throws LithicInvalidDataException if the JSON field has an unexpected type (e.g. if the + * server responded with an unexpected value). + */ + fun blockchainAddresses(): Optional = + blockchainAddresses.getOptional("blockchain_addresses") + /** * @throws LithicInvalidDataException if the JSON field has an unexpected type (e.g. if the * server responded with an unexpected value). @@ -314,6 +330,17 @@ private constructor( @ExcludeMissing fun _accountNumber(): JsonField = accountNumber + /** + * Returns the raw JSON value of [blockchainAddresses]. + * + * Unlike [blockchainAddresses], this method doesn't throw if the JSON field has an unexpected + * type. + */ + @JsonProperty("blockchain_addresses") + @ExcludeMissing + fun _blockchainAddresses(): JsonField = + blockchainAddresses + /** * Returns the raw JSON value of [routingNumber]. * @@ -383,6 +410,8 @@ private constructor( private var updated: JsonField? = null private var userDefinedStatus: JsonField? = null private var accountNumber: JsonField = JsonMissing.of() + private var blockchainAddresses: JsonField = + JsonMissing.of() private var routingNumber: JsonField = JsonMissing.of() private var eventType: JsonField? = null private var additionalProperties: MutableMap = mutableMapOf() @@ -403,6 +432,7 @@ private constructor( updated = financialAccountUpdatedWebhookEvent.updated userDefinedStatus = financialAccountUpdatedWebhookEvent.userDefinedStatus accountNumber = financialAccountUpdatedWebhookEvent.accountNumber + blockchainAddresses = financialAccountUpdatedWebhookEvent.blockchainAddresses routingNumber = financialAccountUpdatedWebhookEvent.routingNumber eventType = financialAccountUpdatedWebhookEvent.eventType additionalProperties = @@ -588,6 +618,31 @@ private constructor( this.accountNumber = accountNumber } + /** + * Provisioned blockchain deposit addresses for this financial account, keyed by the + * blockchain network that each address belongs to + */ + fun blockchainAddresses(blockchainAddresses: FinancialAccount.BlockchainAddresses?) = + blockchainAddresses(JsonField.ofNullable(blockchainAddresses)) + + /** + * Alias for calling [Builder.blockchainAddresses] with `blockchainAddresses.orElse(null)`. + */ + fun blockchainAddresses( + blockchainAddresses: Optional + ) = blockchainAddresses(blockchainAddresses.getOrNull()) + + /** + * Sets [Builder.blockchainAddresses] to an arbitrary JSON value. + * + * You should usually call [Builder.blockchainAddresses] with a well-typed + * [FinancialAccount.BlockchainAddresses] value instead. This method is primarily for + * setting the field to an undocumented or not yet supported value. + */ + fun blockchainAddresses( + blockchainAddresses: JsonField + ) = apply { this.blockchainAddresses = blockchainAddresses } + fun routingNumber(routingNumber: String?) = routingNumber(JsonField.ofNullable(routingNumber)) @@ -674,6 +729,7 @@ private constructor( checkRequired("updated", updated), checkRequired("userDefinedStatus", userDefinedStatus), accountNumber, + blockchainAddresses, routingNumber, checkRequired("eventType", eventType), additionalProperties.toMutableMap(), @@ -707,6 +763,7 @@ private constructor( updated() userDefinedStatus() accountNumber() + blockchainAddresses().ifPresent { it.validate() } routingNumber() eventType().validate() validated = true @@ -739,6 +796,7 @@ private constructor( (if (updated.asKnown().isPresent) 1 else 0) + (if (userDefinedStatus.asKnown().isPresent) 1 else 0) + (if (accountNumber.asKnown().isPresent) 1 else 0) + + (blockchainAddresses.asKnown().getOrNull()?.validity() ?: 0) + (if (routingNumber.asKnown().isPresent) 1 else 0) + (eventType.asKnown().getOrNull()?.validity() ?: 0) @@ -891,6 +949,7 @@ private constructor( updated == other.updated && userDefinedStatus == other.userDefinedStatus && accountNumber == other.accountNumber && + blockchainAddresses == other.blockchainAddresses && routingNumber == other.routingNumber && eventType == other.eventType && additionalProperties == other.additionalProperties @@ -910,6 +969,7 @@ private constructor( updated, userDefinedStatus, accountNumber, + blockchainAddresses, routingNumber, eventType, additionalProperties, @@ -919,5 +979,5 @@ private constructor( override fun hashCode(): Int = hashCode override fun toString() = - "FinancialAccountUpdatedWebhookEvent{token=$token, accountToken=$accountToken, created=$created, creditConfiguration=$creditConfiguration, isForBenefitOf=$isForBenefitOf, nickname=$nickname, status=$status, substatus=$substatus, type=$type, updated=$updated, userDefinedStatus=$userDefinedStatus, accountNumber=$accountNumber, routingNumber=$routingNumber, eventType=$eventType, additionalProperties=$additionalProperties}" + "FinancialAccountUpdatedWebhookEvent{token=$token, accountToken=$accountToken, created=$created, creditConfiguration=$creditConfiguration, isForBenefitOf=$isForBenefitOf, nickname=$nickname, status=$status, substatus=$substatus, type=$type, updated=$updated, userDefinedStatus=$userDefinedStatus, accountNumber=$accountNumber, blockchainAddresses=$blockchainAddresses, routingNumber=$routingNumber, eventType=$eventType, additionalProperties=$additionalProperties}" } diff --git a/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountCreatedWebhookEventTest.kt b/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountCreatedWebhookEventTest.kt index 4b0ee89a9..be975bc13 100644 --- a/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountCreatedWebhookEventTest.kt +++ b/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountCreatedWebhookEventTest.kt @@ -3,6 +3,7 @@ package com.lithic.api.models import com.fasterxml.jackson.module.kotlin.jacksonTypeRef +import com.lithic.api.core.JsonValue import com.lithic.api.core.jsonMapper import java.time.OffsetDateTime import org.assertj.core.api.Assertions.assertThat @@ -40,6 +41,14 @@ internal class FinancialAccountCreatedWebhookEventTest { .updated(OffsetDateTime.parse("2019-12-27T18:11:19.117Z")) .userDefinedStatus("user_defined_status") .accountNumber("account_number") + .blockchainAddresses( + FinancialAccount.BlockchainAddresses.builder() + .putAdditionalProperty( + "ETH", + JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), + ) + .build() + ) .routingNumber("routing_number") .eventType(FinancialAccountCreatedWebhookEvent.EventType.FINANCIAL_ACCOUNT_CREATED) .build() @@ -79,6 +88,15 @@ internal class FinancialAccountCreatedWebhookEventTest { assertThat(financialAccountCreatedWebhookEvent.userDefinedStatus()) .contains("user_defined_status") assertThat(financialAccountCreatedWebhookEvent.accountNumber()).contains("account_number") + assertThat(financialAccountCreatedWebhookEvent.blockchainAddresses()) + .contains( + FinancialAccount.BlockchainAddresses.builder() + .putAdditionalProperty( + "ETH", + JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), + ) + .build() + ) assertThat(financialAccountCreatedWebhookEvent.routingNumber()).contains("routing_number") assertThat(financialAccountCreatedWebhookEvent.eventType()) .isEqualTo(FinancialAccountCreatedWebhookEvent.EventType.FINANCIAL_ACCOUNT_CREATED) @@ -115,6 +133,14 @@ internal class FinancialAccountCreatedWebhookEventTest { .updated(OffsetDateTime.parse("2019-12-27T18:11:19.117Z")) .userDefinedStatus("user_defined_status") .accountNumber("account_number") + .blockchainAddresses( + FinancialAccount.BlockchainAddresses.builder() + .putAdditionalProperty( + "ETH", + JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), + ) + .build() + ) .routingNumber("routing_number") .eventType(FinancialAccountCreatedWebhookEvent.EventType.FINANCIAL_ACCOUNT_CREATED) .build() diff --git a/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountListPageResponseTest.kt b/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountListPageResponseTest.kt index d145b6c5c..fe20ef1ab 100644 --- a/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountListPageResponseTest.kt +++ b/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountListPageResponseTest.kt @@ -3,6 +3,7 @@ package com.lithic.api.models import com.fasterxml.jackson.module.kotlin.jacksonTypeRef +import com.lithic.api.core.JsonValue import com.lithic.api.core.jsonMapper import java.time.OffsetDateTime import org.assertj.core.api.Assertions.assertThat @@ -44,6 +45,14 @@ internal class FinancialAccountListPageResponseTest { .updated(OffsetDateTime.parse("2019-12-27T18:11:19.117Z")) .userDefinedStatus("user_defined_status") .accountNumber("account_number") + .blockchainAddresses( + FinancialAccount.BlockchainAddresses.builder() + .putAdditionalProperty( + "ETH", + JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), + ) + .build() + ) .routingNumber("routing_number") .build() ) @@ -79,6 +88,14 @@ internal class FinancialAccountListPageResponseTest { .updated(OffsetDateTime.parse("2019-12-27T18:11:19.117Z")) .userDefinedStatus("user_defined_status") .accountNumber("account_number") + .blockchainAddresses( + FinancialAccount.BlockchainAddresses.builder() + .putAdditionalProperty( + "ETH", + JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), + ) + .build() + ) .routingNumber("routing_number") .build() ) @@ -120,6 +137,14 @@ internal class FinancialAccountListPageResponseTest { .updated(OffsetDateTime.parse("2019-12-27T18:11:19.117Z")) .userDefinedStatus("user_defined_status") .accountNumber("account_number") + .blockchainAddresses( + FinancialAccount.BlockchainAddresses.builder() + .putAdditionalProperty( + "ETH", + JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), + ) + .build() + ) .routingNumber("routing_number") .build() ) diff --git a/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountTest.kt b/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountTest.kt index 98eb1f5ac..c2b6a0fc6 100644 --- a/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountTest.kt +++ b/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountTest.kt @@ -3,6 +3,7 @@ package com.lithic.api.models import com.fasterxml.jackson.module.kotlin.jacksonTypeRef +import com.lithic.api.core.JsonValue import com.lithic.api.core.jsonMapper import java.time.OffsetDateTime import org.assertj.core.api.Assertions.assertThat @@ -40,6 +41,14 @@ internal class FinancialAccountTest { .updated(OffsetDateTime.parse("2019-12-27T18:11:19.117Z")) .userDefinedStatus("user_defined_status") .accountNumber("account_number") + .blockchainAddresses( + FinancialAccount.BlockchainAddresses.builder() + .putAdditionalProperty( + "ETH", + JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), + ) + .build() + ) .routingNumber("routing_number") .build() @@ -74,6 +83,15 @@ internal class FinancialAccountTest { .isEqualTo(OffsetDateTime.parse("2019-12-27T18:11:19.117Z")) assertThat(financialAccount.userDefinedStatus()).contains("user_defined_status") assertThat(financialAccount.accountNumber()).contains("account_number") + assertThat(financialAccount.blockchainAddresses()) + .contains( + FinancialAccount.BlockchainAddresses.builder() + .putAdditionalProperty( + "ETH", + JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), + ) + .build() + ) assertThat(financialAccount.routingNumber()).contains("routing_number") } @@ -108,6 +126,14 @@ internal class FinancialAccountTest { .updated(OffsetDateTime.parse("2019-12-27T18:11:19.117Z")) .userDefinedStatus("user_defined_status") .accountNumber("account_number") + .blockchainAddresses( + FinancialAccount.BlockchainAddresses.builder() + .putAdditionalProperty( + "ETH", + JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), + ) + .build() + ) .routingNumber("routing_number") .build() diff --git a/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountUpdatedWebhookEventTest.kt b/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountUpdatedWebhookEventTest.kt index 79e2cac6d..155ce8fe0 100644 --- a/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountUpdatedWebhookEventTest.kt +++ b/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountUpdatedWebhookEventTest.kt @@ -3,6 +3,7 @@ package com.lithic.api.models import com.fasterxml.jackson.module.kotlin.jacksonTypeRef +import com.lithic.api.core.JsonValue import com.lithic.api.core.jsonMapper import java.time.OffsetDateTime import org.assertj.core.api.Assertions.assertThat @@ -40,6 +41,14 @@ internal class FinancialAccountUpdatedWebhookEventTest { .updated(OffsetDateTime.parse("2019-12-27T18:11:19.117Z")) .userDefinedStatus("user_defined_status") .accountNumber("account_number") + .blockchainAddresses( + FinancialAccount.BlockchainAddresses.builder() + .putAdditionalProperty( + "ETH", + JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), + ) + .build() + ) .routingNumber("routing_number") .eventType(FinancialAccountUpdatedWebhookEvent.EventType.FINANCIAL_ACCOUNT_UPDATED) .build() @@ -79,6 +88,15 @@ internal class FinancialAccountUpdatedWebhookEventTest { assertThat(financialAccountUpdatedWebhookEvent.userDefinedStatus()) .contains("user_defined_status") assertThat(financialAccountUpdatedWebhookEvent.accountNumber()).contains("account_number") + assertThat(financialAccountUpdatedWebhookEvent.blockchainAddresses()) + .contains( + FinancialAccount.BlockchainAddresses.builder() + .putAdditionalProperty( + "ETH", + JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), + ) + .build() + ) assertThat(financialAccountUpdatedWebhookEvent.routingNumber()).contains("routing_number") assertThat(financialAccountUpdatedWebhookEvent.eventType()) .isEqualTo(FinancialAccountUpdatedWebhookEvent.EventType.FINANCIAL_ACCOUNT_UPDATED) @@ -115,6 +133,14 @@ internal class FinancialAccountUpdatedWebhookEventTest { .updated(OffsetDateTime.parse("2019-12-27T18:11:19.117Z")) .userDefinedStatus("user_defined_status") .accountNumber("account_number") + .blockchainAddresses( + FinancialAccount.BlockchainAddresses.builder() + .putAdditionalProperty( + "ETH", + JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), + ) + .build() + ) .routingNumber("routing_number") .eventType(FinancialAccountUpdatedWebhookEvent.EventType.FINANCIAL_ACCOUNT_UPDATED) .build() diff --git a/lithic-java-core/src/test/kotlin/com/lithic/api/models/ParsedWebhookEventTest.kt b/lithic-java-core/src/test/kotlin/com/lithic/api/models/ParsedWebhookEventTest.kt index de53b7467..313ef7d2a 100644 --- a/lithic-java-core/src/test/kotlin/com/lithic/api/models/ParsedWebhookEventTest.kt +++ b/lithic-java-core/src/test/kotlin/com/lithic/api/models/ParsedWebhookEventTest.kt @@ -7239,6 +7239,14 @@ internal class ParsedWebhookEventTest { .updated(OffsetDateTime.parse("2019-12-27T18:11:19.117Z")) .userDefinedStatus("user_defined_status") .accountNumber("account_number") + .blockchainAddresses( + FinancialAccount.BlockchainAddresses.builder() + .putAdditionalProperty( + "ETH", + JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), + ) + .build() + ) .routingNumber("routing_number") .eventType(FinancialAccountCreatedWebhookEvent.EventType.FINANCIAL_ACCOUNT_CREATED) .build() @@ -7348,6 +7356,14 @@ internal class ParsedWebhookEventTest { .updated(OffsetDateTime.parse("2019-12-27T18:11:19.117Z")) .userDefinedStatus("user_defined_status") .accountNumber("account_number") + .blockchainAddresses( + FinancialAccount.BlockchainAddresses.builder() + .putAdditionalProperty( + "ETH", + JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), + ) + .build() + ) .routingNumber("routing_number") .eventType( FinancialAccountCreatedWebhookEvent.EventType.FINANCIAL_ACCOUNT_CREATED @@ -7394,6 +7410,14 @@ internal class ParsedWebhookEventTest { .updated(OffsetDateTime.parse("2019-12-27T18:11:19.117Z")) .userDefinedStatus("user_defined_status") .accountNumber("account_number") + .blockchainAddresses( + FinancialAccount.BlockchainAddresses.builder() + .putAdditionalProperty( + "ETH", + JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), + ) + .build() + ) .routingNumber("routing_number") .eventType(FinancialAccountUpdatedWebhookEvent.EventType.FINANCIAL_ACCOUNT_UPDATED) .build() @@ -7503,6 +7527,14 @@ internal class ParsedWebhookEventTest { .updated(OffsetDateTime.parse("2019-12-27T18:11:19.117Z")) .userDefinedStatus("user_defined_status") .accountNumber("account_number") + .blockchainAddresses( + FinancialAccount.BlockchainAddresses.builder() + .putAdditionalProperty( + "ETH", + JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), + ) + .build() + ) .routingNumber("routing_number") .eventType( FinancialAccountUpdatedWebhookEvent.EventType.FINANCIAL_ACCOUNT_UPDATED From 28925154b2b09da8cfc8e8a01d38886698df0156 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 5 Aug 2026 18:52:07 +0000 Subject: [PATCH 4/6] docs(api): update CVV field descriptions to note AMEX uses 4 digits --- .stats.yml | 4 ++-- .../src/main/kotlin/com/lithic/api/models/Card.kt | 4 ++-- .../com/lithic/api/models/TokenizationSimulateParams.kt | 8 ++++---- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.stats.yml b/.stats.yml index 12c884dec..fa0f5509e 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 214 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic/lithic-81febc26f7987ef8f74f2038dddd4799a1e77b2c64d2fe36c2c9f2eb5079476b.yml -openapi_spec_hash: 91e4b19977ca68b988862e967be57d26 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic/lithic-c150a226e74fdd73925fcba89261022e91a6d4f57dbb305a54063499641427ae.yml +openapi_spec_hash: 1df81bae378c3cbf265b0fb4cefa2969 config_hash: 337a99d8cc30006358b7bc2531401669 diff --git a/lithic-java-core/src/main/kotlin/com/lithic/api/models/Card.kt b/lithic-java-core/src/main/kotlin/com/lithic/api/models/Card.kt index 3a5dc5710..86cb54599 100644 --- a/lithic-java-core/src/main/kotlin/com/lithic/api/models/Card.kt +++ b/lithic-java-core/src/main/kotlin/com/lithic/api/models/Card.kt @@ -434,7 +434,7 @@ private constructor( fun substatus(): Optional = substatus.getOptional("substatus") /** - * Three digit cvv printed on the back of the card. + * Three or four digit CVV printed on the card. Amex cards use four digit CVVs * * @throws LithicInvalidDataException if the JSON field has an unexpected type (e.g. if the * server responded with an unexpected value). @@ -1241,7 +1241,7 @@ private constructor( this.substatus = substatus } - /** Three digit cvv printed on the back of the card. */ + /** Three or four digit CVV printed on the card. Amex cards use four digit CVVs */ fun cvv(cvv: String) = cvv(JsonField.of(cvv)) /** diff --git a/lithic-java-core/src/main/kotlin/com/lithic/api/models/TokenizationSimulateParams.kt b/lithic-java-core/src/main/kotlin/com/lithic/api/models/TokenizationSimulateParams.kt index 5602cccc7..86b6c8987 100644 --- a/lithic-java-core/src/main/kotlin/com/lithic/api/models/TokenizationSimulateParams.kt +++ b/lithic-java-core/src/main/kotlin/com/lithic/api/models/TokenizationSimulateParams.kt @@ -33,7 +33,7 @@ private constructor( ) : Params { /** - * The three digit cvv for the card. + * The three or four digit CVV for the card. AMEX cards use four digit CVVs. * * @throws LithicInvalidDataException if the JSON field has an unexpected type or is * unexpectedly missing or null (e.g. if the server responded with an unexpected value). @@ -213,7 +213,7 @@ private constructor( */ fun body(body: Body) = apply { this.body = body.toBuilder() } - /** The three digit cvv for the card. */ + /** The three or four digit CVV for the card. AMEX cards use four digit CVVs. */ fun cvv(cvv: String) = apply { body.cvv(cvv) } /** @@ -519,7 +519,7 @@ private constructor( ) /** - * The three digit cvv for the card. + * The three or four digit CVV for the card. AMEX cards use four digit CVVs. * * @throws LithicInvalidDataException if the JSON field has an unexpected type or is * unexpectedly missing or null (e.g. if the server responded with an unexpected value). @@ -713,7 +713,7 @@ private constructor( additionalProperties = body.additionalProperties.toMutableMap() } - /** The three digit cvv for the card. */ + /** The three or four digit CVV for the card. AMEX cards use four digit CVVs. */ fun cvv(cvv: String) = cvv(JsonField.of(cvv)) /** From 46fa6f1495cab9c378cf03932090cb6710fff7ed Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 7 Aug 2026 23:24:25 +0000 Subject: [PATCH 5/6] feat(api): add stablecoin event types to FinancialEvent/Payment/StatementLineItems --- .stats.yml | 4 +- .../com/lithic/api/models/FinancialAccount.kt | 12 ++-- .../FinancialAccountCreatedWebhookEvent.kt | 8 +-- .../FinancialAccountUpdatedWebhookEvent.kt | 8 +-- .../com/lithic/api/models/FinancialEvent.kt | 18 ++++++ .../kotlin/com/lithic/api/models/Payment.kt | 63 ++++++++++++++++--- .../lithic/api/models/StatementLineItems.kt | 18 ++++++ ...FinancialAccountCreatedWebhookEventTest.kt | 6 +- .../FinancialAccountListPageResponseTest.kt | 6 +- .../lithic/api/models/FinancialAccountTest.kt | 6 +- ...FinancialAccountUpdatedWebhookEventTest.kt | 6 +- .../api/models/ParsedWebhookEventTest.kt | 8 +-- 12 files changed, 123 insertions(+), 40 deletions(-) diff --git a/.stats.yml b/.stats.yml index fa0f5509e..7149eb0d1 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 214 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic/lithic-c150a226e74fdd73925fcba89261022e91a6d4f57dbb305a54063499641427ae.yml -openapi_spec_hash: 1df81bae378c3cbf265b0fb4cefa2969 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic/lithic-4ea61aa22fa852629c506efa84f633535d32a7133bdf3ae2d09040d2fb6caeb2.yml +openapi_spec_hash: 76c21b84082530356fe45eed27e84cfe config_hash: 337a99d8cc30006358b7bc2531401669 diff --git a/lithic-java-core/src/main/kotlin/com/lithic/api/models/FinancialAccount.kt b/lithic-java-core/src/main/kotlin/com/lithic/api/models/FinancialAccount.kt index 91d86a59a..adde279ae 100644 --- a/lithic-java-core/src/main/kotlin/com/lithic/api/models/FinancialAccount.kt +++ b/lithic-java-core/src/main/kotlin/com/lithic/api/models/FinancialAccount.kt @@ -180,8 +180,8 @@ private constructor( fun accountNumber(): Optional = accountNumber.getOptional("account_number") /** - * Provisioned blockchain deposit addresses for this financial account, keyed by the blockchain - * network that each address belongs to + * Provisioned blockchain deposit addresses for this financial account, keyed by the full name + * of the blockchain network that each address belongs to (e.g. `ETHEREUM`) * * @throws LithicInvalidDataException if the JSON field has an unexpected type (e.g. if the * server responded with an unexpected value). @@ -563,8 +563,8 @@ private constructor( } /** - * Provisioned blockchain deposit addresses for this financial account, keyed by the - * blockchain network that each address belongs to + * Provisioned blockchain deposit addresses for this financial account, keyed by the full + * name of the blockchain network that each address belongs to (e.g. `ETHEREUM`) */ fun blockchainAddresses(blockchainAddresses: BlockchainAddresses?) = blockchainAddresses(JsonField.ofNullable(blockchainAddresses)) @@ -1832,8 +1832,8 @@ private constructor( } /** - * Provisioned blockchain deposit addresses for this financial account, keyed by the blockchain - * network that each address belongs to + * Provisioned blockchain deposit addresses for this financial account, keyed by the full name + * of the blockchain network that each address belongs to (e.g. `ETHEREUM`) */ class BlockchainAddresses @JsonCreator diff --git a/lithic-java-core/src/main/kotlin/com/lithic/api/models/FinancialAccountCreatedWebhookEvent.kt b/lithic-java-core/src/main/kotlin/com/lithic/api/models/FinancialAccountCreatedWebhookEvent.kt index 7955d55a2..d6d9b5a6f 100644 --- a/lithic-java-core/src/main/kotlin/com/lithic/api/models/FinancialAccountCreatedWebhookEvent.kt +++ b/lithic-java-core/src/main/kotlin/com/lithic/api/models/FinancialAccountCreatedWebhookEvent.kt @@ -206,8 +206,8 @@ private constructor( fun accountNumber(): Optional = accountNumber.getOptional("account_number") /** - * Provisioned blockchain deposit addresses for this financial account, keyed by the blockchain - * network that each address belongs to + * Provisioned blockchain deposit addresses for this financial account, keyed by the full name + * of the blockchain network that each address belongs to (e.g. `ETHEREUM`) * * @throws LithicInvalidDataException if the JSON field has an unexpected type (e.g. if the * server responded with an unexpected value). @@ -619,8 +619,8 @@ private constructor( } /** - * Provisioned blockchain deposit addresses for this financial account, keyed by the - * blockchain network that each address belongs to + * Provisioned blockchain deposit addresses for this financial account, keyed by the full + * name of the blockchain network that each address belongs to (e.g. `ETHEREUM`) */ fun blockchainAddresses(blockchainAddresses: FinancialAccount.BlockchainAddresses?) = blockchainAddresses(JsonField.ofNullable(blockchainAddresses)) diff --git a/lithic-java-core/src/main/kotlin/com/lithic/api/models/FinancialAccountUpdatedWebhookEvent.kt b/lithic-java-core/src/main/kotlin/com/lithic/api/models/FinancialAccountUpdatedWebhookEvent.kt index 0285afdf5..7c46e82a3 100644 --- a/lithic-java-core/src/main/kotlin/com/lithic/api/models/FinancialAccountUpdatedWebhookEvent.kt +++ b/lithic-java-core/src/main/kotlin/com/lithic/api/models/FinancialAccountUpdatedWebhookEvent.kt @@ -206,8 +206,8 @@ private constructor( fun accountNumber(): Optional = accountNumber.getOptional("account_number") /** - * Provisioned blockchain deposit addresses for this financial account, keyed by the blockchain - * network that each address belongs to + * Provisioned blockchain deposit addresses for this financial account, keyed by the full name + * of the blockchain network that each address belongs to (e.g. `ETHEREUM`) * * @throws LithicInvalidDataException if the JSON field has an unexpected type (e.g. if the * server responded with an unexpected value). @@ -619,8 +619,8 @@ private constructor( } /** - * Provisioned blockchain deposit addresses for this financial account, keyed by the - * blockchain network that each address belongs to + * Provisioned blockchain deposit addresses for this financial account, keyed by the full + * name of the blockchain network that each address belongs to (e.g. `ETHEREUM`) */ fun blockchainAddresses(blockchainAddresses: FinancialAccount.BlockchainAddresses?) = blockchainAddresses(JsonField.ofNullable(blockchainAddresses)) diff --git a/lithic-java-core/src/main/kotlin/com/lithic/api/models/FinancialEvent.kt b/lithic-java-core/src/main/kotlin/com/lithic/api/models/FinancialEvent.kt index 02efa0c00..d7f28b871 100644 --- a/lithic-java-core/src/main/kotlin/com/lithic/api/models/FinancialEvent.kt +++ b/lithic-java-core/src/main/kotlin/com/lithic/api/models/FinancialEvent.kt @@ -631,10 +631,16 @@ private constructor( @JvmField val STABLECOIN_RECEIVED = of("STABLECOIN_RECEIVED") + @JvmField val STABLECOIN_INITIATED = of("STABLECOIN_INITIATED") + @JvmField val STABLECOIN_REVIEWED = of("STABLECOIN_REVIEWED") + @JvmField val STABLECOIN_SENT = of("STABLECOIN_SENT") + @JvmField val STABLECOIN_SETTLED = of("STABLECOIN_SETTLED") + @JvmField val STABLECOIN_REJECTED = of("STABLECOIN_REJECTED") + @JvmStatic fun of(value: String) = FinancialEventType(JsonField.of(value)) } @@ -731,8 +737,11 @@ private constructor( MONTHLY_REVERSAL, ACCOUNT_TO_ACCOUNT, STABLECOIN_RECEIVED, + STABLECOIN_INITIATED, STABLECOIN_REVIEWED, + STABLECOIN_SENT, STABLECOIN_SETTLED, + STABLECOIN_REJECTED, } /** @@ -836,8 +845,11 @@ private constructor( MONTHLY_REVERSAL, ACCOUNT_TO_ACCOUNT, STABLECOIN_RECEIVED, + STABLECOIN_INITIATED, STABLECOIN_REVIEWED, + STABLECOIN_SENT, STABLECOIN_SETTLED, + STABLECOIN_REJECTED, /** * An enum member indicating that [FinancialEventType] was instantiated with an unknown * value. @@ -945,8 +957,11 @@ private constructor( MONTHLY_REVERSAL -> Value.MONTHLY_REVERSAL ACCOUNT_TO_ACCOUNT -> Value.ACCOUNT_TO_ACCOUNT STABLECOIN_RECEIVED -> Value.STABLECOIN_RECEIVED + STABLECOIN_INITIATED -> Value.STABLECOIN_INITIATED STABLECOIN_REVIEWED -> Value.STABLECOIN_REVIEWED + STABLECOIN_SENT -> Value.STABLECOIN_SENT STABLECOIN_SETTLED -> Value.STABLECOIN_SETTLED + STABLECOIN_REJECTED -> Value.STABLECOIN_REJECTED else -> Value._UNKNOWN } @@ -1052,8 +1067,11 @@ private constructor( MONTHLY_REVERSAL -> Known.MONTHLY_REVERSAL ACCOUNT_TO_ACCOUNT -> Known.ACCOUNT_TO_ACCOUNT STABLECOIN_RECEIVED -> Known.STABLECOIN_RECEIVED + STABLECOIN_INITIATED -> Known.STABLECOIN_INITIATED STABLECOIN_REVIEWED -> Known.STABLECOIN_REVIEWED + STABLECOIN_SENT -> Known.STABLECOIN_SENT STABLECOIN_SETTLED -> Known.STABLECOIN_SETTLED + STABLECOIN_REJECTED -> Known.STABLECOIN_REJECTED else -> throw LithicInvalidDataException("Unknown FinancialEventType: $value") } diff --git a/lithic-java-core/src/main/kotlin/com/lithic/api/models/Payment.kt b/lithic-java-core/src/main/kotlin/com/lithic/api/models/Payment.kt index 78771264d..d1e4eda4e 100644 --- a/lithic-java-core/src/main/kotlin/com/lithic/api/models/Payment.kt +++ b/lithic-java-core/src/main/kotlin/com/lithic/api/models/Payment.kt @@ -1645,8 +1645,16 @@ private constructor( * Stablecoin events: * * `STABLECOIN_RECEIVED` - Stablecoin pay-in received on-chain and pending release to * available balance. - * * `STABLECOIN_REVIEWED` - Stablecoin pay-in has completed the review process. - * * `STABLECOIN_SETTLED` - Stablecoin pay-in funds released to available balance. + * * `STABLECOIN_INITIATED` - Stablecoin withdrawal initiated, with the funds placed on + * hold. + * * `STABLECOIN_REVIEWED` - Stablecoin pay-in or withdrawal has completed the review + * process. + * * `STABLECOIN_SENT` - Stablecoin withdrawal accepted for on-chain submission to the + * destination address, and pending confirmation. + * * `STABLECOIN_SETTLED` - Stablecoin pay-in funds released to available balance, or + * stablecoin withdrawal confirmed on-chain. + * * `STABLECOIN_REJECTED` - Stablecoin withdrawal failed and the hold placed at initiation + * has been reversed. * * @throws LithicInvalidDataException if the JSON field has an unexpected type or is * unexpectedly missing or null (e.g. if the server responded with an unexpected value). @@ -1664,7 +1672,9 @@ private constructor( /** * Payment event external ID. For ACH transactions, this is the ACH trace number. For - * inbound wire transfers, this is the IMAD (Input Message Accountability Data). + * inbound wire transfers, this is the IMAD (Input Message Accountability Data). For + * stablecoin payments, this is the on-chain transaction hash of the transfer; it is present + * on events that reflect on-chain activity and null on internal lifecycle events. * * @throws LithicInvalidDataException if the JSON field has an unexpected type (e.g. if the * server responded with an unexpected value). @@ -1885,8 +1895,16 @@ private constructor( * Stablecoin events: * * `STABLECOIN_RECEIVED` - Stablecoin pay-in received on-chain and pending release to * available balance. - * * `STABLECOIN_REVIEWED` - Stablecoin pay-in has completed the review process. - * * `STABLECOIN_SETTLED` - Stablecoin pay-in funds released to available balance. + * * `STABLECOIN_INITIATED` - Stablecoin withdrawal initiated, with the funds placed on + * hold. + * * `STABLECOIN_REVIEWED` - Stablecoin pay-in or withdrawal has completed the review + * process. + * * `STABLECOIN_SENT` - Stablecoin withdrawal accepted for on-chain submission to the + * destination address, and pending confirmation. + * * `STABLECOIN_SETTLED` - Stablecoin pay-in funds released to available balance, or + * stablecoin withdrawal confirmed on-chain. + * * `STABLECOIN_REJECTED` - Stablecoin withdrawal failed and the hold placed at + * initiation has been reversed. */ fun type(type: PaymentEventType) = type(JsonField.of(type)) @@ -1928,7 +1946,10 @@ private constructor( /** * Payment event external ID. For ACH transactions, this is the ACH trace number. For - * inbound wire transfers, this is the IMAD (Input Message Accountability Data). + * inbound wire transfers, this is the IMAD (Input Message Accountability Data). For + * stablecoin payments, this is the on-chain transaction hash of the transfer; it is + * present on events that reflect on-chain activity and null on internal lifecycle + * events. */ fun externalId(externalId: String?) = externalId(JsonField.ofNullable(externalId)) @@ -2237,8 +2258,16 @@ private constructor( * Stablecoin events: * * `STABLECOIN_RECEIVED` - Stablecoin pay-in received on-chain and pending release to * available balance. - * * `STABLECOIN_REVIEWED` - Stablecoin pay-in has completed the review process. - * * `STABLECOIN_SETTLED` - Stablecoin pay-in funds released to available balance. + * * `STABLECOIN_INITIATED` - Stablecoin withdrawal initiated, with the funds placed on + * hold. + * * `STABLECOIN_REVIEWED` - Stablecoin pay-in or withdrawal has completed the review + * process. + * * `STABLECOIN_SENT` - Stablecoin withdrawal accepted for on-chain submission to the + * destination address, and pending confirmation. + * * `STABLECOIN_SETTLED` - Stablecoin pay-in funds released to available balance, or + * stablecoin withdrawal confirmed on-chain. + * * `STABLECOIN_REJECTED` - Stablecoin withdrawal failed and the hold placed at initiation + * has been reversed. */ class PaymentEventType @JsonCreator @@ -2302,10 +2331,16 @@ private constructor( @JvmField val STABLECOIN_RECEIVED = of("STABLECOIN_RECEIVED") + @JvmField val STABLECOIN_INITIATED = of("STABLECOIN_INITIATED") + @JvmField val STABLECOIN_REVIEWED = of("STABLECOIN_REVIEWED") + @JvmField val STABLECOIN_SENT = of("STABLECOIN_SENT") + @JvmField val STABLECOIN_SETTLED = of("STABLECOIN_SETTLED") + @JvmField val STABLECOIN_REJECTED = of("STABLECOIN_REJECTED") + @JvmStatic fun of(value: String) = PaymentEventType(JsonField.of(value)) } @@ -2334,8 +2369,11 @@ private constructor( WIRE_RETURN_OUTBOUND_SETTLED, WIRE_RETURN_OUTBOUND_REJECTED, STABLECOIN_RECEIVED, + STABLECOIN_INITIATED, STABLECOIN_REVIEWED, + STABLECOIN_SENT, STABLECOIN_SETTLED, + STABLECOIN_REJECTED, } /** @@ -2372,8 +2410,11 @@ private constructor( WIRE_RETURN_OUTBOUND_SETTLED, WIRE_RETURN_OUTBOUND_REJECTED, STABLECOIN_RECEIVED, + STABLECOIN_INITIATED, STABLECOIN_REVIEWED, + STABLECOIN_SENT, STABLECOIN_SETTLED, + STABLECOIN_REJECTED, /** * An enum member indicating that [PaymentEventType] was instantiated with an * unknown value. @@ -2413,8 +2454,11 @@ private constructor( WIRE_RETURN_OUTBOUND_SETTLED -> Value.WIRE_RETURN_OUTBOUND_SETTLED WIRE_RETURN_OUTBOUND_REJECTED -> Value.WIRE_RETURN_OUTBOUND_REJECTED STABLECOIN_RECEIVED -> Value.STABLECOIN_RECEIVED + STABLECOIN_INITIATED -> Value.STABLECOIN_INITIATED STABLECOIN_REVIEWED -> Value.STABLECOIN_REVIEWED + STABLECOIN_SENT -> Value.STABLECOIN_SENT STABLECOIN_SETTLED -> Value.STABLECOIN_SETTLED + STABLECOIN_REJECTED -> Value.STABLECOIN_REJECTED else -> Value._UNKNOWN } @@ -2452,8 +2496,11 @@ private constructor( WIRE_RETURN_OUTBOUND_SETTLED -> Known.WIRE_RETURN_OUTBOUND_SETTLED WIRE_RETURN_OUTBOUND_REJECTED -> Known.WIRE_RETURN_OUTBOUND_REJECTED STABLECOIN_RECEIVED -> Known.STABLECOIN_RECEIVED + STABLECOIN_INITIATED -> Known.STABLECOIN_INITIATED STABLECOIN_REVIEWED -> Known.STABLECOIN_REVIEWED + STABLECOIN_SENT -> Known.STABLECOIN_SENT STABLECOIN_SETTLED -> Known.STABLECOIN_SETTLED + STABLECOIN_REJECTED -> Known.STABLECOIN_REJECTED else -> throw LithicInvalidDataException("Unknown PaymentEventType: $value") } diff --git a/lithic-java-core/src/main/kotlin/com/lithic/api/models/StatementLineItems.kt b/lithic-java-core/src/main/kotlin/com/lithic/api/models/StatementLineItems.kt index 4bce77220..7fc41b0d8 100644 --- a/lithic-java-core/src/main/kotlin/com/lithic/api/models/StatementLineItems.kt +++ b/lithic-java-core/src/main/kotlin/com/lithic/api/models/StatementLineItems.kt @@ -1409,10 +1409,16 @@ private constructor( @JvmField val STABLECOIN_RECEIVED = of("STABLECOIN_RECEIVED") + @JvmField val STABLECOIN_INITIATED = of("STABLECOIN_INITIATED") + @JvmField val STABLECOIN_REVIEWED = of("STABLECOIN_REVIEWED") + @JvmField val STABLECOIN_SENT = of("STABLECOIN_SENT") + @JvmField val STABLECOIN_SETTLED = of("STABLECOIN_SETTLED") + @JvmField val STABLECOIN_REJECTED = of("STABLECOIN_REJECTED") + @JvmStatic fun of(value: String) = FinancialEventType(JsonField.of(value)) } @@ -1509,8 +1515,11 @@ private constructor( MONTHLY_REVERSAL, ACCOUNT_TO_ACCOUNT, STABLECOIN_RECEIVED, + STABLECOIN_INITIATED, STABLECOIN_REVIEWED, + STABLECOIN_SENT, STABLECOIN_SETTLED, + STABLECOIN_REJECTED, } /** @@ -1616,8 +1625,11 @@ private constructor( MONTHLY_REVERSAL, ACCOUNT_TO_ACCOUNT, STABLECOIN_RECEIVED, + STABLECOIN_INITIATED, STABLECOIN_REVIEWED, + STABLECOIN_SENT, STABLECOIN_SETTLED, + STABLECOIN_REJECTED, /** * An enum member indicating that [FinancialEventType] was instantiated with an * unknown value. @@ -1725,8 +1737,11 @@ private constructor( MONTHLY_REVERSAL -> Value.MONTHLY_REVERSAL ACCOUNT_TO_ACCOUNT -> Value.ACCOUNT_TO_ACCOUNT STABLECOIN_RECEIVED -> Value.STABLECOIN_RECEIVED + STABLECOIN_INITIATED -> Value.STABLECOIN_INITIATED STABLECOIN_REVIEWED -> Value.STABLECOIN_REVIEWED + STABLECOIN_SENT -> Value.STABLECOIN_SENT STABLECOIN_SETTLED -> Value.STABLECOIN_SETTLED + STABLECOIN_REJECTED -> Value.STABLECOIN_REJECTED else -> Value._UNKNOWN } @@ -1832,8 +1847,11 @@ private constructor( MONTHLY_REVERSAL -> Known.MONTHLY_REVERSAL ACCOUNT_TO_ACCOUNT -> Known.ACCOUNT_TO_ACCOUNT STABLECOIN_RECEIVED -> Known.STABLECOIN_RECEIVED + STABLECOIN_INITIATED -> Known.STABLECOIN_INITIATED STABLECOIN_REVIEWED -> Known.STABLECOIN_REVIEWED + STABLECOIN_SENT -> Known.STABLECOIN_SENT STABLECOIN_SETTLED -> Known.STABLECOIN_SETTLED + STABLECOIN_REJECTED -> Known.STABLECOIN_REJECTED else -> throw LithicInvalidDataException("Unknown FinancialEventType: $value") } diff --git a/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountCreatedWebhookEventTest.kt b/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountCreatedWebhookEventTest.kt index be975bc13..1a5983280 100644 --- a/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountCreatedWebhookEventTest.kt +++ b/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountCreatedWebhookEventTest.kt @@ -44,7 +44,7 @@ internal class FinancialAccountCreatedWebhookEventTest { .blockchainAddresses( FinancialAccount.BlockchainAddresses.builder() .putAdditionalProperty( - "ETH", + "ETHEREUM", JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), ) .build() @@ -92,7 +92,7 @@ internal class FinancialAccountCreatedWebhookEventTest { .contains( FinancialAccount.BlockchainAddresses.builder() .putAdditionalProperty( - "ETH", + "ETHEREUM", JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), ) .build() @@ -136,7 +136,7 @@ internal class FinancialAccountCreatedWebhookEventTest { .blockchainAddresses( FinancialAccount.BlockchainAddresses.builder() .putAdditionalProperty( - "ETH", + "ETHEREUM", JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), ) .build() diff --git a/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountListPageResponseTest.kt b/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountListPageResponseTest.kt index fe20ef1ab..4fcad53e2 100644 --- a/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountListPageResponseTest.kt +++ b/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountListPageResponseTest.kt @@ -48,7 +48,7 @@ internal class FinancialAccountListPageResponseTest { .blockchainAddresses( FinancialAccount.BlockchainAddresses.builder() .putAdditionalProperty( - "ETH", + "ETHEREUM", JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), ) .build() @@ -91,7 +91,7 @@ internal class FinancialAccountListPageResponseTest { .blockchainAddresses( FinancialAccount.BlockchainAddresses.builder() .putAdditionalProperty( - "ETH", + "ETHEREUM", JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), ) .build() @@ -140,7 +140,7 @@ internal class FinancialAccountListPageResponseTest { .blockchainAddresses( FinancialAccount.BlockchainAddresses.builder() .putAdditionalProperty( - "ETH", + "ETHEREUM", JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), ) .build() diff --git a/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountTest.kt b/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountTest.kt index c2b6a0fc6..08f37d8d0 100644 --- a/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountTest.kt +++ b/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountTest.kt @@ -44,7 +44,7 @@ internal class FinancialAccountTest { .blockchainAddresses( FinancialAccount.BlockchainAddresses.builder() .putAdditionalProperty( - "ETH", + "ETHEREUM", JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), ) .build() @@ -87,7 +87,7 @@ internal class FinancialAccountTest { .contains( FinancialAccount.BlockchainAddresses.builder() .putAdditionalProperty( - "ETH", + "ETHEREUM", JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), ) .build() @@ -129,7 +129,7 @@ internal class FinancialAccountTest { .blockchainAddresses( FinancialAccount.BlockchainAddresses.builder() .putAdditionalProperty( - "ETH", + "ETHEREUM", JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), ) .build() diff --git a/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountUpdatedWebhookEventTest.kt b/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountUpdatedWebhookEventTest.kt index 155ce8fe0..b15b6d8dd 100644 --- a/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountUpdatedWebhookEventTest.kt +++ b/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountUpdatedWebhookEventTest.kt @@ -44,7 +44,7 @@ internal class FinancialAccountUpdatedWebhookEventTest { .blockchainAddresses( FinancialAccount.BlockchainAddresses.builder() .putAdditionalProperty( - "ETH", + "ETHEREUM", JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), ) .build() @@ -92,7 +92,7 @@ internal class FinancialAccountUpdatedWebhookEventTest { .contains( FinancialAccount.BlockchainAddresses.builder() .putAdditionalProperty( - "ETH", + "ETHEREUM", JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), ) .build() @@ -136,7 +136,7 @@ internal class FinancialAccountUpdatedWebhookEventTest { .blockchainAddresses( FinancialAccount.BlockchainAddresses.builder() .putAdditionalProperty( - "ETH", + "ETHEREUM", JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), ) .build() diff --git a/lithic-java-core/src/test/kotlin/com/lithic/api/models/ParsedWebhookEventTest.kt b/lithic-java-core/src/test/kotlin/com/lithic/api/models/ParsedWebhookEventTest.kt index 313ef7d2a..cc450b476 100644 --- a/lithic-java-core/src/test/kotlin/com/lithic/api/models/ParsedWebhookEventTest.kt +++ b/lithic-java-core/src/test/kotlin/com/lithic/api/models/ParsedWebhookEventTest.kt @@ -7242,7 +7242,7 @@ internal class ParsedWebhookEventTest { .blockchainAddresses( FinancialAccount.BlockchainAddresses.builder() .putAdditionalProperty( - "ETH", + "ETHEREUM", JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), ) .build() @@ -7359,7 +7359,7 @@ internal class ParsedWebhookEventTest { .blockchainAddresses( FinancialAccount.BlockchainAddresses.builder() .putAdditionalProperty( - "ETH", + "ETHEREUM", JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), ) .build() @@ -7413,7 +7413,7 @@ internal class ParsedWebhookEventTest { .blockchainAddresses( FinancialAccount.BlockchainAddresses.builder() .putAdditionalProperty( - "ETH", + "ETHEREUM", JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), ) .build() @@ -7530,7 +7530,7 @@ internal class ParsedWebhookEventTest { .blockchainAddresses( FinancialAccount.BlockchainAddresses.builder() .putAdditionalProperty( - "ETH", + "ETHEREUM", JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), ) .build() From 5b939fc40a76eceb2e563d0af43e7bcee540b97c Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 7 Aug 2026 23:25:03 +0000 Subject: [PATCH 6/6] release: 0.133.0 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 20 ++++++++++++++++++++ README.md | 10 +++++----- build.gradle.kts | 2 +- 4 files changed, 27 insertions(+), 7 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index b4da64f27..4a1242df8 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.132.0" + ".": "0.133.0" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index e62e0e027..dcf2061df 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,25 @@ # Changelog +## 0.133.0 (2026-08-07) + +Full Changelog: [v0.132.0...v0.133.0](https://github.com/lithic-com/lithic-java/compare/v0.132.0...v0.133.0) + +### Features + +* **api:** add blockchain_addresses field to FinancialAccount and webhook events ([3ac1807](https://github.com/lithic-com/lithic-java/commit/3ac18071466c0d8e43570f4cdf878ec1a506a40c)) +* **api:** add limitCashAmount/limitCashCount fields to VelocityLimitParams ([9507834](https://github.com/lithic-com/lithic-java/commit/9507834f2c34614684d100e960b40a1dca2ce9c5)) +* **api:** add stablecoin event types to FinancialEvent/Payment/StatementLineItems ([46fa6f1](https://github.com/lithic-com/lithic-java/commit/46fa6f1495cab9c378cf03932090cb6710fff7ed)) + + +### Chores + +* **internal:** codegen related update ([39e4623](https://github.com/lithic-com/lithic-java/commit/39e4623d63b58bc9f048cc6a2592e657cf1706b8)) + + +### Documentation + +* **api:** update CVV field descriptions to note AMEX uses 4 digits ([2892515](https://github.com/lithic-com/lithic-java/commit/28925154b2b09da8cfc8e8a01d38886698df0156)) + ## 0.132.0 (2026-08-03) Full Changelog: [v0.131.0...v0.132.0](https://github.com/lithic-com/lithic-java/compare/v0.131.0...v0.132.0) diff --git a/README.md b/README.md index e0cf94193..067a2deca 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,8 @@ -[![Maven Central](https://img.shields.io/maven-central/v/com.lithic.api/lithic-java)](https://central.sonatype.com/artifact/com.lithic.api/lithic-java/0.132.0) -[![javadoc](https://javadoc.io/badge2/com.lithic.api/lithic-java/0.132.0/javadoc.svg)](https://javadoc.io/doc/com.lithic.api/lithic-java/0.132.0) +[![Maven Central](https://img.shields.io/maven-central/v/com.lithic.api/lithic-java)](https://central.sonatype.com/artifact/com.lithic.api/lithic-java/0.133.0) +[![javadoc](https://javadoc.io/badge2/com.lithic.api/lithic-java/0.133.0/javadoc.svg)](https://javadoc.io/doc/com.lithic.api/lithic-java/0.133.0) @@ -22,7 +22,7 @@ Use the Lithic MCP Server to enable AI assistants to interact with this API, all -The REST API documentation can be found on [docs.lithic.com](https://docs.lithic.com). Javadocs are available on [javadoc.io](https://javadoc.io/doc/com.lithic.api/lithic-java/0.132.0). +The REST API documentation can be found on [docs.lithic.com](https://docs.lithic.com). Javadocs are available on [javadoc.io](https://javadoc.io/doc/com.lithic.api/lithic-java/0.133.0). @@ -33,7 +33,7 @@ The REST API documentation can be found on [docs.lithic.com](https://docs.lithic ### Gradle ```kotlin -implementation("com.lithic.api:lithic-java:0.132.0") +implementation("com.lithic.api:lithic-java:0.133.0") ``` ### Maven @@ -42,7 +42,7 @@ implementation("com.lithic.api:lithic-java:0.132.0") com.lithic.api lithic-java - 0.132.0 + 0.133.0 ``` diff --git a/build.gradle.kts b/build.gradle.kts index 3f9804eaf..9d85f0e19 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -8,7 +8,7 @@ repositories { allprojects { group = "com.lithic.api" - version = "0.132.0" // x-release-please-version + version = "0.133.0" // x-release-please-version } subprojects {