FINBOURNE Java SDK for accessing LUSID and related APIs.
- Java 21+
- Maven 3.8.3+ or Gradle 7.2+
<dependency>
<groupId>com.finbourne.sdk</groupId>
<artifactId>finbourne.sdk</artifactId>
<version>0.0.49</version>
</dependency>implementation "com.finbourne.sdk:finbourne.sdk:0.0.49"The SDK supports two authentication methods: short-lived OAuth2 tokens (username/password + client credentials) and long-lived Personal Access Tokens.
Configuration is loaded from a secrets.json file or from environment variables. The SDK tries the secrets file first, then falls back to environment variables.
Create a secrets.json file with profiles:
Using OAuth2 credentials:
{
"profiles": {
"default": {
"tokenUrl": "https://<your-domain>.lusid.com/oauth2/token",
"baseUrl": "https://<your-domain>.lusid.com/api",
"username": "<your-username>",
"password": "<your-password>",
"clientId": "<your-client-id>",
"clientSecret": "<your-client-secret>"
}
}
}Using a Personal Access Token:
{
"profiles": {
"default": {
"baseUrl": "https://<your-domain>.lusid.com/api",
"accessToken": "<your-access-token>"
}
}
}| Variable | Description |
|---|---|
FBN_TOKEN_URL | OAuth2 token endpoint |
FBN_BASE_URL | API base URL (required) |
FBN_USERNAME | OAuth2 username |
FBN_PASSWORD | OAuth2 password |
FBN_CLIENT_ID | OAuth2 client ID |
FBN_CLIENT_SECRET | OAuth2 client secret |
FBN_ACCESS_TOKEN | Personal Access Token (alternative to OAuth2) |
Optional configuration:
| Variable | Default | Description |
|---|---|---|
FBN_TOTAL_TIMEOUT_MS | 1800000 | Total request timeout (ms) |
FBN_CONNECT_TIMEOUT_MS | 30000 | Connection timeout (ms) |
FBN_READ_TIMEOUT_MS | 30000 | Read timeout (ms) |
FBN_WRITE_TIMEOUT_MS | 30000 | Write timeout (ms) |
FBN_RATE_LIMIT_RETRIES | 2 | Retries on HTTP 429 |
importcom.finbourne.sdk.extensions.ApiFactory;
importcom.finbourne.sdk.extensions.ApiFactoryBuilder;
importcom.finbourne.sdk.services.lusid.api.PortfoliosApi;
importcom.finbourne.sdk.services.lusid.model.ResourceListOfPortfolio;
publicclassExample {
publicstaticvoidmain(String[] args) throwsException {
// Build a factory from a secrets fileApiFactoryfactory = newApiFactoryBuilder()
.withConfigurationFile("secrets.json")
.build();
// Create an API instancePortfoliosApiportfoliosApi = factory.build(PortfoliosApi.class);
// Make a requestResourceListOfPortfolioportfolios = portfoliosApi.listPortfoliosForScope("my-scope")
.execute();
System.out.println("Found " + portfolios.getValues().size() + " portfolios");
}
}ApiFactoryfactory = newApiFactoryBuilder()
.withConfigurationFile("secrets.json")
.withProfileName("production")
.build();// Reads FBN_* environment variables automatically when no secrets file is providedApiFactoryfactory = newApiFactoryBuilder().build();importcom.finbourne.sdk.core.config.ConfigurationOptions;
ConfigurationOptionsopts = newConfigurationOptions();
opts.setTotalTimeoutMs(30000);
opts.setConnectTimeoutMs(5000);
ApiFactoryfactory = newApiFactoryBuilder()
.withConfigurationFile("secrets.json")
.withConfigurationOptions(opts)
.build();Refer to the docs folder for API endpoint and model documentation.