Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -65,14 +65,18 @@ jobs:
run: ./scripts/build

- name: Get GitHub OIDC Token
if: github.repository == 'stainless-sdks/lithic-java'
if: |-
github.repository == 'stainless-sdks/lithic-java' &&
!startsWith(github.ref, 'refs/heads/stl/')
id: github-oidc
uses: actions/github-script@v8
with:
script: core.setOutput('github_token', await core.getIDToken());

- name: Build and upload Maven artifacts
if: github.repository == 'stainless-sdks/lithic-java'
if: |-
github.repository == 'stainless-sdks/lithic-java' &&
!startsWith(github.ref, 'refs/heads/stl/')
env:
URL: https://pkg.stainless.com/s
AUTH: ${{ steps.github-oidc.outputs.github_token }}
Expand Down
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "0.119.0"
".": "0.120.0"
}
8 changes: 4 additions & 4 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 185
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic%2Flithic-ee8607f0a2cdcaee420935050334a439db8dd097be83023fccdaf1d6f9a7de14.yml
openapi_spec_hash: 0f21c68cdddb7c5bd99f42356d507393
config_hash: fb5070d41fcabdedbc084b83964b592a
configured_endpoints: 189
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic%2Flithic-6eebc524f3f5b6499a79ef544e150cc49ea1dc1e1c76a5392079ca5a83e78100.yml
openapi_spec_hash: 500c46c1194a128c404e17f7a5bff676
config_hash: 7daa8d0d03697920c0c1ca18ce6d4594
23 changes: 23 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,28 @@
# Changelog

## 0.120.0 (2026-03-10)

