Introduction
The Product7 API is a RESTful interface for managing feedback in your workspace. Submit posts from your own apps, internal tools, or third-party integrations, all over plain HTTPS with JSON request and response bodies.
The API is served from your workspace's subdomain on api.product7.io. Authenticate each request with a bearer token, then call the endpoint you need. Tokens are scoped to a single workspace and can be revoked at any time.
https://{workspace}.api.product7.ioAuthorization: Bearer YOUR_API_TOKENGetting started
- Open your workspace and go to Settings, Developers to generate a token.
- Copy your workspace subdomain (the part before
.api.product7.io). - Make your first request to Create Feedback to add a post to a board.
Get current workspace
/api/v1/meReturns the workspace the bearer token belongs to. Use this as your auth check — a 200 confirms the token is valid and tells you which workspace it scopes to. The only endpoint guaranteed to exist for every API key.
Authorizations
AuthorizationstringrequiredResponse
statusbooleanoptionaltrue on 2xx responses.data.workspace.iduuidoptionaldata.workspace.namestringoptionaldata.workspace.domainstringoptionalacme for acme.product7.io).Get workspace members
/api/v1/workspace/membersReturns the admins and members of the workspace. Use a member's id as the assignee_user_id or created_by filter on List tickets.
Authorizations
AuthorizationstringrequiredResponse
dataarray<object>optionalid, full_name, email, and picture.totalintegeroptionalCreate Feedback
/api/v1/feedbackCreates a new feedback post on a board in your workspace. The post appears in the public board feed (or moderation queue, if moderation is enabled) and triggers notifications to subscribers.
Authorizations
AuthorizationstringrequiredBody Parameters
titlestringrequiredcontentstringrequiredboard_iduuidrequiredcategory_iduuidoptionaluser_iduuidoptionalattachmentsarray<object>optionalResponse
Returns the created feedback post with its server-assigned identifiers, timestamps, and the public URL on your board.
iduuidoptionalurlstringoptionalurl_slugstringoptionalstatusstringoptionalopen, or pending if moderation is enabled.created_attimestampoptionalList Feedback
/api/v1/feedbackReturns feedback posts across the boards your token can access, newest first. Results are cursor-paginated and can be narrowed by board, status, tag, or keyword.
Authorizations
AuthorizationstringrequiredQuery Parameters
boardsstringoptionalstatusesstringoptionaltagsstringoptionalkeywordsstringoptionalsortstringoptionalnewest, top, or trending.limitintegeroptionalcursorstringoptionalmeta.next_cursor.Response
dataarray<object>optionalmeta.next_cursorstringoptionalcursor to fetch the next page. Empty when there are no more results.meta.has_morebooleanoptionalCreate ticket
/api/v1/ticketsCreates a support ticket in the workspace — the same flow the dashboard composer uses, so the ticket gets a number, the workspace's default status and type, and shows up in the inbox immediately. The ticket is attributed to the user who created the API key, so the key must be a user-scoped key.
Body Parameters
titlestringrequiredrequester_namestringrequiredrequester_emailstringoptionaldescriptionstringoptionalprioritystringoptionallow, medium, high, urgent. Defaults to medium.type_iduuidoptionalassignee_idsarray<uuid>optionalteam_iduuidoptionaldue_datedatetimeoptionaltagsarray<string>optionalResponse
Returns the full ticket, including its allocated number and the uuid used by every other ticket endpoint.
List tickets
/api/v1/ticketsReturns the support tickets in the workspace the token belongs to, newest activity first. Results are paginated and can be narrowed with query parameters. Every ticket is scoped to your workspace automatically.
Authorizations
AuthorizationstringrequiredQuery Parameters
stagestringoptionalopen, in_progress, waiting_on_customer, resolved, closed.prioritystringoptionallow, medium, high, urgent.typestringoptionalBug).searchstringoptionaltagstringoptionalpageintegeroptional1.page_sizeintegeroptional50.Response
dataarray<object>optionalid (the public T-#### label), uuid (use this in the path for the other endpoints), title, stage, priority, requester, and status.meta.totalintegeroptionalmeta.total_pagesintegeroptionalpage_size.Get ticket
/api/v1/tickets/{id}Returns a single ticket with its full activity timeline (comments, replies, and state changes). Returns 404 if the ticket doesn't exist or belongs to a different workspace.
Path Parameters
iduuidrequireduuid (from the list response), not the public T-#### label.Authorizations
AuthorizationstringrequiredResponse
dataobjectoptionalactivities array of its timeline entries.data.activitiesarray<object>optionaltype (comment, reply, internal_note, or a state-change), content, and timestamp.Add comment
/api/v1/tickets/{id}/commentsAdds an internal note to a ticket's timeline. Notes are team-only; they are never sent to the customer as an email (use the dashboard reply composer for customer-facing replies). The note is attributed to the user who created the API key, so the key must be a user-scoped key.
Path Parameters
iduuidrequireduuid.Body Parameters
contentstringrequiredattachmentsarray<object>optional{ url, type, name }. Only image types are stored.Response
Returns the updated ticket with the new comment appended to its activities.
Set status
/api/v1/tickets/{id}/statusMoves a ticket to another workspace status. The change is recorded on the ticket's timeline, attributed to the key's user — so the key must be a user-scoped key. Get valid status ids from Get ticket statuses.
Path Parameters
iduuidrequireduuid.Body Parameters
status_iduuidrequiredcloses_ticket set, the ticket is closed.Response
Returns the updated ticket with its new status.
Delete activity
/api/v1/tickets/{id}/activities/{activityID}Removes a comment or internal note that the key's user authored. Author-scoped and limited to content rows — it can never touch state-change audit entries or customer-facing replies.
Path Parameters
iduuidrequireduuid.activityIDuuidrequiredactivities).Response
Returns a confirmation. Deleting an already-deleted activity returns 410 Gone.
Get ticket statuses
/api/v1/ticket-statusesReturns the workspace's customizable ticket statuses (Open, In progress, Resolved, …). Pass a status id (or several, comma-separated) as the status_id filter on List tickets.
Authorizations
AuthorizationstringrequiredResponse
dataarray<object>optionalposition. Each has an id, name, color_code, icon_name, and flags.data[].closes_ticketbooleanoptionalErrors
400Invalid request body or missing required fields.401Missing or invalid bearer token.403User is banned, or the board requires login for anonymous posts.500Server error while persisting the post.