A REST API over HTTPS with JSON requests and responses. Build anything the product does, on your own data.
Base URL
https://api.sarvafeed.com/v1Authentication
Authorization: Bearer <token>Rate limit
120 requests per minute per token. Every response includes X-RateLimit-Remaining.
Versioning
The version is pinned in the path (/v1). Breaking changes ship under a new version, never in place.
/auth/tokensExchange an API key for a short-lived access token. Most requests use the workspace key directly as a bearer token, but service integrations can mint scoped tokens here.
scopesOptional list of scopes to restrict the token, e.g. posts:read.
expires_inLifetime in seconds. Defaults to 3600, max 86400.
curl -X POST https://api.sarvafeed.com/v1/auth/tokens \
-H "Authorization: Bearer $SARVAFEED_KEY" \
-d '{ "scopes": ["posts:read","posts:write"], "expires_in": 3600 }'{
"access_token": "tok_9d2fk3a1",
"expires_in": 3600,
"scopes": ["posts:read", "posts:write"]
}/boardsList every board in your workspace.
{
"data": [
{ "id": "board_2xk9", "name": "Feature Requests", "post_count": 214, "public": true },
{ "id": "board_7pm2", "name": "Bug Reports", "post_count": 58, "public": false }
]
}/boards/:idRetrieve a single board by id.
{
"id": "board_2xk9",
"name": "Feature Requests",
"public": true,
"statuses": ["open", "under_review", "planned", "in_progress", "shipped"],
"created_at": "2026-01-12T09:20:00Z"
}/postsList posts across a board with filters and pagination.
boardBoard id to scope results to.
statusFilter by status, e.g. planned.
sortOne of recent, votes, or weighted. weighted ranks by revenue-weighted score.
curl "https://api.sarvafeed.com/v1/posts?board=board_2xk9&sort=weighted" \
-H "Authorization: Bearer $SARVAFEED_KEY"{
"data": [
{
"id": "post_8fk2",
"title": "SSO for the public portal",
"status": "planned",
"vote_count": 42,
"weighted_score": 18400,
"created_at": "2026-02-18T14:03:00Z"
}
],
"next_cursor": "cur_a91k"
}/postsCreate a feedback post on a board.
board_idBoard the post belongs to.
titleShort summary of the request.
bodyLonger description.
author_emailAttribute the post to a user for revenue weighting.
curl -X POST https://api.sarvafeed.com/v1/posts \
-H "Authorization: Bearer $SARVAFEED_KEY" \
-d '{ "board_id": "board_2xk9", "title": "Dark mode", "author_email": "sam@acme.com" }'{
"id": "post_5td7",
"title": "Dark mode",
"status": "open",
"vote_count": 1,
"weighted_score": 240,
"created_at": "2026-07-05T11:42:00Z"
}/posts/:idUpdate a post's status, title, or tags. Status changes notify subscribed voters.
statusNew status, e.g. in_progress.
titleUpdated title.
tagsReplace the post's tags.
curl -X PATCH https://api.sarvafeed.com/v1/posts/post_8fk2 \
-H "Authorization: Bearer $SARVAFEED_KEY" \
-d '{ "status": "in_progress" }'{
"id": "post_8fk2",
"status": "in_progress",
"updated_at": "2026-07-05T12:01:00Z"
}/posts/:id/votesCast a vote on a post. If the voter's account is linked, the vote carries its revenue weight.
voter_emailIdentifies the voter and their account.
curl -X POST https://api.sarvafeed.com/v1/posts/post_8fk2/votes \
-H "Authorization: Bearer $SARVAFEED_KEY" \
-d '{ "voter_email": "lee@acme.com" }'{
"post_id": "post_8fk2",
"vote_count": 43,
"weighted_score": 18640
}/posts/:id/votesRemove a voter's vote from a post.
voter_emailThe voter to remove.
{
"post_id": "post_8fk2",
"vote_count": 42,
"weighted_score": 18400
}/statusesList the status pipeline configured for your workspace.
{
"data": [
{ "key": "open", "label": "Open", "color": "#6bbfbe" },
{ "key": "under_review", "label": "Under Review", "color": "#e8cf6e" },
{ "key": "planned", "label": "Planned", "color": "#8189f2" },
{ "key": "in_progress", "label": "In Progress", "color": "#8189f2" },
{ "key": "shipped", "label": "Shipped", "color": "#7fb98a" }
]
}/changelogList published changelog entries, newest first.
{
"data": [
{
"id": "rel_28",
"version": "v2.8.0",
"title": "Slack Integration & Real-Time Notifications",
"tag": "New Feature",
"published_at": "2026-07-02T00:00:00Z"
}
]
}Subscribe to events and sarvaFeed posts a signed payload to your endpoint. Verify the signature with the secret returned at registration.
/webhooksRegister a webhook endpoint for one or more events.
urlHTTPS endpoint that receives event payloads.
eventsEvents to subscribe to (see the list below).
curl -X POST https://api.sarvafeed.com/v1/webhooks \
-H "Authorization: Bearer $SARVAFEED_KEY" \
-d '{ "url": "https://acme.com/hooks/sarvafeed", "events": ["post.status_changed"] }'{
"id": "whk_3a9d",
"url": "https://acme.com/hooks/sarvafeed",
"events": ["post.status_changed"],
"secret": "whsec_1f8k2m"
}/webhooks/:idDelete a registered webhook.
{
"id": "whk_3a9d",
"deleted": true
}Events
post.createdA new post lands on a board.
post.status_changedA post moves to a new status.
post.vote_milestoneA post crosses a vote threshold you configured.
changelog.publishedA changelog entry goes live.
Errors return the matching HTTP status and a JSON body with a stable machine-readable code.
{
"error": {
"code": "unauthorized",
"message": "Missing or invalid bearer token."
}
}bad_requestThe request body or query was malformed.
unauthorizedMissing or invalid bearer token.
forbiddenThe token lacks the scope for this action.
not_foundThe resource does not exist.
rate_limitedYou exceeded 120 requests per minute. Retry after the window resets.