HomeMarketsPortfolioProtocolDocsAPISecurity
PUBLIC READ API

API reference

The Arcc Systems HTTP API is read-only. It exposes market state, account positions and protocol parameters for dashboards, analytics, integrations and monitoring. Transactions are always sent from a wallet directly to the contracts.

RESTJSONOpenAPI 3.1Version v1

Quickstart

Base URL: https://arcc.systems/api. Every value reflects live onchain state on Arc Testnet (chain 5042002). Amounts are decimal strings in token units, rates and ratios are decimal fractions (0.0363 = 3.63%).

curl -s https://arcc.systems/api/v1/market | jq
curl -s https://arcc.systems/api/v1/account/0xYourAddress | jq

Limits, CORS and caching

Rate limit180 requests per minute per client IP. Above that the API returns 429 with retry-after: 60.
CORSBrowser calls are accepted only from https://arcc.systems. Call the API from your backend, where CORS does not apply.
Market cache/v1/market is a shared snapshot refreshed at most every 10 seconds.
Parameters cache/v1/params is refreshed at most every 60 seconds.
Delayed dataIf the Arc RPC is throttling, /v1/market and /v1/params return the last good snapshot with "stale": true. asOf always gives the snapshot time.
Request IDsEvery response carries an x-request-id header and a requestId field. Include it when reporting a problem.
GET/health

Service health and Arc connectivity. Never cached.

oktrue when the API can reach Arc and the chain ID is 5042002. HTTP 200; otherwise 502.
chainId, pool, releaseVersionNetwork, Pool address and deployed release.
rpcRequests per RPC endpoint since the service started: ok, limited (throttled, moved to the next endpoint) and fail. Host names only; no URLs or keys.
GET/v1/meta

API version, release version, chain and Pool address.

{ "apiVersion": "v1", "releaseVersion": "0.5.0", "chain": { "name": "Arc Testnet", "chainId": 5042002 }, "pool": "0xcca1…aC06" }
GET/v1/assets

Assets known to the protocol, with address, decimals and role (supply-borrow or collateral).

GET/v1/market

Pool-wide market state.

totalAssetsUsdcUSDC supplied plus interest owed by borrowers, net of protocol reserves.
totalBorrowsUsdcOutstanding debt including accrued interest.
availableLiquidityUsdcUSDC that can be withdrawn or borrowed right now.
utilizationBorrowed / supplied, e.g. 0.72 = 72%.
supplyApr / borrowAprCurrent variable annual rates, simple (not compounded).
borrowCapUsdcPool-wide limit on total borrows.
protocolReservesUsdcInterest set aside for the protocol (reserve factor).
cumulativeBadDebtWrittenOffUsdcTotal debt ever written off from accounts with no collateral left.
cumulativeReservesUsedForBadDebtUsdcPart of that written-off debt covered by reserves; the rest reduced supplier balances.
pausedNew-risk actions (supply, collateral changes, borrow) are paused.
liquidationsPausedLiquidation emergency mode is active.
stale, asOfSnapshot freshness; see caching.
GET/v1/account/:address

One account's position, plus lifetime totals from onchain events. Never cached.

supplyUsdcCurrent supplied balance including earned interest.
debtUsdcCurrent debt including accrued interest; the amount needed to repay in full now.
healthFactorBelow 1 the position can be liquidated. "infinity" when there is no debt.
maxBorrowUsdBorrow power: collateral value × LTV.
collateralDeposited collateral per asset.
ledgerLifetime totals supplied, withdrawn, borrowed and repaid, and interest earned and paid (interestEarned = supply + withdrawn − supplied). null if the event scan is temporarily unavailable.
{
  "address": "0x78a6557D6ae06CD06f28FEDED8788497aBade9Ca",
  "supplyUsdc": "13.473429",
  "debtUsdc": "94.000383",
  "healthFactor": "174.254609154092489176",
  "maxBorrowUsd": "14700.0",
  "collateral": { "tWETH": "10.5" },
  "ledger": {
    "totalSuppliedUsdc": "14.473398",
    "totalWithdrawnUsdc": "0.999999",
    "totalBorrowedUsdc": "94.5",
    "totalRepaidUsdc": "0.5",
    "interestEarnedUsdc": "0.00003",
    "interestPaidUsdc": "0.000383",
    "basis": "lifetime, from onchain Supplied/Withdrawn/Borrowed/Repaid/Liquidated events",
    "lastBlock": 62787704
  },
  "requestId": "…"
}
GET/v1/params

Protocol parameters and addresses read live from chain. The docs use this endpoint.

contractsPool, Oracle, current rate model, Timelock, USDC and tWETH addresses.
rolesCurrent admin, guardian and treasury.
marketborrowCapUsdc, reserveFactor, closeFactor.
rateModelbaseRate, optimalUtilization (kink), slope1, slope2.
collateral[]Per asset: ltv, liquidationThreshold, liquidationBonus, supplyCap, totalDeposited, priceUsd (null if the feed is stale) and priceMaxAgeSeconds.
websiteLimitsLimits applied by the arcc.systems interface only, not by the contract.
GET/v1/status

Operational status: price feed freshness, current admins and the liquidation monitor. Never cached.

feeds[]Per asset: price, updatedAt, maxAge, stale, valid. Borrowing reverts while a feed is stale.
poolAdmin, oracleAdmin, timelockCurrent admin addresses and the Timelock.
monitorRead-only liquidation monitor: last scanned block and every account with debt, its health factor and whether it is liquidatable. It never sends transactions.
block, checkedAtChain head and time of this check.

Errors

{
  "error": "human-readable message",
  "code": "MACHINE_CODE",
  "requestId": "…"
}
400 INVALID_ADDRESSThe address is not a valid EVM address.
404 NOT_FOUNDUnknown path.
429 RATE_LIMITEDMore than 180 requests in a minute from your IP. Wait for retry-after seconds.
502 UPSTREAM_ERROREvery Arc RPC endpoint failed. Retry after a few seconds.
503 POOL_NOT_CONFIGUREDThe API has no Pool address configured.

Try the API

Choose an endpoint to send a live request.