curl --request GET \
--url https://api.entendre.finance/v1/reports/realized-gains \
--header 'X-API-Key: <api-key>'const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.entendre.finance/v1/reports/realized-gains', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.entendre.finance/v1/reports/realized-gains"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": [
{
"asset_type": "ETH",
"asset_record": "ast_507f1f77bcf86cd799439011",
"date_received": "2026-08-01T00:00:00Z",
"quantity": "100.00",
"remaining_quantity": "0.00",
"cost_basis": "100.00",
"currency": "USD",
"disposals": [
{
"sale_date": "2026-08-31T12:00:00Z",
"quantity_sold": "100.00",
"sale_price": "110.00"
}
]
}
],
"has_more": false,
"next_cursor": null,
"summary": {
"methodology": "per_unit_cost_basis_approximation",
"by_currency": [
{
"currency": "USD",
"total_proceeds": "11000.00",
"total_cost_basis": "10000.00",
"total_gain": "1000.00",
"short_term_gain": "1000.00",
"long_term_gain": "0.00",
"disposal_count": 1,
"sold_asset_count": 1
}
],
"currency": "USD",
"total_proceeds": "11000.00",
"total_cost_basis": "10000.00",
"total_gain": "1000.00",
"short_term_gain": "1000.00",
"long_term_gain": "0.00",
"disposal_count": 1,
"sold_asset_count": 1
}
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid path, query or request body.",
"request_id": "req_example"
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "Authentication is required.",
"request_id": "req_example"
}
}{
"error": {
"code": "FORBIDDEN",
"message": "Insufficient access to organization",
"request_id": "req_example"
}
}{
"error": {
"code": "RESOURCE_NOT_FOUND",
"message": "Resource not found",
"request_id": "req_example"
}
}{
"error": {
"code": "RATE_LIMITED",
"message": "Rate limit exceeded. Retry after 30s.",
"request_id": "req_example"
}
}{
"error": {
"code": "INTERNAL_ERROR",
"message": "Internal server error",
"request_id": "req_example"
}
}{
"error": {
"code": "SERVICE_UNAVAILABLE",
"message": "Service unavailable.",
"request_id": "req_example"
}
}Get realized gains & losses
Returns proceeds, cost basis and realized gains or losses for the disposal period, with the calculation method.
curl --request GET \
--url https://api.entendre.finance/v1/reports/realized-gains \
--header 'X-API-Key: <api-key>'const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.entendre.finance/v1/reports/realized-gains', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.entendre.finance/v1/reports/realized-gains"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": [
{
"asset_type": "ETH",
"asset_record": "ast_507f1f77bcf86cd799439011",
"date_received": "2026-08-01T00:00:00Z",
"quantity": "100.00",
"remaining_quantity": "0.00",
"cost_basis": "100.00",
"currency": "USD",
"disposals": [
{
"sale_date": "2026-08-31T12:00:00Z",
"quantity_sold": "100.00",
"sale_price": "110.00"
}
]
}
],
"has_more": false,
"next_cursor": null,
"summary": {
"methodology": "per_unit_cost_basis_approximation",
"by_currency": [
{
"currency": "USD",
"total_proceeds": "11000.00",
"total_cost_basis": "10000.00",
"total_gain": "1000.00",
"short_term_gain": "1000.00",
"long_term_gain": "0.00",
"disposal_count": 1,
"sold_asset_count": 1
}
],
"currency": "USD",
"total_proceeds": "11000.00",
"total_cost_basis": "10000.00",
"total_gain": "1000.00",
"short_term_gain": "1000.00",
"long_term_gain": "0.00",
"disposal_count": 1,
"sold_asset_count": 1
}
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid path, query or request body.",
"request_id": "req_example"
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "Authentication is required.",
"request_id": "req_example"
}
}{
"error": {
"code": "FORBIDDEN",
"message": "Insufficient access to organization",
"request_id": "req_example"
}
}{
"error": {
"code": "RESOURCE_NOT_FOUND",
"message": "Resource not found",
"request_id": "req_example"
}
}{
"error": {
"code": "RATE_LIMITED",
"message": "Rate limit exceeded. Retry after 30s.",
"request_id": "req_example"
}
}{
"error": {
"code": "INTERNAL_ERROR",
"message": "Internal server error",
"request_id": "req_example"
}
}{
"error": {
"code": "SERVICE_UNAVAILABLE",
"message": "Service unavailable.",
"request_id": "req_example"
}
}Authorizations
Your organization API key. Some operations also need a key that is associated with a user; their pages say so.
Query Parameters
Any of these accounting period IDs. Omit to include all periods within the other filters.
Asset type filters (such as ETH, USDC). Omit to include every asset type.
Include totals across all matching pages, grouped by currency. If totals cannot be calculated, the request fails.
Maximum number of records to return.
1 <= x <= 100The next_cursor value from the previous page. Keep the other filters unchanged.
Filter by one or more legal entity IDs. Omit to include all authorized entities. An empty list is invalid.
100Legal entity ID (le_…).
Response
The request succeeded.
The records.
Show child attributes
Show child attributes
Whether another page is available.
Cursor for the next page, or null on the last page.
Present when summary=true. Totals cover all pages. Flat totals appear only for a single currency.
Show child attributes
Show child attributes