Public REST API
Feature Upvote has a public REST API that allows you to use core functionality:
- View suggestions
- Create and update suggestions
- View comments
- Get notifications via a webhook of new suggestions and comments
This guide is a work in progress and may contain errors.
If you find an error - or find the instructions confusing - please write to us at support@featureupvote.com.
We’re friendly, we like to help, and we want to make this an excellent guide.
In this article
Endpoints
- Verify your key is valid
- List your account’s boards
- Show one specific board
- List a board’s suggestions
- Show one specific suggestion
- Search for suggestions
- List a board’s statuses
- Create a new suggestion
- Update an existing suggestion
- Create webhook for new or changed suggestions and comments
- Delete webhook
- List webhooks
Response bodies are in JSON
All results are in JSON. If you don’t get a valid JSON response body, it’s probably one of these problems:
- The URL is wrong
- Cloudflare, who protects our website from attacks, has incorrectly identified your usage as malicious. Let us know and we’ll investigate
API key
To use this API, you’ll need a API key. You’ll find your API key in your Feature Upvote dashboard as follows:
- Click on the user icon in the top-right hand corner
- From the drop-down menu, select Account
- Go to the Developer tab
Or, if you are currently signed in to your Feature Upvote account, click here.
REST API URL
All endpoints start with https://api.featureupvote.com/api/v1/
Authentication
All requests must be authenticated using the HTTP Bearer header:
curl -X GET "https://api.featureupvote.com/api/v1/verify" -H "Authorization: Bearer <api_key>"
Pagination
Three response headers show you information about pagination:
- Pagination-Count - the full number of results available.
- Pagination-Limit - the maximum number of results returned per request. Defaults to 10.
- Pagination-Offset - how many results were skipped in this response. Defaults to 0.
If you are familiar with SQL, you can think of the Pagination-Limit and Pagination-Offset parameters as analagous to SQL’s LIMIT and OFFSET keywords.
Set limit and offset
You can override these using query parameters:
limitquery parameter, defaults to 10offsetquery parameter, defaults to 0
eg
https://api.featureupvote.com/api/v1/boards?limit=20&offset=40
Rate limits
Our public REST API has generous rate limits, but they do exist as part of our protections from external attack. If you find your API usage is impacted by our rate limits, get in touch and tell us your use case. We might be able to make an exception.
Endpoints
Verify your key is valid
A great starting point:
URL: https://api.featureupvote.com/api/v1/verify
Method: GET
Example success response:
{
"result": "success",
"message": "This API key is valid and active.",
"accountId": 1
}
Example error responses:
{
"error": {
"message": "Invalid API Key provided: ****efer",
"type": "invalid_request_error"
}
}
{
"error": {
"message": "You did not provide an API key. You need to provide your API key in the Authorization header using a Bearer token (e.g. Authorization: Bearer [YOUR_API_KEY])",
"type": "invalid_request_error"
}
}
List your account’s boards
URL: https://api.featureupvote.com/api/v1/boards
Method: GET
Show one specific board
URL: https://api.featureupvote.com/api/v1/boards/{boardRef}
Method: GET
List a board’s suggestions
URL:https://api.featureupvote.com/api/v1/boards/{boardRef}/suggestions
Method: GET
Show one specific suggestion
URL: https://api.featureupvote.com/api/v1/boards/{boardRef}/suggestions/{suggestionId} Method: GET
Search for suggestions
URL:https://api.featureupvote.com/api/v1/boards/{boardRef}/search?q={search+terms}
Method: GET
Separate multiple search terms with the + sign.
By default, you’ll receive at most 20 results. Use the limit query parameter to change this. The maximum allowed value for limit is 250.
eg
https://api.featureupvote.com/api/v1/boards/{boardRef}/search?q=potion+upgrade&limit=50
List a board’s statuses
URL:https://api.featureupvote.com/api/v1/boards/{boardRef}/statuses
Method: GET
Returns a list of valid statuses for your board, including the short codes (aka statusRef ) needed to create or update a suggestion if you don’t want to accept the default “Awaiting approval” status.
The result is an array of JSON objects, each representing one status.
eg
{
"id": 1360,
"statusRef": "awaitingapproval",
"description": "Awaiting approval"
}
In this case, the short code is awaitingapproval .
Create a new suggestion
URL: https://api.featureupvote.com/api/v1/boards/{boardRef}/suggestions
Method: POST
Returns the newly created suggestion in the response body.
The request body must be a JSON object, with the following properties:
| Property | Required | Type | Default |
|---|---|---|---|
| title | Required | String, max 100 characters |
|
| description | Optional | String, max 2,000 characters. Any HTML tags and entities in the description will be escaped. |
|
| status | Optional | String, must be the short code (aka statusRef ) for one of your board’s statuses. See “List a board’s statuses” section |
awaitingapproval |
| remote_user_id | Optional | String, max 200 characters. Use this to match the user to someone in your own systems. |
|
| name | Required | String, max 50 characters |
|
| Required | String, max 200 characters, must be a well-formed email address |
|
Update an existing suggestion
URL: https://api.featureupvote.com/api/v1/boards/{boardRef}/suggestions/{suggestionId}
Method: POST
Returns the newly created suggestion in the response body.
A field will only be updated if it is present in the request.
The request body must be a JSON object, with the following properties:
| Property | Required | Type |
|---|---|---|
| title | Optional | String, max 100 characters |
| description | Optional | String, max 2,000 characters. Any HTML tags and entities in the description will be escaped. |
| status | Optional | String, must be the short code (aka statusRef ) for one of your board’s statuses. See “List a board’s statuses” section |
Create webhook for new or changed suggestions and comments
URL: https://api.featureupvote.com/api/v1/boards/{boardRef}/hooks
Method: POST
Returns info about the newly created webhook in the response body.
The request body must be a JSON object, with the following properties:
| Property | Description | Required | Type |
|---|---|---|---|
| target_url | A URL on your server that will receive a GET request when the webhook is triggered. | Required | String, max 250 characters |
| event | The type of event to be notified of. Each webhook can only receive one type of event. | Required | String. One of “new_suggestion”, “new_comment”, “suggestion_changed” |
Delete webhook
URL: https://api.featureupvote.com/api/v1/boards/{boardRef}/hooks/unsubscribe
Method: POST
The request body must be a JSON object, with the following properties:
| Property | Description | Required | Type |
|---|---|---|---|
| target_url | The URL of the webhook you are unsubscribed from Feature Upvote. | Required | String, max 250 characters |
List webhooks
URL: https://api.featureupvote.com/api/v1/boards/{boardRef}/hooks
Method: GET
Returns a list of all webhooks currently registered for the specified board.
This guide is a work in progress and may contain errors.
If you find an error - or find the instructions confusing - please write to us at support@featureupvote.com.
We’re friendly, we like to help, and we want to make this an excellent guide.