API and data model

Every staking endpoint with its method, path and permission key, the six database tables and their columns, and the enums the whole product turns on.

5 min readUpdated 3 September 2026api, reference, permissions, schema

Everything on this page is generated from the shipped route handlers and models. Permission keys are enforced server-side; a frontend screen that hides a button is convenience, the key on the endpoint is the control.

User endpoints

GET/api/staking/settings
The one fact an anonymous client needs to render the staking pages: which product is open for new stakes. A projection of the server's coerced settings, so the client's fallback for an absent answer equals the server's.

All under /api/staking. Authenticated unless marked public.

GET/api/staking/pool
Lists ACTIVE pools. Optional filters: token, minApr, maxApr, minLockPeriod.
GET/api/staking/pool/{id}
One pool with aggregate stats and the caller's own positions in it.
GET/api/staking/pool/{id}/analytics
Analytics for one pool over a timeframe.
GET/api/staking/position
The caller's positions, paginated. Filter by status or poolId.
POST/api/staking/position
Opens a position. Requires the invest_staking KYC feature. Rate limited to 5 per minute.
GET/api/staking/position/{id}
One position belonging to the caller.
GET/api/staking/position/{id}/earnings
Earning rows for one position. Filter by claimed status.
POST/api/staking/position/{id}/claim
Claims every unclaimed earning row on a position. Requires withdraw_staking. Rate limited to 10 per hour.
POST/api/staking/position/{id}/withdraw
Requests or performs an exit. Requires withdraw_staking. Behaviour depends on the lock state and the approval setting.
POST/api/staking/calculate-rewards
Reward calculator. Body takes amount and duration in days; returns a projection per eligible pool.
GET/api/staking/user/summary
The caller's staking summary — total staked, earnings, unclaimed, active positions, and a per-token breakdown.
GET/api/staking/user/earnings
The caller's earning history. Filter by claimed status, pool and timeframe.
GET/api/staking/statsauth: none
Public. Platform statistics: locked principal, active stakers, principal-weighted average APR.
GET/api/staking/landingauth: none
Public. Landing page payload — promoted pools, short-lock pools, coming-soon pools and activity.

/api/staking/stats counts ACTIVE and PENDING_WITHDRAWAL principal only. A position that has asked to leave but not yet settled is still locked capital; one that has completed or been cancelled has already been paid back. Every staking surface uses this definition, so the landing page, the user dashboard and the admin console agree.

On-chain product

POST/api/staking/real/quote
Quotes an on-chain stake: the floor, the gather fee, the customer's on-chain balance, the activation delay, the unbonding estimate and bound, the commission, the share price, the custody address, the validator count and the disclosure version. Nothing moves.
GET/api/staking/real/disclosure/:poolId
The pool's disclosure — generated from its rows, versioned by a hash of the material facts — with the five acknowledgements a stake requires, the territory warnings and the blocked territories.
POST/api/staking/position/:id/unstake
Requests an unstake, whole or by shares. Accepted at any time from ACTIVE, not cancellable; the share price freezes and rewards stop at the request. A partial request splits the row.
GET/api/staking/statements
The caller's monthly statements, newest first, without their content.
GET/api/staking/statements/:id
One statement with its CSV content, hash and a filename. Owner only.

The stake door POST /api/staking/position takes an on-chain pool with consent: { version, acknowledgements } and answers with the position and the quote it was placed against. Every on-chain door dispatches on the pool's venueSOLANA_NATIVE or LIDO_STETH — so the same requests serve both chains; a Lido quote additionally reports stakeLimitEth, stakingPaused and bunkerMode. The claim door answers an on-chain position with "unstake instead": rewards compound in the pool and are paid on exit.

Admin endpoints

All under /api/admin/staking.

Settings

GET/api/admin/staking/settingspermission: view.staking.settings
Every staking setting with defaults applied, plus protectedKeys, isSuperAdmin, a readiness report for on-chain staking, and counts of the positions each product holds open.
PUT/api/admin/staking/settingspermission: edit.staking.settings
Writes staking settings. Validates every value and refuses one it disagrees with, naming it. Super-Admin keys are refused with 403 for anyone else. stakingMode=REAL is refused while any requirement is missing; SYNTHETIC is refused while on-chain positions hold coins. The platform settings endpoint refuses every staking key by name.

Compliance

