Datanets (referred to as subnets in the API) are the curated data markets at the heart of the Reppo protocol. Each datanet has its own token economics — access fees, publishing fees, and per-epoch REPPO and primary-token emissions — all of which are configured on-chain and then recorded via these endpoints. Authenticated endpoints require a valid privy-token cookie.
List my subnets
Returns all datanets created by the authenticated user.
Auth: Privy cookie
Response
{
"data": {
"subnets": [
{
"id": "subnet_01hw9k2mxvfg3q4r5t6y7u8i",
"subnetName": "AI Research Papers",
"subnetDescription": "A curated datanet for AI research paper summaries.",
"thumbnailUrl": null,
"nativeTokenAddress": "0x1234567890abcdef1234567890abcdef12345678",
"nativeTokenSymbol": "AITKN",
"nativeTokenDecimals": 18,
"tokenId": 7,
"accessFeeREPPO": 5,
"emissionsPerEpochREPPO": 100,
"emissionsPerEpochPrimaryToken": 500,
"status": "active",
"upVoteVolume": 4820,
"downVoteVolume": 310,
"onboardingPublishers": "Submit concise summaries of peer-reviewed AI papers.",
"onboardingVoters": "Evaluate summaries for accuracy, clarity, and relevance.",
"createdByUserId": "user_abc123"
}
]
}
}
Example
curl https://reppo.ai/api/v1/me/subnets \
-H "Cookie: privy-token=<your-privy-token>"
Create a subnet draft
Creates a new datanet draft. The datanet is not live on-chain until you call the publish endpoint. Returns the internal ID of the newly created draft.
Auth: Privy cookie
Request body
Creator type. Must be one of individual or team.
Display name for the datanet. Maximum 100 characters.
URL to the datanet’s cover image. Optional.
Description of the datanet’s purpose and focus. Between 10 and 500 characters.
Instructions shown to publishers joining this datanet. Between 10 and 1000 characters.
Instructions shown to voters in this datanet. Between 10 and 1000 characters.
Short statement of the datanet’s data goal. Maximum 100 characters.
Contract address of the primary token used for emissions alongside REPPO.
Ticker symbol of the primary token. Maximum 5 characters.
Decimal precision of the primary token. Must be between 1 and 18.
Response 201
{
"data": {
"id": "subnet_abc123"
}
}
Example
curl -X POST https://reppo.ai/api/v1/me/subnets \
-H "Cookie: privy-token=<your-privy-token>" \
-H "Content-Type: application/json" \
-d '{
"subnetCreatorType": "individual",
"subnetName": "AI Research Papers",
"subnetDescription": "A datanet focused on curating high-quality AI research paper summaries.",
"onboardingPublishers": "Publish concise summaries of peer-reviewed AI papers published in the last 12 months.",
"onboardingVoters": "Evaluate summaries for accuracy, clarity, and relevance to current AI research.",
"subnetGoal": "Curate the best AI research summaries",
"nativeTokenAddress": "0xTokenAddress",
"nativeTokenSymbol": "AITKN",
"nativeTokenDecimals": 18
}'
Get one of my subnets
Returns a single datanet owned by the authenticated user.
Auth: Privy cookie
Path parameters
The datanet’s internal ID.
Response 200
{
"data": {
"subnet": {
"id": "subnet_01hw9k2mxvfg3q4r5t6y7u8i",
"subnetName": "AI Research Papers",
"subnetDescription": "A curated datanet for AI research paper summaries.",
"thumbnailUrl": null,
"nativeTokenAddress": "0x1234567890abcdef1234567890abcdef12345678",
"nativeTokenSymbol": "AITKN",
"nativeTokenDecimals": 18,
"tokenId": 7,
"accessFeeREPPO": 5,
"emissionsPerEpochREPPO": 100,
"emissionsPerEpochPrimaryToken": 500,
"status": "active",
"upVoteVolume": 4820,
"downVoteVolume": 310,
"onboardingPublishers": "Submit concise summaries of peer-reviewed AI papers.",
"onboardingVoters": "Evaluate summaries for accuracy, clarity, and relevance.",
"createdByUserId": "user_abc123"
}
}
}
Publish a subnet
POST /me/subnets/{id}/publish
Records the on-chain publication of a datanet draft. You must have already submitted the publish transaction on Base and obtained the transaction hash before calling this endpoint.
Auth: Privy cookie
Path parameters
The datanet’s internal ID.
Request body
The datanet’s internal ID (must match the path parameter).
The transaction hash of the on-chain publish transaction.
Response 200
{
"data": { "success": true }
}
Update REPPO access fee
POST /me/subnets/{id}/access-fee/reppo
Updates the REPPO access fee for a datanet after the corresponding on-chain transaction has been submitted.
Auth: Privy cookie
Path parameters
The datanet’s internal ID.
Request body
The datanet’s internal ID.
New access fee denominated in REPPO.
Transaction hash of the on-chain fee update.
Response 200
{
"data": { "success": true }
}
Update pod publishing fee
POST /me/subnets/{id}/pod-publishing-fee/reppo
Updates the REPPO fee charged to publishers minting pods into this datanet.
Auth: Privy cookie
Path parameters
The datanet’s internal ID.
Request body
The datanet’s internal ID.
New publishing fee denominated in REPPO.
Transaction hash of the on-chain fee update.
Response 200
{
"data": { "success": true }
}
Update pod republishing fee
POST /me/subnets/{id}/pod-republishing-fee/reppo
Updates the REPPO fee charged when a pod is republished into this datanet.
Auth: Privy cookie
Path parameters
The datanet’s internal ID.
Request body
The datanet’s internal ID.
New republishing fee denominated in REPPO.
Transaction hash of the on-chain fee update.
Response 200
{
"data": { "success": true }
}
Update REPPO emissions per epoch
POST /me/subnets/{id}/emissions-per-epoch/reppo
Updates the amount of REPPO emitted to curators per epoch in this datanet.
Auth: Privy cookie
Path parameters
The datanet’s internal ID.
Request body
The datanet’s internal ID.
New REPPO emission rate per epoch.
Transaction hash of the on-chain update.
Response 200
{
"data": { "success": true }
}
Update primary token emissions per epoch
POST /me/subnets/{id}/emissions-per-epoch/primary-token
Updates the amount of the primary token emitted to curators per epoch in this datanet.
Auth: Privy cookie
Path parameters
The datanet’s internal ID.
Request body
The datanet’s internal ID.
emissionsPerEpochPrimaryToken
New primary token emission rate per epoch.
Transaction hash of the on-chain update.
Response 200
{
"data": { "success": true }
}
List public subnets
Returns all active public datanets. No authentication required. Supports pagination and search.
Query parameters
Page number. Minimum 1. Default 1.
Number of results per page. Minimum 1. Default 10.
Free-text search term filtered against datanet name and description.
Response 200
{
"data": {
"subnets": [
{
"id": "subnet_01hw9k2mxvfg3q4r5t6y7u8i",
"subnetName": "AI Research Papers",
"subnetDescription": "A curated datanet for AI research paper summaries.",
"thumbnailUrl": null,
"nativeTokenAddress": "0x1234567890abcdef1234567890abcdef12345678",
"nativeTokenSymbol": "AITKN",
"nativeTokenDecimals": 18,
"tokenId": 7,
"accessFeeREPPO": 5,
"emissionsPerEpochREPPO": 100,
"emissionsPerEpochPrimaryToken": 500,
"status": "active",
"upVoteVolume": 4820,
"downVoteVolume": 310,
"onboardingPublishers": "Submit concise summaries of peer-reviewed AI papers.",
"onboardingVoters": "Evaluate summaries for accuracy, clarity, and relevance.",
"createdByUserId": "user_abc123"
}
]
}
}
Example
curl "https://reppo.ai/api/v1/public/subnets?page=1&limit=20&search=AI"
Get a public subnet by ID
Returns a single public datanet by its internal ID. No authentication required.
Path parameters
The datanet’s internal ID.
Response 200
{
"data": {
"subnet": {
"id": "subnet_abc123",
"subnetName": "Base DeFi Research",
"subnetDescription": "A curated datanet for high-signal DeFi research on Base.",
"thumbnailUrl": null,
"nativeTokenAddress": "0x1234567890abcdef1234567890abcdef12345678",
"nativeTokenSymbol": "DEFI",
"nativeTokenDecimals": 18,
"tokenId": 3,
"accessFeeREPPO": 10,
"emissionsPerEpochREPPO": 100,
"emissionsPerEpochPrimaryToken": 500,
"status": "active",
"upVoteVolume": 8200,
"downVoteVolume": 410,
"onboardingPublishers": "Submit original DeFi analysis with verifiable on-chain references.",
"onboardingVoters": "Vote on quality and accuracy of DeFi research submissions.",
"createdByUserId": "user_abc123"
}
}
}
Example
curl https://reppo.ai/api/v1/public/subnets/subnet_abc123
Subnet schema
The Subnet object is returned by all subnet endpoints.
Display name of the datanet.
Description of the datanet’s focus and curation criteria.
URL to the datanet thumbnail image.
Contract address of the primary token.
Ticker symbol of the primary token.
Decimal precision of the primary token.
On-chain token ID assigned after the datanet is published. null while in draft status.
Fee in REPPO required to access this datanet.
REPPO emitted to curators per epoch.
emissionsPerEpochPrimaryToken
Primary token emitted to curators per epoch.
Current status of the datanet (e.g., draft, active).
Cumulative up-vote volume across all pods in this datanet.
Cumulative down-vote volume across all pods in this datanet.
Onboarding instructions for publishers.
Onboarding instructions for voters.
Internal ID of the user who created this datanet.