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
63 changes: 63 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,68 @@
# Changelog

## [1.7.0] - 2026-02-17

### Added

#### New Endpoints
- **Futures Service**
- `getFcmEquity` - Get FCM equity information for an entity

#### New Models
- `ValidatorAllocation` - Validator-level allocation for ETH V2 unstaking

#### New Enums
- `PegOffsetType` - Peg offset types for PEG orders (PRICE, BPS, DEPTH)
- `NetworkFamily` - Network family types for wallet creation

#### New Examples
- `GetFcmEquity.java` - FCM equity retrieval example

### Changed

#### Breaking Changes
- `ListOpenOrdersRequest` - `startDate`/`endDate` type changed from `Date` to `String` to match spec
- `CreateOrderRequest` / `GetOrderPreviewRequest` - `pegOffsetType` changed from `String` to `PegOffsetType` enum
- `CreateWalletTransferResponse` / `CreateWalletWithdrawalResponse` - `destinationType`/`sourceType` changed from `DestinationType` enum to `String` to match spec
- `ListPortfolioUsersResponse` - Changed from `EntityUser[]` to `PortfolioUser[]` to match spec
- `GetPositionsResponse` - Changed from `Position[]` to `FcmPosition[]` to match spec
- `ListExistingLocatesResponse` - Changed from `Locate[]` to `ExistingLocate[]` to match spec
- `CancelOrderResponse` - JSON field mapping changed from `order_id` to `id` to match spec
- `SubmitDepositTravelRuleDataRequest` - Removed `isIntermediary` field (not in spec)
- `ListWalletTransactionsResponse` - Removed `request` field
- `UpdateOnchainAddressBookEntryRequest` - Renamed `getAddressGroupId`/`setAddressGroupId` to `getAddressGroup`/`setAddressGroup`

#### New Fields
- `ListEntityActivitiesRequest` / `ListPortfolioActivitiesRequest` - Added `getNetworkUnifiedActivities`
- `CreateAddressBookEntryRequest` - Added `chainIds`
- `ListOnchainWalletBalancesResponse` - Added `defiBalances`
- `ListPortfolioBalancesResponse` - Added `primeCustodyBalances`
- `CreateNewLocatesRequest` - Added `conversionDate`
- `GetPortfolioCreditInformationResponse` - Added `@JsonProperty("post_trade_credit")` annotation
- `ScheduleEntityFuturesSweepRequest` - Added `amount` and `currency` builder methods
- `TravelRuleData` - Added `attestVerifiedWalletOwnership`
- `TravelRuleParty` - Added `personalId`, `dateOfBirth`, `telephoneNumber`, `accountId`
- `WalletUnstakeInputs` - Added `validatorAllocations`
- `ListOnchainAddressGroupsRequest` - Added `@JsonProperty`/`@JsonIgnore` annotations on `portfolioId`
- `AcceptQuoteRequest` / `CreateQuoteRequest` - Added `settlCurrency`
- `ListPortfolioTransactionsRequest` - Added `getNetworkUnifiedTransactions`, `travelRuleStatus`
- `CreateWalletRequest` - Added `idempotencyKey`, `networkFamily`, `network`
- `ListWalletsRequest` - Added `getNetworkUnifiedWallets`
- `ListWalletAddressesRequest` - Added `limit` builder method
- `RewardSubtype` enum - Added `BUIDL_DIVIDEND`

#### Relaxed Validations
- `CreateWalletRequest` - `wallet_type` no longer required (optional per spec)
- `ListWalletAddressesRequest` - `networkId` no longer required (optional per spec)
- `CreateOnchainTransactionRequest` - `rpc` no longer required (optional per spec)

### Fixed
- `FinancingServiceImpl` - Fixed URL path from `/entities/{id}/locates/locates_availability` to `/entities/{id}/locates_availability`
- `ListInterestAccrualsForPortfolioRequest` - Fixed typo `prtfolioId` → `portfolioId` in builder method
- `ListInterestAccrualsForPortfolioRequest` - Added missing `build()` method to Builder
- `GetPortfolioActivityRequest` - Removed incorrect `PrimeListRequest` inheritance (single-item request, not a list)
- `GetWalletDepositInstructionsRequest` - Changed `networkType` from `NetworkType` enum to `String` to match spec

## [1.6.2] - 2026-01-12

