Skip to content
Substreak

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.

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

  1. Postgres 16+ and Node 22+, or the Docker image.
  2. 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).
  3. Run migrations, start the engine, then this web app with ENGINE_URL and WEB_SESSION_SECRET.
pnpm install
pnpm db:migrate
pnpm dev:engine   # http://localhost:8080
pnpm dev:web      # http://localhost:3000

Non-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.