Skip to main content

Wristband API

Query wristband NFT contract status, verify holder ownership, and retrieve token metadata. Wristbands are ERC-721 tokens on the Base network that grant access to premium features including HD live streams and token-gated channels.
These endpoints do not require authentication. The wristband contract address is configured via the WRISTBAND_CONTRACT_ADDRESS environment variable. When the contract is not configured, endpoints return a not_configured status instead of an error.

Get contract info

GET /api/wristband
Returns the wristband contract status and minting details.

Response (configured)

{
  "status": "available",
  "contract": "0x1234...abcd",
  "network": "base",
  "chainId": 8453,
  "mintPrice": "0.001 ETH",
  "maxSupply": 10000,
  "opensea": "https://opensea.io/collection/wristband",
  "basescan": "https://basescan.org/address/0x1234...abcd"
}
FieldTypeDescription
statusstringavailable when the contract is deployed, not_configured otherwise
contractstringContract address on Base
networkstringNetwork name (base)
chainIdnumberChain ID (8453)
mintPricestringCurrent mint price
maxSupplynumberMaximum number of wristbands that can be minted
openseastringOpenSea collection URL
basescanstringBasescan contract URL

Response (not configured)

{
  "status": "not_configured",
  "message": "Wristband contract not deployed yet",
  "comingSoon": true
}

Verify holder

GET /api/wristband/verify
Checks whether a wallet address holds a wristband NFT by calling the balanceOf function on the contract.

Query parameters

ParameterTypeRequiredDescription
addressstringYesWallet address to check (hex format with 0x prefix)

Response

{
  "hasWristband": true,
  "address": "0xabc...123",
  "contract": "0x1234...abcd"
}
FieldTypeDescription
hasWristbandbooleantrue if the wallet holds at least one wristband token
addressstringThe wallet address that was checked
contractstringThe wristband contract address
When the contract is not configured:
{
  "hasWristband": false,
  "error": "Contract not configured"
}

Errors

CodeDescription
400Address required — the address query parameter is missing
On-chain read errors (for example, RPC failures) return a 200 response with hasWristband: false and an error field describing the failure, rather than an HTTP error status.

Get token metadata

GET /api/wristband/metadata/:tokenId
Returns ERC-721 compatible metadata for a specific wristband token. This endpoint is designed to be used as the tokenURI base for the NFT contract.

Path parameters

ParameterTypeDescription
tokenIdstringNumeric token ID

Response

{
  "name": "Digital Wristband #1",
  "description": "Onchain access to baseFM underground radio. Grants lifetime access to HD live streams, token-gated channels, and exclusive artist drops.",
  "image": "https://agentbot.raveculture.xyz/wristband-nft.png",
  "external_url": "https://agentbot.raveculture.xyz/wristband",
  "attributes": [
    {
      "trait_type": "Edition",
      "value": "Founding Member"
    },
    {
      "trait_type": "Network",
      "value": "Base"
    },
    {
      "trait_type": "Access Level",
      "value": "Premium"
    }
  ]
}
FieldTypeDescription
namestringToken name including the token ID
descriptionstringToken description
imagestringURL to the token image
external_urlstringURL to the wristband page
attributesarrayERC-721 metadata attributes
attributes[].trait_typestringAttribute category
attributes[].valuestringAttribute value. Token #1 receives Founding Member as its edition; all others receive Edition {id}.
Metadata responses are cached for one hour via the Cache-Control: public, max-age=3600 header.

Errors

CodeDescription
400Invalid token ID — the tokenId path parameter is not a valid number