Skip to main content

Documentation Index

Fetch the complete documentation index at: https://podium.build/docs/llms.txt

Use this file to discover all available pages before exploring further.

Overview

Users are end consumers within an organization. They browse products, earn points, follow creators, collect rewards, and manage wallets. Every user belongs to a single organization (your tenant) and is uniquely identified by a CUID2 id. Users are created through Privy authentication — when a user signs in via email, Google, or wallet, the Podium backend creates a User record linked to their Privy identity.

Create a User

curl -X POST https://api.podium.build/api/v1/user \
  -H "Authorization: Bearer $PODIUM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "jane@example.com",
    "privyId": "did:privy:abc123",
    "walletAddress": "0x742d35Cc6634C0532925a3b844Bc9e7595f2bD18"
  }'

Request Body

FieldTypeRequiredDescription
emailstringYesValid email address
privyIdstringYesPrivy DID (did:privy:...)
walletAddressstringNoInitial ETH wallet address
walletIdstringNoPrivy wallet ID for embedded wallets

Response

{
  "id": "clxyz1234567890",
  "email": "jane@example.com",
  "username": null,
  "avatarUrl": null,
  "bio": null,
  "city": null,
  "state": null,
  "emailVerified": false,
  "createdAt": "2026-03-07T12:00:00.000Z",
  "updatedAt": "2026-03-07T12:00:00.000Z",
  "wallets": [
    {
      "address": "0x742d35Cc6634C0532925a3b844Bc9e7595f2bD18",
      "type": "EXTERNAL"
    }
  ],
  "socialProfiles": [],
  "interests": []
}

Update a User Profile

curl -X PATCH https://api.podium.build/api/v1/user/clxyz1234567890 \
  -H "Authorization: Bearer $PODIUM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "username": "jane_doe",
    "bio": "Clean beauty enthusiast",
    "avatarUrl": "https://cdn.example.com/avatar.jpg",
    "categoryIds": [1, 3, 7],
    "socialProfiles": [
      { "platform": "INSTAGRAM", "url": "https://instagram.com/jane_doe" },
      { "platform": "TIKTOK", "url": "https://tiktok.com/@jane_doe" }
    ]
  }'

Request Body

FieldTypeRequiredDescription
usernamestringNoUnique handle
biostring | nullNoBiography text
avatarUrlstring | nullNoValid URL for profile image
categoryIdsnumber[]NoInterest category IDs
socialProfilesarrayNoSocial platform links
All fields are optional — only include fields you want to update. Pass null to clear a field.

Lookup by Privy ID

Resolve a Privy DID to a Podium user. This is the primary way to link Privy-authenticated sessions to Podium user records.
curl https://api.podium.build/api/v1/user/privy/did:privy:abc123/profile \
  -H "Authorization: Bearer $PODIUM_API_KEY"

Wallets

Each user can have multiple wallets from different providers.

Wallet Types

ProviderDescriptionUse Case
Privy embeddedAuto-created on login, user-controlledConsumer payments, reward redemption
Privy serverPlatform-managed for automated operationsAgent-initiated x402 payments, minting
ExternalUser’s own self-custodied wallet addressDirect USDC transfers, existing Web3 users

List Wallets

curl https://api.podium.build/api/v1/user/clxyz1234567890/wallets \
  -H "Authorization: Bearer $PODIUM_API_KEY"
[
  {
    "address": "0x742d35Cc6634C0532925a3b844Bc9e7595f2bD18",
    "type": "EMBEDDED",
    "chainId": 8453,
    "createdAt": "2026-03-07T12:00:00.000Z"
  },
  {
    "address": "0x1234567890abcdef1234567890abcdef12345678",
    "type": "SERVER",
    "chainId": 8453,
    "createdAt": "2026-03-07T12:00:00.000Z"
  }
]

Send from Wallet

Transfer tokens from a user’s Privy server wallet. This is used for automated x402 payments and agent-initiated transfers.
curl -X POST https://api.podium.build/api/v1/user/clxyz1234567890/wallets/0x742d.../send \
  -H "Authorization: Bearer $PODIUM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "recipient": "0xabcdef1234567890abcdef1234567890abcdef12",
    "tokenAddress": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
    "amount": "1000000",
    "decimals": 6,
    "chainId": 8453
  }'
FieldTypeRequiredDescription
recipientstringYesDestination ETH address
tokenAddressstringYesERC-20 token contract address
amountstring | numberYesAmount in smallest unit (e.g., 1 USDC = 1000000)
decimalsnumberNoToken decimals (default: 18)
chainIdnumberNoTarget chain (default: Base Mainnet 8453)

Orders

Get Order History

