Reference
API reference
A read-only REST API over your own position history. Every request needs a bearer token; no token carries a signing scope, because there is no signing path to scope.
Authentication
curl https://api.accuren.xyz/v1/positions \
-H "Authorization: Bearer $ACCUREN_API_KEY"Scopes, key rotation, and why agents get their own key are covered in Authentication.
Conventions
- Base URL
- https://api.accuren.xyz
- Amounts
- Decimal strings, never floats — a rounded basis is a wrong basis.
- Dates
- ISO 8601. A date means the day the event happened on chain.
- Provenance
- Every converted figure carries its rate, source, and rate date.
- Replays
- Changing a country rule rebuilds history; affected reads return 409 until it settles.
Wallets
Public addresses you are watching. Adding one starts live recording immediately, because multiplier history cannot be backfilled.
List the addresses you are watching
Watch a public address — no signature, no key
- address string
- Public address. Never a key or a seed phrase.
- label string
- Yours. Unlabelled addresses of your own look like a stranger's.
{
"address": "0x7a1c…4f9e",
"label": "ledger",
"watchingFrom": { "block": 44901772, "date": "2026-08-14" },
"backfill": { "status": "running", "coverageGaps": [] }
}Stop watching and delete the records derived from it
Positions
What you hold, what it is worth in real shares, and what it cost — in your reporting currency.
Balances, multiplier, share equivalence, basis
- currency string
- Reporting currency. Defaults to your account setting.
- wallet string
- Limit to one address.
{
"positions": [
{
"token": "NVDAx",
"balance": "120.0",
"multiplier": { "at": "1.0341", "from": "1.0000" },
"sharesEquivalent": "124.092",
"costBasis": "Rp 1,204,880,000",
"unreportedIncome": "Rp 46,180,000",
"encumbered": "40.0"
}
]
}Lots, disposals, and realised gains
- token string
- Filter to one token.
- lotMatching string
- Override the account rule: fifo, lifo, average, spec_id.
{
"token": "NVDAx",
"currency": "IDR",
"lots": [
{ "acquired": "2025-10-02", "qty": "80.0", "basis": "812,400,000", "rate": "15842" }
],
"accruedIncomeAddedToBasis": "46,180,000",
"lotMatching": "fifo"
}Events and history
The trail behind every figure — including the income events that have no transaction anywhere in your wallet.
Every event, income with no wallet transaction included
- type string
- e.g. income.multiplier_increase, collateral_post.
- from / to date
- ISO dates, inclusive.
- needsReview boolean
- Only events an ai label has not had confirmed.
{
"events": [
{
"id": "evt_9f21",
"block": 44901772,
"type": "income.multiplier_increase",
"token": "NVDAx",
"from": "1.0338",
"to": "1.0341",
"income": { "usd": "61.40", "idr": "988,724", "rate": "16103", "rateDate": "2026-08-14" },
"walletTransaction": null
}
]
}Multiplier history for a token, with coverage gaps
- token string
- Required.
- at date
- The value that applied on that date, not the value now.
- from date
- Start of a range.
{
"token": "NVDAx",
"changes": [
{ "block": 44901772, "date": "2026-08-14", "from": "1.0338", "to": "1.0341", "source": "chain_storage" }
],
"coverage": { "from": "2025-11-14", "gaps": [] }
}Confirm or correct a label; the correction is kept with the event
Exports and webhooks
Getting the record out, and hearing about it when something changes.
Generate a Koinly, CSV, or JSON export
- year number
- Tax year, using your configured year boundaries.
- format string
- koinly_csv, csv, json.
- currency string
- Reporting currency for every figure.
{
"id": "exp_9f21",
"rows": 148,
"warnings": [
"11 income events have no matching wallet transaction — included as dividend income"
],
"url": "https://app.accuren.xyz/exports/2026/exp_9f21.csv"
}Subscribe to risk and income events
- url string
- HTTPS endpoint. Deliveries are signed.
- events string[]
- Leave empty for everything.
Errors
Every failure returns a typed error with a code and a link to the page that explains it. Status codes, rate limits, and why a 409 is normal are in Errors and limits.