Community Economy

APIs for community assets, tips, gifts, and settlements powered by the Shadow economy.

Community Assets

List assets

GET /api/economy/assets

Returns all community assets (badges, coupons, collectibles, etc.) owned by the current user.

const { assets } = await client.listCommunityAssets()
result = client.list_community_assets()
assets = result["assets"]

Get asset

GET /api/economy/assets/:grantId
const asset = await client.getCommunityAsset('grant-id')
asset = client.get_community_asset("grant-id")

Consume asset

POST /api/economy/assets/:grantId/consume
FieldTypeDescription
idempotencyKeystringUnique key for idempotency
const { grant } = await client.consumeCommunityAsset('grant-id', {
  idempotencyKey: 'unique-key',
})
result = client.consume_community_asset("grant-id", idempotencyKey="unique-key")

Lock / Unlock asset

POST /api/economy/assets/:grantId/lock POST /api/economy/assets/:grantId/unlock
FieldTypeDescription
idempotencyKeystringUnique key for idempotency
await client.lockCommunityAsset('grant-id', { idempotencyKey: 'key' })
await client.unlockCommunityAsset('grant-id', { idempotencyKey: 'key' })
client.lock_community_asset("grant-id", idempotencyKey="key")
client.unlock_community_asset("grant-id", idempotencyKey="key")

Revoke asset

POST /api/economy/assets/:grantId/revoke
FieldTypeDescription
idempotencyKeystringUnique key for idempotency
reasonstringReason for revocation
await client.revokeCommunityAsset('grant-id', {
  idempotencyKey: 'key',
  reason: 'Expired',
})
client.revoke_community_asset("grant-id", idempotencyKey="key", reason="Expired")

Tips

Send tip

POST /api/economy/tips
FieldTypeRequiredDescription
recipientUserIdstringYesTarget user ID
amountnumberYesTip amount
messagestringNoOptional message
context.kindstringNoContext type
context.idstringNoContext ID
idempotencyKeystringYesUnique key
const { tip } = await client.sendTip({
  recipientUserId: 'user-id',
  amount: 100,
  message: 'Great job!',
  idempotencyKey: 'unique-key',
})
result = client.send_tip(
    recipientUserId="user-id",
    amount=100,
    message="Great job!",
    idempotencyKey="unique-key",
)

List tips

GET /api/economy/tips
const { tips } = await client.listTips()
tips = client.list_tips()["tips"]

Gifts

Send gift

POST /api/economy/gifts
FieldTypeRequiredDescription
recipientUserIdstringYesTarget user ID
assetsarrayNoAssets to gift
currenciesarrayNoCurrencies to gift
messagestringNoOptional message
idempotencyKeystringYesUnique key
const { gift } = await client.sendGift({
  recipientUserId: 'user-id',
  currencies: [{ currencyCode: 'shrimp_coin', amount: 500 }],
  message: 'Happy birthday!',
  idempotencyKey: 'unique-key',
})
result = client.send_gift(
    recipientUserId="user-id",
    currencies=[{"currencyCode": "shrimp_coin", "amount": 500}],
    message="Happy birthday!",
    idempotencyKey="unique-key",
)

List gifts

GET /api/economy/gifts
const { gifts } = await client.listGifts()
gifts = client.list_gifts()["gifts"]

Settlements

List settlements

GET /api/economy/settlements
ParamTypeDescription
limitnumberMax results
offsetnumberPagination offset
const { settlements } = await client.listSettlements({ limit: 20 })
settlements = client.list_settlements(limit=20)["settlements"]

Settle available

POST /api/economy/settlements/settle

Initiates settlement of all available (pending) settlements.

const { settlements } = await client.settleAvailableSettlements()
result = client.settle_available_settlements()