Menu
Documentation
API reference Reward object

Reward object

The complete reward resource, its status fields and its nullable transfer evidence.

A Reward preserves the original exact allocation and exposes a mutable projection of its approval and transfer state. Read and issuance HTTP responses wrap it in {data: Reward}.

Fields#

All top-level fields below are required in a reward response. Nullable fields are included with null until their value exists.

FieldTypeDescription
idStringOpaque Slices reward ID.
campaignIdStringCampaign that fixes the asset and controls.
recipientObjectwalletAddress, the normalized authorized earning wallet; verificationStatus: not_required, unverified, verified, expired or blocked; and verificationUrl, the link to the verification page while the recipient still has to verify, otherwise null.
assetObjectchainId, tokenAddress, symbol, and decimals.
amountBaseUnitsPositive integer stringOriginal exact net entitlement.
eventObjectThe original case-sensitive id and type.
sourceStringAlways partner_attested in this version.
statusEnumaccepted, queued, approved, sent, delivered, failed, or cancelled.
statusReasonString or nullWhy a reward is failed or cancelled: the wallet's error, the preflight message, or the close reason. Display it; do not branch on it.
payoutCampaignIdString or nullThe draft campaign the grant was queued into, once it was.
deliveredAmountBaseUnitsInteger string"0" or the full original amount; there is no partial delivery.
deliveryEvidenceObject or nullThe transfer Slices is tracking or has verified.
createdAtDate-time stringTime the instruction was accepted.
updatedAtDate-time stringTime the current Slices projection last changed.

Recipient verification#

recipient.verificationStatus explains a reward that stays accepted. not_required means the campaign's verification setting is off (the v1 default): the partner attested eligibility and the reward queued at once. unverified means the recipient has not yet proved control of the wallet and their location; expired means an earlier verification lapsed before approval and must be renewed; blocked means the recipient's location is outside the campaign's policy, and the reward cannot be queued until that changes. Only verified recipients enter a draft campaign.

While a reward is accepted with an unverified or expired recipient, recipient.verificationUrl carries the verification page for that wallet and campaign. Slices issues it when the reward is accepted, and again when a verification expires; it is null once the recipient is verified, when they are blocked, and on a cancelled reward. The link holds an unguessable token, so show it only to the authenticated user who owns that wallet. See Recipients.

Asset shape#

chainId is a positive JSON integer. tokenAddress is the approved contract address. symbol is a display label of 1–32 characters. decimals is an integer from 0 through 255; actual token support is determined by the approved profile.

Use chain ID and contract address together for asset identity. Decimal metadata does not change the stored base-unit amount.

Delivery evidence#

deliveryEvidence is null until a transaction hash is known. It is populated while the reward is sent, complete when it is delivered, and carries the reverted hash with logIndex: null when a sent transfer failed onchain. When non-null it contains all of these fields:

FieldTypeDescription
transactionHash32-byte hex stringThe transfer transaction the operator's wallet sent.
blockNumberInteger string or nullBlock height, preserved without number coercion; null until the transaction is included.
blockHash32-byte hex string or nullBlock identity used for finality and canonical-inclusion checks.
confirmationsInteger string or nullConfirmations observed at checkedAt.
finalityEnuml2_included, l2_finalized, or unknown.
logIndexInteger or nullIndex of the verified Transfer log within the receipt; null until verified.
checkedAtDate-time stringWhen Slices last checked this transaction against the chain.

The evidence is one transfer receipt for one reward. It is not a current wallet balance and not a complete standalone proof bundle; the API does not expose every preflight and reconciliation record as a field on Reward.

Immutability and corrections#

The original campaign, recipient, amount, asset, and event do not change after acceptance. status, statusReason, payoutCampaignId, deliveredAmountBaseUnits and deliveryEvidence change as work progresses. A retry after a failed attempt keeps the same reward and replaces the evidence with the new attempt's transaction.

A correction to evidence is not a new reward instruction and does not authorize a second transfer. Keep the ID and historical records rather than treating a status change as a new payable event.

Common interpretation errors#

source: partner_attested does not mean Slices independently verified the activity. payoutCampaignId does not mean the operator approved the draft. status: sent is not delivered; the receipt has not been verified yet. status: failed is not final in the way cancelled is: the operator may retry. updatedAt does not prove chain freshness; deliveryEvidence.checkedAt does.

Related: Reward states, Get a reward, and Approval and sending.