Project Votes

Cast a vote for a listings project

post
Authorizations
Path parameters
projectIdintegerRequired
Body
voteTypestring · enumRequiredPossible values:
amountintegerRequired
Responses
200
Successful response
application/json
post
POST /api/v2/projects/{projectId}/votes HTTP/1.1
Host: api.ethos.network
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 33

{
  "voteType": "BULLISH",
  "amount": 1
}
{
  "success": true,
  "message": "text",
  "newBalance": {
    "bullishVotesRemaining": 1,
    "bearishVotesRemaining": 1,
    "bullishVotesSpent": 1,
    "bearishVotesSpent": 1,
    "allocationResetDate": "text"
  }
}

Get the current user's vote balance, optionally for a specific listings project and season

get
Authorizations
Query parameters
projectIdintegerOptional
yearintegerOptional
periodintegerOptional
Responses
200
Successful response
application/json
get
GET /api/v2/projects/votes/balance HTTP/1.1
Host: api.ethos.network
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "balance": {
    "bullishVotesRemaining": 1,
    "bearishVotesRemaining": 1,
    "bullishVotesSpent": 1,
    "bearishVotesSpent": 1,
    "allocationResetDate": "text"
  },
  "projectHistory": {
    "bullishVotesSpent": 1,
    "bearishVotesSpent": 1
  }
}

Get paginated list of project voters with their vote statistics and totals

get

Time Scope Options (scope parameter):

  • scope=global: All-time data from first vote to present

  • scope=global-dates: Custom date range (requires startDate & endDate)

  • scope=current-period: Current voting period (default - backend determines automatically)

  • scope=period: Specific voting period (requires year & period)

Parameter Requirements by Scope:

  • global: No additional parameters needed

  • global-dates: Requires startDate and endDate (ISO date strings)

  • current-period: No additional parameters needed (default)

  • period: Requires year (number) and period (number)

Examples:

  • All-time: GET /projects/123/voters?scope=global

  • Date range: GET /projects/123/voters?scope=global-dates&startDate=2024-01-01&endDate=2024-12-31

  • Current period: GET /projects/123/voters (default) or GET /projects/123/voters?scope=current-period

  • Specific period: GET /projects/123/voters?scope=period&year=2024&period=3

Notes:

  • End dates extending into the future are automatically capped to the current time

  • Global scope uses all historical data for the project

