Skip to content

SDK API Reference

The client exposes domain namespaces. Each method maps to a GraphQL query or mutation. For HTTP/auth semantics, see API Endpoints and Authentication.

Client

  • new SimpleFeatureRequestsClient(config)
  • config.baseUrl: API origin without a trailing slash (e.g. https://api.example.com). The SDK posts GraphQL requests to {baseUrl}/ (the API root).
  • config.getAccessToken?: () => string | Promise<string | null> — optional Clerk (or other) Bearer token.
  • config.fetch?: optional fetch implementation (for Node without global fetch, tests, etc.).

  • client.request<T>(query, variables?) — Low-level GraphQL. Prefer typed methods below.


General

Method Returns Description
client.general.hello() Promise<string> Public sanity-check query

Users

Method Returns Description
client.users.me() Promise<User \| null> Current user (auth required)

Teams

Method Returns Description
client.teams.get(id) Promise<Team \| null> By ID (membership required)
client.teams.getBySlug(slug) Promise<Team \| null> By slug (public read)
client.teams.listForCurrentUser() Promise<Team[]> Teams for signed-in user
client.teams.listAll() Promise<Team[]> Super admin — all teams
client.teams.create(input) Promise<Team> Create team (slug auto-generated from name)
client.teams.update(id, input) Promise<Team> Update team (no slug field)
client.teams.delete(id) Promise<boolean> Delete team
client.teams.adminRenameSlug(id, slug) Promise<Team> Super admin — rename team slug

Team members

Method Returns Description
client.teamMembers.list(teamId) Promise<TeamMember[]> List members
client.teamMembers.add(teamId, userId, role) Promise<TeamMember> Add member
client.teamMembers.remove(teamId, userId) Promise<TeamMember \| null> Remove member
client.teamMembers.updateRole(teamId, userId, role) Promise<TeamMember> Change role

Projects

Method Returns Description
client.projects.get(id) Promise<Project \| null> By ID
client.projects.getBySlug(slug) Promise<Project \| null> By slug
client.projects.getByTeamSlugAndProjectSlug(teamSlug, projectSlug) Promise<Project \| null> Public board resolution
client.projects.list(teamId, options?) Promise<Project[]> options.includeArchived
client.projects.listPublicByTeamSlug(teamSlug) Promise<PublicProjectSummary[]> Public summaries
client.projects.create(input) Promise<Project> Create (slug auto-generated from name)
client.projects.update(id, input) Promise<Project> Update (no slug field)
client.projects.delete(id) Promise<boolean> Delete
client.projects.adminRenameSlug(id, slug) Promise<Project> Super admin — rename project slug

Project members

Method Returns Description
client.projectMembers.list(projectId) Promise<ProjectMember[]> List
client.projectMembers.add(projectId, userId, role) Promise<ProjectMember> Add
client.projectMembers.remove(projectId, userId) Promise<ProjectMember \| null> Remove
client.projectMembers.updateRole(projectId, userId, role) Promise<ProjectMember> Update role

Boards

Method Returns Description
client.boards.get(id) Promise<Board \| null> By ID
client.boards.getByProjectAndSlug(projectId, slug) Promise<Board \| null> By project + slug
client.boards.listByProject(projectId) Promise<Board[]> Boards for project
client.boards.getDefault(projectId) Promise<Board \| null> Default board
client.boards.create(input) Promise<Board> Create (slug auto-generated from name, unique per project)
client.boards.update(id, input) Promise<Board \| null> Update (no slug field)
client.boards.delete(id) Promise<boolean> Delete
client.boards.adminRenameSlug(id, slug) Promise<Board> Super admin — rename board slug

Requests

Method Returns Description
client.requests.get(id) Promise<RequestEntity \| null> One request
client.requests.list(boardId, options?) Promise<RequestEntity[]> options: statusId, tagIds, limit, offset, search
client.requests.create(input) Promise<RequestEntity> CreateRequestInput uses boardId (not project ID)
client.requests.update(id, input) Promise<RequestEntity> Update fields
client.requests.setStatus(requestId, statusId) Promise<RequestEntity> Set status
client.requests.lock(id) Promise<RequestEntity> Lock
client.requests.delete(id) Promise<boolean> Delete

Statuses

Statuses are scoped to a board.

Method Returns Description
client.statuses.list(boardId) Promise<Status[]> List for board
client.statuses.create(boardId, input) Promise<Status> Create
client.statuses.update(id, input) Promise<Status> Update
client.statuses.remove(id) Promise<boolean> Delete
client.statuses.setDefault(boardId, statusId) Promise<Status> Set default

Tags

Method Returns Description
client.tags.list(projectId) Promise<Tag[]> List for project
client.tags.create(projectId, input) Promise<Tag> Create
client.tags.update(id, input) Promise<Tag> Update
client.tags.remove(id) Promise<boolean> Delete

Comments

Method Returns Description
client.comments.list(requestId) Promise<Comment[]> List
client.comments.create(requestId, input, parentId?) Promise<Comment> Create (optional reply)
client.comments.update(id, body) Promise<Comment> Update body
client.comments.remove(id) Promise<boolean> Delete
client.comments.setHidden(id, isHidden) Promise<Comment> Moderation

Votes

Method Returns Description
client.votes.getCount(requestId) Promise<number> Count
client.votes.hasVoted(requestId) Promise<boolean> Current user
client.votes.add(requestId) Promise<Vote \| null> Add vote
client.votes.remove(requestId) Promise<Vote \| null> Remove vote

Attachments

Method Returns Description
client.attachments.list(requestId) Promise<Attachment[]> List
client.attachments.create(requestId, input) Promise<Attachment> Create metadata row
client.attachments.remove(id) Promise<boolean> Delete

Request tags

Method Returns Description
client.requestTags.list(requestId) Promise<RequestTag[]> List
client.requestTags.add(requestId, tagId) Promise<RequestTag> Add
client.requestTags.remove(requestId, tagId) Promise<RequestTag \| null> Remove

Types

Entity and input types are exported from @mindsize/simple-feature-requests-sdk (e.g. Team, Board, CreateRequestInput).


See also