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
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.116.0"
".": "0.117.0"
}
6 changes: 3 additions & 3 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 176
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic%2Flithic-ce2adff9b644ed4562b5342a4a43d0b40c98d43b4e063b4626f4ca5d342f1b92.yml
openapi_spec_hash: fbc84b866ce96457261ac58b4e75c71d
config_hash: 31d71922d7838f34ae0875c9b8026d99
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic%2Flithic-05d665e9c7e81d85c0d6629bf3898e2eb221268d677b772ef3da3891b25d8346.yml
openapi_spec_hash: fd8900412ab9a393719dba3669d44d3a
config_hash: faacaff68ffb3a4d051f0a7b8442e099
20 changes: 20 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,25 @@
# Changelog

## 0.117.0 (2026-01-30)

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

### Features

* **api:** Add naics_code to account holder requests/responses ([c9ff6da](https://github.com/lithic-com/lithic-java/commit/c9ff6daa033e4022ac9208f4ff81d18346f53695))


### Bug Fixes

* add missing fields ([b075f58](https://github.com/lithic-com/lithic-java/commit/b075f58683c40bd097d18490992744526f74161a))


### Chores

* configure new SDK language ([2ddf823](https://github.com/lithic-com/lithic-java/commit/2ddf82360b21d85b57231fafc022f10ef909df40))
* Enable stainless MCP in config ([2f605c1](https://github.com/lithic-com/lithic-java/commit/2f605c19967c7c77dec0358e1ccbacbadf9fc632))
* **internal:** allow passing args to `./scripts/test` ([b327fb6](https://github.com/lithic-com/lithic-java/commit/b327fb6b7736803c3fd6a0806fe528aeeb96f428))

## 0.116.0 (2026-01-27)

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

<!-- 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.116.0)
[![javadoc](https://javadoc.io/badge2/com.lithic.api/lithic-java/0.116.0/javadoc.svg)](https://javadoc.io/doc/com.lithic.api/lithic-java/0.116.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.117.0)
[![javadoc](https://javadoc.io/badge2/com.lithic.api/lithic-java/0.117.0/javadoc.svg)](https://javadoc.io/doc/com.lithic.api/lithic-java/0.117.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.116.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.117.0).

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

Expand All @@ -24,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.116.0")
implementation("com.lithic.api:lithic-java:0.117.0")
```

### Maven
Expand All @@ -33,7 +42,7 @@ implementation("com.lithic.api:lithic-java:0.116.0")
<dependency>
<groupId>com.lithic.api</groupId>
<artifactId>lithic-java</artifactId>
<version>0.116.0</version>
<version>0.117.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.116.0" // x-release-please-version
version = "0.117.0" // x-release-please-version
}

subprojects {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ private constructor(
private val exemptionType: JsonField<ExemptionType>,
private val externalId: JsonField<String>,
private val individual: JsonField<AccountHolderIndividualResponse>,
private val naicsCode: JsonField<String>,
private val natureOfBusiness: JsonField<String>,
private val phoneNumber: JsonField<String>,
private val requiredDocuments: JsonField<List<RequiredDocument>>,
Expand Down Expand Up @@ -82,6 +83,7 @@ private constructor(
@JsonProperty("individual")
@ExcludeMissing
individual: JsonField<AccountHolderIndividualResponse> = JsonMissing.of(),
@JsonProperty("naics_code") @ExcludeMissing naicsCode: JsonField<String> = JsonMissing.of(),
@JsonProperty("nature_of_business")
@ExcludeMissing
natureOfBusiness: JsonField<String> = JsonMissing.of(),
Expand Down Expand Up @@ -115,6 +117,7 @@ private constructor(
exemptionType,
externalId,
individual,
naicsCode,
natureOfBusiness,
phoneNumber,
requiredDocuments,
Expand Down Expand Up @@ -245,6 +248,15 @@ private constructor(
fun individual(): Optional<AccountHolderIndividualResponse> =
individual.getOptional("individual")

/**
* Only present when user_type == "BUSINESS". 6-digit North American Industry Classification
* System (NAICS) code for the business.
*
* @throws LithicInvalidDataException if the JSON field has an unexpected type (e.g. if the
* server responded with an unexpected value).
*/
fun naicsCode(): Optional<String> = naicsCode.getOptional("naics_code")

/**
* Only present when user_type == "BUSINESS". User-submitted description of the business.
*
Expand Down Expand Up @@ -299,8 +311,8 @@ private constructor(
/**
* The type of Account Holder. If the type is "INDIVIDUAL", the "individual" attribute will be
* present. If the type is "BUSINESS" then the "business_entity", "control_person",
* "beneficial_owner_individuals", "nature_of_business", and "website_url" attributes will be
* present.
* "beneficial_owner_individuals", "naics_code", "nature_of_business", and "website_url"
* attributes will be present.
*
* @throws LithicInvalidDataException if the JSON field has an unexpected type (e.g. if the
* server responded with an unexpected value).
Expand Down Expand Up @@ -430,6 +442,13 @@ private constructor(
@ExcludeMissing
fun _individual(): JsonField<AccountHolderIndividualResponse> = individual

/**
* Returns the raw JSON value of [naicsCode].
*
* Unlike [naicsCode], this method doesn't throw if the JSON field has an unexpected type.
*/
@JsonProperty("naics_code") @ExcludeMissing fun _naicsCode(): JsonField<String> = naicsCode

/**
* Returns the raw JSON value of [natureOfBusiness].
*
Expand Down Expand Up @@ -545,6 +564,7 @@ private constructor(
private var exemptionType: JsonField<ExemptionType> = JsonMissing.of()
private var externalId: JsonField<String> = JsonMissing.of()
private var individual: JsonField<AccountHolderIndividualResponse> = JsonMissing.of()
private var naicsCode: JsonField<String> = JsonMissing.of()
private var natureOfBusiness: JsonField<String> = JsonMissing.of()
private var phoneNumber: JsonField<String> = JsonMissing.of()
private var requiredDocuments: JsonField<MutableList<RequiredDocument>>? = null
Expand Down Expand Up @@ -572,6 +592,7 @@ private constructor(
exemptionType = accountHolder.exemptionType
externalId = accountHolder.externalId
individual = accountHolder.individual
naicsCode = accountHolder.naicsCode
natureOfBusiness = accountHolder.natureOfBusiness
phoneNumber = accountHolder.phoneNumber
requiredDocuments = accountHolder.requiredDocuments.map { it.toMutableList() }
Expand Down Expand Up @@ -811,6 +832,21 @@ private constructor(
this.individual = individual
}

/**
* Only present when user_type == "BUSINESS". 6-digit North American Industry Classification
* System (NAICS) code for the business.
*/
fun naicsCode(naicsCode: String) = naicsCode(JsonField.of(naicsCode))

/**
* Sets [Builder.naicsCode] to an arbitrary JSON value.
*
* You should usually call [Builder.naicsCode] with a well-typed [String] value instead.
* This method is primarily for setting the field to an undocumented or not yet supported
* value.
*/
fun naicsCode(naicsCode: JsonField<String>) = apply { this.naicsCode = naicsCode }

/**
* Only present when user_type == "BUSINESS". User-submitted description of the business.
*/
Expand Down Expand Up @@ -926,8 +962,8 @@ private constructor(
/**
* The type of Account Holder. If the type is "INDIVIDUAL", the "individual" attribute will
* be present. If the type is "BUSINESS" then the "business_entity", "control_person",
* "beneficial_owner_individuals", "nature_of_business", and "website_url" attributes will
* be present.
* "beneficial_owner_individuals", "naics_code", "nature_of_business", and "website_url"
* attributes will be present.
*/
fun userType(userType: UserType) = userType(JsonField.of(userType))

Expand Down Expand Up @@ -1013,6 +1049,7 @@ private constructor(
exemptionType,
externalId,
individual,
naicsCode,
natureOfBusiness,
phoneNumber,
(requiredDocuments ?: JsonMissing.of()).map { it.toImmutable() },
Expand Down Expand Up @@ -1044,6 +1081,7 @@ private constructor(
exemptionType().ifPresent { it.validate() }
externalId()
individual().ifPresent { it.validate() }
naicsCode()
natureOfBusiness()
phoneNumber()
requiredDocuments().ifPresent { it.forEach { it.validate() } }
Expand Down Expand Up @@ -1083,6 +1121,7 @@ private constructor(
(exemptionType.asKnown().getOrNull()?.validity() ?: 0) +
(if (externalId.asKnown().isPresent) 1 else 0) +
(individual.asKnown().getOrNull()?.validity() ?: 0) +
(if (naicsCode.asKnown().isPresent) 1 else 0) +
(if (natureOfBusiness.asKnown().isPresent) 1 else 0) +
(if (phoneNumber.asKnown().isPresent) 1 else 0) +
(requiredDocuments.asKnown().getOrNull()?.sumOf { it.validity().toInt() } ?: 0) +
Expand Down Expand Up @@ -2447,8 +2486,8 @@ private constructor(
/**
* The type of Account Holder. If the type is "INDIVIDUAL", the "individual" attribute will be
* present. If the type is "BUSINESS" then the "business_entity", "control_person",
* "beneficial_owner_individuals", "nature_of_business", and "website_url" attributes will be
* present.
* "beneficial_owner_individuals", "naics_code", "nature_of_business", and "website_url"
* attributes will be present.
*/
class UserType @JsonCreator private constructor(private val value: JsonField<String>) : Enum {

Expand Down Expand Up @@ -3226,6 +3265,7 @@ private constructor(
exemptionType == other.exemptionType &&
externalId == other.externalId &&
individual == other.individual &&
naicsCode == other.naicsCode &&
natureOfBusiness == other.natureOfBusiness &&
phoneNumber == other.phoneNumber &&
requiredDocuments == other.requiredDocuments &&
Expand All @@ -3251,6 +3291,7 @@ private constructor(
exemptionType,
externalId,
individual,
naicsCode,
natureOfBusiness,
phoneNumber,
requiredDocuments,
Expand All @@ -3266,5 +3307,5 @@ private constructor(
override fun hashCode(): Int = hashCode

override fun toString() =
"AccountHolder{token=$token, created=$created, accountToken=$accountToken, beneficialOwnerEntities=$beneficialOwnerEntities, beneficialOwnerIndividuals=$beneficialOwnerIndividuals, businessAccountToken=$businessAccountToken, businessEntity=$businessEntity, controlPerson=$controlPerson, email=$email, exemptionType=$exemptionType, externalId=$externalId, individual=$individual, natureOfBusiness=$natureOfBusiness, phoneNumber=$phoneNumber, requiredDocuments=$requiredDocuments, status=$status, statusReasons=$statusReasons, userType=$userType, verificationApplication=$verificationApplication, websiteUrl=$websiteUrl, additionalProperties=$additionalProperties}"
"AccountHolder{token=$token, created=$created, accountToken=$accountToken, beneficialOwnerEntities=$beneficialOwnerEntities, beneficialOwnerIndividuals=$beneficialOwnerIndividuals, businessAccountToken=$businessAccountToken, businessEntity=$businessEntity, controlPerson=$controlPerson, email=$email, exemptionType=$exemptionType, externalId=$externalId, individual=$individual, naicsCode=$naicsCode, natureOfBusiness=$natureOfBusiness, phoneNumber=$phoneNumber, requiredDocuments=$requiredDocuments, status=$status, statusReasons=$statusReasons, userType=$userType, verificationApplication=$verificationApplication, websiteUrl=$websiteUrl, additionalProperties=$additionalProperties}"
}
Loading