Call this every time the user performs a trackable action in your app (post, like, share, comment, watch, NFT create, tip). The server builds a recordAction(address,uint8,uint256,bytes32) calldata targeting the EngagementOracle contract, signs with the provided key, and submits the tx to the mempool. A tx hash is returned immediately.

Request

Fields

string
required
Acting user’s address.
string
required
One of post, like, share, comment, watch, nft_create, tip.
string
required
Opaque string identifying the content acted upon (hashed to bytes32 on-chain).
object
Device context used for the quality signal (see Engagement Score).
integer
Unix seconds. Used to flag clock skew; the canonical timestamp is still the block’s.
string
deprecated
Ignored. Older builds required this; the indexer now always relays via the oracle wallet, so the field is no-op and safe to omit. Do not ship user private keys in app builds.
Prefer POST /api/mobile/engagement-onbehalf for clarity — it documents the no-private-key contract explicitly and has the same semantics.

Action weights

Response — 200 OK

Poll eth_getTransactionReceipt or /api/mobile/actions/:address to watch it move to confirmed.

Example

The indexer ALWAYS signs recordAction(user, actionType, weight, targetId) with the authorized oracle wallet (EngagementOracle.recordAction is onlyOracle). The user’s address is attributed inside the calldata, not the tx signer. App teams do not need — and should not handle — user private keys for engagement.