Docs
Build on the engine, or run your own.
A short map of the HTTP API and where to start self-hosting. The full reference and architecture notes live in the repository.
OpenAPI reference Every route, request and response.Architecture Ingestors, pipeline, jobs and idempotency.Source & self-hosting Clone, configure, run with Docker.
API overview
JSON over HTTPS. Amounts and ids are decimal strings, never floats. Protected routes take Authorization: Bearer sk_… (an API key from the Reflex console) or the admin token. Never put either in a browser.
Status & events
Public- GET
/healthLiveness and version - GET
/v1/statusChains, lag, job counts, events in the last 24 h - GET
/v1/status/actionsAction catalog with param JSON schemas - GET
/v1/status/chainsConfigured chains (RPCs omitted) - GET
/v1/eventsStored events: chain, kind, actor, collectionId, tokenId, since, cursor - GET
/v1/events/streamServer-sent events, `event: chain-event`
Identity (Amplify)
Public, wallet-signed- POST
/v1/identity/challengeOne-time message for sign-in, link or unlink - POST
/v1/identity/sessionSigned challenge → 7-day session token - GET
/v1/identity/meSession owner (X-Session header) - POST
/v1/identity/linkSigned challenge + X handle → code to post - POST
/v1/identity/:id/verifyPost URL → verified - GET
/v1/identity/address/:addressLinked accounts of an address - GET
/v1/identity/x/:handleWallet of a verified handle
Core, DRIP & Quests
Public- GET
/v1/enjin/pools/:idNomination pool state, stake and members - GET
/v1/enjin/pools/:id/stakersStakers with sENJ, real ENJ and share - GET
/v1/drip/overviewDRIP wallets, projected split and schedule - GET
/v1/drip/historyRounds with transactions - GET
/v1/drip/rounds/:idOne round plus how to verify the draw - GET
/v1/pulse/questsLive quests - GET
/v1/pulse/leaderboardPoints leaderboard
Reflex
API key or admin token- GET · POST
/v1/triggersList and create triggers - POST
/v1/triggers/dry-runReplay stored events against a draft - POST
/v1/triggers/backtestBacktest a draft over a time window, limits applied - PATCH
/v1/triggers/:id/enabledEnable or disable - GET
/v1/jobsJobs by status and trigger - POST
/v1/jobs/:id/retry · cancel · resolveOperate the queue - GET
/v1/admin/*Signers, chains, keys, audit (admin scope)
Live event stream
Filter by chain and kinds; the stream sends a heartbeat every 25 seconds.
const es = new EventSource(
"https://your-engine/v1/events/stream?chain=enjin-matrix&kind=token.burned"
)
es.addEventListener("chain-event", (m) => {
const event = JSON.parse(m.data) // ChainEvent
})Self-hosting
- Postgres 16+ and Node 22+, or the Docker image.
- Set the engine env: database URL, admin token, session secret, the chains to index and your operator signers (keys stay in env or secret files, never in the database).
- Run migrations, start the engine, then this web app with
ENGINE_URLandWEB_SESSION_SECRET.
pnpm install
pnpm db:migrate
pnpm dev:engine # http://localhost:8080
pnpm dev:web # http://localhost:3000Non-custodial by construction. User actions are signed in user wallets. The engine only holds keys for project operator wallets you configure, and anything with an unknown outcome waits for a human.