GET/api/admin/staking/compliancepermission: view.staking.settings
The fixed-rate territory gate: the configured block list, the list actually enforced, the recorded risk acknowledgement, and any territories the operator asked to unblock that are still blocked for want of one.
PUT/api/admin/staking/compliancepermission: edit.staking.settings
Saves the fixed-rate block list and optionally records or withdraws the Super Admin's acceptance of the risk statement. A code that is not an ISO-3166 code is refused by name.

Chains, wallets and validators (on-chain product)

All under /api/admin/staking. See Chains for what each screen does with them.

GET/api/admin/staking/chainpermission: view.staking.chain
Every supported chain with its network, staking wallet, activation record, derived jurisdiction rules, outstanding requirements and validator sets, plus the readiness report.
POST/api/admin/staking/chainpermission: create.staking.chain
Starts (or returns) the DRAFT activation record for a chain.
GET/api/admin/staking/chain/:idpermission: view.staking.chain
One activation with its rules, outstanding requirements and the operator statement text and version.
PUT/api/admin/staking/chain/:idpermission: edit.staking.chain
Updates the declaration. Refused on an ACTIVE or RETIRED record.
POST/api/admin/staking/chain/:id/activatepermission: edit.staking.chain
Activates the chain after every requirement passes, recording the Super Admin's acceptance of the statement by version, IP and user agent.
POST/api/admin/staking/chain/:id/pausepermission: edit.staking.chain
Pauses new stakes on the chain with a reason; exits continue.
POST/api/admin/staking/chain/:id/resumepermission: edit.staking.chain
Resumes new stakes after re-checking every requirement.
POST/api/admin/staking/chain/:id/retirepermission: edit.staking.chain
Retires the activation. Refused while any position under it holds coins. Super Admin only.
GET/api/admin/staking/walletpermission: view.staking.wallet
Lists the staking wallets. Key material is excluded at the query.
POST/api/admin/staking/walletpermission: create.staking.wallet
Creates the staking wallet for a chain. One per chain; Super Admin only; the vault must be unlocked.
GET/api/admin/staking/wallet/optionspermission: view.staking.wallet
The chains a wallet can be created for, with network and existing-wallet state.
GET/api/admin/staking/wallet/:idpermission: view.staking.wallet
One wallet with its pools, activation, open incidents and batches in flight.
PUT/api/admin/staking/wallet/:idpermission: edit.staking.wallet
Sets the gas reserve floor.
POST/api/admin/staking/wallet/:id/freezepermission: edit.staking.wallet
Freezes the wallet with a reason: it stops signing delegations and keeps signing exits. Super Admin only.
POST/api/admin/staking/wallet/:id/unfreezepermission: edit.staking.wallet
Unfreezes the wallet. Super Admin only.
GET/api/admin/staking/validator-setpermission: view.staking.validator
Lists validator sets with their members.
POST/api/admin/staking/validator-setpermission: create.staking.validator
Creates a set from vote accounts and evaluates it against the policy at once.
GET/api/admin/staking/validator-set/candidatespermission: view.staking.validator
Screens the network's validators against the policy, live. Query: chain=SOL, limit, includeFailing.
GET/api/admin/staking/validator-set/:idpermission: view.staking.validator
One set with members, last evaluation and the policy thresholds.
PUT/api/admin/staking/validator-set/:idpermission: edit.staking.validator
Updates name, status and members; a removed member is retired, not deleted; every pool on the set gets a new disclosure version.
POST/api/admin/staking/validator-set/:id/evaluatepermission: edit.staking.validator
Re-screens the set against the live network.
GET/api/admin/staking/batchpermission: view.staking.batch
Lists on-chain batches with their approved intent digest, hash and state.
GET/api/admin/staking/batch/:idpermission: view.staking.batch
One batch with its decoded intent and the positions and tranches it carries.
POST/api/admin/staking/batch/:id/retrypermission: edit.staking.batch
Makes an errored batch due on the runner's next tick. Signs nothing itself.
GET/api/admin/staking/incidentpermission: view.staking.incident
Lists incidents.
POST/api/admin/staking/incident/:id/acknowledgepermission: edit.staking.incident
Acknowledges an incident.
POST/api/admin/staking/incident/:id/resolvepermission: edit.staking.incident
Resolves an incident with a written resolution.
POST/api/admin/staking/reconcilepermission: edit.staking.incident
Runs the reconciler now. Opens and clears incidents; moves no coins.
GET/api/admin/staking/compliance/recordspermission: view.staking.settings
The compliance record: the fixed-rate gate, every activation with its derived rules, consent counts by version, statements and open incidents.
GET/api/admin/staking/compliance/consentspermission: view.staking.settings
Lists consents with user and pool (verbatim text excluded from the list).
GET/api/admin/staking/compliance/exportpermission: view.staking.settings
CSV export. Query kind=consents, activations or observations.
POST/api/admin/staking/position/:id/force-unstakepermission: edit.staking.position
Forces the unstake of an on-chain position, with a reason the holder is shown. The only admin action on an on-chain position; rewards to the request are still paid.