Full Changelog: [v0.119.0...v0.120.0](https://github.com/lithic-com/lithic-java/compare/v0.119.0...v0.120.0)

### Features

* **api:** add EARLY_DIRECT_DEPOSIT_FLOAT type to financial account ([e333879](https://github.com/lithic-com/lithic-java/commit/e333879612c488e74effb36cca27da4fe9ed134f))
* **api:** Add event_subtype to statement line items ([b79d216](https://github.com/lithic-com/lithic-java/commit/b79d216cc18514631e585e04478ff35b0d04756e))
* **api:** add loan_tape_date field to statement line items ([be3f3fb](https://github.com/lithic-com/lithic-java/commit/be3f3fb90c7492fc1a6707f217c4fc1bf8e45211))
* **api:** Add support for early direct deposit ([de8c713](https://github.com/lithic-com/lithic-java/commit/de8c71325409c0b70285dba8100289872d835c72))
* **api:** add TypeScript rules, RuleFeature model, draft version state fields ([f57cd63](https://github.com/lithic-com/lithic-java/commit/f57cd63e55e1331e79cd7f4bdea8b64bf5d05582))


### Bug Fixes

* **api:** Disable MCP server to fix TypeScript SDK package publishing ([1e30690](https://github.com/lithic-com/lithic-java/commit/1e30690af36ee4c265fd3e772680ee3bf8878091))
* **client:** incorrect `Retry-After` parsing ([42c61b6](https://github.com/lithic-com/lithic-java/commit/42c61b6534cff16b5e45a4b8ca15f5e8e3f4dacd))


### Chores

* **internal:** codegen related update ([10b1473](https://github.com/lithic-com/lithic-java/commit/10b14732a71e84708c2da1234a47664b19354c97))

## 0.119.0 (2026-03-05)

Full Changelog: [v0.118.0...v0.119.0](https://github.com/lithic-com/lithic-java/compare/v0.118.0...v0.119.0)
Expand Down
19 changes: 5 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,18 @@

<!-- x-release-please-start-version -->

[![Maven Central](https://img.shields.io/maven-central/v/com.lithic.api/lithic-java)](https://central.sonatype.com/artifact/com.lithic.api/lithic-java/0.119.0)
[![javadoc](https://javadoc.io/badge2/com.lithic.api/lithic-java/0.119.0/javadoc.svg)](https://javadoc.io/doc/com.lithic.api/lithic-java/0.119.0)
[![Maven Central](https://img.shields.io/maven-central/v/com.lithic.api/lithic-java)](https://central.sonatype.com/artifact/com.lithic.api/lithic-java/0.120.0)
[![javadoc](https://javadoc.io/badge2/com.lithic.api/lithic-java/0.120.0/javadoc.svg)](https://javadoc.io/doc/com.lithic.api/lithic-java/0.120.0)

<!-- x-release-please-end -->

The Lithic Java SDK provides convenient access to the [Lithic REST API](https://docs.lithic.com) from applications written in Java.

The Lithic Java SDK is similar to the Lithic Kotlin SDK but with minor differences that make it more ergonomic for use in Java, such as `Optional` instead of nullable values, `Stream` instead of `Sequence`, and `CompletableFuture` instead of suspend functions.

## MCP Server

Use the Lithic MCP Server to enable AI assistants to interact with this API, allowing them to explore endpoints, make test requests, and use documentation to help integrate this SDK into your application.

[![Add to Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en-US/install-mcp?name=lithic-mcp&config=eyJuYW1lIjoibGl0aGljLW1jcCIsInRyYW5zcG9ydCI6Imh0dHAiLCJ1cmwiOiJodHRwczovL2xpdGhpYy5zdGxtY3AuY29tIiwiaGVhZGVycyI6eyJ4LWxpdGhpYy1hcGkta2V5IjoiTXkgTGl0aGljIEFQSSBLZXkifX0)
[![Install in VS Code](https://img.shields.io/badge/_-Add_to_VS_Code-blue?style=for-the-badge&logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCA0MCA0MCI+PHBhdGggZmlsbD0iI0VFRSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMzAuMjM1IDM5Ljg4NGEyLjQ5MSAyLjQ5MSAwIDAgMS0xLjc4MS0uNzNMMTIuNyAyNC43OGwtMy40NiAyLjYyNC0zLjQwNiAyLjU4MmExLjY2NSAxLjY2NSAwIDAgMS0xLjA4Mi4zMzggMS42NjQgMS42NjQgMCAwIDEtMS4wNDYtLjQzMWwtMi4yLTJhMS42NjYgMS42NjYgMCAwIDEgMC0yLjQ2M0w3LjQ1OCAyMCA0LjY3IDE3LjQ1MyAxLjUwNyAxNC41N2ExLjY2NSAxLjY2NSAwIDAgMSAwLTIuNDYzbDIuMi0yYTEuNjY1IDEuNjY1IDAgMCAxIDIuMTMtLjA5N2w2Ljg2MyA1LjIwOUwyOC40NTIuODQ0YTIuNDg4IDIuNDg4IDAgMCAxIDEuODQxLS43MjljLjM1MS4wMDkuNjk5LjA5MSAxLjAxOS4yNDVsOC4yMzYgMy45NjFhMi41IDIuNSAwIDAgMSAxLjQxNSAyLjI1M3YuMDk5LS4wNDVWMzMuMzd2LS4wNDUuMDk1YTIuNTAxIDIuNTAxIDAgMCAxLTEuNDE2IDIuMjU3bC04LjIzNSAzLjk2MWEyLjQ5MiAyLjQ5MiAwIDAgMS0xLjA3Ny4yNDZabS43MTYtMjguOTQ3LTExLjk0OCA5LjA2MiAxMS45NTIgOS4wNjUtLjAwNC0xOC4xMjdaIi8+PC9zdmc+)](https://vscode.stainless.com/mcp/%7B%22name%22%3A%22lithic-mcp%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Flithic.stlmcp.com%22%2C%22headers%22%3A%7B%22x-lithic-api-key%22%3A%22My%20Lithic%20API%20Key%22%7D%7D)

> Note: You may need to set environment variables in your MCP client.

<!-- x-release-please-start-version -->

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.119.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.120.0).

<!-- x-release-please-end -->

Expand All @@ -33,7 +24,7 @@ The REST API documentation can be found on [docs.lithic.com](https://docs.lithic
### Gradle

```kotlin
implementation("com.lithic.api:lithic-java:0.119.0")
implementation("com.lithic.api:lithic-java:0.120.0")
```

### Maven
Expand All @@ -42,7 +33,7 @@ implementation("com.lithic.api:lithic-java:0.119.0")
<dependency>
<groupId>com.lithic.api</groupId>
<artifactId>lithic-java</artifactId>
<version>0.119.0</version>
<version>0.120.0</version>
</dependency>
```

Expand Down
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ repositories {

allprojects {
group = "com.lithic.api"
version = "0.119.0" // x-release-please-version
version = "0.120.0" // x-release-please-version
}

subprojects {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import com.lithic.api.services.blocking.ExternalPaymentService
import com.lithic.api.services.blocking.FinancialAccountService
import com.lithic.api.services.blocking.FraudService
import com.lithic.api.services.blocking.FundingEventService
import com.lithic.api.services.blocking.HoldService
import com.lithic.api.services.blocking.InternalTransactionService
import com.lithic.api.services.blocking.ManagementOperationService
import com.lithic.api.services.blocking.NetworkProgramService
Expand Down Expand Up @@ -139,6 +140,8 @@ interface LithicClient {

fun networkPrograms(): NetworkProgramService

fun holds(): HoldService

fun accountActivity(): AccountActivityService

fun transferLimits(): TransferLimitService
Expand Down Expand Up @@ -245,6 +248,8 @@ interface LithicClient {

fun networkPrograms(): NetworkProgramService.WithRawResponse

fun holds(): HoldService.WithRawResponse

fun accountActivity(): AccountActivityService.WithRawResponse

fun transferLimits(): TransferLimitService.WithRawResponse
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import com.lithic.api.services.async.ExternalPaymentServiceAsync
import com.lithic.api.services.async.FinancialAccountServiceAsync
import com.lithic.api.services.async.FraudServiceAsync
import com.lithic.api.services.async.FundingEventServiceAsync
import com.lithic.api.services.async.HoldServiceAsync
import com.lithic.api.services.async.InternalTransactionServiceAsync
import com.lithic.api.services.async.ManagementOperationServiceAsync
import com.lithic.api.services.async.NetworkProgramServiceAsync
Expand Down Expand Up @@ -139,6 +140,8 @@ interface LithicClientAsync {

fun networkPrograms(): NetworkProgramServiceAsync

fun holds(): HoldServiceAsync

fun accountActivity(): AccountActivityServiceAsync

fun transferLimits(): TransferLimitServiceAsync
Expand Down Expand Up @@ -248,6 +251,8 @@ interface LithicClientAsync {

fun networkPrograms(): NetworkProgramServiceAsync.WithRawResponse

fun holds(): HoldServiceAsync.WithRawResponse

fun accountActivity(): AccountActivityServiceAsync.WithRawResponse

fun transferLimits(): TransferLimitServiceAsync.WithRawResponse
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,8 @@ import com.lithic.api.services.async.FraudServiceAsync
import com.lithic.api.services.async.FraudServiceAsyncImpl
import com.lithic.api.services.async.FundingEventServiceAsync
import com.lithic.api.services.async.FundingEventServiceAsyncImpl
import com.lithic.api.services.async.HoldServiceAsync
import com.lithic.api.services.async.HoldServiceAsyncImpl
import com.lithic.api.services.async.InternalTransactionServiceAsync
import com.lithic.api.services.async.InternalTransactionServiceAsyncImpl
import com.lithic.api.services.async.ManagementOperationServiceAsync
Expand Down Expand Up @@ -221,6 +223,8 @@ class LithicClientAsyncImpl(private val clientOptions: ClientOptions) : LithicCl
NetworkProgramServiceAsyncImpl(clientOptionsWithUserAgent)
}

private val holds: HoldServiceAsync by lazy { HoldServiceAsyncImpl(clientOptionsWithUserAgent) }

private val accountActivity: AccountActivityServiceAsync by lazy {
AccountActivityServiceAsyncImpl(clientOptionsWithUserAgent)
}
Expand Down Expand Up @@ -301,6 +305,8 @@ class LithicClientAsyncImpl(private val clientOptions: ClientOptions) : LithicCl

override fun networkPrograms(): NetworkProgramServiceAsync = networkPrograms

override fun holds(): HoldServiceAsync = holds

override fun accountActivity(): AccountActivityServiceAsync = accountActivity

override fun transferLimits(): TransferLimitServiceAsync = transferLimits
Expand Down Expand Up @@ -443,6 +449,10 @@ class LithicClientAsyncImpl(private val clientOptions: ClientOptions) : LithicCl
NetworkProgramServiceAsyncImpl.WithRawResponseImpl(clientOptions)
}

private val holds: HoldServiceAsync.WithRawResponse by lazy {
HoldServiceAsyncImpl.WithRawResponseImpl(clientOptions)
}

private val accountActivity: AccountActivityServiceAsync.WithRawResponse by lazy {
AccountActivityServiceAsyncImpl.WithRawResponseImpl(clientOptions)
}
Expand Down Expand Up @@ -530,6 +540,8 @@ class LithicClientAsyncImpl(private val clientOptions: ClientOptions) : LithicCl

override fun networkPrograms(): NetworkProgramServiceAsync.WithRawResponse = networkPrograms

override fun holds(): HoldServiceAsync.WithRawResponse = holds

override fun accountActivity(): AccountActivityServiceAsync.WithRawResponse =
accountActivity

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,8 @@ import com.lithic.api.services.blocking.FraudService
import com.lithic.api.services.blocking.FraudServiceImpl
import com.lithic.api.services.blocking.FundingEventService
import com.lithic.api.services.blocking.FundingEventServiceImpl
import com.lithic.api.services.blocking.HoldService
import com.lithic.api.services.blocking.HoldServiceImpl
import com.lithic.api.services.blocking.InternalTransactionService
import com.lithic.api.services.blocking.InternalTransactionServiceImpl
import com.lithic.api.services.blocking.ManagementOperationService
Expand Down Expand Up @@ -204,6 +206,8 @@ class LithicClientImpl(private val clientOptions: ClientOptions) : LithicClient
NetworkProgramServiceImpl(clientOptionsWithUserAgent)
}

private val holds: HoldService by lazy { HoldServiceImpl(clientOptionsWithUserAgent) }

private val accountActivity: AccountActivityService by lazy {
AccountActivityServiceImpl(clientOptionsWithUserAgent)
}
Expand Down Expand Up @@ -281,6 +285,8 @@ class LithicClientImpl(private val clientOptions: ClientOptions) : LithicClient

override fun networkPrograms(): NetworkProgramService = networkPrograms

override fun holds(): HoldService = holds

override fun accountActivity(): AccountActivityService = accountActivity

override fun transferLimits(): TransferLimitService = transferLimits
Expand Down Expand Up @@ -423,6 +429,10 @@ class LithicClientImpl(private val clientOptions: ClientOptions) : LithicClient
NetworkProgramServiceImpl.WithRawResponseImpl(clientOptions)
}

private val holds: HoldService.WithRawResponse by lazy {
HoldServiceImpl.WithRawResponseImpl(clientOptions)
}

private val accountActivity: AccountActivityService.WithRawResponse by lazy {
AccountActivityServiceImpl.WithRawResponseImpl(clientOptions)
}
Expand Down Expand Up @@ -509,6 +519,8 @@ class LithicClientImpl(private val clientOptions: ClientOptions) : LithicClient

override fun networkPrograms(): NetworkProgramService.WithRawResponse = networkPrograms

override fun holds(): HoldService.WithRawResponse = holds

override fun accountActivity(): AccountActivityService.WithRawResponse = accountActivity

override fun transferLimits(): TransferLimitService.WithRawResponse = transferLimits
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@ private constructor(
?: headers.values("Retry-After").getOrNull(0)?.let { retryAfter ->
retryAfter.toFloatOrNull()?.times(TimeUnit.SECONDS.toNanos(1))
?: try {
ChronoUnit.MILLIS.between(
ChronoUnit.NANOS.between(
OffsetDateTime.now(clock),
OffsetDateTime.parse(
retryAfter,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,9 @@ private constructor(
managementOperation: ManagementOperationTransaction
): Optional<String> =
managementOperation._token().getOptional("token")

override fun visitHold(hold: Hold): Optional<String> =
hold._token().getOptional("token")
}
)
)
Expand Down Expand Up @@ -104,6 +107,9 @@ private constructor(
managementOperation: ManagementOperationTransaction
): Optional<String> =
managementOperation._token().getOptional("token")

override fun visitHold(hold: Hold): Optional<String> =
hold._token().getOptional("token")
}
)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,9 @@ private constructor(
managementOperation: ManagementOperationTransaction
): Optional<String> =
managementOperation._token().getOptional("token")

override fun visitHold(hold: Hold): Optional<String> =
hold._token().getOptional("token")
}
)
)
Expand Down Expand Up @@ -107,6 +110,9 @@ private constructor(
managementOperation: ManagementOperationTransaction
): Optional<String> =
managementOperation._token().getOptional("token")

override fun visitHold(hold: Hold): Optional<String> =
hold._token().getOptional("token")
}
)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,9 @@ private constructor(
fun addData(managementOperation: ManagementOperationTransaction) =
addData(AccountActivityListResponse.ofManagementOperation(managementOperation))

/** Alias for calling [addData] with `AccountActivityListResponse.ofHold(hold)`. */
fun addData(hold: Hold) = addData(AccountActivityListResponse.ofHold(hold))

/** Indicates if there are more transactions available for pagination */
fun hasMore(hasMore: Boolean) = hasMore(JsonField.of(hasMore))

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -424,6 +424,8 @@ private constructor(

@JvmField val MANAGEMENT_DISBURSEMENT = of("MANAGEMENT_DISBURSEMENT")

@JvmField val HOLD = of("HOLD")

@JvmField val PROGRAM_FUNDING = of("PROGRAM_FUNDING")

@JvmStatic fun of(value: String) = TransactionCategory(JsonField.of(value))
Expand All @@ -450,6 +452,7 @@ private constructor(
MANAGEMENT_FEE,
MANAGEMENT_REWARD,
MANAGEMENT_DISBURSEMENT,
HOLD,
PROGRAM_FUNDING,
}

Expand Down Expand Up @@ -482,6 +485,7 @@ private constructor(
MANAGEMENT_FEE,
MANAGEMENT_REWARD,
MANAGEMENT_DISBURSEMENT,
HOLD,
PROGRAM_FUNDING,
/**
* An enum member indicating that [TransactionCategory] was instantiated with an unknown
Expand Down Expand Up @@ -518,6 +522,7 @@ private constructor(
MANAGEMENT_FEE -> Value.MANAGEMENT_FEE
MANAGEMENT_REWARD -> Value.MANAGEMENT_REWARD
MANAGEMENT_DISBURSEMENT -> Value.MANAGEMENT_DISBURSEMENT
HOLD -> Value.HOLD
PROGRAM_FUNDING -> Value.PROGRAM_FUNDING
else -> Value._UNKNOWN
}
Expand Down Expand Up @@ -552,6 +557,7 @@ private constructor(
MANAGEMENT_FEE -> Known.MANAGEMENT_FEE
MANAGEMENT_REWARD -> Known.MANAGEMENT_REWARD
MANAGEMENT_DISBURSEMENT -> Known.MANAGEMENT_DISBURSEMENT
HOLD -> Known.HOLD
PROGRAM_FUNDING -> Known.PROGRAM_FUNDING
else -> throw LithicInvalidDataException("Unknown TransactionCategory: $value")
}
Expand Down
Loading