Path parameters
projectIdintegerRequired
Query parameters
orderBystring · enumOptionalDefault: scorePossible values:
orderDirectionstring · enumOptionalDefault: descPossible values:
sentimentstring · enumOptionalPossible values:
scopestring · enumOptionalDefault: current-periodPossible values:
startDatestringOptional
endDatestringOptional
yearintegerOptional
periodintegerOptional
limitinteger · max: 100OptionalDefault: 50
offsetnumberOptionalDefault: 0
Responses
200
Successful response
application/json
get
GET /api/v2/projects/{projectId}/voters HTTP/1.1
Host: api.ethos.network
Accept: */*
{
  "values": [
    {
      "user": {
        "id": 1,
        "profileId": 1,
        "displayName": "text",
        "username": "text",
        "avatarUrl": "https://example.com",
        "description": "text",
        "score": 1,
        "status": "ACTIVE",
        "userkeys": [
          "text"
        ],
        "xpTotal": 1,
        "xpStreakDays": 1,
        "links": {
          "profile": "https://example.com",
          "scoreBreakdown": "https://example.com"
        },
        "stats": {
          "review": {
            "received": {
              "negative": 1,
              "neutral": 1,
              "positive": 1
            }
          },
          "vouch": {
            "given": {
              "amountWeiTotal": 1,
              "count": 1
            },
            "received": {
              "amountWeiTotal": 1,
              "count": 1
            }
          }
        }
      },
      "bullishCount": 1,
      "bearishCount": 1,
      "totalVotes": 1,
      "firstVoteAt": "text",
      "lastVoteAt": "text"
    }
  ],
  "total": 1,
  "limit": 1,
  "offset": 1,
  "totals": {
    "totalVoters": 1,
    "totalBullishVoters": 1,
    "totalBearishVoters": 1,
    "totalBullishVotes": 1,
    "totalBearishVotes": 1
  }
}

Reallocate votes for all users (Admin only)

post
Authorizations
Responses
200
Successful response
application/json
post
POST /api/v2/projects/votes/reallocate HTTP/1.1
Host: api.ethos.network
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "allocationsCreated": 1,
  "totalVotesAllocated": 1,
  "message": "text"
}

Get bulk user project vote totals with flexible time range support

get

Time Scope Options (scope parameter):

  • scope=global: All-time data from first vote to present

  • scope=global-dates: Custom date range (requires startDate & endDate)

  • scope=current-period: Current voting period (default - backend determines automatically)

  • scope=period: Specific voting period (requires year & period)

Parameter Requirements by Scope:

  • global: No additional parameters needed

  • global-dates: Requires startDate and endDate (ISO date strings)

  • current-period: No additional parameters needed (default)

  • period: Requires year (number) and period (number)

Examples:

  • All-time: GET /projects/PROJECT_ID/bulk-totals?scope=global

  • Date range: GET /projects/PROJECT_ID/bulk-totals?scope=global-dates&startDate=2024-01-01&endDate=2024-12-31

  • Current period: GET /projects/PROJECT_ID/bulk-totals (default) or GET /projects/PROJECT_ID/bulk-totals?scope=current-period

  • Specific period: GET /projects/PROJECT_ID/bulk-totals?scope=period&year=2024&period=3

Notes:

  • End dates extending into the future are automatically capped to the current time

  • Global scope uses all historical data for the project

Query parameters
projectIdintegerRequired
profileIdsinteger[] · min: 1 · max: 100Required
scopestring · enumOptionalDefault: current-periodPossible values:
startDatestringOptional
endDatestringOptional
yearintegerOptional
periodintegerOptional
Responses
200
Successful response
application/json
get
GET /api/v2/projects/votes/bulk-totals HTTP/1.1
Host: api.ethos.network
Accept: */*
{
  "ANY_ADDITIONAL_PROPERTY": {
    "totalBullishVotes": 1,
    "totalBearishVotes": 1
  }
}

Get project vote chart data with flexible time range and aggregation options

get

Time Scope Options (scope parameter):

  • scope=global: All-time data from first vote to present

  • scope=global-dates: Custom date range (requires startDate & endDate)

  • scope=current-period: Current voting period (default - backend determines automatically)

  • scope=period: Specific voting period (requires year & period)

Parameter Requirements by Scope:

  • global: No additional parameters needed

  • global-dates: Requires startDate and endDate (ISO date strings)

  • current-period: No additional parameters needed (default)

  • period: Requires year (number) and period (number)

Time Aggregation (bucket parameter):

  • Available buckets: '1 minute', '5 minutes', '15 minutes', '30 minutes', '1 hour', '2 hours', '6 hours', '12 hours', '1 day', '1 week', '1 month'

  • If bucket is omitted, the API auto-selects an optimal bucket size based on the time range to prevent excessive data points

  • For large time spans with small buckets, an error will be returned with a suggested larger bucket

  • Maximum data points: 2000 (for performance)

Examples:

  • All-time: GET /projects/123/chart?scope=global

  • Date range: GET /projects/123/chart?scope=global-dates&startDate=2024-01-01&endDate=2024-12-31

  • Current period: GET /projects/123/chart (default) or GET /projects/123/chart?scope=current-period

  • Specific period: GET /projects/123/chart?scope=period&year=2024&period=3

Notes:

  • End dates extending into the future are automatically capped to the current time

  • Global scope uses all historical data for the project

Path parameters
projectIdintegerRequired
Query parameters
bucketstring · enumOptionalPossible values:
scopestring · enumOptionalDefault: current-periodPossible values:
startDatestringOptional
endDatestringOptional
yearintegerOptional
periodintegerOptional
Responses
200
Successful response
application/json
get
GET /api/v2/projects/{projectId}/chart HTTP/1.1
Host: api.ethos.network
Accept: */*
[
  {
    "timeBucket": "text",
    "totalBullishVotes": 1,
    "totalBearishVotes": 1,
    "bullishVotes": 1,
    "bearishVotes": 1,
    "uniqueVoters": 1
  }
]