Operations (on-chain product)

GET/api/admin/staking/dashboard/realpermission: access.staking
The on-chain operations overview: per wallet the native balance, gas floor and book value delegated; per pool the share state, observer lag, validator verdict, commission held and realised, positions by state and the unbonding ladder; open incidents; batches in flight.
GET/api/admin/staking/earning/commissionpermission: view.staking.earning
The commission ledger for every on-chain pool: treasury shares and value, accrued at observations, realised to the platform's address, and the exit in progress.
GET/api/admin/staking/pool/:id/commissionpermission: view.staking.earning
One pool's commission ledger.
POST/api/admin/staking/pool/:id/commission-exitpermission: edit.staking.earning
Queues a commission exit: shares (omitted = all treasury shares). One open request per pool; refused while the wallet is frozen or the chain has no ecosystem master wallet to pay to.
POST/api/admin/staking/pool/:id/observepermission: edit.staking.pool
Runs the observers now. A window already observed writes nothing twice.
GET/api/admin/staking/pool/:id/tranchespermission: view.staking.pool
The pool's tranches — stake accounts or Lido shares — with their validator and observed value.
GET/api/admin/staking/pool/:id/observationspermission: view.staking.pool
The pool's observations, newest first. Query limit up to 500.
POST/api/admin/staking/incident/:id/reimbursepermission: edit.staking.incident
Reimburses a slashing incident up to the disclosed cap: amount (omitted = the whole remaining allowance), pro rata to the holders, from the Super Admin's ECO wallet, refused with the shortfall named when it cannot fund it.
GET/api/admin/staking/compliance/statementspermission: view.staking.settings
Lists monthly statements with the user (content excluded).
POST/api/admin/staking/compliance/statements/generatepermission: edit.staking.settings
Writes a period's missing statements now: period YYYY-MM, omitted = the previous month. Idempotent per user and period.

The pool routes understand the product: POST /api/admin/staking/pool in on-chain mode needs walletChain (SOL) with an ACTIVE activation, inherits the wallet, validator set and slashing policy, and refuses every fixed-rate term; PUT /api/admin/staking/pool/:id on an on-chain pool accepts name, description, icon, limits, status, intakeStatus and the commission — a decrease at once, an increase as pending with an effective date a notice period away, every holder notified.

Dashboard and reporting

GET/api/admin/staking/dashboardpermission: access.staking
The solvency console: maturity ladder, withdrawal queue, per-pool APR comparison and the per-asset ledger. Accepts timeRange of 24h, 7d or 30d.
GET/api/admin/staking/analyticpermission: access.staking
Staking analytics.
GET/api/admin/staking/activitypermission: view.staking.activity
The staking admin activity log.

Pools

GET/api/admin/staking/poolpermission: view.staking.pool
Paginated pool list for the data table.
GET/api/admin/staking/pool/allpermission: view.staking.pool
All pools, unpaginated.
POST/api/admin/staking/poolpermission: create.staking.pool
Creates a pool. Rejects a second ACTIVE pool for the same symbol and wallet type.
DELETE/api/admin/staking/poolpermission: delete.staking.pool
Bulk delete by IDs.
PUT/api/admin/staking/pool/statuspermission: edit.staking.pool
Bulk status change.
POST/api/admin/staking/pool/reorderpermission: edit.staking.pool
Sets the display order from an ordered list of IDs.
PUT/api/admin/staking/pool/reorderpermission: edit.staking.pool
Alternative reorder form.
GET/api/admin/staking/pool/{id}permission: view.staking.pool
One pool.
PUT/api/admin/staking/pool/{id}permission: edit.staking.pool
Updates a pool. Strips availableToStake; accepts capacityDelta as a signed change.
DELETE/api/admin/staking/pool/{id}permission: delete.staking.pool
Deletes a pool. Refused while it holds ACTIVE or PENDING_WITHDRAWAL positions.
PUT/api/admin/staking/pool/{id}/statuspermission: edit.staking.pool
Changes one pool's status.
GET/api/admin/staking/pool/{id}/analyticspermission: view.staking.pool
Pool analytics.
GET/api/admin/staking/pool/{id}/analytics/performancepermission: view.staking.pool
Detailed pool performance history.
GET/api/admin/staking/pool/{id}/positionpermission: view.staking.position
Positions in one pool, with computed rewards.