### Added
Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
<description>Sample Java SDK for the Coinbase Prime REST APIs</description>
<groupId>com.coinbase.prime</groupId>
<url>https://github.com/coinbase-samples/prime-sdk-java</url>
<version>1.6.2</version>
<version>1.7.0</version>
<licenses>
<license>
<name>Apache License, Version 2.0</name>
Expand Down
45 changes: 45 additions & 0 deletions src/main/java/com/coinbase/examples/futures/GetFcmEquity.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
/*
* Copyright 2026-present Coinbase Global, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.coinbase.examples.futures;

import com.coinbase.prime.client.CoinbasePrimeClient;
import com.coinbase.prime.credentials.CoinbasePrimeCredentials;
import com.coinbase.prime.factory.PrimeServiceFactory;
import com.coinbase.prime.futures.FuturesService;
import com.coinbase.prime.futures.GetFcmEquityRequest;
import com.coinbase.prime.futures.GetFcmEquityResponse;
import com.coinbase.prime.utils.Utils;

public class GetFcmEquity {
public static void main(String[] args) {
try {
CoinbasePrimeCredentials credentials = new CoinbasePrimeCredentials(System.getenv("COINBASE_PRIME_CREDENTIALS"));
CoinbasePrimeClient client = new CoinbasePrimeClient(credentials);
String entityId = System.getenv("COINBASE_PRIME_ENTITY_ID");

FuturesService service = PrimeServiceFactory.createFuturesService(client);
GetFcmEquityResponse response = service.getFcmEquity(
new GetFcmEquityRequest.Builder()
.entityId(entityId)
.build());

System.out.println(Utils.getObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(response));
} catch (Exception e) {
e.printStackTrace();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@

package com.coinbase.prime.activities;

import com.coinbase.prime.common.PrimeListRequest;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.coinbase.core.errors.CoinbaseClientException;
Expand All @@ -25,7 +24,7 @@
/**
* Request for getting a portfolio activity by activity ID.
*/
public class GetPortfolioActivityRequest extends PrimeListRequest {
public class GetPortfolioActivityRequest {
@JsonProperty(required = true, value = "portfolio_id")
@JsonIgnore
private String portfolioId;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,9 @@ public class ListEntityActivitiesRequest extends PrimeListRequest {
@JsonProperty("end_time")
private String endTime;

@JsonProperty("get_network_unified_activities")
private Boolean getNetworkUnifiedActivities;

public ListEntityActivitiesRequest(String entityId) {
this.entityId = entityId;
}
Expand All @@ -61,6 +64,7 @@ public ListEntityActivitiesRequest(Builder builder) {
this.statuses = builder.statuses;
this.startTime = builder.startTime;
this.endTime = builder.endTime;
this.getNetworkUnifiedActivities = builder.getNetworkUnifiedActivities;
}

public String getEntityId() {
Expand Down Expand Up @@ -119,6 +123,14 @@ public void setEndTime(String endTime) {
this.endTime = endTime;
}

public Boolean getGetNetworkUnifiedActivities() {
return this.getNetworkUnifiedActivities;
}

public void setGetNetworkUnifiedActivities(Boolean getNetworkUnifiedActivities) {
this.getNetworkUnifiedActivities = getNetworkUnifiedActivities;
}

public static class Builder {
private final String entityId;
private ActivityLevel activityLevel;
Expand All @@ -127,6 +139,7 @@ public static class Builder {
private ActivityStatus[] statuses;
private String startTime;
private String endTime;
private Boolean getNetworkUnifiedActivities;
private String cursor;
private SortDirection sortDirection;
private Integer limit;
Expand Down Expand Up @@ -165,6 +178,11 @@ public ListEntityActivitiesRequest.Builder endTime(String endTime) {
return this;
}

public ListEntityActivitiesRequest.Builder getNetworkUnifiedActivities(Boolean getNetworkUnifiedActivities) {
this.getNetworkUnifiedActivities = getNetworkUnifiedActivities;
return this;
}

public ListEntityActivitiesRequest.Builder limit(Integer limit) {
this.limit = limit;
return this;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ public class ListPortfolioActivitiesRequest extends PrimeListRequest {
private String startTime;
@JsonProperty("end_time")
private String endTime;
@JsonProperty("get_network_unified_activities")
private Boolean getNetworkUnifiedActivities;

public ListPortfolioActivitiesRequest() {
}
Expand All @@ -50,6 +52,7 @@ public ListPortfolioActivitiesRequest(Builder builder) {
this.statuses = builder.statuses;
this.startTime = builder.startTime;
this.endTime = builder.endTime;
this.getNetworkUnifiedActivities = builder.getNetworkUnifiedActivities;
}

public String getPortfolioId() {
Expand Down Expand Up @@ -100,13 +103,22 @@ public void setEndTime(String endTime) {
this.endTime = endTime;
}

public Boolean getGetNetworkUnifiedActivities() {
return getNetworkUnifiedActivities;
}

public void setGetNetworkUnifiedActivities(Boolean getNetworkUnifiedActivities) {
this.getNetworkUnifiedActivities = getNetworkUnifiedActivities;
}

public static class Builder {
private final String portfolioId;
private String[] symbols;
private ActivityCategory[] categories;
private ActivityStatus[] statuses;
private String startTime;
private String endTime;
private Boolean getNetworkUnifiedActivities;
private String cursor;
private SortDirection sortDirection;
private Integer limit;
Expand Down Expand Up @@ -140,6 +152,11 @@ public Builder endTime(String endTime) {
return this;
}

public Builder getNetworkUnifiedActivities(Boolean getNetworkUnifiedActivities) {
this.getNetworkUnifiedActivities = getNetworkUnifiedActivities;
return this;
}

public Builder limit(Integer limit) {
this.limit = limit;
return this;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,9 @@ public class CreateAddressBookEntryRequest {
@JsonProperty("account_identifier")
private String accountIdentifier;

@JsonProperty("chain_ids")
private String[] chainIds;

public CreateAddressBookEntryRequest() {
}

Expand All @@ -46,6 +49,7 @@ public CreateAddressBookEntryRequest(Builder builder) {
this.currencySymbol = builder.currencySymbol;
this.name = builder.name;
this.accountIdentifier = builder.accountIdentifier;
this.chainIds = builder.chainIds;
}

public String getPortfolioId() {
Expand Down Expand Up @@ -88,12 +92,21 @@ public void setAccountIdentifier(String accountIdentifier) {
this.accountIdentifier = accountIdentifier;
}

public String[] getChainIds() {
return chainIds;
}

public void setChainIds(String[] chainIds) {
this.chainIds = chainIds;
}

public static class Builder {
private final String portfolioId;
private String address;
private String currencySymbol;
private String name;
private String accountIdentifier;
private String[] chainIds;

public Builder(String portfolioId) {
this.portfolioId = portfolioId;
Expand All @@ -119,6 +132,11 @@ public Builder accountIdentifier(String accountIdentifier) {
return this;
}

public Builder chainIds(String[] chainIds) {
this.chainIds = chainIds;
return this;
}

public CreateAddressBookEntryRequest build() throws CoinbaseClientException {
this.validate();
return new CreateAddressBookEntryRequest(this);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,9 @@
package com.coinbase.prime.balances;

import com.coinbase.prime.common.Pagination;
import com.coinbase.prime.model.DefiBalance;
import com.coinbase.prime.model.OnchainBalance;
import com.fasterxml.jackson.annotation.JsonProperty;

/**
* Response object for listing on-chain wallet balances by entity.
Expand All @@ -27,6 +29,9 @@ public class ListOnchainWalletBalancesResponse {
private OnchainBalance[] balances;
/** Pagination information for the response */
private Pagination pagination;
/** DeFi balances only return for the initial request. No pagination support. */
@JsonProperty("defi_balances")
private DefiBalance[] defiBalances;

public ListOnchainWalletBalancesResponse() {
}
Expand All @@ -47,4 +52,12 @@ public void setPagination(Pagination pagination) {
this.pagination = pagination;
}

public DefiBalance[] getDefiBalances() {
return defiBalances;
}

public void setDefiBalances(DefiBalance[] defiBalances) {
this.defiBalances = defiBalances;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,9 @@ public class ListPortfolioBalancesResponse {
/** Vault-specific balance summary */
@JsonProperty("vault_balances")
private AggregatedFiatBalance vaultBalances;
/** Prime custody balance summary */
@JsonProperty("prime_custody_balances")
private AggregatedFiatBalance primeCustodyBalances;

public ListPortfolioBalancesResponse() {
}
Expand Down Expand Up @@ -71,4 +74,12 @@ public void setVaultBalances(AggregatedFiatBalance vaultBalances) {
this.vaultBalances = vaultBalances;
}

public AggregatedFiatBalance getPrimeCustodyBalances() {
return primeCustodyBalances;
}

public void setPrimeCustodyBalances(AggregatedFiatBalance primeCustodyBalances) {
this.primeCustodyBalances = primeCustodyBalances;
}

}
Loading