Accurendocs
Start free

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

terminal
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.

GET/v1/wallets

List the addresses you are watching

POST/v1/wallets

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.
response
{
  "address": "0x7a1c…4f9e",
  "label": "ledger",
  "watchingFrom": { "block": 44901772, "date": "2026-08-14" },
  "backfill": { "status": "running", "coverageGaps": [] }
}
DELETE/v1/wallets/{address}

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.

GET/v1/positions

Balances, multiplier, share equivalence, basis

currency string
Reporting currency. Defaults to your account setting.
wallet string
Limit to one address.
response
{
  "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"
    }
  ]
}
GET/v1/basis

Lots, disposals, and realised gains

token string
Filter to one token.
lotMatching string
Override the account rule: fifo, lifo, average, spec_id.
response
{
  "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.

GET/v1/events

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.
response
{
  "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
    }
  ]
}
GET/v1/multiplier

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.
response
{
  "token": "NVDAx",
  "changes": [
    { "block": 44901772, "date": "2026-08-14", "from": "1.0338", "to": "1.0341", "source": "chain_storage" }
  ],
  "coverage": { "from": "2025-11-14", "gaps": [] }
}
PATCH/v1/events/{id}

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.

POST/v1/exports

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.
response
{
  "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"
}
POST/v1/webhooks

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.

⌘I