Positions

GET/api/admin/staking/positionpermission: view.staking.position
Paginated position list with computed rewards and earning detail.
GET/api/admin/staking/position/allpermission: view.staking.position
All positions.
PUT/api/admin/staking/position/{id}permission: edit.staking.position
Updates admin notes, or transitions to COMPLETED, CANCELLED or back to ACTIVE. Rejects any attempt to set economic fields.
PUT/api/admin/staking/position/bulkpermission: edit.staking.position
Bulk complete, cancel or withdraw, up to 100 positions, each in its own transaction.
PUT/api/admin/staking/position/statuspermission: edit.staking.position
Bulk status change.
DELETE/api/admin/staking/position/{id}permission: delete.staking.position
Deletes a position. Refused while ACTIVE or PENDING_WITHDRAWAL.
DELETE/api/admin/staking/positionpermission: delete.staking.position
Bulk delete by IDs.

Earnings and performance

GET/api/admin/staking/earningpermission: view.staking.earning
Aggregated platform earnings.
POST/api/admin/staking/earningpermission: create.staking.earning
Records a bookkeeping-only admin earning. Moves no money.
POST/api/admin/staking/earning/{id}/claimpermission: edit.staking.earning
Marks an admin earning row as claimed. A bookkeeping flag, not a payment.
POST/api/admin/staking/earning/distributepermission: create.staking.earning
One-off BONUS payout of an explicit amount, split pro-rata. One per pool per cycle.
POST/api/admin/staking/earnings/distributepermission: create.staking.earning
APR accrual catch-up. Credits only the outstanding delta. Supports dryRun and a positionIds subset of up to 100.
GET/api/admin/staking/performancepermission: view.staking.performance
Lists external pool performance records.
POST/api/admin/staking/performancepermission: create.staking.performance
Records external pool performance for a date. Future dates rejected.

/earning/distribute (singular) pays an explicit amount as a BONUS. /earnings/distribute (plural) runs the APR accrual engine and writes REGULAR rows. They are deliberately separate namespaces so they can never double-pay a period. Calling the wrong one is the most likely way to overpay a pool.

Tables

The six fixed-rate tables use UUID primary keys, timestamps and soft deletes. The on-chain product adds nine more, listed after them; those are not soft-deleted, because a key, a consent or an observation is a record that must not vanish from a console.

staking_pools

Column Type Notes
name string(191) 2–100 characters
token · symbol string(50) · string(10) Symbol drives all wallet routing
icon · description string(191) · text
walletType enum FIAT · SPOT · ECO
walletChain string(191) Required for ECO
mode enum SYNTHETIC · REAL. Set from stakingMode at creation, immutable afterwards; the engine that settles the pool's positions is chosen by this column. Every pool that existed before the column reads SYNTHETIC.
apr decimal(10,8) ≥ 0
lockPeriod integer ≥ 1 day
minStake · maxStake decimal(36,18) Max is nullable and must exceed min
availableToStake decimal(36,18) Live capacity
earlyWithdrawalFee · adminFeePercentage decimal(10,8) 0–100
status enum ACTIVE · INACTIVE · COMING_SOON
isPromoted · order boolean · integer Presentation
earningFrequency enum DAILY · WEEKLY · MONTHLY · END_OF_TERM
autoCompound boolean
externalPoolUrl · profitSource · fundAllocation · risks · rewards url · text x4 Disclosure copy, never read by logic

Positions are RESTRICT on delete; admin earnings and performance records cascade.

staking_positions

