API reference

API reference

Every endpoint in API version 0.1.0, generated from the published OpenAPI 3.1 document at /v1/openapi.json.

All endpoints except /v1/health and /v1/openapi.json need an API key with the listed scope. Fields marked * are required. The same schemas generate server validation and the TypeScript client.

Service

Service and database health

GET/v1/healthNo key required
Response field (200)TypeDescription
oktrue
datasetobject

Responses: 200

curl -s "https://api.corpact.example/v1/health"

Assets

Supported mints and their verification status

GET/v1/assetsScope: assets:read
Response field (200)TypeDescription
assetsobject[]

Responses: 200, 400, 401, 403, 404, 429

curl -s "https://api.corpact.example/v1/assets" \
  -H "authorization: Bearer $CORPACT_API_KEY"

Wallets

Register a wallet to the caller's tenant and request an idempotent historical sync

POST/v1/wallets/syncScope: wallets:sync
Body fieldTypeDescription
owner *stringSolana wallet address (base58)
Response field (202)TypeDescription
ownerstring
registration"registered" | "already_registered"Whether this request added the wallet to the caller's tenant
status"queued" | "running"
job"enqueued" | "already_pending"

Responses: 202, 400, 401, 403, 404, 429

curl -s -X POST "https://api.corpact.example/v1/wallets/sync" \
  -H "authorization: Bearer $CORPACT_API_KEY" \
  -H 'content-type: application/json' \
  -d '{"owner":"<wallet address>"}'

Wallets registered to the caller's tenant

GET/v1/walletsScope: ledger:read
Response field (200)TypeDescription
tenantstring
maxWalletsinteger
walletsobject[]

Responses: 200, 400, 401, 403, 404, 429

curl -s "https://api.corpact.example/v1/wallets" \
  -H "authorization: Bearer $CORPACT_API_KEY"

Progress and result of the latest sync

GET/v1/wallets/{owner}/statusScope: ledger:read
ParameterInTypeDescription
owner *pathstringSolana wallet address (base58)
Response field (200)TypeDescription
syncobject | null

Responses: 200, 400, 401, 403, 404, 429

curl -s "https://api.corpact.example/v1/wallets/<owner>/status" \
  -H "authorization: Bearer $CORPACT_API_KEY"

Ledger

Positions, dividend income, convertible exposure and coverage for a wallet

GET/v1/portfolioScope: ledger:read
ParameterInTypeDescription
owner *querystringSolana wallet address (base58)
Response field (200)TypeDescription
ownerstring
datasetobject
asOfSlotstring | null
asOfTimestring | null
dataStatusobject | null
valuationStatusstring
coverageobject
totalsobject
positionsobject[]

Responses: 200, 400, 401, 403, 404, 429

curl -s "https://api.corpact.example/v1/portfolio?owner=<owner>" \
  -H "authorization: Bearer $CORPACT_API_KEY"

Dividend, split and unclassified entries, newest first

GET/v1/incomeScope: ledger:read
ParameterInTypeDescription
owner *querystringSolana wallet address (base58)
limitqueryintegerDefault 50. Range 1–200.
offsetqueryintegerDefault 0. Range 0–….
Response field (200)TypeDescription
ownerstring
datasetobject
entriesobject[]
nextOffsetinteger | null

Responses: 200, 400, 401, 403, 404, 429

curl -s "https://api.corpact.example/v1/income?owner=<owner>" \
  -H "authorization: Bearer $CORPACT_API_KEY"

One entry with its chain, classification and issuer evidence

GET/v1/income/{id}Scope: ledger:read
ParameterInTypeDescription
owner *querystringSolana wallet address (base58)
id *pathstring
Response field (200)TypeDescription
idstring
ownerstring
mintstring
kind"dividend" | "split" | "unclassified_adjustment"
quantitystring
quantityDisplaystring
symbolstring
usdstring | null
valuation"issuer_net_cash" | "market_estimate" | null
warningsstring[]
reasonsstring[]
headlinestring
effectiveAtstring
revisionintegerRange 1–….
correctedAtstring | null
historyobject[]Every recognition and reversal of this entry, oldest first
evidenceobject

Responses: 200, 400, 401, 403, 404, 429

curl -s "https://api.corpact.example/v1/income/<id>?owner=<owner>" \
  -H "authorization: Bearer $CORPACT_API_KEY"

Income and share yield per window, and trailing net distribution per share, with coverage

GET/v1/yieldScope: ledger:read
ParameterInTypeDescription
owner *querystringSolana wallet address (base58)
Response field (200)TypeDescription
ownerstring
datasetobject
definitionsobject
positionsobject[]

Responses: 200, 400, 401, 403, 404, 429

curl -s "https://api.corpact.example/v1/yield?owner=<owner>" \
  -H "authorization: Bearer $CORPACT_API_KEY"

CSV export: the append-only journal (default) or current income entries, with confidence fields

GET/v1/exportScope: ledger:read
ParameterInTypeDescription
owner *querystringSolana wallet address (base58)
datasetquery"journal" | "income"Default "journal".

Responses: 200, 400, 401, 403, 404, 422, 429

curl -s "https://api.corpact.example/v1/export?owner=<owner>" \
  -H "authorization: Bearer $CORPACT_API_KEY"

