Skip to main content
A datanet is the core organizational primitive of the Reppo protocol — a domain-specific market that defines who can publish data, how quality is assessed, and how rewards are distributed. This guide walks you through every step of creating and publishing one, from preparing your token to configuring post-launch fees.
All /me/* endpoints require a valid privy-token session cookie. Authenticate through the Reppo web app to obtain one before proceeding.
1

Prepare your ERC-20 token on Base

Every datanet is anchored to an ERC-20 token deployed on Base (chain ID 8453). Before calling any API, collect the following details for your token:
FieldDescription
nativeTokenAddressContract address (0x-prefixed)
nativeTokenSymbolTicker symbol, max 5 characters (e.g. MYTKN)
nativeTokenDecimalsInteger between 1 and 18 (typically 18)
If you have not deployed a token yet, use a tool such as the Base token deployer or OpenZeppelin Contracts Wizard before continuing.
2

Create the datanet draft

Submit your datanet configuration to POST /api/v1/me/subnets. This creates the draft record on the Reppo platform before the on-chain transaction.Request body schema
FieldTypeConstraintsRequired
subnetCreatorTypestringindividual or teamYes
subnetNamestringMax 100 charactersYes
imageURLstring (URI)No
subnetDescriptionstring10–500 charactersYes
onboardingPublishersstring10–1000 charactersYes
onboardingVotersstring10–1000 charactersYes
subnetGoalstringMax 100 charactersYes
nativeTokenAddressstring0x-prefixed contract addressYes
nativeTokenSymbolstringMax 5 charactersYes
nativeTokenDecimalsinteger1–18Yes
curl -X POST https://reppo.ai/api/v1/me/subnets \
  -H "Content-Type: application/json" \
  -H "Cookie: privy-token=<YOUR_PRIVY_TOKEN>" \
  -d '{
    "subnetCreatorType": "individual",
    "subnetName": "Base DeFi Research",
    "imageURL": "https://example.com/datanet-cover.png",
    "subnetDescription": "A curated datanet for high-signal DeFi research, analysis, and on-chain data commentary from Base ecosystem contributors.",
    "onboardingPublishers": "Submit original DeFi analysis, protocol breakdowns, or on-chain data insights. Posts must be your own work and include verifiable on-chain references where applicable.",
    "onboardingVoters": "Vote on the quality and accuracy of DeFi research submissions. Voters should have working knowledge of Base DeFi protocols and on-chain data interpretation.",
    "subnetGoal": "Curate the highest-quality DeFi research dataset on Base",
    "nativeTokenAddress": "0x1234567890abcdef1234567890abcdef12345678",
    "nativeTokenSymbol": "DEFI",
    "nativeTokenDecimals": 18
  }'
Response
{
  "data": {
    "id": "subnet_01hw9k2mxvfg3q4r5t6y7u8i"
  }
}
Save the returned id — you will use it in every subsequent step.
3

Execute the on-chain mint transaction

With your draft created, you now mint the datanet on Base. This transaction registers your datanet on the PodManager contract (0xcfF0511089D0Fbe92E1788E4aFFF3E7930b3D47c) and assigns it an on-chain token ID.Use your preferred Web3 tool (wagmi, ethers.js, cast, or the Reppo web app) to submit the transaction. Once confirmed, copy the transaction hash — you need it in the next step.
You can use the Reppo web app’s guided flow to perform this transaction through a wallet UI without writing contract calls directly.
4

Publish the datanet

After the on-chain transaction confirms, record it on the Reppo platform by calling POST /api/v1/me/subnets/{id}/publish. Replace {id} with the draft ID from step 2.
curl -X POST https://reppo.ai/api/v1/me/subnets/subnet_01hw9k2mxvfg3q4r5t6y7u8i/publish \
  -H "Content-Type: application/json" \
  -H "Cookie: privy-token=<YOUR_PRIVY_TOKEN>" \
  -d '{
    "subnetId": "subnet_01hw9k2mxvfg3q4r5t6y7u8i",
    "txHash": "0xabc123def456abc123def456abc123def456abc123def456abc123def456abc1"
  }'
Response
{
  "data": {
    "success": true
  }
}
Your datanet is now live and visible to publishers and voters on the Reppo platform.
5

Configure fees (optional)

After publishing, you can configure the economic parameters of your datanet. Each fee update requires a corresponding on-chain transaction — submit the transaction first, then record the result via the API.Access fee (REPPO)Controls the cost for data consumers to access your datanet’s curated dataset.
curl -X POST https://reppo.ai/api/v1/me/subnets/subnet_01hw9k2mxvfg3q4r5t6y7u8i/access-fee/reppo \
  -H "Content-Type: application/json" \
  -H "Cookie: privy-token=<YOUR_PRIVY_TOKEN>" \
  -d '{
    "subnetId": "subnet_01hw9k2mxvfg3q4r5t6y7u8i",
    "accessFeeREPPO": 10,
    "txHash": "0xabc123..."
  }'
Pod publishing fee (REPPO)Sets the cost for publishers to submit a pod to your datanet.
curl -X POST https://reppo.ai/api/v1/me/subnets/subnet_01hw9k2mxvfg3q4r5t6y7u8i/pod-publishing-fee/reppo \
  -H "Content-Type: application/json" \
  -H "Cookie: privy-token=<YOUR_PRIVY_TOKEN>" \
  -d '{
    "subnetId": "subnet_01hw9k2mxvfg3q4r5t6y7u8i",
    "publishingFeeREPPO": 5,
    "txHash": "0xabc123..."
  }'
Pod republishing fee (REPPO)Sets the cost for republishing an existing pod into your datanet.
curl -X POST https://reppo.ai/api/v1/me/subnets/subnet_01hw9k2mxvfg3q4r5t6y7u8i/pod-republishing-fee/reppo \
  -H "Content-Type: application/json" \
  -H "Cookie: privy-token=<YOUR_PRIVY_TOKEN>" \
  -d '{
    "subnetId": "subnet_01hw9k2mxvfg3q4r5t6y7u8i",
    "republishingFeeREPPO": 2,
    "txHash": "0xabc123..."
  }'
REPPO emissions per epochSets how many REPPO tokens flow to top-performing pods each epoch.
curl -X POST https://reppo.ai/api/v1/me/subnets/subnet_01hw9k2mxvfg3q4r5t6y7u8i/emissions-per-epoch/reppo \
  -H "Content-Type: application/json" \
  -H "Cookie: privy-token=<YOUR_PRIVY_TOKEN>" \
  -d '{
    "subnetId": "subnet_01hw9k2mxvfg3q4r5t6y7u8i",
    "emissionsPerEpochREPPO": 100,
    "txHash": "0xabc123..."
  }'
Primary token emissions per epochSets how many of your datanet’s native token flow to pods each epoch.
curl -X POST https://reppo.ai/api/v1/me/subnets/subnet_01hw9k2mxvfg3q4r5t6y7u8i/emissions-per-epoch/primary-token \
  -H "Content-Type: application/json" \
  -H "Cookie: privy-token=<YOUR_PRIVY_TOKEN>" \
  -d '{
    "subnetId": "subnet_01hw9k2mxvfg3q4r5t6y7u8i",
    "emissionsPerEpochPrimaryToken": 500,
    "txHash": "0xabc123..."
  }'
All fee update endpoints return the same {"data": {"success": true}} response on success.