Column Type Notes
userId · poolId uuid
mode enum SYNTHETIC · REAL, snapshotted from the pool at stake time. The cron, settlement and every exit door read this, never the live setting.
amount decimal(36,18) Must be > 0
startDate · endDate datetime Start must precede end
status enum ACTIVE · COMPLETED · CANCELLED · PENDING_WITHDRAWAL
withdrawalRequested · withdrawalRequestDate boolean · datetime The date prices an early exit
adminNotes · completedAt text · datetime completedAt only valid on COMPLETED
apr · adminFeePercentage · earlyWithdrawalFee decimal(16,8), nullable Terms snapshotted at stake time. Null on legacy rows falls back to the live pool.
lastDistributionDate datetime, nullable The accrual watermark. Null is treated as startDate.

staking_earning_records

Column Type Notes
positionId uuid
amount double ≥ 0
type enum REGULAR · BONUS · REFERRAL
description string(191) Truncated by writers to fit
isClaimed · claimedAt boolean · datetime
periodBucket string(100), nullable Distribution-cycle key

Unique on (positionId, type, periodBucket). NULL buckets on legacy rows never collide because MySQL treats NULLs as distinct. REGULAR rows written by the accrual engine carry accrual_YYYY-MM-DD; bonus distributions carry poolId:frequency:LABEL:cycle. Nothing currently writes REFERRAL.

staking_admin_earnings

Column Type Notes
poolId uuid
amount · currency double · string(10) Currency mirrors the pool symbol
isClaimed boolean Bookkeeping acknowledgement only
type enum PLATFORM_FEE · EARLY_WITHDRAWAL_FEE · PERFORMANCE_FEE · OTHER
periodBucket string(100), nullable Unique with (poolId, type)

staking_external_pool_performances

poolId, date (not in the future), apr, totalStaked, profit, notes. Reference data — no engine reads it.

staking_admin_activities

userId (null for cron-driven actions), action (create · update · delete · approve · reject · distribute), type (pool · position · earnings · settings · withdrawal) and relatedId.

On-chain columns on staking_pools and staking_positions

staking_pools gains venue, activationId, stakingWalletId, validatorSetId, the share ledger (totalShares, sharePrice, onchainValue, lastObservedAt, lastObservedEpoch, trailingRewardRateBps), the protocol timings (activationDelaySeconds, unbondingEstimateSeconds, unbondingBoundSeconds), disclosureVersion, commissionEffectiveAt, pendingAdminFeePercentage, slashingPolicy, slashingReimburseCap and intakeStatus (OPEN · PAUSED). All nullable or defaulted; a fixed-rate pool never writes them.

staking_positions gains the on-chain states — PENDING_DELEGATION, UNSTAKE_REQUESTED, UNBONDING, WITHDRAWABLE, FAILED — beside the fixed-rate ones, makes endDate nullable (an on-chain position has no term), and adds consentId, shares, entrySharePrice, principalOnchain, the gather and return hashes and fees, the exit fields (unstakeRequestedAt, unstakeShares, unstakeSharePrice, unbondingEndsAt, unbondingBoundAt, settledAmount, settledAt), failureReason, forceUnstakedBy, forceUnstakeReason and the three batch foreign keys.

staking_earning_records gains settlement (CLAIMABLE · COMPOUNDED) and observationId. staking_admin_earnings.type gains STAKING_COMMISSION.

staking_chain_wallets

One per chain and network: chain, network, currency, address, data (the AES-256-GCM envelope, never returned), role (STAKING), status (ACTIVE · FROZEN), balance, gasReserveFloor, lastObservedAt, the freeze fields and createdBy.

staking_chain_activations

The legal record per chain and network: venue, status (DRAFT · ACTIVE · PAUSED · RETIRED), wallet and validator-set references, defaultCommissionPercent, commissionNoticeDays, slashingPolicy, slashingReimburseCap, the licensing declaration (licensed, regulator, licenceReference, jurisdictionsServed), the acknowledgements (ringFenceAcknowledged, noGuaranteeAcknowledged, sfcAttestation), validatorDueDiligence, and the acceptance (disclosureVersion, disclosureHash, disclosureText, acceptedBy, acceptedAt, acceptedIp, acceptedUserAgent), plus the pause and retire stamps.

staking_validator_sets and staking_validators

