API Documentation

Integrate UsersLoop into your workflow with our REST API. Manage feedback, boards, roadmaps, updates, and helpdesk content programmatically.

Authentication

All API requests require a valid API key sent as a Bearer token in the Authorization header.

You can create and manage your API key from your product's Settings > API tab.

Example Request
curl -X GET https://usersloop.com/api/v2/feedback \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: application/json"
Keep your API key secret. Do not expose it in client-side code or public repositories. You can rotate or revoke your key at any time from settings.

Base URL

All API endpoints are relative to:

https://usersloop.com/api/v2

Rate Limiting

API requests are rate limited to 60 requests per minute per API key. When you exceed the limit, the API returns a 429 Too Many Requests response.

Error Handling

The API uses standard HTTP status codes:

CodeMeaning
200Success
201Created
204Deleted (no content)
401Invalid or missing API key
404Resource not found
422Validation error
429Rate limit exceeded

Error responses return a JSON body with an error or message field.


Boards

Boards are used to organise feedback into categories or columns.

GET /boards

Retrieve all boards for your product.

Response
{
  "data": [
    {
      "id": 1,
      "name": "Feature Requests",
      "description": "Ideas for new features",
      "color": "#4a6cf7",
      "visibility": "public",
      "open_feedbacks_count": 12,
      "created_at": "2026-01-15T10:30:00.000000Z",
      "updated_at": "2026-01-15T10:30:00.000000Z"
    }
  ]
}
GET /boards/{id}

Retrieve a single board by ID.

POST /boards

Create a new board.

FieldTypeRequiredDescription
namestringYesBoard name (max 255)
descriptionstringNoBoard description
colorstringNoHex colour (e.g. #4a6cf7)
visibilitystringNopublic or private
PUT /boards/{id}

Update an existing board. All fields are optional.

DELETE /boards/{id}

Delete a board. Returns 204 No Content.


Feedback

Customer feedback items submitted via your product.

GET /feedback

List feedback with optional filtering. Returns paginated results.

ParameterTypeDescription
statusstringFilter by status: new, discussing, planned, in_progress, completed, not_planned
board_idintegerFilter by board ID
per_pageintegerItems per page (default 25, max 100)
Example
GET /api/v2/feedback?status=new&board_id=1&per_page=10
GET /feedback/{id}

Retrieve a single feedback item with its boards, tags, account, and account user.

POST /feedback

Create a new feedback item.

FieldTypeRequiredDescription
titlestringYesFeedback title (max 255)
detailsstringNoDetailed description
statusstringNoStatus (defaults to new)
board_idsarrayNoArray of board IDs to attach
tag_idsarrayNoArray of tag IDs to attach
account_idintegerNoAssociated account ID
account_user_idintegerNoAssociated account user ID
difficultyintegerNoDifficulty rating (1-5)
impactintegerNoImpact rating (1-5)
Example
curl -X POST https://usersloop.com/api/v2/feedback \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Add dark mode",
    "details": "Users have been requesting a dark mode option.",
    "status": "new",
    "board_ids": [1],
    "impact": 4
  }'
PUT /feedback/{id}

Update an existing feedback item. All fields are optional.

DELETE /feedback/{id}

Delete a feedback item. Returns 204 No Content.


Roadmap

Roadmap items represent planned features or milestones for your product.

GET /roadmap

List roadmap items with optional filtering. Returns paginated results.

ParameterTypeDescription
statusstringFilter by status: planned, progress, complete
GET /roadmap/{id}

Retrieve a single roadmap item with its tags and linked feedback.

POST /roadmap

Create a new roadmap item.

FieldTypeRequiredDescription
namestringYesRoadmap item name (max 255)
detailsstringNoDescription
statusstringNoStatus (defaults to planned)
tag_idsarrayNoArray of tag IDs
feedback_idsarrayNoArray of feedback IDs to link
difficultyintegerNoDifficulty rating (1-5)
impactintegerNoImpact rating (1-5)
PUT /roadmap/{id}

Update an existing roadmap item. All fields are optional.

DELETE /roadmap/{id}

Delete a roadmap item. Returns 204 No Content.


Updates

Product updates and release announcements.

GET /updates

List updates with optional filtering. Returns paginated results.

ParameterTypeDescription
statusstringFilter by status: draft, scheduled, published
GET /updates/{id}

Retrieve a single update with its tags, linked feedback, and roadmap items.

POST /updates

Create a new update.

FieldTypeRequiredDescription
titlestringYesUpdate title (max 255)
detailsstringNoUpdate content
statusstringNoStatus (defaults to draft)
schedule_atdatetimeNoSchedule date (for scheduled status)
notify_everyonebooleanNoSend notification to all users
tag_idsarrayNoArray of tag IDs
feedback_idsarrayNoArray of feedback IDs this update addresses
roadmap_idsarrayNoArray of roadmap item IDs included
PUT /updates/{id}

Update an existing update. All fields are optional.

DELETE /updates/{id}

Delete an update. Returns 204 No Content.


Helpdesk Categories

Organise helpdesk articles into categories.

GET /helpdesk/categories

List all helpdesk categories with article counts.

Response
{
  "data": [
    {
      "id": 1,
      "name": "Getting Started",
      "slug": "getting-started",
      "description": "Onboarding guides",
      "position": 1,
      "is_public": true,
      "articles_count": 5,
      "created_at": "2026-01-15T10:30:00.000000Z"
    }
  ]
}
GET /helpdesk/categories/{id}

Retrieve a single category.

POST /helpdesk/categories

Create a new helpdesk category.

FieldTypeRequiredDescription
namestringYesCategory name (max 255)
descriptionstringNoCategory description
is_publicbooleanNoWhether category is publicly visible
positionintegerNoSort order position
PUT /helpdesk/categories/{id}

Update an existing category.

DELETE /helpdesk/categories/{id}

Delete a category. Returns 204 No Content.


Helpdesk Articles

Knowledge base articles for your helpdesk.

GET /helpdesk/articles

List articles with optional filtering. Returns paginated results.

ParameterTypeDescription
category_idintegerFilter by category ID
statusstringFilter by status: draft, published
GET /helpdesk/articles/{id}

Retrieve a single article with its category and tags.

POST /helpdesk/articles

Create a new helpdesk article.

FieldTypeRequiredDescription
titlestringYesArticle title (max 255)
category_idintegerYesCategory ID
summarystringNoShort summary
content_jsonstringNoArticle content as JSON
statusstringNoStatus (defaults to draft)
is_pinnedbooleanNoPin article to top
tag_idsarrayNoArray of tag IDs
PUT /helpdesk/articles/{id}

Update an existing article. All fields are optional.

DELETE /helpdesk/articles/{id}

Delete an article. Returns 204 No Content.