Project membership in PrintHeritage is entirely invitation-based. A user with project access can invite any registered user by email, assigning them one of the four platform roles. The invited user receives a pendingDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/joaomonteir0/printheritage/llms.txt
Use this file to discover all available pages before exploring further.
ProjectPermission record that appears in their invitations list; they can then accept or reject it. A separate endpoint lets clients silently mark an invitation notification as read without changing its acceptance status. All endpoints require a valid Bearer token.
POST /projects//invite
Sends a project invitation to an existing platform user identified by their email address. A newProjectPermission record is created with status = PENDING and invited_by set to the currently authenticated user’s ID.
Path parameters
UUID of the project to which the user is being invited.
Query parameters
Email address of the registered user to invite.
Role to assign to the invited user within the project. Must be one of:
| Value | Description |
|---|---|
SUPER_ADMIN | Full platform-wide administrative access. |
GENERAL_ADMIN | Administrative access across all projects. |
PROJECT_ADMIN | Administrative access scoped to this project, including the ability to delete datasets. |
VISUALIZER | Read-only access to project data and dashboards. |
Response
true when the invitation was created successfully.Example
A side-effect audit log entry with action
PROJECT_MEMBER_INVITE is written on success, recording the acting user and the invited user’s ID as the target.GET /invitations
Returns all pending invitations addressed to the currently authenticated user — that is, everyProjectPermission record belonging to this user where status = PENDING.
Response
Returns a JSON array ofProjectPermissionResponse objects.
Unique identifier of the
ProjectPermission record. Use this ID with the
accept, reject, and read endpoints below.UUID of the invited user (always the currently authenticated user).
UUID of the project the invitation relates to.
The role that will be granted on acceptance:
SUPER_ADMIN, GENERAL_ADMIN,
PROJECT_ADMIN, or VISUALIZER.Current status of the invitation. For this endpoint the value is always
PENDING.true if the user has already viewed this notification (see
POST /invitations/{id}/read).Whether the user has marked the associated project as a favourite.
Human-readable name of the project, resolved at query time from the
related
Project record.Email address of the user who sent the invitation, resolved from the
invited_by relationship. Falls back to "Sist" if the inviting user
record no longer exists.Example
POST /invitations//accept
Accepts a pending invitation by setting itsstatus to ACCEPTED. The authenticated user must be the invitee — the endpoint filters by both the permission ID and the current user’s ID.
Path parameters
UUID of the
ProjectPermission record to accept, as returned by
GET /invitations.Response
true when the invitation was found and accepted. Also returns true
(silently) if no matching record was found, making the call idempotent.Example
On success, an audit log entry with action
INVITE_ACCEPT is written, recording the accepting user and the associated project ID as the target.POST /invitations//reject
Rejects a pending invitation by setting itsstatus to REJECTED. As with the accept endpoint, the record must belong to the currently authenticated user.
Path parameters
UUID of the
ProjectPermission record to reject, as returned by
GET /invitations.Response
true when the invitation was found and rejected. Also returns true
silently if no matching record was found.Example
On success, an audit log entry with action
INVITE_REJECT is written, recording the rejecting user and the associated project ID as the target.POST /invitations//read
Marks an invitation notification as read by settingis_read to true on the ProjectPermission record. This endpoint does not change the acceptance status — it exists solely to allow the UI to track which notifications have been seen.
Path parameters
UUID of the
ProjectPermission record to mark as read, as returned by
GET /invitations.Response
true when the record was found and updated. Also returns true silently
if no matching record was found, making the call safe to call multiple times.Example
This endpoint does not write an audit log entry. It is a lightweight
notification-housekeeping call with no security implications.