A set: chain, network, name, status, policy (the thresholds as JSON), lastEvaluatedAt, lastEvaluation, healthy. A member: voteAccount, identity, name, weight, commissionPercent, mevCommissionPercent, asn, status (ACTIVE · SUSPENDED · REMOVED), lastHealth, lastHealthAt, breach.

staking_tranches

A unit of delegated principal: kind (SOLANA_STAKE_ACCOUNT · LIDO_SHARES), stakeAccount, seed, validatorId, status (CREATING · ACTIVATING · ACTIVE · DEACTIVATING · INACTIVE · WITHDRAWN · FAILED), amount, observedValue, the activation and deactivation epochs, and the create, exit and withdraw batch references.

staking_batches

One on-chain operation: kind (GATHER · DELEGATE · EXIT · CLAIM · RETURN · REFUND · COMMISSION_EXIT · SWEEP), status (PENDING · BROADCAST · CONFIRMED · RETRYING · FAILED), stakingWalletId, intentDigest, intent, txHash (unique), networkFee, amount, attempts, lastError, broadcastAt, confirmedAt, createdBy.

staking_observations

What the network paid one pool for one window, unique on (poolId, window): epoch, observedAt, valueBefore, valueAfter, grossReward (signed), commissionAmount, commissionShares, netReward, sharePriceBefore, sharePriceAfter, totalShares, positionsCredited, detail.

staking_consents

What a user accepted, verbatim: userId, poolId, activationId, version, hash, text, acknowledgements, acceptedAt, ip, userAgent.

staking_statements

One per user per period: period, periodStart, periodEnd, format (CSV), content, hash, totalStaked, totalRewards, totalCommission, summary.

staking_commission_exits

The platform's own exit: poolId, chain, network, status (QUEUED · UNBONDING · SETTLED · PAID · FAILED), shares, requestSharePrice, requestedValue, settledAmount, settledAt, destination (the chain's ecosystem master wallet, named at request time), exitBatchId, payoutBatchId, txHash, networkFee, failureReason, requestedBy, requestedAt, paidAt. Settled from staking_pools.treasuryShares after every user exit ahead of it; the realised commission ledger.

staking_incidents

kind (SLASHING · DRIFT · LOW_GAS · VALIDATOR_BREACH · BATCH_STUCK · OBSERVER_LAG · UNBONDING_OVERDUE · DELEGATION_STALE · COMMISSION · OTHER), severity, status (OPEN · ACKNOWLEDGED · RESOLVED), title, detail, lossAmount, reimbursedAmount, dedupeKey, occurrences, firstSeenAt, lastSeenAt, and the acknowledge and resolve stamps.

Wallet and transaction types

Type Written when
STAKING Principal debited at stake time, and principal returned at settlement
STAKING_REWARD A user claims earnings

Idempotency keys used by the money paths: staking_create_<positionId> for the stake debit, staking_principal_return_<positionId> for the principal return (shared across every transition), and a hash of the claimed row IDs for a claim.

Permission keys

Key Guards
access.staking Admin overview, dashboard and analytics endpoints
access.staking.pool · view.staking.pool Pool screens and reads
create.staking.pool · edit.staking.pool · delete.staking.pool Pool writes
access.staking.position · view.staking.position Position screens and reads
create.staking.position · edit.staking.position · delete.staking.position Position writes, including withdrawal approval
access.staking.earning · view.staking.earning Earnings screen and reads
create.staking.earning · edit.staking.earning Both distribute endpoints, manual earnings, claiming
view.staking.performance · create.staking.performance External performance records
view.staking.activity Activity log
access.staking.settings · view.staking.settings · edit.staking.settings Staking settings screen, its read and its write. The mode key additionally needs the Super Admin role, re-checked per request. The compliance records and exports reuse view.staking.settings.
access.staking.chain · view.staking.chain · create.staking.chain · edit.staking.chain Chain activations. Activate and retire additionally need the Super Admin role.
access.staking.wallet · view.staking.wallet · create.staking.wallet · edit.staking.wallet Staking wallets. Create, freeze and unfreeze additionally need the Super Admin role.
access.staking.validator · view.staking.validator · create.staking.validator · edit.staking.validator Validator sets and the screened candidate list
access.staking.batch · view.staking.batch · edit.staking.batch The batch ledger and retry
access.staking.incident · view.staking.incident · edit.staking.incident Incidents and the reconciler

Key derivation and the places a key must exist are covered in Permissions.