curl https://api.podium.build/api/v1/user/clxyz1234567890/orders \
  -H "Authorization: Bearer $PODIUM_API_KEY"
Returns paginated list of all orders for the user, including status, line items, and payment details.

Create an Order

Create a new order by adding an initial product:
curl -X POST https://api.podium.build/api/v1/user/clxyz1234567890/order \
  -H "Authorization: Bearer $PODIUM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "productId": "clprod_abc123",
    "variantIds": ["clvar_size_m", "clvar_color_black"],
    "quantity": 2
  }'
FieldTypeRequiredDescription
productIdstringYesCUID of the product
variantIdsstring[]NoSelected variant IDs
quantitynumberNoQuantity (default: 1, must be positive integer)

Add a Product to an Existing Order

curl -X POST https://api.podium.build/api/v1/user/clxyz1234567890/order/clord_xyz/product/clprod_def456 \
  -H "Authorization: Bearer $PODIUM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "quantity": 1, "variantIds": ["clvar_size_l"] }'

Remove an Item from an Order

curl -X DELETE https://api.podium.build/api/v1/user/clxyz1234567890/order/clord_xyz/item/clitem_abc \
  -H "Authorization: Bearer $PODIUM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "quantity": 1 }'
Pass quantity to reduce the count rather than removing the entire line item.

Points

Get Points Balance

curl https://api.podium.build/api/v1/user/clxyz1234567890/points \
  -H "Authorization: Bearer $PODIUM_API_KEY"
{
  "balance": 2500,
  "creatorBalances": [
    { "creatorId": "clcreator_abc", "balance": 1500 },
    { "creatorId": "clcreator_def", "balance": 1000 }
  ]
}
Optionally scope to a single creator with ?creatorId=clcreator_abc.

Grant or Deduct Points

curl -X POST https://api.podium.build/api/v1/user/clxyz1234567890/points \
  -H "Authorization: Bearer $PODIUM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 100,
    "creatorId": "clcreator_abc",
    "details": { "source": "welcome-bonus", "campaignId": "clcamp_xyz" }
  }'
FieldTypeRequiredDescription
amountintegerYesNon-zero integer. Positive = earn, negative = deduct
creatorIdstringNoScope points to a specific creator
detailsobjectNoArbitrary metadata stored with the transaction

Points Transaction History

curl "https://api.podium.build/api/v1/user/clxyz1234567890/points/history?page=1&limit=20&creatorId=clcreator_abc" \
  -H "Authorization: Bearer $PODIUM_API_KEY"
Returns paginated transaction records with type, amount, timestamp, and linked metadata.

Rewards

Get User’s Reward Collection

curl https://api.podium.build/api/v1/user/clxyz1234567890/nfts \
  -H "Authorization: Bearer $PODIUM_API_KEY"

Filter by Status

EndpointReturns
/user/{id}/nfts/earnedAll rewards earned through programs
/user/{id}/nfts/redeemableRewards available for redemption
/user/{id}/nfts/redeemedPreviously redeemed rewards

Redeem a Reward

curl -X POST https://api.podium.build/api/v1/user/clxyz1234567890/nfts/base/0xContractAddress/42/redeem \
  -H "Authorization: Bearer $PODIUM_API_KEY"
Path parameters: {network} / {contractAddress} / {tokenId}. The redeem endpoint checks eligibility, deducts any required points, and processes the reward (free product, discount code, event pass, etc.).

Check Redemption Status

curl https://api.podium.build/api/v1/user/clxyz1234567890/nfts/base/0xContractAddress/42/status \
  -H "Authorization: Bearer $PODIUM_API_KEY"
{
  "status": "REDEEMED",
  "redeemedAt": "2026-03-07T15:30:00.000Z",
  "rewardType": "FREE_PRODUCT",
  "rewardDetails": {
    "productId": "clprod_abc123",
    "orderId": "clord_reward_xyz"
  }
}

Social Graph

Follow a User

curl -X POST https://api.podium.build/api/v1/user/clxyz1234567890/followers/follow \
  -H "Authorization: Bearer $PODIUM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "followingId": "cluser_target" }'

Unfollow a User

curl -X DELETE https://api.podium.build/api/v1/user/clxyz1234567890/followers/follow \
  -H "Authorization: Bearer $PODIUM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "followingId": "cluser_target" }'

Follow a Creator

curl -X POST https://api.podium.build/api/v1/user/clxyz1234567890/creator/clcreator_abc/followers/follow \
  -H "Authorization: Bearer $PODIUM_API_KEY"

List Following

EndpointReturns
/user/{id}/followingAll users being followed
/user/{id}/following/creatorsAll creators being followed
/user/{id}/following/creators/countCreator following count
/user/{id}/followersUsers following this user

