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/.stats.yml b/.stats.yml
index a57158191..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-59c09c7355b21b663e001d2ee1086ebd0a70d9b5433823282bca296eedff9eb0.yml
-openapi_spec_hash: d9c3b932c810809abc6e973d662ad376
+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/CHANGELOG.md b/CHANGELOG.md
index e62e0e027..34aed7bac 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,24 @@
# Changelog
+## 0.133.0 (2026-08-05)
+
+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))
+
+
+### 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 @@
-[](https://central.sonatype.com/artifact/com.lithic.api/lithic-java/0.132.0)
-[](https://javadoc.io/doc/com.lithic.api/lithic-java/0.132.0)
+[](https://central.sonatype.com/artifact/com.lithic.api/lithic-java/0.133.0)
+[](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 {
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/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/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))
/**
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/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
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()
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