Arkena Docs

REST API overview

A category-level tour of the Arkena backend, with example calls per category.

The Arkena backend exposes a REST API at https://api.arkena.io (with a same-origin proxy from arkena.io itself for browser-based dApps). This page describes the API by capability — the surface most dApps reach for in the first week.

A full per-endpoint reference, generated from OpenAPI, is in development. Until it ships, this overview plus the route table on the running server is the canonical source.

Authentication

Most endpoints require a SIWC JWT attached as Authorization: Bearer <token>. Public read endpoints (collection listings, NFT detail) don't require a token. See Sign-In with Canton.

EndpointPurpose
POST /api/auth/nonceIssue a structured message to sign
POST /api/auth/verifyVerify the signature, issue a JWT
GET /api/auth/meReturn the partyId attached to the current JWT
POST /api/auth/logoutInvalidate the current JWT

NFT category

Read and modify NFT state. All write paths follow prepare/execute. NFT operations flagged "atomic" use a single signed action that fans out into multiple on-chain effects (e.g. price + ownership + fee splits all in one step).

EndpointPurpose
GET /api/nft/collectionsPaginated list of collections
GET /api/nft/slug/{slug}Collection by slug
GET /api/nft/collection/{id}/nftsNFTs in a collection (paginated, filterable)
GET /api/nft/token/{contractId}NFT detail with traits and history
POST /api/nft/mint/atomic/prepare + /executeMint from an active phase
POST /api/nft/mint/batch/atomic/prepare + /executeBatch mint (multiple items in one signature)
POST /api/nft/list/prepare + /executeList for sale
POST /api/nft/list/{cid}/cancel/prepare + /api/nft/list/cancel/executeCancel a listing
POST /api/nft/list/batch/atomic/prepare + /executeList many in one signature
POST /api/nft/listing/batch/cancel/prepare + /executeCancel many listings in one signature
POST /api/nft/buy/atomic/prepare + /executeBuy a listed NFT (atomic settlement)
POST /api/nft/sweep/buy/prepare + /executeMulti-item sweep across a collection
POST /api/nft/transfer/prepare + /executeDirect transfer
POST /api/nft/burn/prepare + /executeBurn

Example — fetch collections:

Code
curl https://api.arkena.io/api/nft/collections

Swap category

Submit, cancel, and observe swap intents. Pool aggregates and history queries live here too.

EndpointPurpose
GET /api/swap/quoteIndicative quote (oracle-priced, non-binding)
POST /api/swap/preparePrepare a swap intent
POST /api/swap/intent/submitSubmit the signed intent
POST /api/swap/intent/cancel/prepare + /executeCancel a pending intent
GET /api/swap/intent/status?intentCid={cid}Status polling
GET /api/swap/intent/active?taker={party}List the user's open intents
GET /api/swap/pool/{poolId}Pool detail
GET /api/swap/pool/{poolId}/aggregatesTVL, LP count, accrued fees, depth-weighted spread
GET /api/swap/pool/{poolId}/outcomesRecent swap receipts on this pool
GET /api/swap/history?taker={party}The user's swap history
GET /api/swap/pool/{poolId}/historyPer-pool swap history

LP quotes

EndpointPurpose
POST /api/swap/lp-quote/prepare + /executePublish an LP quote
POST /api/swap/lp-quote/cancel/prepare + /executeCancel an LP quote
GET /api/swap/lp-quote/active?lp={party}List the LP's active quotes
POST /api/swap/lp-quote/claim-fees/prepare + /executeClaim accrued fees

Wallet category

Read and write user-scoped state.

EndpointPurpose
GET /api/wallet/balance/{partyId}Multi-token balance (CC + USDCx)
GET /api/wallet/utxo-count/{partyId}UTXO fragmentation telemetry
POST /api/wallet/cc-transfer/prepare + /executeCC transfer
POST /api/wallet/nft-preapproval/prepare + /executeOne-time consent to receive NFTs
POST /api/wallet/usdcx-preapproval/prepare + /executeOne-time consent to receive USDCx
POST /api/wallet/preapproval/renewRenew an existing receive-preapproval
GET /api/wallet/rewards/{partyId}Reward balance
GET /api/wallet/rewards/{partyId}/historyReward history

Pagination, errors, rate limits

Pagination. Most list endpoints use cursor-based pagination. Each response includes a cursor field; pass it as ?cursor=... on the next call. Page size defaults to 20.

Errors. Uniform JSON shape, full table in Error codes.

Rate limits. Default 300 requests per minute per origin for read endpoints; 60 per minute for prepare endpoints. Hit the limit and you'll get 429 with a Retry-After header.

What's next