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 |
| 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 |
| 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 |
| 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