Capability status
Exactly what is built, what is live, and what is not. Every endpoint, with how each claim was checked.
This page is the reason you can trust the rest of the documentation. Everything a LibertyNet API can do carries one of four labels, and no page anywhere is allowed to describe a capability as more finished than this table says it is.
| 구현됨 | 공개 엔드포인트에서 동작 중입니다. 지금 바로 호출할 수 있습니다. |
| 미연결 | 엔드포인트는 살아 있고 200을 반환하지만 데이터 소스가 연결되어 있지 않습니다. 0을 반환하며 그 사실을 명시합니다. |
| 테스트 중 | 코드가 있고 테스트도 통과하지만, 아직 공개적으로 제공되는 것은 없습니다. |
| 계획됨 | 설계됨, 미구현. 뒤에 아무것도 없습니다. |
Where these come from. The table below is derived from dev-portal/api-spec/status.json, the single machine-readable source that also drives the SDKs and the OpenAPI spec. A drift checker fails the build if a badge in the docs disagrees with it, so these cannot rot independently.
Last verified by direct endpoint probe: 2026-07-31.
Node discovery 구현됨
Public. No key, no signup, no rate limit to apply for.
| Endpoint | Status | Notes |
|---|---|---|
GET /health | 구현됨 | Liveness + registered node count. |
GET /nodes | 구현됨 | The full node table. |
GET /peers | 구현됨 | Plain text, one peer per line, for shell tooling. |
GET /api/v1/peers | 구현됨 | JSON envelope form. |
POST /api/v1/register | 구현됨 | A node announces itself. Signature checking is in grace mode. |
POST /api/v1/heartbeat | 구현됨 | Refreshes last_seen. |
Operator identity 구현됨
Signature-based login. There is no password in this system.
| Endpoint | Status | Notes |
|---|---|---|
POST /v1/auth/challenge | 구현됨 | Single-use, 300s TTL. |
POST /v1/auth/device-login | 구현됨 | Returns a 1-hour bearer session. |
GET /v1/operator/me/nodes | 구현됨 | Your bound nodes, with a computed online flag. |
Node ↔ operator binding 구현됨
The full double-signature handshake, with all four signatures re-verified atomically before a binding becomes ACTIVE.
| Endpoint | Status |
|---|---|
POST /v1/bindings/initiate | 구현됨 |
POST /v1/bindings/resolve | 구현됨 |
POST /v1/bindings/authorize | 구현됨 |
GET /v1/bindings/{id}/status | 구현됨 |
POST /v1/bindings/{id}/cancel | 구현됨 |
POST /v1/node/bindings/pending | 구현됨 |
POST /v1/node/bindings/{id}/accept | 구현됨 |
POST /v1/node/bindings/{id}/reject | 구현됨 |
Credits and evidence 미연결
These endpoints are live and return 200, but nothing is behind them.
GET /v1/operator/me/credits returns settled, pending and estimated all equal to 0, together with "source": "not_yet_wired". That zero is a placeholder, not a measurement — it does not mean you earned nothing, it means nothing is counting yet.
If you render these numbers, render the caveat. The SDKs enforce this: settledCredits() raises rather than hand you a zero that could be displayed as a balance. Use creditsRaw() when you want the envelope and its source field.
| Endpoint | Status | Behaviour today |
|---|---|---|
GET /v1/operator/me/credits | 미연결 | 200, all amounts 0, source: "not_yet_wired". |
GET /v1/operator/me/evidence | 미연결 | 200, count: 0, source: "not_yet_wired". |
Credits are a test unit. Not cash. Not redeemable. Not a claim on future value. This sentence appears next to every Credits number in this documentation and in the Dashboard, and it is not decoration.
Oracle 테스트 중
Genuinely different from "planned": the contracts exist and their suite passes. What is missing is a deployment.
| Component | Status | Notes |
|---|---|---|
EvidenceOracle | 테스트 중 | Solidity, 23/23 tests pass (libertynet-oracle/). Not deployed to any public network. |
PythPriceAdapter | 테스트 중 | Pull-mode adapter with freshness guard. Not deployed. |
GET /v1/oracle/price | 계획됨 | No HTTP read surface exists. |
POST /v1/oracle/report | 계획됨 | No HTTP submission surface exists. |
"Tests pass" and "deployed" are different claims, and merging them is one of the easiest ways for documentation to become false. There is no contract address to call, so oracle.price() in the SDKs raises with level: "testing" rather than "planned" — the distinction is real and worth preserving.
Not built 계획됨
No code, no endpoint, nothing to call. Listed so you can see the intended shape of the network, not so you can build against it.
| Area | Status | Why it is listed |
|---|---|---|
Agent wallet (create / session-key / transfer) | 계획됨 | Value transfer is outside the current scope. |
Intent trading (intent / quote / solve / pools) | 계획됨 | No endpoint, no matching engine. |
$LNT balance | 계획됨 | No token surface exists. |
There is no endpoint in this API that moves value. No wallet, no swap, no staking, no token transfer, no trading. That is a deliberate scope decision. If you find a page that suggests otherwise, it is a bug — please report it.
How to check this yourself
You do not have to take this page's word for it.
# Live, right now, no auth:
curl -s https://registry.libertynet.ai/health
curl -s https://registry.libertynet.ai/nodes | head -c 300
# The honesty marker on an unwired endpoint:
curl -s https://registry.libertynet.ai/v1/operator/me/credits
# → {"code": "NO_SESSION", "error": "missing bearer token"}
# (authenticate and you will get 200 with "source": "not_yet_wired")The SDK ships a live test that asserts this page is still true:
cd dev-portal/sdk/typescript && npm run test:liveIt fails if any identity on the live registry stops verifying — which would mean either the network or this documentation is wrong, and either is worth knowing immediately.
When a status changes
A capability's badge changes in the same commit that changes its behaviour, never before. Concretely, shipping something means: implement it, flip it in status.json, and let the drift checker confirm every page agrees. Announcing first and shipping later is how "Planned" quietly becomes "Active" in a reader's memory, and this project does not do it.
If an endpoint behaves differently from what this page claims, that is a bug worth reporting — the fix is the code or the badge, never the wording.