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..fa1ea91c4 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
-config_hash: 337a99d8cc30006358b7bc2531401669
+configured_endpoints: 215
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic/lithic-113e179e6007c80abd835ff26bfdce4dd24beee5174678687431cb672ce06be8.yml
+openapi_spec_hash: 0f42308e15d062d48e3d4857c39ac749
+config_hash: f6d04d790aaddf639fc04b7f0092e7ec
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e62e0e027..2bdd045bb 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,36 @@
# Changelog
+## 0.133.0 (2026-08-14)
+
+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 blockchain_recipients create endpoint ([0188b4a](https://github.com/lithic-com/lithic-java/commit/0188b4ae0bc6b0df2b453cca67ddd0a1cd37c47d))
+* **api:** add claimToken field to disputes/webhooks, claim filter, write_off_reversed action ([6c4513a](https://github.com/lithic-com/lithic-java/commit/6c4513ac0ce50e18378690069181fa6e865f3808))
+* **api:** add limitCashAmount/limitCashCount fields to VelocityLimitParams ([9507834](https://github.com/lithic-com/lithic-java/commit/9507834f2c34614684d100e960b40a1dca2ce9c5))
+* **api:** add PROGRAM scope to AchPayment/CardTransaction, entity types to Case ([cd6e1c3](https://github.com/lithic-com/lithic-java/commit/cd6e1c3244d56d6c37ea9806d4de572a19ca5244))
+* **api:** add stablecoin event types to FinancialEvent/Payment/StatementLineItems ([46fa6f1](https://github.com/lithic-com/lithic-java/commit/46fa6f1495cab9c378cf03932090cb6710fff7ed))
+* **api:** add STABLECOIN method to Payment and related responses ([5c383bd](https://github.com/lithic-com/lithic-java/commit/5c383bd94b665fc89aa5d1bc1dbe298329a8cc57))
+* **api:** Add STABLECOIN to approvals request and transfer type enums ([3b3dd7a](https://github.com/lithic-com/lithic-java/commit/3b3dd7ae05e57fd7d4112db5dab1a752cdacbe72))
+
+
+### Bug Fixes
+
+* **docs:** link the javadoc badge so the version stays current after release ([d886c69](https://github.com/lithic-com/lithic-java/commit/d886c69a4a93db7f6ebe88a914cacd67fa942b50))
+* **types:** make methodAttributes optional in Payment models, add STABLECOIN method ([6af3f53](https://github.com/lithic-com/lithic-java/commit/6af3f53be4b1d6ee4181049af0e232d011a975db))
+
+
+### 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..6843416bd 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/client/LithicClient.kt b/lithic-java-core/src/main/kotlin/com/lithic/api/client/LithicClient.kt
index 18a13ed98..c05b467c4 100644
--- a/lithic-java-core/src/main/kotlin/com/lithic/api/client/LithicClient.kt
+++ b/lithic-java-core/src/main/kotlin/com/lithic/api/client/LithicClient.kt
@@ -14,6 +14,7 @@ import com.lithic.api.services.blocking.AccountService
import com.lithic.api.services.blocking.AuthRuleService
import com.lithic.api.services.blocking.AuthStreamEnrollmentService
import com.lithic.api.services.blocking.BalanceService
+import com.lithic.api.services.blocking.BlockchainRecipientService
import com.lithic.api.services.blocking.BookTransferService
import com.lithic.api.services.blocking.CardAuthorizationService
import com.lithic.api.services.blocking.CardBulkOrderService
@@ -120,6 +121,8 @@ interface LithicClient {
fun externalBankAccounts(): ExternalBankAccountService
+ fun blockchainRecipients(): BlockchainRecipientService
+
fun payments(): PaymentService
fun threeDS(): ThreeDSService
@@ -232,6 +235,8 @@ interface LithicClient {
fun externalBankAccounts(): ExternalBankAccountService.WithRawResponse
+ fun blockchainRecipients(): BlockchainRecipientService.WithRawResponse
+
fun payments(): PaymentService.WithRawResponse
fun threeDS(): ThreeDSService.WithRawResponse
diff --git a/lithic-java-core/src/main/kotlin/com/lithic/api/client/LithicClientAsync.kt b/lithic-java-core/src/main/kotlin/com/lithic/api/client/LithicClientAsync.kt
index 73317d5c8..00d01ba85 100644
--- a/lithic-java-core/src/main/kotlin/com/lithic/api/client/LithicClientAsync.kt
+++ b/lithic-java-core/src/main/kotlin/com/lithic/api/client/LithicClientAsync.kt
@@ -13,6 +13,7 @@ import com.lithic.api.services.async.AccountServiceAsync
import com.lithic.api.services.async.AuthRuleServiceAsync
import com.lithic.api.services.async.AuthStreamEnrollmentServiceAsync
import com.lithic.api.services.async.BalanceServiceAsync
+import com.lithic.api.services.async.BlockchainRecipientServiceAsync
import com.lithic.api.services.async.BookTransferServiceAsync
import com.lithic.api.services.async.CardAuthorizationServiceAsync
import com.lithic.api.services.async.CardBulkOrderServiceAsync
@@ -120,6 +121,8 @@ interface LithicClientAsync {
fun externalBankAccounts(): ExternalBankAccountServiceAsync
+ fun blockchainRecipients(): BlockchainRecipientServiceAsync
+
fun payments(): PaymentServiceAsync
fun threeDS(): ThreeDSServiceAsync
@@ -235,6 +238,8 @@ interface LithicClientAsync {
fun externalBankAccounts(): ExternalBankAccountServiceAsync.WithRawResponse
+ fun blockchainRecipients(): BlockchainRecipientServiceAsync.WithRawResponse
+
fun payments(): PaymentServiceAsync.WithRawResponse
fun threeDS(): ThreeDSServiceAsync.WithRawResponse
diff --git a/lithic-java-core/src/main/kotlin/com/lithic/api/client/LithicClientAsyncImpl.kt b/lithic-java-core/src/main/kotlin/com/lithic/api/client/LithicClientAsyncImpl.kt
index 52e8a4e5c..3078c82cf 100644
--- a/lithic-java-core/src/main/kotlin/com/lithic/api/client/LithicClientAsyncImpl.kt
+++ b/lithic-java-core/src/main/kotlin/com/lithic/api/client/LithicClientAsyncImpl.kt
@@ -29,6 +29,8 @@ import com.lithic.api.services.async.AuthStreamEnrollmentServiceAsync
import com.lithic.api.services.async.AuthStreamEnrollmentServiceAsyncImpl
import com.lithic.api.services.async.BalanceServiceAsync
import com.lithic.api.services.async.BalanceServiceAsyncImpl
+import com.lithic.api.services.async.BlockchainRecipientServiceAsync
+import com.lithic.api.services.async.BlockchainRecipientServiceAsyncImpl
import com.lithic.api.services.async.BookTransferServiceAsync
import com.lithic.api.services.async.BookTransferServiceAsyncImpl
import com.lithic.api.services.async.CardAuthorizationServiceAsync
@@ -183,6 +185,10 @@ class LithicClientAsyncImpl(private val clientOptions: ClientOptions) : LithicCl
ExternalBankAccountServiceAsyncImpl(clientOptionsWithUserAgent)
}
+ private val blockchainRecipients: BlockchainRecipientServiceAsync by lazy {
+ BlockchainRecipientServiceAsyncImpl(clientOptionsWithUserAgent)
+ }
+
private val payments: PaymentServiceAsync by lazy {
PaymentServiceAsyncImpl(clientOptionsWithUserAgent)
}
@@ -295,6 +301,8 @@ class LithicClientAsyncImpl(private val clientOptions: ClientOptions) : LithicCl
override fun externalBankAccounts(): ExternalBankAccountServiceAsync = externalBankAccounts
+ override fun blockchainRecipients(): BlockchainRecipientServiceAsync = blockchainRecipients
+
override fun payments(): PaymentServiceAsync = payments
override fun threeDS(): ThreeDSServiceAsync = threeDS
@@ -422,6 +430,10 @@ class LithicClientAsyncImpl(private val clientOptions: ClientOptions) : LithicCl
ExternalBankAccountServiceAsyncImpl.WithRawResponseImpl(clientOptions)
}
+ private val blockchainRecipients: BlockchainRecipientServiceAsync.WithRawResponse by lazy {
+ BlockchainRecipientServiceAsyncImpl.WithRawResponseImpl(clientOptions)
+ }
+
private val payments: PaymentServiceAsync.WithRawResponse by lazy {
PaymentServiceAsyncImpl.WithRawResponseImpl(clientOptions)
}
@@ -542,6 +554,9 @@ class LithicClientAsyncImpl(private val clientOptions: ClientOptions) : LithicCl
override fun externalBankAccounts(): ExternalBankAccountServiceAsync.WithRawResponse =
externalBankAccounts
+ override fun blockchainRecipients(): BlockchainRecipientServiceAsync.WithRawResponse =
+ blockchainRecipients
+
override fun payments(): PaymentServiceAsync.WithRawResponse = payments
override fun threeDS(): ThreeDSServiceAsync.WithRawResponse = threeDS
diff --git a/lithic-java-core/src/main/kotlin/com/lithic/api/client/LithicClientImpl.kt b/lithic-java-core/src/main/kotlin/com/lithic/api/client/LithicClientImpl.kt
index bb2ee7ddd..bacca4e62 100644
--- a/lithic-java-core/src/main/kotlin/com/lithic/api/client/LithicClientImpl.kt
+++ b/lithic-java-core/src/main/kotlin/com/lithic/api/client/LithicClientImpl.kt
@@ -29,6 +29,8 @@ import com.lithic.api.services.blocking.AuthStreamEnrollmentService
import com.lithic.api.services.blocking.AuthStreamEnrollmentServiceImpl
import com.lithic.api.services.blocking.BalanceService
import com.lithic.api.services.blocking.BalanceServiceImpl
+import com.lithic.api.services.blocking.BlockchainRecipientService
+import com.lithic.api.services.blocking.BlockchainRecipientServiceImpl
import com.lithic.api.services.blocking.BookTransferService
import com.lithic.api.services.blocking.BookTransferServiceImpl
import com.lithic.api.services.blocking.CardAuthorizationService
@@ -174,6 +176,10 @@ class LithicClientImpl(private val clientOptions: ClientOptions) : LithicClient
ExternalBankAccountServiceImpl(clientOptionsWithUserAgent)
}
+ private val blockchainRecipients: BlockchainRecipientService by lazy {
+ BlockchainRecipientServiceImpl(clientOptionsWithUserAgent)
+ }
+
private val payments: PaymentService by lazy { PaymentServiceImpl(clientOptionsWithUserAgent) }
private val threeDS: ThreeDSService by lazy { ThreeDSServiceImpl(clientOptionsWithUserAgent) }
@@ -275,6 +281,8 @@ class LithicClientImpl(private val clientOptions: ClientOptions) : LithicClient
override fun externalBankAccounts(): ExternalBankAccountService = externalBankAccounts
+ override fun blockchainRecipients(): BlockchainRecipientService = blockchainRecipients
+
override fun payments(): PaymentService = payments
override fun threeDS(): ThreeDSService = threeDS
@@ -401,6 +409,10 @@ class LithicClientImpl(private val clientOptions: ClientOptions) : LithicClient
ExternalBankAccountServiceImpl.WithRawResponseImpl(clientOptions)
}
+ private val blockchainRecipients: BlockchainRecipientService.WithRawResponse by lazy {
+ BlockchainRecipientServiceImpl.WithRawResponseImpl(clientOptions)
+ }
+
private val payments: PaymentService.WithRawResponse by lazy {
PaymentServiceImpl.WithRawResponseImpl(clientOptions)
}
@@ -521,6 +533,9 @@ class LithicClientImpl(private val clientOptions: ClientOptions) : LithicClient
override fun externalBankAccounts(): ExternalBankAccountService.WithRawResponse =
externalBankAccounts
+ override fun blockchainRecipients(): BlockchainRecipientService.WithRawResponse =
+ blockchainRecipients
+
override fun payments(): PaymentService.WithRawResponse = payments
override fun threeDS(): ThreeDSService.WithRawResponse = threeDS
diff --git a/lithic-java-core/src/main/kotlin/com/lithic/api/models/AchPaymentUpdateAction.kt b/lithic-java-core/src/main/kotlin/com/lithic/api/models/AchPaymentUpdateAction.kt
index c4a6a5e6c..70e3bc0f3 100644
--- a/lithic-java-core/src/main/kotlin/com/lithic/api/models/AchPaymentUpdateAction.kt
+++ b/lithic-java-core/src/main/kotlin/com/lithic/api/models/AchPaymentUpdateAction.kt
@@ -862,12 +862,15 @@ private constructor(
@JvmField val FINANCIAL_ACCOUNT = of("FINANCIAL_ACCOUNT")
+ @JvmField val PROGRAM = of("PROGRAM")
+
@JvmStatic fun of(value: String) = Scope(JsonField.of(value))
}
/** An enum containing [Scope]'s known values. */
enum class Known {
- FINANCIAL_ACCOUNT
+ FINANCIAL_ACCOUNT,
+ PROGRAM,
}
/**
@@ -881,6 +884,7 @@ private constructor(
*/
enum class Value {
FINANCIAL_ACCOUNT,
+ PROGRAM,
/**
* An enum member indicating that [Scope] was instantiated with an unknown value.
*/
@@ -897,6 +901,7 @@ private constructor(
fun value(): Value =
when (this) {
FINANCIAL_ACCOUNT -> Value.FINANCIAL_ACCOUNT
+ PROGRAM -> Value.PROGRAM
else -> Value._UNKNOWN
}
@@ -912,6 +917,7 @@ private constructor(
fun known(): Known =
when (this) {
FINANCIAL_ACCOUNT -> Known.FINANCIAL_ACCOUNT
+ PROGRAM -> Known.PROGRAM
else -> throw LithicInvalidDataException("Unknown Scope: $value")
}
diff --git a/lithic-java-core/src/main/kotlin/com/lithic/api/models/BlockchainRecipient.kt b/lithic-java-core/src/main/kotlin/com/lithic/api/models/BlockchainRecipient.kt
new file mode 100644
index 000000000..d6b6ffc82
--- /dev/null
+++ b/lithic-java-core/src/main/kotlin/com/lithic/api/models/BlockchainRecipient.kt
@@ -0,0 +1,990 @@
+// File generated from our OpenAPI spec by Stainless.
+
+package com.lithic.api.models
+
+import com.fasterxml.jackson.annotation.JsonAnyGetter
+import com.fasterxml.jackson.annotation.JsonAnySetter
+import com.fasterxml.jackson.annotation.JsonCreator
+import com.fasterxml.jackson.annotation.JsonProperty
+import com.lithic.api.core.Enum
+import com.lithic.api.core.ExcludeMissing
+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.errors.LithicInvalidDataException
+import java.time.OffsetDateTime
+import java.util.Collections
+import java.util.Objects
+import java.util.Optional
+import kotlin.jvm.optionals.getOrNull
+
+class BlockchainRecipient
+@JsonCreator(mode = JsonCreator.Mode.DISABLED)
+private constructor(
+ private val token: JsonField,
+ private val accountToken: JsonField,
+ private val addressTag: JsonField,
+ private val chain: JsonField,
+ private val created: JsonField,
+ private val externalId: JsonField,
+ private val name: JsonField,
+ private val owner: JsonField,
+ private val ownerType: JsonField,
+ private val programId: JsonField,
+ private val state: JsonField,
+ private val updated: JsonField,
+ private val verificationState: JsonField,
+ private val additionalProperties: MutableMap,
+) {
+
+ @JsonCreator
+ private constructor(
+ @JsonProperty("token") @ExcludeMissing token: JsonField = JsonMissing.of(),
+ @JsonProperty("account_token")
+ @ExcludeMissing
+ accountToken: JsonField = JsonMissing.of(),
+ @JsonProperty("address_tag")
+ @ExcludeMissing
+ addressTag: JsonField = JsonMissing.of(),
+ @JsonProperty("chain") @ExcludeMissing chain: JsonField = JsonMissing.of(),
+ @JsonProperty("created")
+ @ExcludeMissing
+ created: JsonField = JsonMissing.of(),
+ @JsonProperty("external_id")
+ @ExcludeMissing
+ externalId: JsonField = JsonMissing.of(),
+ @JsonProperty("name") @ExcludeMissing name: JsonField = JsonMissing.of(),
+ @JsonProperty("owner") @ExcludeMissing owner: JsonField = JsonMissing.of(),
+ @JsonProperty("owner_type")
+ @ExcludeMissing
+ ownerType: JsonField = JsonMissing.of(),
+ @JsonProperty("program_id") @ExcludeMissing programId: JsonField = JsonMissing.of(),
+ @JsonProperty("state") @ExcludeMissing state: JsonField = JsonMissing.of(),
+ @JsonProperty("updated")
+ @ExcludeMissing
+ updated: JsonField = JsonMissing.of(),
+ @JsonProperty("verification_state")
+ @ExcludeMissing
+ verificationState: JsonField = JsonMissing.of(),
+ ) : this(
+ token,
+ accountToken,
+ addressTag,
+ chain,
+ created,
+ externalId,
+ name,
+ owner,
+ ownerType,
+ programId,
+ state,
+ updated,
+ verificationState,
+ mutableMapOf(),
+ )
+
+ /**
+ * A globally unique identifier for this blockchain recipient
+ *
+ * @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).
+ */
+ fun token(): String = token.getRequired("token")
+
+ /**
+ * The financial account the blockchain recipient belongs to
+ *
+ * @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).
+ */
+ fun accountToken(): String = accountToken.getRequired("account_token")
+
+ /**
+ * An optional tag or memo used by some chains to identify the destination of a transfer within
+ * a shared address
+ *
+ * @throws LithicInvalidDataException if the JSON field has an unexpected type (e.g. if the
+ * server responded with an unexpected value).
+ */
+ fun addressTag(): Optional = addressTag.getOptional("address_tag")
+
+ /**
+ * The blockchain network that the address belongs to
+ *
+ * @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).
+ */
+ fun chain(): String = chain.getRequired("chain")
+
+ /**
+ * An ISO 8601 string representing when this blockchain recipient was created
+ *
+ * @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).
+ */
+ fun created(): OffsetDateTime = created.getRequired("created")
+
+ /**
+ * The identifier the recipient is registered under with the payment provider
+ *
+ * @throws LithicInvalidDataException if the JSON field has an unexpected type (e.g. if the
+ * server responded with an unexpected value).
+ */
+ fun externalId(): Optional = externalId.getOptional("external_id")
+
+ /**
+ * The nickname for this blockchain recipient
+ *
+ * @throws LithicInvalidDataException if the JSON field has an unexpected type (e.g. if the
+ * server responded with an unexpected value).
+ */
+ fun name(): Optional = name.getOptional("name")
+
+ /**
+ * Legal name of the business or individual who owns the blockchain address
+ *
+ * @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).
+ */
+ fun owner(): String = owner.getRequired("owner")
+
+ /**
+ * Owner Type
+ *
+ * @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).
+ */
+ fun ownerType(): OwnerType = ownerType.getRequired("owner_type")
+
+ /**
+ * Globally unique identifier for the program the blockchain recipient is associated with
+ *
+ * @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).
+ */
+ fun programId(): String = programId.getRequired("program_id")
+
+ /**
+ * Account State
+ *
+ * @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).
+ */
+ fun state(): State = state.getRequired("state")
+
+ /**
+ * An ISO 8601 string representing when this blockchain recipient was last updated
+ *
+ * @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).
+ */
+ fun updated(): OffsetDateTime = updated.getRequired("updated")
+
+ /**
+ * Verification State
+ *
+ * @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).
+ */
+ fun verificationState(): VerificationState = verificationState.getRequired("verification_state")
+
+ /**
+ * Returns the raw JSON value of [token].
+ *
+ * Unlike [token], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ @JsonProperty("token") @ExcludeMissing fun _token(): JsonField = token
+
+ /**
+ * Returns the raw JSON value of [accountToken].
+ *
+ * Unlike [accountToken], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ @JsonProperty("account_token")
+ @ExcludeMissing
+ fun _accountToken(): JsonField = accountToken
+
+ /**
+ * Returns the raw JSON value of [addressTag].
+ *
+ * Unlike [addressTag], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ @JsonProperty("address_tag") @ExcludeMissing fun _addressTag(): JsonField = addressTag
+
+ /**
+ * Returns the raw JSON value of [chain].
+ *
+ * Unlike [chain], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ @JsonProperty("chain") @ExcludeMissing fun _chain(): JsonField = chain
+
+ /**
+ * Returns the raw JSON value of [created].
+ *
+ * Unlike [created], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ @JsonProperty("created") @ExcludeMissing fun _created(): JsonField = created
+
+ /**
+ * Returns the raw JSON value of [externalId].
+ *
+ * Unlike [externalId], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ @JsonProperty("external_id") @ExcludeMissing fun _externalId(): JsonField = externalId
+
+ /**
+ * Returns the raw JSON value of [name].
+ *
+ * Unlike [name], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ @JsonProperty("name") @ExcludeMissing fun _name(): JsonField = name
+
+ /**
+ * Returns the raw JSON value of [owner].
+ *
+ * Unlike [owner], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ @JsonProperty("owner") @ExcludeMissing fun _owner(): JsonField = owner
+
+ /**
+ * Returns the raw JSON value of [ownerType].
+ *
+ * Unlike [ownerType], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ @JsonProperty("owner_type") @ExcludeMissing fun _ownerType(): JsonField = ownerType
+
+ /**
+ * Returns the raw JSON value of [programId].
+ *
+ * Unlike [programId], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ @JsonProperty("program_id") @ExcludeMissing fun _programId(): JsonField = programId
+
+ /**
+ * Returns the raw JSON value of [state].
+ *
+ * Unlike [state], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ @JsonProperty("state") @ExcludeMissing fun _state(): JsonField = state
+
+ /**
+ * Returns the raw JSON value of [updated].
+ *
+ * Unlike [updated], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ @JsonProperty("updated") @ExcludeMissing fun _updated(): JsonField = updated
+
+ /**
+ * Returns the raw JSON value of [verificationState].
+ *
+ * Unlike [verificationState], this method doesn't throw if the JSON field has an unexpected
+ * type.
+ */
+ @JsonProperty("verification_state")
+ @ExcludeMissing
+ fun _verificationState(): JsonField = verificationState
+
+ @JsonAnySetter
+ private fun putAdditionalProperty(key: String, value: JsonValue) {
+ additionalProperties.put(key, value)
+ }
+
+ @JsonAnyGetter
+ @ExcludeMissing
+ fun _additionalProperties(): Map =
+ Collections.unmodifiableMap(additionalProperties)
+
+ fun toBuilder() = Builder().from(this)
+
+ companion object {
+
+ /**
+ * Returns a mutable builder for constructing an instance of [BlockchainRecipient].
+ *
+ * The following fields are required:
+ * ```java
+ * .token()
+ * .accountToken()
+ * .addressTag()
+ * .chain()
+ * .created()
+ * .externalId()
+ * .name()
+ * .owner()
+ * .ownerType()
+ * .programId()
+ * .state()
+ * .updated()
+ * .verificationState()
+ * ```
+ */
+ @JvmStatic fun builder() = Builder()
+ }
+
+ /** A builder for [BlockchainRecipient]. */
+ class Builder internal constructor() {
+
+ private var token: JsonField? = null
+ private var accountToken: JsonField? = null
+ private var addressTag: JsonField? = null
+ private var chain: JsonField? = null
+ private var created: JsonField? = null
+ private var externalId: JsonField? = null
+ private var name: JsonField? = null
+ private var owner: JsonField? = null
+ private var ownerType: JsonField? = null
+ private var programId: JsonField? = null
+ private var state: JsonField? = null
+ private var updated: JsonField? = null
+ private var verificationState: JsonField? = null
+ private var additionalProperties: MutableMap = mutableMapOf()
+
+ @JvmSynthetic
+ internal fun from(blockchainRecipient: BlockchainRecipient) = apply {
+ token = blockchainRecipient.token
+ accountToken = blockchainRecipient.accountToken
+ addressTag = blockchainRecipient.addressTag
+ chain = blockchainRecipient.chain
+ created = blockchainRecipient.created
+ externalId = blockchainRecipient.externalId
+ name = blockchainRecipient.name
+ owner = blockchainRecipient.owner
+ ownerType = blockchainRecipient.ownerType
+ programId = blockchainRecipient.programId
+ state = blockchainRecipient.state
+ updated = blockchainRecipient.updated
+ verificationState = blockchainRecipient.verificationState
+ additionalProperties = blockchainRecipient.additionalProperties.toMutableMap()
+ }
+
+ /** A globally unique identifier for this blockchain recipient */
+ fun token(token: String) = token(JsonField.of(token))
+
+ /**
+ * Sets [Builder.token] to an arbitrary JSON value.
+ *
+ * You should usually call [Builder.token] with a well-typed [String] value instead. This
+ * method is primarily for setting the field to an undocumented or not yet supported value.
+ */
+ fun token(token: JsonField) = apply { this.token = token }
+
+ /** The financial account the blockchain recipient belongs to */
+ fun accountToken(accountToken: String) = accountToken(JsonField.of(accountToken))
+
+ /**
+ * Sets [Builder.accountToken] to an arbitrary JSON value.
+ *
+ * You should usually call [Builder.accountToken] with a well-typed [String] value instead.
+ * This method is primarily for setting the field to an undocumented or not yet supported
+ * value.
+ */
+ fun accountToken(accountToken: JsonField) = apply {
+ this.accountToken = accountToken
+ }
+
+ /**
+ * An optional tag or memo used by some chains to identify the destination of a transfer
+ * within a shared address
+ */
+ fun addressTag(addressTag: String?) = addressTag(JsonField.ofNullable(addressTag))
+
+ /** Alias for calling [Builder.addressTag] with `addressTag.orElse(null)`. */
+ fun addressTag(addressTag: Optional) = addressTag(addressTag.getOrNull())
+
+ /**
+ * Sets [Builder.addressTag] to an arbitrary JSON value.
+ *
+ * You should usually call [Builder.addressTag] with a well-typed [String] value instead.
+ * This method is primarily for setting the field to an undocumented or not yet supported
+ * value.
+ */
+ fun addressTag(addressTag: JsonField) = apply { this.addressTag = addressTag }
+
+ /** The blockchain network that the address belongs to */
+ fun chain(chain: String) = chain(JsonField.of(chain))
+
+ /**
+ * Sets [Builder.chain] to an arbitrary JSON value.
+ *
+ * You should usually call [Builder.chain] with a well-typed [String] value instead. This
+ * method is primarily for setting the field to an undocumented or not yet supported value.
+ */
+ fun chain(chain: JsonField) = apply { this.chain = chain }
+
+ /** An ISO 8601 string representing when this blockchain recipient was created */
+ fun created(created: OffsetDateTime) = created(JsonField.of(created))
+
+ /**
+ * Sets [Builder.created] to an arbitrary JSON value.
+ *
+ * You should usually call [Builder.created] with a well-typed [OffsetDateTime] value
+ * instead. This method is primarily for setting the field to an undocumented or not yet
+ * supported value.
+ */
+ fun created(created: JsonField) = apply { this.created = created }
+
+ /** The identifier the recipient is registered under with the payment provider */
+ fun externalId(externalId: String?) = externalId(JsonField.ofNullable(externalId))
+
+ /** Alias for calling [Builder.externalId] with `externalId.orElse(null)`. */
+ fun externalId(externalId: Optional) = externalId(externalId.getOrNull())
+
+ /**
+ * Sets [Builder.externalId] to an arbitrary JSON value.
+ *
+ * You should usually call [Builder.externalId] with a well-typed [String] value instead.
+ * This method is primarily for setting the field to an undocumented or not yet supported
+ * value.
+ */
+ fun externalId(externalId: JsonField) = apply { this.externalId = externalId }
+
+ /** The nickname for this blockchain recipient */
+ fun name(name: String?) = name(JsonField.ofNullable(name))
+
+ /** Alias for calling [Builder.name] with `name.orElse(null)`. */
+ fun name(name: Optional) = name(name.getOrNull())
+
+ /**
+ * Sets [Builder.name] to an arbitrary JSON value.
+ *
+ * You should usually call [Builder.name] with a well-typed [String] value instead. This
+ * method is primarily for setting the field to an undocumented or not yet supported value.
+ */
+ fun name(name: JsonField) = apply { this.name = name }
+
+ /** Legal name of the business or individual who owns the blockchain address */
+ fun owner(owner: String) = owner(JsonField.of(owner))
+
+ /**
+ * Sets [Builder.owner] to an arbitrary JSON value.
+ *
+ * You should usually call [Builder.owner] with a well-typed [String] value instead. This
+ * method is primarily for setting the field to an undocumented or not yet supported value.
+ */
+ fun owner(owner: JsonField) = apply { this.owner = owner }
+
+ /** Owner Type */
+ fun ownerType(ownerType: OwnerType) = ownerType(JsonField.of(ownerType))
+
+ /**
+ * Sets [Builder.ownerType] to an arbitrary JSON value.
+ *
+ * You should usually call [Builder.ownerType] with a well-typed [OwnerType] value instead.
+ * This method is primarily for setting the field to an undocumented or not yet supported
+ * value.
+ */
+ fun ownerType(ownerType: JsonField) = apply { this.ownerType = ownerType }
+
+ /**
+ * Globally unique identifier for the program the blockchain recipient is associated with
+ */
+ fun programId(programId: String) = programId(JsonField.of(programId))
+
+ /**
+ * Sets [Builder.programId] to an arbitrary JSON value.
+ *
+ * You should usually call [Builder.programId] with a well-typed [String] value instead.
+ * This method is primarily for setting the field to an undocumented or not yet supported
+ * value.
+ */
+ fun programId(programId: JsonField) = apply { this.programId = programId }
+
+ /** Account State */
+ fun state(state: State) = state(JsonField.of(state))
+
+ /**
+ * Sets [Builder.state] to an arbitrary JSON value.
+ *
+ * You should usually call [Builder.state] with a well-typed [State] value instead. This
+ * method is primarily for setting the field to an undocumented or not yet supported value.
+ */
+ fun state(state: JsonField) = apply { this.state = state }
+
+ /** An ISO 8601 string representing when this blockchain recipient was last updated */
+ fun updated(updated: OffsetDateTime) = updated(JsonField.of(updated))
+
+ /**
+ * Sets [Builder.updated] to an arbitrary JSON value.
+ *
+ * You should usually call [Builder.updated] with a well-typed [OffsetDateTime] value
+ * instead. This method is primarily for setting the field to an undocumented or not yet
+ * supported value.
+ */
+ fun updated(updated: JsonField) = apply { this.updated = updated }
+
+ /** Verification State */
+ fun verificationState(verificationState: VerificationState) =
+ verificationState(JsonField.of(verificationState))
+
+ /**
+ * Sets [Builder.verificationState] to an arbitrary JSON value.
+ *
+ * You should usually call [Builder.verificationState] with a well-typed [VerificationState]
+ * value instead. This method is primarily for setting the field to an undocumented or not
+ * yet supported value.
+ */
+ fun verificationState(verificationState: JsonField) = apply {
+ this.verificationState = verificationState
+ }
+
+ 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 [BlockchainRecipient].
+ *
+ * Further updates to this [Builder] will not mutate the returned instance.
+ *
+ * The following fields are required:
+ * ```java
+ * .token()
+ * .accountToken()
+ * .addressTag()
+ * .chain()
+ * .created()
+ * .externalId()
+ * .name()
+ * .owner()
+ * .ownerType()
+ * .programId()
+ * .state()
+ * .updated()
+ * .verificationState()
+ * ```
+ *
+ * @throws IllegalStateException if any required field is unset.
+ */
+ fun build(): BlockchainRecipient =
+ BlockchainRecipient(
+ checkRequired("token", token),
+ checkRequired("accountToken", accountToken),
+ checkRequired("addressTag", addressTag),
+ checkRequired("chain", chain),
+ checkRequired("created", created),
+ checkRequired("externalId", externalId),
+ checkRequired("name", name),
+ checkRequired("owner", owner),
+ checkRequired("ownerType", ownerType),
+ checkRequired("programId", programId),
+ checkRequired("state", state),
+ checkRequired("updated", updated),
+ checkRequired("verificationState", verificationState),
+ additionalProperties.toMutableMap(),
+ )
+ }
+
+ 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(): BlockchainRecipient = apply {
+ if (validated) {
+ return@apply
+ }
+
+ token()
+ accountToken()
+ addressTag()
+ chain()
+ created()
+ externalId()
+ name()
+ owner()
+ ownerType().validate()
+ programId()
+ state().validate()
+ updated()
+ verificationState().validate()
+ 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 =
+ (if (token.asKnown().isPresent) 1 else 0) +
+ (if (accountToken.asKnown().isPresent) 1 else 0) +
+ (if (addressTag.asKnown().isPresent) 1 else 0) +
+ (if (chain.asKnown().isPresent) 1 else 0) +
+ (if (created.asKnown().isPresent) 1 else 0) +
+ (if (externalId.asKnown().isPresent) 1 else 0) +
+ (if (name.asKnown().isPresent) 1 else 0) +
+ (if (owner.asKnown().isPresent) 1 else 0) +
+ (ownerType.asKnown().getOrNull()?.validity() ?: 0) +
+ (if (programId.asKnown().isPresent) 1 else 0) +
+ (state.asKnown().getOrNull()?.validity() ?: 0) +
+ (if (updated.asKnown().isPresent) 1 else 0) +
+ (verificationState.asKnown().getOrNull()?.validity() ?: 0)
+
+ /** Account State */
+ class State @JsonCreator private constructor(private val value: JsonField) : Enum {
+
+ /**
+ * Returns this class instance's raw value.
+ *
+ * This is usually only useful if this instance was deserialized from data that doesn't
+ * match any known member, and you want to know that value. For example, if the SDK is on an
+ * older version than the API, then the API may respond with new members that the SDK is
+ * unaware of.
+ */
+ @com.fasterxml.jackson.annotation.JsonValue fun _value(): JsonField = value
+
+ companion object {
+
+ @JvmField val ENABLED = of("ENABLED")
+
+ @JvmField val CLOSED = of("CLOSED")
+
+ @JvmField val PAUSED = of("PAUSED")
+
+ @JvmStatic fun of(value: String) = State(JsonField.of(value))
+ }
+
+ /** An enum containing [State]'s known values. */
+ enum class Known {
+ ENABLED,
+ CLOSED,
+ PAUSED,
+ }
+
+ /**
+ * An enum containing [State]'s known values, as well as an [_UNKNOWN] member.
+ *
+ * An instance of [State] can contain an unknown value in a couple of cases:
+ * - It was deserialized from data that doesn't match any known member. For example, if the
+ * SDK is on an older version than the API, then the API may respond with new members that
+ * the SDK is unaware of.
+ * - It was constructed with an arbitrary value using the [of] method.
+ */
+ enum class Value {
+ ENABLED,
+ CLOSED,
+ PAUSED,
+ /** An enum member indicating that [State] was instantiated with an unknown value. */
+ _UNKNOWN,
+ }
+
+ /**
+ * Returns an enum member corresponding to this class instance's value, or [Value._UNKNOWN]
+ * if the class was instantiated with an unknown value.
+ *
+ * Use the [known] method instead if you're certain the value is always known or if you want
+ * to throw for the unknown case.
+ */
+ fun value(): Value =
+ when (this) {
+ ENABLED -> Value.ENABLED
+ CLOSED -> Value.CLOSED
+ PAUSED -> Value.PAUSED
+ else -> Value._UNKNOWN
+ }
+
+ /**
+ * Returns an enum member corresponding to this class instance's value.
+ *
+ * Use the [value] method instead if you're uncertain the value is always known and don't
+ * want to throw for the unknown case.
+ *
+ * @throws LithicInvalidDataException if this class instance's value is a not a known
+ * member.
+ */
+ fun known(): Known =
+ when (this) {
+ ENABLED -> Known.ENABLED
+ CLOSED -> Known.CLOSED
+ PAUSED -> Known.PAUSED
+ else -> throw LithicInvalidDataException("Unknown State: $value")
+ }
+
+ /**
+ * Returns this class instance's primitive wire representation.
+ *
+ * This differs from the [toString] method because that method is primarily for debugging
+ * and generally doesn't throw.
+ *
+ * @throws LithicInvalidDataException if this class instance's value does not have the
+ * expected primitive type.
+ */
+ fun asString(): String =
+ _value().asString().orElseThrow { LithicInvalidDataException("Value is not a String") }
+
+ 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(): State = apply {
+ if (validated) {
+ return@apply
+ }
+
+ known()
+ 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 = if (value() == Value._UNKNOWN) 0 else 1
+
+ override fun equals(other: Any?): Boolean {
+ if (this === other) {
+ return true
+ }
+
+ return other is State && value == other.value
+ }
+
+ override fun hashCode() = value.hashCode()
+
+ override fun toString() = value.toString()
+ }
+
+ /** Verification State */
+ class VerificationState @JsonCreator private constructor(private val value: JsonField) :
+ Enum {
+
+ /**
+ * Returns this class instance's raw value.
+ *
+ * This is usually only useful if this instance was deserialized from data that doesn't
+ * match any known member, and you want to know that value. For example, if the SDK is on an
+ * older version than the API, then the API may respond with new members that the SDK is
+ * unaware of.
+ */
+ @com.fasterxml.jackson.annotation.JsonValue fun _value(): JsonField = value
+
+ companion object {
+
+ @JvmField val PENDING = of("PENDING")
+
+ @JvmField val ENABLED = of("ENABLED")
+
+ @JvmField val FAILED_VERIFICATION = of("FAILED_VERIFICATION")
+
+ @JvmField val INSUFFICIENT_FUNDS = of("INSUFFICIENT_FUNDS")
+
+ @JvmStatic fun of(value: String) = VerificationState(JsonField.of(value))
+ }
+
+ /** An enum containing [VerificationState]'s known values. */
+ enum class Known {
+ PENDING,
+ ENABLED,
+ FAILED_VERIFICATION,
+ INSUFFICIENT_FUNDS,
+ }
+
+ /**
+ * An enum containing [VerificationState]'s known values, as well as an [_UNKNOWN] member.
+ *
+ * An instance of [VerificationState] can contain an unknown value in a couple of cases:
+ * - It was deserialized from data that doesn't match any known member. For example, if the
+ * SDK is on an older version than the API, then the API may respond with new members that
+ * the SDK is unaware of.
+ * - It was constructed with an arbitrary value using the [of] method.
+ */
+ enum class Value {
+ PENDING,
+ ENABLED,
+ FAILED_VERIFICATION,
+ INSUFFICIENT_FUNDS,
+ /**
+ * An enum member indicating that [VerificationState] was instantiated with an unknown
+ * value.
+ */
+ _UNKNOWN,
+ }
+
+ /**
+ * Returns an enum member corresponding to this class instance's value, or [Value._UNKNOWN]
+ * if the class was instantiated with an unknown value.
+ *
+ * Use the [known] method instead if you're certain the value is always known or if you want
+ * to throw for the unknown case.
+ */
+ fun value(): Value =
+ when (this) {
+ PENDING -> Value.PENDING
+ ENABLED -> Value.ENABLED
+ FAILED_VERIFICATION -> Value.FAILED_VERIFICATION
+ INSUFFICIENT_FUNDS -> Value.INSUFFICIENT_FUNDS
+ else -> Value._UNKNOWN
+ }
+
+ /**
+ * Returns an enum member corresponding to this class instance's value.
+ *
+ * Use the [value] method instead if you're uncertain the value is always known and don't
+ * want to throw for the unknown case.
+ *
+ * @throws LithicInvalidDataException if this class instance's value is a not a known
+ * member.
+ */
+ fun known(): Known =
+ when (this) {
+ PENDING -> Known.PENDING
+ ENABLED -> Known.ENABLED
+ FAILED_VERIFICATION -> Known.FAILED_VERIFICATION
+ INSUFFICIENT_FUNDS -> Known.INSUFFICIENT_FUNDS
+ else -> throw LithicInvalidDataException("Unknown VerificationState: $value")
+ }
+
+ /**
+ * Returns this class instance's primitive wire representation.
+ *
+ * This differs from the [toString] method because that method is primarily for debugging
+ * and generally doesn't throw.
+ *
+ * @throws LithicInvalidDataException if this class instance's value does not have the
+ * expected primitive type.
+ */
+ fun asString(): String =
+ _value().asString().orElseThrow { LithicInvalidDataException("Value is not a String") }
+
+ 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(): VerificationState = apply {
+ if (validated) {
+ return@apply
+ }
+
+ known()
+ 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 = if (value() == Value._UNKNOWN) 0 else 1
+
+ override fun equals(other: Any?): Boolean {
+ if (this === other) {
+ return true
+ }
+
+ return other is VerificationState && value == other.value
+ }
+
+ override fun hashCode() = value.hashCode()
+
+ override fun toString() = value.toString()
+ }
+
+ override fun equals(other: Any?): Boolean {
+ if (this === other) {
+ return true
+ }
+
+ return other is BlockchainRecipient &&
+ token == other.token &&
+ accountToken == other.accountToken &&
+ addressTag == other.addressTag &&
+ chain == other.chain &&
+ created == other.created &&
+ externalId == other.externalId &&
+ name == other.name &&
+ owner == other.owner &&
+ ownerType == other.ownerType &&
+ programId == other.programId &&
+ state == other.state &&
+ updated == other.updated &&
+ verificationState == other.verificationState &&
+ additionalProperties == other.additionalProperties
+ }
+
+ private val hashCode: Int by lazy {
+ Objects.hash(
+ token,
+ accountToken,
+ addressTag,
+ chain,
+ created,
+ externalId,
+ name,
+ owner,
+ ownerType,
+ programId,
+ state,
+ updated,
+ verificationState,
+ additionalProperties,
+ )
+ }
+
+ override fun hashCode(): Int = hashCode
+
+ override fun toString() =
+ "BlockchainRecipient{token=$token, accountToken=$accountToken, addressTag=$addressTag, chain=$chain, created=$created, externalId=$externalId, name=$name, owner=$owner, ownerType=$ownerType, programId=$programId, state=$state, updated=$updated, verificationState=$verificationState, additionalProperties=$additionalProperties}"
+}
diff --git a/lithic-java-core/src/main/kotlin/com/lithic/api/models/BlockchainRecipientCreateParams.kt b/lithic-java-core/src/main/kotlin/com/lithic/api/models/BlockchainRecipientCreateParams.kt
new file mode 100644
index 000000000..15353521d
--- /dev/null
+++ b/lithic-java-core/src/main/kotlin/com/lithic/api/models/BlockchainRecipientCreateParams.kt
@@ -0,0 +1,869 @@
+// File generated from our OpenAPI spec by Stainless.
+
+package com.lithic.api.models
+
+import com.fasterxml.jackson.annotation.JsonAnyGetter
+import com.fasterxml.jackson.annotation.JsonAnySetter
+import com.fasterxml.jackson.annotation.JsonCreator
+import com.fasterxml.jackson.annotation.JsonProperty
+import com.lithic.api.core.ExcludeMissing
+import com.lithic.api.core.JsonField
+import com.lithic.api.core.JsonMissing
+import com.lithic.api.core.JsonValue
+import com.lithic.api.core.Params
+import com.lithic.api.core.checkRequired
+import com.lithic.api.core.http.Headers
+import com.lithic.api.core.http.QueryParams
+import com.lithic.api.errors.LithicInvalidDataException
+import java.util.Collections
+import java.util.Objects
+import java.util.Optional
+import kotlin.jvm.optionals.getOrNull
+
+/**
+ * Register a blockchain address as a withdrawal destination for a financial account
+ *
+ * The recipient is created with a `PENDING` verification state and cannot receive a payout until
+ * screening of the address completes. Registering an address that is already registered to the same
+ * financial account returns the existing recipient and its current verification state, rather than
+ * creating a second one
+ */
+class BlockchainRecipientCreateParams
+private constructor(
+ private val body: BlockchainRecipientRequest,
+ private val additionalHeaders: Headers,
+ private val additionalQueryParams: QueryParams,
+) : Params {
+
+ /**
+ * The financial account the blockchain recipient belongs to
+ *
+ * @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).
+ */
+ fun accountToken(): String = body.accountToken()
+
+ /**
+ * The blockchain address funds will be withdrawn to
+ *
+ * @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).
+ */
+ fun address(): String = body.address()
+
+ /**
+ * The blockchain network that the address belongs to
+ *
+ * @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).
+ */
+ fun chain(): String = body.chain()
+
+ /**
+ * Legal name of the business or individual who owns the blockchain address
+ *
+ * @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).
+ */
+ fun owner(): String = body.owner()
+
+ /**
+ * Owner Type
+ *
+ * @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).
+ */
+ fun ownerType(): OwnerType = body.ownerType()
+
+ /**
+ * An optional tag or memo used by some chains to identify the destination of a transfer within
+ * a shared address
+ *
+ * @throws LithicInvalidDataException if the JSON field has an unexpected type (e.g. if the
+ * server responded with an unexpected value).
+ */
+ fun addressTag(): Optional = body.addressTag()
+
+ /**
+ * The nickname for this blockchain recipient
+ *
+ * @throws LithicInvalidDataException if the JSON field has an unexpected type (e.g. if the
+ * server responded with an unexpected value).
+ */
+ fun name(): Optional = body.name()
+
+ /**
+ * Returns the raw JSON value of [accountToken].
+ *
+ * Unlike [accountToken], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ fun _accountToken(): JsonField = body._accountToken()
+
+ /**
+ * Returns the raw JSON value of [address].
+ *
+ * Unlike [address], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ fun _address(): JsonField = body._address()
+
+ /**
+ * Returns the raw JSON value of [chain].
+ *
+ * Unlike [chain], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ fun _chain(): JsonField = body._chain()
+
+ /**
+ * Returns the raw JSON value of [owner].
+ *
+ * Unlike [owner], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ fun _owner(): JsonField = body._owner()
+
+ /**
+ * Returns the raw JSON value of [ownerType].
+ *
+ * Unlike [ownerType], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ fun _ownerType(): JsonField = body._ownerType()
+
+ /**
+ * Returns the raw JSON value of [addressTag].
+ *
+ * Unlike [addressTag], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ fun _addressTag(): JsonField = body._addressTag()
+
+ /**
+ * Returns the raw JSON value of [name].
+ *
+ * Unlike [name], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ fun _name(): JsonField = body._name()
+
+ fun _additionalBodyProperties(): Map = body._additionalProperties()
+
+ /** Additional headers to send with the request. */
+ fun _additionalHeaders(): Headers = additionalHeaders
+
+ /** Additional query param to send with the request. */
+ fun _additionalQueryParams(): QueryParams = additionalQueryParams
+
+ fun toBuilder() = Builder().from(this)
+
+ companion object {
+
+ /**
+ * Returns a mutable builder for constructing an instance of
+ * [BlockchainRecipientCreateParams].
+ *
+ * The following fields are required:
+ * ```java
+ * .accountToken()
+ * .address()
+ * .chain()
+ * .owner()
+ * .ownerType()
+ * ```
+ */
+ @JvmStatic fun builder() = Builder()
+ }
+
+ /** A builder for [BlockchainRecipientCreateParams]. */
+ class Builder internal constructor() {
+
+ private var body: BlockchainRecipientRequest.Builder = BlockchainRecipientRequest.builder()
+ private var additionalHeaders: Headers.Builder = Headers.builder()
+ private var additionalQueryParams: QueryParams.Builder = QueryParams.builder()
+
+ @JvmSynthetic
+ internal fun from(blockchainRecipientCreateParams: BlockchainRecipientCreateParams) =
+ apply {
+ body = blockchainRecipientCreateParams.body.toBuilder()
+ additionalHeaders = blockchainRecipientCreateParams.additionalHeaders.toBuilder()
+ additionalQueryParams =
+ blockchainRecipientCreateParams.additionalQueryParams.toBuilder()
+ }
+
+ /**
+ * Sets the entire request body.
+ *
+ * This is generally only useful if you are already constructing the body separately.
+ * Otherwise, it's more convenient to use the top-level setters instead:
+ * - [accountToken]
+ * - [address]
+ * - [chain]
+ * - [owner]
+ * - [ownerType]
+ * - etc.
+ */
+ fun body(body: BlockchainRecipientRequest) = apply { this.body = body.toBuilder() }
+
+ /** The financial account the blockchain recipient belongs to */
+ fun accountToken(accountToken: String) = apply { body.accountToken(accountToken) }
+
+ /**
+ * Sets [Builder.accountToken] to an arbitrary JSON value.
+ *
+ * You should usually call [Builder.accountToken] with a well-typed [String] value instead.
+ * This method is primarily for setting the field to an undocumented or not yet supported
+ * value.
+ */
+ fun accountToken(accountToken: JsonField) = apply {
+ body.accountToken(accountToken)
+ }
+
+ /** The blockchain address funds will be withdrawn to */
+ fun address(address: String) = apply { body.address(address) }
+
+ /**
+ * Sets [Builder.address] to an arbitrary JSON value.
+ *
+ * You should usually call [Builder.address] with a well-typed [String] value instead. This
+ * method is primarily for setting the field to an undocumented or not yet supported value.
+ */
+ fun address(address: JsonField) = apply { body.address(address) }
+
+ /** The blockchain network that the address belongs to */
+ fun chain(chain: String) = apply { body.chain(chain) }
+
+ /**
+ * Sets [Builder.chain] to an arbitrary JSON value.
+ *
+ * You should usually call [Builder.chain] with a well-typed [String] value instead. This
+ * method is primarily for setting the field to an undocumented or not yet supported value.
+ */
+ fun chain(chain: JsonField) = apply { body.chain(chain) }
+
+ /** Legal name of the business or individual who owns the blockchain address */
+ fun owner(owner: String) = apply { body.owner(owner) }
+
+ /**
+ * Sets [Builder.owner] to an arbitrary JSON value.
+ *
+ * You should usually call [Builder.owner] with a well-typed [String] value instead. This
+ * method is primarily for setting the field to an undocumented or not yet supported value.
+ */
+ fun owner(owner: JsonField) = apply { body.owner(owner) }
+
+ /** Owner Type */
+ fun ownerType(ownerType: OwnerType) = apply { body.ownerType(ownerType) }
+
+ /**
+ * Sets [Builder.ownerType] to an arbitrary JSON value.
+ *
+ * You should usually call [Builder.ownerType] with a well-typed [OwnerType] value instead.
+ * This method is primarily for setting the field to an undocumented or not yet supported
+ * value.
+ */
+ fun ownerType(ownerType: JsonField) = apply { body.ownerType(ownerType) }
+
+ /**
+ * An optional tag or memo used by some chains to identify the destination of a transfer
+ * within a shared address
+ */
+ fun addressTag(addressTag: String) = apply { body.addressTag(addressTag) }
+
+ /**
+ * Sets [Builder.addressTag] to an arbitrary JSON value.
+ *
+ * You should usually call [Builder.addressTag] with a well-typed [String] value instead.
+ * This method is primarily for setting the field to an undocumented or not yet supported
+ * value.
+ */
+ fun addressTag(addressTag: JsonField) = apply { body.addressTag(addressTag) }
+
+ /** The nickname for this blockchain recipient */
+ fun name(name: String) = apply { body.name(name) }
+
+ /**
+ * Sets [Builder.name] to an arbitrary JSON value.
+ *
+ * You should usually call [Builder.name] with a well-typed [String] value instead. This
+ * method is primarily for setting the field to an undocumented or not yet supported value.
+ */
+ fun name(name: JsonField) = apply { body.name(name) }
+
+ fun additionalBodyProperties(additionalBodyProperties: Map) = apply {
+ body.additionalProperties(additionalBodyProperties)
+ }
+
+ fun putAdditionalBodyProperty(key: String, value: JsonValue) = apply {
+ body.putAdditionalProperty(key, value)
+ }
+
+ fun putAllAdditionalBodyProperties(additionalBodyProperties: Map) =
+ apply {
+ body.putAllAdditionalProperties(additionalBodyProperties)
+ }
+
+ fun removeAdditionalBodyProperty(key: String) = apply { body.removeAdditionalProperty(key) }
+
+ fun removeAllAdditionalBodyProperties(keys: Set) = apply {
+ body.removeAllAdditionalProperties(keys)
+ }
+
+ fun additionalHeaders(additionalHeaders: Headers) = apply {
+ this.additionalHeaders.clear()
+ putAllAdditionalHeaders(additionalHeaders)
+ }
+
+ fun additionalHeaders(additionalHeaders: Map>) = apply {
+ this.additionalHeaders.clear()
+ putAllAdditionalHeaders(additionalHeaders)
+ }
+
+ fun putAdditionalHeader(name: String, value: String) = apply {
+ additionalHeaders.put(name, value)
+ }
+
+ fun putAdditionalHeaders(name: String, values: Iterable) = apply {
+ additionalHeaders.put(name, values)
+ }
+
+ fun putAllAdditionalHeaders(additionalHeaders: Headers) = apply {
+ this.additionalHeaders.putAll(additionalHeaders)
+ }
+
+ fun putAllAdditionalHeaders(additionalHeaders: Map>) = apply {
+ this.additionalHeaders.putAll(additionalHeaders)
+ }
+
+ fun replaceAdditionalHeaders(name: String, value: String) = apply {
+ additionalHeaders.replace(name, value)
+ }
+
+ fun replaceAdditionalHeaders(name: String, values: Iterable) = apply {
+ additionalHeaders.replace(name, values)
+ }
+
+ fun replaceAllAdditionalHeaders(additionalHeaders: Headers) = apply {
+ this.additionalHeaders.replaceAll(additionalHeaders)
+ }
+
+ fun replaceAllAdditionalHeaders(additionalHeaders: Map>) = apply {
+ this.additionalHeaders.replaceAll(additionalHeaders)
+ }
+
+ fun removeAdditionalHeaders(name: String) = apply { additionalHeaders.remove(name) }
+
+ fun removeAllAdditionalHeaders(names: Set) = apply {
+ additionalHeaders.removeAll(names)
+ }
+
+ fun additionalQueryParams(additionalQueryParams: QueryParams) = apply {
+ this.additionalQueryParams.clear()
+ putAllAdditionalQueryParams(additionalQueryParams)
+ }
+
+ fun additionalQueryParams(additionalQueryParams: Map>) = apply {
+ this.additionalQueryParams.clear()
+ putAllAdditionalQueryParams(additionalQueryParams)
+ }
+
+ fun putAdditionalQueryParam(key: String, value: String) = apply {
+ additionalQueryParams.put(key, value)
+ }
+
+ fun putAdditionalQueryParams(key: String, values: Iterable) = apply {
+ additionalQueryParams.put(key, values)
+ }
+
+ fun putAllAdditionalQueryParams(additionalQueryParams: QueryParams) = apply {
+ this.additionalQueryParams.putAll(additionalQueryParams)
+ }
+
+ fun putAllAdditionalQueryParams(additionalQueryParams: Map>) =
+ apply {
+ this.additionalQueryParams.putAll(additionalQueryParams)
+ }
+
+ fun replaceAdditionalQueryParams(key: String, value: String) = apply {
+ additionalQueryParams.replace(key, value)
+ }
+
+ fun replaceAdditionalQueryParams(key: String, values: Iterable) = apply {
+ additionalQueryParams.replace(key, values)
+ }
+
+ fun replaceAllAdditionalQueryParams(additionalQueryParams: QueryParams) = apply {
+ this.additionalQueryParams.replaceAll(additionalQueryParams)
+ }
+
+ fun replaceAllAdditionalQueryParams(additionalQueryParams: Map>) =
+ apply {
+ this.additionalQueryParams.replaceAll(additionalQueryParams)
+ }
+
+ fun removeAdditionalQueryParams(key: String) = apply { additionalQueryParams.remove(key) }
+
+ fun removeAllAdditionalQueryParams(keys: Set) = apply {
+ additionalQueryParams.removeAll(keys)
+ }
+
+ /**
+ * Returns an immutable instance of [BlockchainRecipientCreateParams].
+ *
+ * Further updates to this [Builder] will not mutate the returned instance.
+ *
+ * The following fields are required:
+ * ```java
+ * .accountToken()
+ * .address()
+ * .chain()
+ * .owner()
+ * .ownerType()
+ * ```
+ *
+ * @throws IllegalStateException if any required field is unset.
+ */
+ fun build(): BlockchainRecipientCreateParams =
+ BlockchainRecipientCreateParams(
+ body.build(),
+ additionalHeaders.build(),
+ additionalQueryParams.build(),
+ )
+ }
+
+ fun _body(): BlockchainRecipientRequest = body
+
+ override fun _headers(): Headers = additionalHeaders
+
+ override fun _queryParams(): QueryParams = additionalQueryParams
+
+ class BlockchainRecipientRequest
+ @JsonCreator(mode = JsonCreator.Mode.DISABLED)
+ private constructor(
+ private val accountToken: JsonField,
+ private val address: JsonField,
+ private val chain: JsonField,
+ private val owner: JsonField,
+ private val ownerType: JsonField,
+ private val addressTag: JsonField,
+ private val name: JsonField,
+ private val additionalProperties: MutableMap,
+ ) {
+
+ @JsonCreator
+ private constructor(
+ @JsonProperty("account_token")
+ @ExcludeMissing
+ accountToken: JsonField = JsonMissing.of(),
+ @JsonProperty("address") @ExcludeMissing address: JsonField = JsonMissing.of(),
+ @JsonProperty("chain") @ExcludeMissing chain: JsonField = JsonMissing.of(),
+ @JsonProperty("owner") @ExcludeMissing owner: JsonField = JsonMissing.of(),
+ @JsonProperty("owner_type")
+ @ExcludeMissing
+ ownerType: JsonField = JsonMissing.of(),
+ @JsonProperty("address_tag")
+ @ExcludeMissing
+ addressTag: JsonField = JsonMissing.of(),
+ @JsonProperty("name") @ExcludeMissing name: JsonField = JsonMissing.of(),
+ ) : this(accountToken, address, chain, owner, ownerType, addressTag, name, mutableMapOf())
+
+ /**
+ * The financial account the blockchain recipient belongs to
+ *
+ * @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).
+ */
+ fun accountToken(): String = accountToken.getRequired("account_token")
+
+ /**
+ * The blockchain address funds will be withdrawn to
+ *
+ * @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).
+ */
+ fun address(): String = address.getRequired("address")
+
+ /**
+ * The blockchain network that the address belongs to
+ *
+ * @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).
+ */
+ fun chain(): String = chain.getRequired("chain")
+
+ /**
+ * Legal name of the business or individual who owns the blockchain address
+ *
+ * @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).
+ */
+ fun owner(): String = owner.getRequired("owner")
+
+ /**
+ * Owner Type
+ *
+ * @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).
+ */
+ fun ownerType(): OwnerType = ownerType.getRequired("owner_type")
+
+ /**
+ * An optional tag or memo used by some chains to identify the destination of a transfer
+ * within a shared address
+ *
+ * @throws LithicInvalidDataException if the JSON field has an unexpected type (e.g. if the
+ * server responded with an unexpected value).
+ */
+ fun addressTag(): Optional = addressTag.getOptional("address_tag")
+
+ /**
+ * The nickname for this blockchain recipient
+ *
+ * @throws LithicInvalidDataException if the JSON field has an unexpected type (e.g. if the
+ * server responded with an unexpected value).
+ */
+ fun name(): Optional = name.getOptional("name")
+
+ /**
+ * Returns the raw JSON value of [accountToken].
+ *
+ * Unlike [accountToken], this method doesn't throw if the JSON field has an unexpected
+ * type.
+ */
+ @JsonProperty("account_token")
+ @ExcludeMissing
+ fun _accountToken(): JsonField = accountToken
+
+ /**
+ * Returns the raw JSON value of [address].
+ *
+ * Unlike [address], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ @JsonProperty("address") @ExcludeMissing fun _address(): JsonField = address
+
+ /**
+ * Returns the raw JSON value of [chain].
+ *
+ * Unlike [chain], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ @JsonProperty("chain") @ExcludeMissing fun _chain(): JsonField = chain
+
+ /**
+ * Returns the raw JSON value of [owner].
+ *
+ * Unlike [owner], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ @JsonProperty("owner") @ExcludeMissing fun _owner(): JsonField = owner
+
+ /**
+ * Returns the raw JSON value of [ownerType].
+ *
+ * Unlike [ownerType], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ @JsonProperty("owner_type")
+ @ExcludeMissing
+ fun _ownerType(): JsonField = ownerType
+
+ /**
+ * Returns the raw JSON value of [addressTag].
+ *
+ * Unlike [addressTag], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ @JsonProperty("address_tag")
+ @ExcludeMissing
+ fun _addressTag(): JsonField = addressTag
+
+ /**
+ * Returns the raw JSON value of [name].
+ *
+ * Unlike [name], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ @JsonProperty("name") @ExcludeMissing fun _name(): JsonField = name
+
+ @JsonAnySetter
+ private fun putAdditionalProperty(key: String, value: JsonValue) {
+ additionalProperties.put(key, value)
+ }
+
+ @JsonAnyGetter
+ @ExcludeMissing
+ fun _additionalProperties(): Map =
+ Collections.unmodifiableMap(additionalProperties)
+
+ fun toBuilder() = Builder().from(this)
+
+ companion object {
+
+ /**
+ * Returns a mutable builder for constructing an instance of
+ * [BlockchainRecipientRequest].
+ *
+ * The following fields are required:
+ * ```java
+ * .accountToken()
+ * .address()
+ * .chain()
+ * .owner()
+ * .ownerType()
+ * ```
+ */
+ @JvmStatic fun builder() = Builder()
+ }
+
+ /** A builder for [BlockchainRecipientRequest]. */
+ class Builder internal constructor() {
+
+ private var accountToken: JsonField? = null
+ private var address: JsonField? = null
+ private var chain: JsonField? = null
+ private var owner: JsonField? = null
+ private var ownerType: JsonField? = null
+ private var addressTag: JsonField = JsonMissing.of()
+ private var name: JsonField = JsonMissing.of()
+ private var additionalProperties: MutableMap = mutableMapOf()
+
+ @JvmSynthetic
+ internal fun from(blockchainRecipientRequest: BlockchainRecipientRequest) = apply {
+ accountToken = blockchainRecipientRequest.accountToken
+ address = blockchainRecipientRequest.address
+ chain = blockchainRecipientRequest.chain
+ owner = blockchainRecipientRequest.owner
+ ownerType = blockchainRecipientRequest.ownerType
+ addressTag = blockchainRecipientRequest.addressTag
+ name = blockchainRecipientRequest.name
+ additionalProperties =
+ blockchainRecipientRequest.additionalProperties.toMutableMap()
+ }
+
+ /** The financial account the blockchain recipient belongs to */
+ fun accountToken(accountToken: String) = accountToken(JsonField.of(accountToken))
+
+ /**
+ * Sets [Builder.accountToken] to an arbitrary JSON value.
+ *
+ * You should usually call [Builder.accountToken] with a well-typed [String] value
+ * instead. This method is primarily for setting the field to an undocumented or not yet
+ * supported value.
+ */
+ fun accountToken(accountToken: JsonField) = apply {
+ this.accountToken = accountToken
+ }
+
+ /** The blockchain address funds will be withdrawn to */
+ fun address(address: String) = address(JsonField.of(address))
+
+ /**
+ * Sets [Builder.address] to an arbitrary JSON value.
+ *
+ * You should usually call [Builder.address] with a well-typed [String] value instead.
+ * This method is primarily for setting the field to an undocumented or not yet
+ * supported value.
+ */
+ fun address(address: JsonField) = apply { this.address = address }
+
+ /** The blockchain network that the address belongs to */
+ fun chain(chain: String) = chain(JsonField.of(chain))
+
+ /**
+ * Sets [Builder.chain] to an arbitrary JSON value.
+ *
+ * You should usually call [Builder.chain] with a well-typed [String] value instead.
+ * This method is primarily for setting the field to an undocumented or not yet
+ * supported value.
+ */
+ fun chain(chain: JsonField) = apply { this.chain = chain }
+
+ /** Legal name of the business or individual who owns the blockchain address */
+ fun owner(owner: String) = owner(JsonField.of(owner))
+
+ /**
+ * Sets [Builder.owner] to an arbitrary JSON value.
+ *
+ * You should usually call [Builder.owner] with a well-typed [String] value instead.
+ * This method is primarily for setting the field to an undocumented or not yet
+ * supported value.
+ */
+ fun owner(owner: JsonField) = apply { this.owner = owner }
+
+ /** Owner Type */
+ fun ownerType(ownerType: OwnerType) = ownerType(JsonField.of(ownerType))
+
+ /**
+ * Sets [Builder.ownerType] to an arbitrary JSON value.
+ *
+ * You should usually call [Builder.ownerType] with a well-typed [OwnerType] value
+ * instead. This method is primarily for setting the field to an undocumented or not yet
+ * supported value.
+ */
+ fun ownerType(ownerType: JsonField) = apply { this.ownerType = ownerType }
+
+ /**
+ * An optional tag or memo used by some chains to identify the destination of a transfer
+ * within a shared address
+ */
+ fun addressTag(addressTag: String) = addressTag(JsonField.of(addressTag))
+
+ /**
+ * Sets [Builder.addressTag] to an arbitrary JSON value.
+ *
+ * You should usually call [Builder.addressTag] with a well-typed [String] value
+ * instead. This method is primarily for setting the field to an undocumented or not yet
+ * supported value.
+ */
+ fun addressTag(addressTag: JsonField) = apply { this.addressTag = addressTag }
+
+ /** The nickname for this blockchain recipient */
+ fun name(name: String) = name(JsonField.of(name))
+
+ /**
+ * Sets [Builder.name] to an arbitrary JSON value.
+ *
+ * You should usually call [Builder.name] with a well-typed [String] value instead. This
+ * method is primarily for setting the field to an undocumented or not yet supported
+ * value.
+ */
+ fun name(name: JsonField) = apply { this.name = name }
+
+ 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 [BlockchainRecipientRequest].
+ *
+ * Further updates to this [Builder] will not mutate the returned instance.
+ *
+ * The following fields are required:
+ * ```java
+ * .accountToken()
+ * .address()
+ * .chain()
+ * .owner()
+ * .ownerType()
+ * ```
+ *
+ * @throws IllegalStateException if any required field is unset.
+ */
+ fun build(): BlockchainRecipientRequest =
+ BlockchainRecipientRequest(
+ checkRequired("accountToken", accountToken),
+ checkRequired("address", address),
+ checkRequired("chain", chain),
+ checkRequired("owner", owner),
+ checkRequired("ownerType", ownerType),
+ addressTag,
+ name,
+ additionalProperties.toMutableMap(),
+ )
+ }
+
+ 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(): BlockchainRecipientRequest = apply {
+ if (validated) {
+ return@apply
+ }
+
+ accountToken()
+ address()
+ chain()
+ owner()
+ ownerType().validate()
+ addressTag()
+ name()
+ 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 =
+ (if (accountToken.asKnown().isPresent) 1 else 0) +
+ (if (address.asKnown().isPresent) 1 else 0) +
+ (if (chain.asKnown().isPresent) 1 else 0) +
+ (if (owner.asKnown().isPresent) 1 else 0) +
+ (ownerType.asKnown().getOrNull()?.validity() ?: 0) +
+ (if (addressTag.asKnown().isPresent) 1 else 0) +
+ (if (name.asKnown().isPresent) 1 else 0)
+
+ override fun equals(other: Any?): Boolean {
+ if (this === other) {
+ return true
+ }
+
+ return other is BlockchainRecipientRequest &&
+ accountToken == other.accountToken &&
+ address == other.address &&
+ chain == other.chain &&
+ owner == other.owner &&
+ ownerType == other.ownerType &&
+ addressTag == other.addressTag &&
+ name == other.name &&
+ additionalProperties == other.additionalProperties
+ }
+
+ private val hashCode: Int by lazy {
+ Objects.hash(
+ accountToken,
+ address,
+ chain,
+ owner,
+ ownerType,
+ addressTag,
+ name,
+ additionalProperties,
+ )
+ }
+
+ override fun hashCode(): Int = hashCode
+
+ override fun toString() =
+ "BlockchainRecipientRequest{accountToken=$accountToken, address=$address, chain=$chain, owner=$owner, ownerType=$ownerType, addressTag=$addressTag, name=$name, additionalProperties=$additionalProperties}"
+ }
+
+ override fun equals(other: Any?): Boolean {
+ if (this === other) {
+ return true
+ }
+
+ return other is BlockchainRecipientCreateParams &&
+ body == other.body &&
+ additionalHeaders == other.additionalHeaders &&
+ additionalQueryParams == other.additionalQueryParams
+ }
+
+ override fun hashCode(): Int = Objects.hash(body, additionalHeaders, additionalQueryParams)
+
+ override fun toString() =
+ "BlockchainRecipientCreateParams{body=$body, additionalHeaders=$additionalHeaders, additionalQueryParams=$additionalQueryParams}"
+}
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/CardTransactionUpdateAction.kt b/lithic-java-core/src/main/kotlin/com/lithic/api/models/CardTransactionUpdateAction.kt
index 52b12b4bc..e165eba49 100644
--- a/lithic-java-core/src/main/kotlin/com/lithic/api/models/CardTransactionUpdateAction.kt
+++ b/lithic-java-core/src/main/kotlin/com/lithic/api/models/CardTransactionUpdateAction.kt
@@ -866,6 +866,8 @@ private constructor(
@JvmField val ACCOUNT = of("ACCOUNT")
+ @JvmField val PROGRAM = of("PROGRAM")
+
@JvmStatic fun of(value: String) = Scope(JsonField.of(value))
}
@@ -873,6 +875,7 @@ private constructor(
enum class Known {
CARD,
ACCOUNT,
+ PROGRAM,
}
/**
@@ -887,6 +890,7 @@ private constructor(
enum class Value {
CARD,
ACCOUNT,
+ PROGRAM,
/**
* An enum member indicating that [Scope] was instantiated with an unknown value.
*/
@@ -904,6 +908,7 @@ private constructor(
when (this) {
CARD -> Value.CARD
ACCOUNT -> Value.ACCOUNT
+ PROGRAM -> Value.PROGRAM
else -> Value._UNKNOWN
}
@@ -920,6 +925,7 @@ private constructor(
when (this) {
CARD -> Known.CARD
ACCOUNT -> Known.ACCOUNT
+ PROGRAM -> Known.PROGRAM
else -> throw LithicInvalidDataException("Unknown Scope: $value")
}
diff --git a/lithic-java-core/src/main/kotlin/com/lithic/api/models/CaseEntity.kt b/lithic-java-core/src/main/kotlin/com/lithic/api/models/CaseEntity.kt
index 62944dff2..b04662a78 100644
--- a/lithic-java-core/src/main/kotlin/com/lithic/api/models/CaseEntity.kt
+++ b/lithic-java-core/src/main/kotlin/com/lithic/api/models/CaseEntity.kt
@@ -15,6 +15,7 @@ import com.lithic.api.core.checkRequired
import com.lithic.api.errors.LithicInvalidDataException
import java.util.Collections
import java.util.Objects
+import java.util.Optional
import kotlin.jvm.optionals.getOrNull
/** The entity a case is associated with */
@@ -37,17 +38,21 @@ private constructor(
) : this(entityToken, entityType, mutableMapOf())
/**
- * Globally unique identifier for the associated entity
+ * Globally unique identifier for the associated entity: the card token for `CARD`, the account
+ * token for `ACCOUNT`, and the financial account token for `FINANCIAL_ACCOUNT`. Null for
+ * `PROGRAM`, which is not scoped to an individual entity
*
- * @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).
+ * @throws LithicInvalidDataException if the JSON field has an unexpected type (e.g. if the
+ * server responded with an unexpected value).
*/
- fun entityToken(): String = entityToken.getRequired("entity_token")
+ fun entityToken(): Optional = entityToken.getOptional("entity_token")
/**
* The type of entity a case is associated with:
* - `CARD` - The case is associated with a card
* - `ACCOUNT` - The case is associated with an account
+ * - `FINANCIAL_ACCOUNT` - The case is associated with a financial account
+ * - `PROGRAM` - The case is associated with the whole program
*
* @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).
@@ -112,8 +117,15 @@ private constructor(
additionalProperties = caseEntity.additionalProperties.toMutableMap()
}
- /** Globally unique identifier for the associated entity */
- fun entityToken(entityToken: String) = entityToken(JsonField.of(entityToken))
+ /**
+ * Globally unique identifier for the associated entity: the card token for `CARD`, the
+ * account token for `ACCOUNT`, and the financial account token for `FINANCIAL_ACCOUNT`.
+ * Null for `PROGRAM`, which is not scoped to an individual entity
+ */
+ fun entityToken(entityToken: String?) = entityToken(JsonField.ofNullable(entityToken))
+
+ /** Alias for calling [Builder.entityToken] with `entityToken.orElse(null)`. */
+ fun entityToken(entityToken: Optional) = entityToken(entityToken.getOrNull())
/**
* Sets [Builder.entityToken] to an arbitrary JSON value.
@@ -128,6 +140,8 @@ private constructor(
* The type of entity a case is associated with:
* - `CARD` - The case is associated with a card
* - `ACCOUNT` - The case is associated with an account
+ * - `FINANCIAL_ACCOUNT` - The case is associated with a financial account
+ * - `PROGRAM` - The case is associated with the whole program
*/
fun entityType(entityType: EntityType2) = entityType(JsonField.of(entityType))
@@ -222,6 +236,8 @@ private constructor(
* The type of entity a case is associated with:
* - `CARD` - The case is associated with a card
* - `ACCOUNT` - The case is associated with an account
+ * - `FINANCIAL_ACCOUNT` - The case is associated with a financial account
+ * - `PROGRAM` - The case is associated with the whole program
*/
class EntityType2 @JsonCreator private constructor(private val value: JsonField) :
Enum {
@@ -242,6 +258,10 @@ private constructor(
@JvmField val ACCOUNT = of("ACCOUNT")
+ @JvmField val FINANCIAL_ACCOUNT = of("FINANCIAL_ACCOUNT")
+
+ @JvmField val PROGRAM = of("PROGRAM")
+
@JvmStatic fun of(value: String) = EntityType2(JsonField.of(value))
}
@@ -249,6 +269,8 @@ private constructor(
enum class Known {
CARD,
ACCOUNT,
+ FINANCIAL_ACCOUNT,
+ PROGRAM,
}
/**
@@ -263,6 +285,8 @@ private constructor(
enum class Value {
CARD,
ACCOUNT,
+ FINANCIAL_ACCOUNT,
+ PROGRAM,
/**
* An enum member indicating that [EntityType2] was instantiated with an unknown value.
*/
@@ -280,6 +304,8 @@ private constructor(
when (this) {
CARD -> Value.CARD
ACCOUNT -> Value.ACCOUNT
+ FINANCIAL_ACCOUNT -> Value.FINANCIAL_ACCOUNT
+ PROGRAM -> Value.PROGRAM
else -> Value._UNKNOWN
}
@@ -296,6 +322,8 @@ private constructor(
when (this) {
CARD -> Known.CARD
ACCOUNT -> Known.ACCOUNT
+ FINANCIAL_ACCOUNT -> Known.FINANCIAL_ACCOUNT
+ PROGRAM -> Known.PROGRAM
else -> throw LithicInvalidDataException("Unknown EntityType2: $value")
}
diff --git a/lithic-java-core/src/main/kotlin/com/lithic/api/models/DisputeTransactionCreatedWebhookEvent.kt b/lithic-java-core/src/main/kotlin/com/lithic/api/models/DisputeTransactionCreatedWebhookEvent.kt
index cff15494e..c2df95b12 100644
--- a/lithic-java-core/src/main/kotlin/com/lithic/api/models/DisputeTransactionCreatedWebhookEvent.kt
+++ b/lithic-java-core/src/main/kotlin/com/lithic/api/models/DisputeTransactionCreatedWebhookEvent.kt
@@ -29,6 +29,7 @@ private constructor(
private val accountToken: JsonField,
private val cardToken: JsonField,
private val caseId: JsonField,
+ private val claimToken: JsonField,
private val created: JsonField,
private val currency: JsonField,
private val disposition: JsonField,
@@ -51,6 +52,9 @@ private constructor(
accountToken: JsonField = JsonMissing.of(),
@JsonProperty("card_token") @ExcludeMissing cardToken: JsonField = JsonMissing.of(),
@JsonProperty("case_id") @ExcludeMissing caseId: JsonField = JsonMissing.of(),
+ @JsonProperty("claim_token")
+ @ExcludeMissing
+ claimToken: JsonField = JsonMissing.of(),
@JsonProperty("created")
@ExcludeMissing
created: JsonField = JsonMissing.of(),
@@ -85,6 +89,7 @@ private constructor(
accountToken,
cardToken,
caseId,
+ claimToken,
created,
currency,
disposition,
@@ -105,6 +110,7 @@ private constructor(
.accountToken(accountToken)
.cardToken(cardToken)
.caseId(caseId)
+ .claimToken(claimToken)
.created(created)
.currency(currency)
.disposition(disposition)
@@ -149,6 +155,15 @@ private constructor(
*/
fun caseId(): Optional = caseId.getOptional("case_id")
+ /**
+ * Token for the claim this dispute was filed under, in UUID format. Null for disputes not
+ * initiated through the Dispute Intake API.
+ *
+ * @throws LithicInvalidDataException if the JSON field has an unexpected type (e.g. if the
+ * server responded with an unexpected value).
+ */
+ fun claimToken(): Optional = claimToken.getOptional("claim_token")
+
/**
* When the dispute was created.
*
@@ -268,6 +283,13 @@ private constructor(
*/
@JsonProperty("case_id") @ExcludeMissing fun _caseId(): JsonField = caseId
+ /**
+ * Returns the raw JSON value of [claimToken].
+ *
+ * Unlike [claimToken], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ @JsonProperty("claim_token") @ExcludeMissing fun _claimToken(): JsonField = claimToken
+
/**
* Returns the raw JSON value of [created].
*
@@ -377,6 +399,7 @@ private constructor(
* .accountToken()
* .cardToken()
* .caseId()
+ * .claimToken()
* .created()
* .currency()
* .disposition()
@@ -400,6 +423,7 @@ private constructor(
private var accountToken: JsonField? = null
private var cardToken: JsonField? = null
private var caseId: JsonField? = null
+ private var claimToken: JsonField? = null
private var created: JsonField? = null
private var currency: JsonField? = null
private var disposition: JsonField? = null
@@ -421,6 +445,7 @@ private constructor(
accountToken = disputeTransactionCreatedWebhookEvent.accountToken
cardToken = disputeTransactionCreatedWebhookEvent.cardToken
caseId = disputeTransactionCreatedWebhookEvent.caseId
+ claimToken = disputeTransactionCreatedWebhookEvent.claimToken
created = disputeTransactionCreatedWebhookEvent.created
currency = disputeTransactionCreatedWebhookEvent.currency
disposition = disputeTransactionCreatedWebhookEvent.disposition
@@ -487,6 +512,24 @@ private constructor(
*/
fun caseId(caseId: JsonField) = apply { this.caseId = caseId }
+ /**
+ * Token for the claim this dispute was filed under, in UUID format. Null for disputes not
+ * initiated through the Dispute Intake API.
+ */
+ fun claimToken(claimToken: String?) = claimToken(JsonField.ofNullable(claimToken))
+
+ /** Alias for calling [Builder.claimToken] with `claimToken.orElse(null)`. */
+ fun claimToken(claimToken: Optional) = claimToken(claimToken.getOrNull())
+
+ /**
+ * Sets [Builder.claimToken] to an arbitrary JSON value.
+ *
+ * You should usually call [Builder.claimToken] with a well-typed [String] value instead.
+ * This method is primarily for setting the field to an undocumented or not yet supported
+ * value.
+ */
+ fun claimToken(claimToken: JsonField) = apply { this.claimToken = claimToken }
+
/** When the dispute was created. */
fun created(created: OffsetDateTime) = created(JsonField.of(created))
@@ -685,6 +728,7 @@ private constructor(
* .accountToken()
* .cardToken()
* .caseId()
+ * .claimToken()
* .created()
* .currency()
* .disposition()
@@ -706,6 +750,7 @@ private constructor(
checkRequired("accountToken", accountToken),
checkRequired("cardToken", cardToken),
checkRequired("caseId", caseId),
+ checkRequired("claimToken", claimToken),
checkRequired("created", created),
checkRequired("currency", currency),
checkRequired("disposition", disposition),
@@ -740,6 +785,7 @@ private constructor(
accountToken()
cardToken()
caseId()
+ claimToken()
created()
currency()
disposition().ifPresent { it.validate() }
@@ -773,6 +819,7 @@ private constructor(
(if (accountToken.asKnown().isPresent) 1 else 0) +
(if (cardToken.asKnown().isPresent) 1 else 0) +
(if (caseId.asKnown().isPresent) 1 else 0) +
+ (if (claimToken.asKnown().isPresent) 1 else 0) +
(if (created.asKnown().isPresent) 1 else 0) +
(if (currency.asKnown().isPresent) 1 else 0) +
(disposition.asKnown().getOrNull()?.validity() ?: 0) +
@@ -926,6 +973,7 @@ private constructor(
accountToken == other.accountToken &&
cardToken == other.cardToken &&
caseId == other.caseId &&
+ claimToken == other.claimToken &&
created == other.created &&
currency == other.currency &&
disposition == other.disposition &&
@@ -946,6 +994,7 @@ private constructor(
accountToken,
cardToken,
caseId,
+ claimToken,
created,
currency,
disposition,
@@ -964,5 +1013,5 @@ private constructor(
override fun hashCode(): Int = hashCode
override fun toString() =
- "DisputeTransactionCreatedWebhookEvent{token=$token, accountToken=$accountToken, cardToken=$cardToken, caseId=$caseId, created=$created, currency=$currency, disposition=$disposition, events=$events, liabilityAllocation=$liabilityAllocation, merchant=$merchant, network=$network, status=$status, transactionSeries=$transactionSeries, updated=$updated, eventType=$eventType, additionalProperties=$additionalProperties}"
+ "DisputeTransactionCreatedWebhookEvent{token=$token, accountToken=$accountToken, cardToken=$cardToken, caseId=$caseId, claimToken=$claimToken, created=$created, currency=$currency, disposition=$disposition, events=$events, liabilityAllocation=$liabilityAllocation, merchant=$merchant, network=$network, status=$status, transactionSeries=$transactionSeries, updated=$updated, eventType=$eventType, additionalProperties=$additionalProperties}"
}
diff --git a/lithic-java-core/src/main/kotlin/com/lithic/api/models/DisputeTransactionUpdatedWebhookEvent.kt b/lithic-java-core/src/main/kotlin/com/lithic/api/models/DisputeTransactionUpdatedWebhookEvent.kt
index bd1984283..3cc9f3c69 100644
--- a/lithic-java-core/src/main/kotlin/com/lithic/api/models/DisputeTransactionUpdatedWebhookEvent.kt
+++ b/lithic-java-core/src/main/kotlin/com/lithic/api/models/DisputeTransactionUpdatedWebhookEvent.kt
@@ -29,6 +29,7 @@ private constructor(
private val accountToken: JsonField,
private val cardToken: JsonField,
private val caseId: JsonField,
+ private val claimToken: JsonField,
private val created: JsonField,
private val currency: JsonField,
private val disposition: JsonField,
@@ -51,6 +52,9 @@ private constructor(
accountToken: JsonField = JsonMissing.of(),
@JsonProperty("card_token") @ExcludeMissing cardToken: JsonField = JsonMissing.of(),
@JsonProperty("case_id") @ExcludeMissing caseId: JsonField = JsonMissing.of(),
+ @JsonProperty("claim_token")
+ @ExcludeMissing
+ claimToken: JsonField = JsonMissing.of(),
@JsonProperty("created")
@ExcludeMissing
created: JsonField = JsonMissing.of(),
@@ -85,6 +89,7 @@ private constructor(
accountToken,
cardToken,
caseId,
+ claimToken,
created,
currency,
disposition,
@@ -105,6 +110,7 @@ private constructor(
.accountToken(accountToken)
.cardToken(cardToken)
.caseId(caseId)
+ .claimToken(claimToken)
.created(created)
.currency(currency)
.disposition(disposition)
@@ -149,6 +155,15 @@ private constructor(
*/
fun caseId(): Optional = caseId.getOptional("case_id")
+ /**
+ * Token for the claim this dispute was filed under, in UUID format. Null for disputes not
+ * initiated through the Dispute Intake API.
+ *
+ * @throws LithicInvalidDataException if the JSON field has an unexpected type (e.g. if the
+ * server responded with an unexpected value).
+ */
+ fun claimToken(): Optional = claimToken.getOptional("claim_token")
+
/**
* When the dispute was created.
*
@@ -268,6 +283,13 @@ private constructor(
*/
@JsonProperty("case_id") @ExcludeMissing fun _caseId(): JsonField = caseId
+ /**
+ * Returns the raw JSON value of [claimToken].
+ *
+ * Unlike [claimToken], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ @JsonProperty("claim_token") @ExcludeMissing fun _claimToken(): JsonField = claimToken
+
/**
* Returns the raw JSON value of [created].
*
@@ -377,6 +399,7 @@ private constructor(
* .accountToken()
* .cardToken()
* .caseId()
+ * .claimToken()
* .created()
* .currency()
* .disposition()
@@ -400,6 +423,7 @@ private constructor(
private var accountToken: JsonField? = null
private var cardToken: JsonField? = null
private var caseId: JsonField? = null
+ private var claimToken: JsonField? = null
private var created: JsonField? = null
private var currency: JsonField? = null
private var disposition: JsonField? = null
@@ -421,6 +445,7 @@ private constructor(
accountToken = disputeTransactionUpdatedWebhookEvent.accountToken
cardToken = disputeTransactionUpdatedWebhookEvent.cardToken
caseId = disputeTransactionUpdatedWebhookEvent.caseId
+ claimToken = disputeTransactionUpdatedWebhookEvent.claimToken
created = disputeTransactionUpdatedWebhookEvent.created
currency = disputeTransactionUpdatedWebhookEvent.currency
disposition = disputeTransactionUpdatedWebhookEvent.disposition
@@ -487,6 +512,24 @@ private constructor(
*/
fun caseId(caseId: JsonField) = apply { this.caseId = caseId }
+ /**
+ * Token for the claim this dispute was filed under, in UUID format. Null for disputes not
+ * initiated through the Dispute Intake API.
+ */
+ fun claimToken(claimToken: String?) = claimToken(JsonField.ofNullable(claimToken))
+
+ /** Alias for calling [Builder.claimToken] with `claimToken.orElse(null)`. */
+ fun claimToken(claimToken: Optional) = claimToken(claimToken.getOrNull())
+
+ /**
+ * Sets [Builder.claimToken] to an arbitrary JSON value.
+ *
+ * You should usually call [Builder.claimToken] with a well-typed [String] value instead.
+ * This method is primarily for setting the field to an undocumented or not yet supported
+ * value.
+ */
+ fun claimToken(claimToken: JsonField) = apply { this.claimToken = claimToken }
+
/** When the dispute was created. */
fun created(created: OffsetDateTime) = created(JsonField.of(created))
@@ -685,6 +728,7 @@ private constructor(
* .accountToken()
* .cardToken()
* .caseId()
+ * .claimToken()
* .created()
* .currency()
* .disposition()
@@ -706,6 +750,7 @@ private constructor(
checkRequired("accountToken", accountToken),
checkRequired("cardToken", cardToken),
checkRequired("caseId", caseId),
+ checkRequired("claimToken", claimToken),
checkRequired("created", created),
checkRequired("currency", currency),
checkRequired("disposition", disposition),
@@ -740,6 +785,7 @@ private constructor(
accountToken()
cardToken()
caseId()
+ claimToken()
created()
currency()
disposition().ifPresent { it.validate() }
@@ -773,6 +819,7 @@ private constructor(
(if (accountToken.asKnown().isPresent) 1 else 0) +
(if (cardToken.asKnown().isPresent) 1 else 0) +
(if (caseId.asKnown().isPresent) 1 else 0) +
+ (if (claimToken.asKnown().isPresent) 1 else 0) +
(if (created.asKnown().isPresent) 1 else 0) +
(if (currency.asKnown().isPresent) 1 else 0) +
(disposition.asKnown().getOrNull()?.validity() ?: 0) +
@@ -926,6 +973,7 @@ private constructor(
accountToken == other.accountToken &&
cardToken == other.cardToken &&
caseId == other.caseId &&
+ claimToken == other.claimToken &&
created == other.created &&
currency == other.currency &&
disposition == other.disposition &&
@@ -946,6 +994,7 @@ private constructor(
accountToken,
cardToken,
caseId,
+ claimToken,
created,
currency,
disposition,
@@ -964,5 +1013,5 @@ private constructor(
override fun hashCode(): Int = hashCode
override fun toString() =
- "DisputeTransactionUpdatedWebhookEvent{token=$token, accountToken=$accountToken, cardToken=$cardToken, caseId=$caseId, created=$created, currency=$currency, disposition=$disposition, events=$events, liabilityAllocation=$liabilityAllocation, merchant=$merchant, network=$network, status=$status, transactionSeries=$transactionSeries, updated=$updated, eventType=$eventType, additionalProperties=$additionalProperties}"
+ "DisputeTransactionUpdatedWebhookEvent{token=$token, accountToken=$accountToken, cardToken=$cardToken, caseId=$caseId, claimToken=$claimToken, created=$created, currency=$currency, disposition=$disposition, events=$events, liabilityAllocation=$liabilityAllocation, merchant=$merchant, network=$network, status=$status, transactionSeries=$transactionSeries, updated=$updated, eventType=$eventType, additionalProperties=$additionalProperties}"
}
diff --git a/lithic-java-core/src/main/kotlin/com/lithic/api/models/DisputeV2.kt b/lithic-java-core/src/main/kotlin/com/lithic/api/models/DisputeV2.kt
index f28270bf9..3f2a50c22 100644
--- a/lithic-java-core/src/main/kotlin/com/lithic/api/models/DisputeV2.kt
+++ b/lithic-java-core/src/main/kotlin/com/lithic/api/models/DisputeV2.kt
@@ -39,6 +39,7 @@ private constructor(
private val accountToken: JsonField,
private val cardToken: JsonField,
private val caseId: JsonField,
+ private val claimToken: JsonField,
private val created: JsonField,
private val currency: JsonField,
private val disposition: JsonField,
@@ -60,6 +61,9 @@ private constructor(
accountToken: JsonField = JsonMissing.of(),
@JsonProperty("card_token") @ExcludeMissing cardToken: JsonField = JsonMissing.of(),
@JsonProperty("case_id") @ExcludeMissing caseId: JsonField = JsonMissing.of(),
+ @JsonProperty("claim_token")
+ @ExcludeMissing
+ claimToken: JsonField = JsonMissing.of(),
@JsonProperty("created")
@ExcludeMissing
created: JsonField = JsonMissing.of(),
@@ -85,6 +89,7 @@ private constructor(
accountToken,
cardToken,
caseId,
+ claimToken,
created,
currency,
disposition,
@@ -130,6 +135,15 @@ private constructor(
*/
fun caseId(): Optional = caseId.getOptional("case_id")
+ /**
+ * Token for the claim this dispute was filed under, in UUID format. Null for disputes not
+ * initiated through the Dispute Intake API.
+ *
+ * @throws LithicInvalidDataException if the JSON field has an unexpected type (e.g. if the
+ * server responded with an unexpected value).
+ */
+ fun claimToken(): Optional = claimToken.getOptional("claim_token")
+
/**
* When the dispute was created.
*
@@ -241,6 +255,13 @@ private constructor(
*/
@JsonProperty("case_id") @ExcludeMissing fun _caseId(): JsonField = caseId
+ /**
+ * Returns the raw JSON value of [claimToken].
+ *
+ * Unlike [claimToken], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ @JsonProperty("claim_token") @ExcludeMissing fun _claimToken(): JsonField = claimToken
+
/**
* Returns the raw JSON value of [created].
*
@@ -342,6 +363,7 @@ private constructor(
* .accountToken()
* .cardToken()
* .caseId()
+ * .claimToken()
* .created()
* .currency()
* .disposition()
@@ -364,6 +386,7 @@ private constructor(
private var accountToken: JsonField? = null
private var cardToken: JsonField? = null
private var caseId: JsonField? = null
+ private var claimToken: JsonField? = null
private var created: JsonField? = null
private var currency: JsonField? = null
private var disposition: JsonField? = null
@@ -382,6 +405,7 @@ private constructor(
accountToken = disputeV2.accountToken
cardToken = disputeV2.cardToken
caseId = disputeV2.caseId
+ claimToken = disputeV2.claimToken
created = disputeV2.created
currency = disputeV2.currency
disposition = disputeV2.disposition
@@ -446,6 +470,24 @@ private constructor(
*/
fun caseId(caseId: JsonField) = apply { this.caseId = caseId }
+ /**
+ * Token for the claim this dispute was filed under, in UUID format. Null for disputes not
+ * initiated through the Dispute Intake API.
+ */
+ fun claimToken(claimToken: String?) = claimToken(JsonField.ofNullable(claimToken))
+
+ /** Alias for calling [Builder.claimToken] with `claimToken.orElse(null)`. */
+ fun claimToken(claimToken: Optional) = claimToken(claimToken.getOrNull())
+
+ /**
+ * Sets [Builder.claimToken] to an arbitrary JSON value.
+ *
+ * You should usually call [Builder.claimToken] with a well-typed [String] value instead.
+ * This method is primarily for setting the field to an undocumented or not yet supported
+ * value.
+ */
+ fun claimToken(claimToken: JsonField) = apply { this.claimToken = claimToken }
+
/** When the dispute was created. */
fun created(created: OffsetDateTime) = created(JsonField.of(created))
@@ -627,6 +669,7 @@ private constructor(
* .accountToken()
* .cardToken()
* .caseId()
+ * .claimToken()
* .created()
* .currency()
* .disposition()
@@ -647,6 +690,7 @@ private constructor(
checkRequired("accountToken", accountToken),
checkRequired("cardToken", cardToken),
checkRequired("caseId", caseId),
+ checkRequired("claimToken", claimToken),
checkRequired("created", created),
checkRequired("currency", currency),
checkRequired("disposition", disposition),
@@ -680,6 +724,7 @@ private constructor(
accountToken()
cardToken()
caseId()
+ claimToken()
created()
currency()
disposition().ifPresent { it.validate() }
@@ -712,6 +757,7 @@ private constructor(
(if (accountToken.asKnown().isPresent) 1 else 0) +
(if (cardToken.asKnown().isPresent) 1 else 0) +
(if (caseId.asKnown().isPresent) 1 else 0) +
+ (if (claimToken.asKnown().isPresent) 1 else 0) +
(if (created.asKnown().isPresent) 1 else 0) +
(if (currency.asKnown().isPresent) 1 else 0) +
(disposition.asKnown().getOrNull()?.validity() ?: 0) +
@@ -3477,6 +3523,8 @@ private constructor(
@JvmField val WRITTEN_OFF = of("WRITTEN_OFF")
+ @JvmField val WRITE_OFF_REVERSED = of("WRITE_OFF_REVERSED")
+
@JvmStatic fun of(value: String) = Action(JsonField.of(value))
}
@@ -3485,6 +3533,7 @@ private constructor(
PROVISIONAL_CREDIT_GRANTED,
PROVISIONAL_CREDIT_REVERSED,
WRITTEN_OFF,
+ WRITE_OFF_REVERSED,
}
/**
@@ -3500,6 +3549,7 @@ private constructor(
PROVISIONAL_CREDIT_GRANTED,
PROVISIONAL_CREDIT_REVERSED,
WRITTEN_OFF,
+ WRITE_OFF_REVERSED,
/**
* An enum member indicating that [Action] was instantiated with an unknown
* value.
@@ -3519,6 +3569,7 @@ private constructor(
PROVISIONAL_CREDIT_GRANTED -> Value.PROVISIONAL_CREDIT_GRANTED
PROVISIONAL_CREDIT_REVERSED -> Value.PROVISIONAL_CREDIT_REVERSED
WRITTEN_OFF -> Value.WRITTEN_OFF
+ WRITE_OFF_REVERSED -> Value.WRITE_OFF_REVERSED
else -> Value._UNKNOWN
}
@@ -3536,6 +3587,7 @@ private constructor(
PROVISIONAL_CREDIT_GRANTED -> Known.PROVISIONAL_CREDIT_GRANTED
PROVISIONAL_CREDIT_REVERSED -> Known.PROVISIONAL_CREDIT_REVERSED
WRITTEN_OFF -> Known.WRITTEN_OFF
+ WRITE_OFF_REVERSED -> Known.WRITE_OFF_REVERSED
else -> throw LithicInvalidDataException("Unknown Action: $value")
}
@@ -5014,6 +5066,7 @@ private constructor(
accountToken == other.accountToken &&
cardToken == other.cardToken &&
caseId == other.caseId &&
+ claimToken == other.claimToken &&
created == other.created &&
currency == other.currency &&
disposition == other.disposition &&
@@ -5033,6 +5086,7 @@ private constructor(
accountToken,
cardToken,
caseId,
+ claimToken,
created,
currency,
disposition,
@@ -5050,5 +5104,5 @@ private constructor(
override fun hashCode(): Int = hashCode
override fun toString() =
- "DisputeV2{token=$token, accountToken=$accountToken, cardToken=$cardToken, caseId=$caseId, created=$created, currency=$currency, disposition=$disposition, events=$events, liabilityAllocation=$liabilityAllocation, merchant=$merchant, network=$network, status=$status, transactionSeries=$transactionSeries, updated=$updated, additionalProperties=$additionalProperties}"
+ "DisputeV2{token=$token, accountToken=$accountToken, cardToken=$cardToken, caseId=$caseId, claimToken=$claimToken, created=$created, currency=$currency, disposition=$disposition, events=$events, liabilityAllocation=$liabilityAllocation, merchant=$merchant, network=$network, status=$status, transactionSeries=$transactionSeries, updated=$updated, additionalProperties=$additionalProperties}"
}
diff --git a/lithic-java-core/src/main/kotlin/com/lithic/api/models/DisputesV2ListParams.kt b/lithic-java-core/src/main/kotlin/com/lithic/api/models/DisputesV2ListParams.kt
index 7a6bd5656..3310c8f48 100644
--- a/lithic-java-core/src/main/kotlin/com/lithic/api/models/DisputesV2ListParams.kt
+++ b/lithic-java-core/src/main/kotlin/com/lithic/api/models/DisputesV2ListParams.kt
@@ -17,6 +17,7 @@ private constructor(
private val accountToken: String?,
private val begin: OffsetDateTime?,
private val cardToken: String?,
+ private val claimToken: String?,
private val disputedTransactionToken: String?,
private val end: OffsetDateTime?,
private val endingBefore: String?,
@@ -35,6 +36,12 @@ private constructor(
/** Filter by card token. */
fun cardToken(): Optional = Optional.ofNullable(cardToken)
+ /**
+ * Filter by the token of the claim the dispute was filed under. Returns the disputes created
+ * from that claim's disputed transaction events.
+ */
+ fun claimToken(): Optional = Optional.ofNullable(claimToken)
+
/**
* Filter by the token of the transaction being disputed. Corresponds with
* transaction_series.related_transaction_token in the Dispute.
@@ -81,6 +88,7 @@ private constructor(
private var accountToken: String? = null
private var begin: OffsetDateTime? = null
private var cardToken: String? = null
+ private var claimToken: String? = null
private var disputedTransactionToken: String? = null
private var end: OffsetDateTime? = null
private var endingBefore: String? = null
@@ -94,6 +102,7 @@ private constructor(
accountToken = disputesV2ListParams.accountToken
begin = disputesV2ListParams.begin
cardToken = disputesV2ListParams.cardToken
+ claimToken = disputesV2ListParams.claimToken
disputedTransactionToken = disputesV2ListParams.disputedTransactionToken
end = disputesV2ListParams.end
endingBefore = disputesV2ListParams.endingBefore
@@ -121,6 +130,15 @@ private constructor(
/** Alias for calling [Builder.cardToken] with `cardToken.orElse(null)`. */
fun cardToken(cardToken: Optional) = cardToken(cardToken.getOrNull())
+ /**
+ * Filter by the token of the claim the dispute was filed under. Returns the disputes
+ * created from that claim's disputed transaction events.
+ */
+ fun claimToken(claimToken: String?) = apply { this.claimToken = claimToken }
+
+ /** Alias for calling [Builder.claimToken] with `claimToken.orElse(null)`. */
+ fun claimToken(claimToken: Optional) = claimToken(claimToken.getOrNull())
+
/**
* Filter by the token of the transaction being disputed. Corresponds with
* transaction_series.related_transaction_token in the Dispute.
@@ -282,6 +300,7 @@ private constructor(
accountToken,
begin,
cardToken,
+ claimToken,
disputedTransactionToken,
end,
endingBefore,
@@ -300,6 +319,7 @@ private constructor(
accountToken?.let { put("account_token", it) }
begin?.let { put("begin", DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(it)) }
cardToken?.let { put("card_token", it) }
+ claimToken?.let { put("claim_token", it) }
disputedTransactionToken?.let { put("disputed_transaction_token", it) }
end?.let { put("end", DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(it)) }
endingBefore?.let { put("ending_before", it) }
@@ -318,6 +338,7 @@ private constructor(
accountToken == other.accountToken &&
begin == other.begin &&
cardToken == other.cardToken &&
+ claimToken == other.claimToken &&
disputedTransactionToken == other.disputedTransactionToken &&
end == other.end &&
endingBefore == other.endingBefore &&
@@ -332,6 +353,7 @@ private constructor(
accountToken,
begin,
cardToken,
+ claimToken,
disputedTransactionToken,
end,
endingBefore,
@@ -342,5 +364,5 @@ private constructor(
)
override fun toString() =
- "DisputesV2ListParams{accountToken=$accountToken, begin=$begin, cardToken=$cardToken, disputedTransactionToken=$disputedTransactionToken, end=$end, endingBefore=$endingBefore, pageSize=$pageSize, startingAfter=$startingAfter, additionalHeaders=$additionalHeaders, additionalQueryParams=$additionalQueryParams}"
+ "DisputesV2ListParams{accountToken=$accountToken, begin=$begin, cardToken=$cardToken, claimToken=$claimToken, disputedTransactionToken=$disputedTransactionToken, end=$end, endingBefore=$endingBefore, pageSize=$pageSize, startingAfter=$startingAfter, additionalHeaders=$additionalHeaders, additionalQueryParams=$additionalQueryParams}"
}
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..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
@@ -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 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).
+ */
+ 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