Notifications

List Notifications

curl https://api.podium.build/api/v1/user/clxyz1234567890/notifications \
  -H "Authorization: Bearer $PODIUM_API_KEY"

Mark as Read

curl -X PUT https://api.podium.build/api/v1/user/clxyz1234567890/notification/clnotif_abc \
  -H "Authorization: Bearer $PODIUM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "status": "READ" }'

Delete a Notification

curl -X DELETE https://api.podium.build/api/v1/user/clxyz1234567890/notification/clnotif_abc \
  -H "Authorization: Bearer $PODIUM_API_KEY"

Create a Creator (via User)

Users can create creator profiles (storefronts) from their account:
curl -X POST https://api.podium.build/api/v1/user/clxyz1234567890/creator \
  -H "Authorization: Bearer $PODIUM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "displayName": "Jane's Clean Beauty",
    "slug": "janes-clean-beauty",
    "categoryIds": [1, 3]
  }'
Check slug availability first:
curl -X POST https://api.podium.build/api/v1/user/clxyz1234567890/creator/check-availability \
  -H "Authorization: Bearer $PODIUM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "displayName": "Jane'\''s Clean Beauty", "slug": "janes-clean-beauty" }'

Initialize Chat

Set up a Stream Chat channel between a user and a creator:
curl -X POST https://api.podium.build/api/v1/user/clxyz1234567890/chat \
  -H "Authorization: Bearer $PODIUM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "requestorId": "clcreator_abc",
    "requestorType": "Creator"
  }'
FieldTypeRequiredDescription
requestorIdstringYesCUID of the other party
requestorTypestringYes"User" or "Creator"

User Model

FieldTypeDescription
idstringCUID2 identifier
usernamestring | nullUnique handle
emailstringContact email (unique)
emailVerifiedbooleanEmail verification status
avatarUrlstring | nullProfile image URL
biostring | nullUser biography
citystring | nullCity
statestring | nullState/region
createdAtdatetimeAccount creation timestamp
updatedAtdatetimeLast update timestamp
organizationIdstringParent organization (your tenant)

Endpoint Summary

MethodPathDescription
POST/userCreate a user
PATCH/user/{id}Update profile
GET/user/username/{username}Lookup by username
GET/user/privy/{privyId}/profileLookup by Privy ID
GET/user/privy/{privyId}/creatorsCreators for Privy user
GET/user/{id}/walletsList wallets
GET/user/{id}/wallets/{address}Wallet detail
POST/user/{id}/wallets/{address}/sendSend from wallet
GET/user/{id}/wallets/{address}/transactionsWallet transactions
GET/user/{id}/shipping-addressShipping address
GET/user/{id}/pointsPoints balance
POST/user/{id}/pointsGrant/deduct points
GET/user/{id}/points/historyPoints history
GET/user/{id}/ordersOrder history
GET/user/{id}/orderOpen order
POST/user/{id}/orderCreate order
GET/user/{id}/order/{orderId}Order detail
POST/user/{id}/order/{orderId}/checkoutStripe checkout
PATCH/user/{id}/order/{orderId}/checkout/embedded-walletEmbedded wallet checkout
PATCH/user/{id}/order/{orderId}/checkout/coinbaseCoinbase checkout
POST/user/{id}/order/{orderId}/product/{productId}Add product to order
DELETE/user/{id}/order/{orderId}/item/{itemId}Remove item
PUT/user/{id}/order/{orderId}/points/finalizeFinalize points
POST/user/{id}/order/{orderId}/points/revertRevert points
GET/user/{id}/nftsReward collection
GET/user/{id}/nfts/earnedEarned rewards
GET/user/{id}/nfts/redeemableRedeemable rewards
GET/user/{id}/nfts/redeemedRedeemed rewards
POST/user/{id}/nfts/{network}/{address}/{tokenId}/redeemRedeem reward
GET/user/{id}/nfts/{network}/{address}/{tokenId}/statusRedemption status
GET/user/{id}/followersFollowers
POST/user/{id}/followers/followFollow a user
DELETE/user/{id}/followers/followUnfollow a user
GET/user/{id}/followingFollowing
GET/user/{id}/following/creatorsFollowing creators
GET/user/{id}/following/creators/countFollowing count
GET/user/{id}/notificationsNotifications
PUT/user/{id}/notification/{notificationId}Mark notification read
DELETE/user/{id}/notification/{notificationId}Delete notification
POST/user/{id}/creatorCreate creator profile
POST/user/{id}/creator/check-availabilityCheck slug availability
POST/user/{id}/chatInitialize chat