Append-only audit trail: every recognition and reversal of income, newest first

GET/v1/journalScope: ledger:read
ParameterInTypeDescription
owner *querystringSolana wallet address (base58)
limitqueryintegerDefault 50. Range 1–200.
offsetqueryintegerDefault 0. Range 0–….
Response field (200)TypeDescription
ownerstring
datasetobject
entriesobject[]
nextOffsetinteger | null

Responses: 200, 400, 401, 403, 404, 429

curl -s "https://api.corpact.example/v1/journal?owner=<owner>" \
  -H "authorization: Bearer $CORPACT_API_KEY"

Operations

Monitoring checks with thresholds (PLAN §14)

GET/v1/ops/statusScope: ops:read
Response field (200)TypeDescription
status"ok" | "warn" | "critical"
checkedAtstring
checksobject[]

Responses: 200, 400, 401, 403, 404, 429

curl -s "https://api.corpact.example/v1/ops/status" \
  -H "authorization: Bearer $CORPACT_API_KEY"

Prometheus metrics (scrape with the key as a bearer token)

GET/v1/ops/metricsScope: ops:read

Responses: 200, 400, 401, 403, 404, 429

curl -s "https://api.corpact.example/v1/ops/metrics" \
  -H "authorization: Bearer $CORPACT_API_KEY"

actions

Every corporate-action type, its ledger treatment, real-instance count and validation status

GET/v2/taxonomyScope: ledger:read
Response field (200)TypeDescription
kindsobject[]

Responses: 200, 400, 401, 403, 404, 429

curl -s "https://api.corpact.example/v2/taxonomy" \
  -H "authorization: Bearer $CORPACT_API_KEY"

Corporate actions applied to a wallet, newest first: type, treatment, lifecycle state, evidence and validation status

GET/v2/actionsScope: ledger:read
ParameterInTypeDescription
owner *querystringSolana wallet address (base58)
limitqueryintegerDefault 50. Range 1–200.
offsetqueryintegerDefault 0. Range 0–….
Response field (200)TypeDescription
ownerstring
datasetobject
actionsobject[]
nextOffsetinteger | null

Responses: 200, 400, 401, 403, 404, 429

curl -s "https://api.corpact.example/v2/actions?owner=<owner>" \
  -H "authorization: Bearer $CORPACT_API_KEY"

One corporate action with its full lifecycle, distinct timestamps, every issuer revision, chain evidence, journal history and lineage

GET/v2/actions/{id}Scope: ledger:read
ParameterInTypeDescription
owner *querystringSolana wallet address (base58)
id *pathstring
Response field (200)TypeDescription
idstring
mintstring
symbolstring
effectiveAtstring
type"cash_dividend" | "withholding_adjustment" | "stock_dividend" | "cash_and_stock_dividend" | "forward_split" | "reverse_split" | "unit_split" | "cash_in_lieu" | "spin_off" | "rights_distribution" | "stock_merger" | "cash_merger" | "mixed_merger" | "identity_change" | "redemption" | "delisting" | "seizure" | "unknown"
treatment"income" | "quantity_basis" | "basis_allocation" | "identity" | "not_booked"income: units added are income. quantity_basis: units rescaled, basis spread across them. basis_allocation: units added are principal bought with distributed value. identity: same position in a new underlying form. not_booked: recognised, not booked; conversion disabled
validationobject
lifecycleobject
quantitystringUnits added (negative: removed). Zero for an ordinary split
quantityDisplaystring
factorstring | nullNew units per old unit, for splits, stock dividends and identity changes
distributedFractionstring | nullShare of the position's value delivered by a spin-off or rights distribution: (M_new − M_old) ÷ M_new
usdstring | nullIncome value; only for income. Null means unknown, never zero
proceedsUsdstring | nullIssuer proceeds for a distribution, when published and plausible. Never income
valuation"issuer_net_cash" | "market_estimate" | null
retentionRatestring | nullA currency retention the issuer published in its withholding field; not tax, already reflected in net cash
refundNotestring | nullFor a withholding refund: the issuer's explanation
underlyingobject | null
headlinestring
warningsstring[]
reasonsstring[]
revisionintegerRange 1–….
correctedAtstring | null
evidenceobject
ownerstring
datasetobject
timestampsobject
historyobject[]Every recognition and reversal of this action, oldest first
lineageobject | nullThe lineage link this action wrote, for identity changes

Responses: 200, 400, 401, 403, 404, 429

curl -s "https://api.corpact.example/v2/actions/<id>?owner=<owner>" \
  -H "authorization: Bearer $CORPACT_API_KEY"

A mint's recorded identities, the lineage links between them, and where the basis of its earliest identity is now

GET/v2/instruments/{mint}/lineageScope: ledger:read
ParameterInTypeDescription
mint *pathstringToken mint address (base58)
Response field (200)TypeDescription
mintstring
datasetobject
identitiesobject[]
linksobject[]Append-only; a corrected link names the link it supersedes
currentobject[]Where the basis of the earliest recorded identity is now, traced through every link that is not superseded. Empty when no identity change is recorded

Responses: 200, 400, 401, 403, 404, 429

curl -s "https://api.corpact.example/v2/instruments/<mint>/lineage" \
  -H "authorization: Bearer $CORPACT_API_KEY"