Endpoints
Quick summary
This is a route finder, not a full introduction. Choose the API group by task, then check the required authorization and whether the route exists on Worker, Axum, or both.
The authoritative route inventory is maintained separately in the contract map; do not infer cross-backend parity from a path name alone.
The route-by-route inventory with per-route auth and parity notes lives in api-contract-map — the dispatch table in be-cloudflare/src/lib.rs is the source of truth and the map is maintained against it. This page is the orientation layer: the surfaces, and the rows most callers actually need.
Surface map
| Surface | Base | Auth default | Where documented |
|---|---|---|---|
| Platform REST | /api/v1/** | role-scoped (public paths marked) | contract map §1 |
| License PoP plane | /api/v1/licenses/{activate,capability,execute,status} | entitlement + DPoP, LICENSE_SECURITY_ENABLED-gated, Worker only | contract map §1, Licensing |
| Public embed | /api/v1/public/** | none — never send credentials | below, SDK |
| Health | /api/v1/health | public | {ok, request_id} (ok = D1 binding present) |
The integration surface (d3 parity — both backends)
| Method | Path | Auth | Notes |
|---|---|---|---|
GET | /api/v1/public/integrations/:public_id | public | IntegrationManifest — public projection of the integration record |
POST | /api/v1/public/integrations/:public_id/donations | public | {donor_name?, message?, amount_krw, idempotency_key?} → 201 SandboxDonation; amount_krw positive integer |
POST | /api/v1/public/integrations/:public_id/feedbacks | public | {author_name?, type?, message} → 201 Feedback |
GET | /api/v1/projects/:id/integration | seller | {integration, manifest} or 404 |
PUT | /api/v1/projects/:id/integration | seller | IntegrationInput; upsert |
GET | /api/v1/projects/:id/donations | seller | {items:[SandboxDonation]} |
Hosted page (FE): {site}/h/{public_id} (fe/pages/h/[publicId].vue).
License endpoints — quick table
| Method | Path | Auth | Notes |
|---|---|---|---|
POST | /licenses | seller | issue (lic_ + NG-… key) |
GET | /licenses | seller/admin | scoped list — keys not exposed |
PATCH | /licenses/:id | seller(owner) | status/expires_at |
POST/DELETE | /licenses/:id/activations[/:device] | seller(owner) | legacy device_id records, display only |
POST | /licenses/verify | public | lookup verdict; does not consume slots |
POST | /licenses/activate | key | PoP — Worker only |
POST | /licenses/capability | entitlement+DPoP | Worker only |
POST | /licenses/execute | entitlement+DPoP+capability | Worker only |
GET | /licenses/status | entitlement+DPoP | Worker only |
GET | /licenses/:id/bindings | seller | PoP bindings (Worker) |
GET | /licenses/:id/usage | seller | usage log + counters (Worker) |
Seller durable-read & ops endpoints (Worker)
GET /usage-counters[?lic_id=] · GET /security-events[?lic_id=] · GET /seller/events · GET /dashboard/stats — all tenant-scoped.
Admin endpoints
GET /admin/users · PATCH /admin/users/:id/status · GET /admin/overview · GET /admin/sellers · GET /admin/verifications · GET /admin/audit · GET /metrics · GET /ledger/verify · GET /audit/verify · POST /admin/reconciliation/run · GET /admin/reconciliation/reports[/:id] — all admin role.
Checkout & commerce
POST /checkout (idempotent) · POST /checkout/confirm · POST /webhooks/toss (signature-verified, refetch-authoritative) · GET /orders[/:id] · POST /orders/:id/refund · GET /orders/:id/refund-attempts · GET /payments/:id · POST /purchase/game-item · POST /fulfillments/:id/retry · GET|POST /settlements · GET /subscriptions · POST /subscriptions/:id/event — details in Payments and the contract map.
Parity notes
activate/capability/execute/status,bindings,usage,usage-counters,security-events,admin/reconciliation/*— Worker-only; Axumbe/has no PoP plane and lacks the durable-read APIs./projects/:id/integration+/public/integrations/*— both backends since the d3 port.- The FE client does not call the security-plane routes — contract exists server-side only.