curl --request GET \
--url https://api.entendre.finance/v1/reports/closing-positions \
--header 'X-API-Key: <api-key>'const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.entendre.finance/v1/reports/closing-positions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.entendre.finance/v1/reports/closing-positions"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": [
{
"token": "ETH",
"quantity": "100.00",
"cost_basis": "100.00",
"weighted_average_cost": "2500.00",
"current_price": "100.00",
"market_value": "100.00",
"unrealized_gain": "100.00",
"date": null
}
],
"has_more": false,
"next_cursor": null,
"total_count": 1,
"data_quality": {
"has_negative_positions": false,
"negative_positions": [],
"negative_position_count": 0,
"negative_market_value": "0.00",
"unmeasured_position_count": 0,
"warnings": []
}
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid path, query or request body.",
"request_id": "req_example"
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "Invalid or expired API Key",
"request_id": "req_example",
"suggested_action": "Send an API key in X-API-Key, or an OAuth access token as Authorization: Bearer. Refresh an expired access token.",
"documentation_url": "https://entendre.ai/docs/get-started/authentication"
}
}{
"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 closing positions
Returns end-of-period quantities, valuations and data-quality warnings.
curl --request GET \
--url https://api.entendre.finance/v1/reports/closing-positions \
--header 'X-API-Key: <api-key>'const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.entendre.finance/v1/reports/closing-positions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.entendre.finance/v1/reports/closing-positions"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": [
{
"token": "ETH",
"quantity": "100.00",
"cost_basis": "100.00",
"weighted_average_cost": "2500.00",
"current_price": "100.00",
"market_value": "100.00",
"unrealized_gain": "100.00",
"date": null
}
],
"has_more": false,
"next_cursor": null,
"total_count": 1,
"data_quality": {
"has_negative_positions": false,
"negative_positions": [],
"negative_position_count": 0,
"negative_market_value": "0.00",
"unmeasured_position_count": 0,
"warnings": []
}
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid path, query or request body.",
"request_id": "req_example"
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "Invalid or expired API Key",
"request_id": "req_example",
"suggested_action": "Send an API key in X-API-Key, or an OAuth access token as Authorization: Bearer. Refresh an expired access token.",
"documentation_url": "https://entendre.ai/docs/get-started/authentication"
}
}{
"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"
}
}as_of for a reporting date, or omit it for current positions.Authorizations
Your organization API key. See Authentication.
Query Parameters
Prefixed financial account IDs (fac_). Up to 100 IDs.
Asset types to include.
Source IDs to include.
Maximum number of records to return.
1 <= x <= 100The next_cursor value from the previous page. Keep the other filters unchanged.
Legal entities to include (le_…). Omit to include all.
100Legal entity ID (le_…).
Reporting date. Omit to return current positions.
"2026-08-31T12:00:00Z"
Include rows where quantity, cost_basis, market_value, and unrealized_gain are all zero. Default: true (include). Set to false to drop zero-balance positions.
true, false Output detail level. faithful (default) returns every field; compact drops cost_basis, weighted_average_cost, and current_price.
faithful, compact 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.
Total positions across all pages after filtering.
Checks all positions in the requested scope before pagination and fiat-row filtering. A clean filtered result does not certify the whole organization.
Show child attributes
Show child attributes