A tenant-safe Laravel API for projects, notes, public collaboration, private attachments, update requests, mail delivery, and auditable workspace administration.
The login endpoint returns a Sanctum token. Store it securely and attach it to subsequent requests. Logout revokes only the current token; refresh rotates it.
The organization is resolved from the authenticated account. Cross-tenant model identifiers return 404.
Super administrators
Platform routes use /api/admin. A selected tenant context may be supplied with X-Organization-ID where supported.
Role model
super_admin, org_admin, editor, and viewer. Suspended tenants remain readable but cannot mutate data.
Response contract
Status and error conventions
Status
Meaning
Typical shape
200 / 201
Successful read or creation
Resource key or paginated data
401
Missing or invalid token
{"message":"Unauthenticated."}
403
Role/policy denial or suspended mutation
{"message":"…"}
404
Missing or cross-tenant resource
{"message":"Not Found"}
409 / 410
Used, revoked, or expired one-time flow
{"message":"…"}
422
Validation failure
{"message":"…","errors":{…}}
423
Attachment has not passed scanning
{"message":"…"}
429
Rate limit exceeded
Standard Laravel throttle response
Private files
Attachment lifecycle
Uploads enter private quarantine with scan_status=pending. A worker streams them to ClamAV. Clean files become previewable; infected files are deleted; scanner errors remain fail-closed and can be retried by an organization administrator.
Search by method, path, capability, or access level. Path parameters use braces; list endpoints return Laravel pagination metadata where applicable.
System
2 endpoints
GET/api/healthAPI health checkReturns {"status":"ok"}.PublicGET/api/public/pingPublic API health checkChecks availability of the unauthenticated API surface.Public
Authentication & registration
13 endpoints
POST/api/auth/loginCreate an API tokenJSON: email, password, optional device_name.PublicPOST/api/auth/logoutRevoke the current tokenRevokes the token used for this request.BearerPOST/api/auth/refreshRotate the current tokenReturns a replacement Sanctum bearer token.BearerGET/api/auth/meGet the current accountReturns the authenticated user and resolved organization context.BearerPOST/api/auth/forgot-passwordRequest a password resetJSON: email. Always returns a safe non-enumerating response.PublicPOST/api/auth/reset-passwordReset a passwordJSON: email, token, password, password_confirmation.PublicPOST/api/auth/reset-password/revoke-sessionsRevoke reset-related sessionsJSON: session_management_token.PublicPOST/api/registerStart workspace registrationJSON: name, email, password, terms_accepted. Phone and job title are optional.PublicGET/api/register/{token}Read registration progressReturns the current step and safe registration summary.PublicPOST/api/register/{token}/verifyVerify registration emailJSON: code (six digits).PublicPOST/api/register/{token}/resendResend verification codeRate limited to prevent abuse.PublicPUT/api/register/{token}/organizationSave workspace detailsJSON: name, slug, optional phone, job_title, and settings.PublicPOST/api/register/{token}/completeProvision the workspaceCompletes registration and returns an authenticated session.Public
Platform administration
5 endpoints
GET/api/admin/organizationsList organizationsPaginated platform-wide organization list.Super adminPOST/api/admin/organizationsCreate an organizationCreates and provisions a tenant workspace.Super adminGET/api/admin/organizations/{organization}/statsOrganization statisticsReturns note, project, member, attachment, and storage totals.Super adminPOST/api/admin/organizations/{organization}/suspendSuspend an organizationMakes tenant mutations read-only.Super adminPOST/api/admin/organizations/{organization}/activateActivate an organizationRestores normal tenant mutations.Super admin
Organization
4 endpoints
POST/api/organizationsCreate my organizationJSON: name and slug. Creates a workspace and makes the current account its Org Admin.BearerGET/api/organizationGet organization settingsReturns branding, settings, and current workspace information.MemberPUT/api/organizationUpdate organization settingsAccepts name, slug, and supported settings fields.Org adminPOST/api/organization/logoUpload organization logoMultipart: logo. JPEG, PNG, GIF, or WebP up to 5 MB.Org admin
Projects
7 endpoints
GET/api/projectsList projectsPaginated tenant-scoped project collection.MemberPOST/api/projectsCreate a projectJSON: name, optional description, key, member_ids.Editor+GET/api/projects/{project}Get a projectReturns project details and related metadata.MemberPUT/api/projects/{project}Update a projectPartial JSON update for name, description, key, members, status, or progress.Editor+DELETE/api/projects/{project}Delete a projectSoft-deletes the project according to policy.Editor+POST/api/projects/{project}/shareCreate or refresh a share linkReturns the public project share token and URL.Editor+DELETE/api/projects/{project}/shareRevoke a share linkImmediately invalidates the active project link.Editor+
Notes
13 endpoints
GET/api/projects/{project}/notesList project notesSupports pagination and server-side note filters.MemberPOST/api/projects/{project}/notesCreate a noteJSON: title, content, optional type, note_status_id, assignee_ids, label_ids.Editor+POST/api/notes/bulk-labelsBulk update note labelsJSON: note_ids, label_ids, operation (add, remove, or replace).Editor+GET/api/notes/{note}Get a noteReturns note, assignments, labels, status, and attachments.MemberPUT/api/notes/{note}Update a notePartial JSON update of editable note fields.Editor+DELETE/api/notes/{note}Delete a noteSoft-deletes the note.Editor+POST/api/notes/{note}/statusChange note statusJSON: note_status_id. Adds a status-change timeline event.Editor+POST/api/notes/{note}/request-updateRequest an external updateJSON: recipient_email and optional message.Editor+POST/api/notes/{note}/replyPost a replyJSON: content and optional mentioned_user_ids.Editor+GET/api/notes/{note}/timelineGet note timelineChronological creation, update, reply, status, label, and attachment events.MemberGET/api/notes/{note}/update-requestsList update requestsReturns active, used, expired, and revoked update links.MemberDELETE/api/notes/{note}/update-requests/{shareToken}Revoke an update requestInvalidates a single external update link.Editor+POST/api/notes/{note}/update-requests/{shareToken}/resendResend an update requestQueues another delivery of the existing request.Editor+
Attachments
5 endpoints
POST/api/notes/{note}/attachmentsUpload an attachmentMultipart: file, maximum 50 MB. The response begins with scan_status=pending.Editor+GET/api/attachments/{attachment}Get attachment metadataReturns scan status, preview kind, size, hashes, and download URL.MemberGET/api/attachments/{attachment}/downloadDownload an attachmentReturns HTTP 423 until the malware scan is clean.MemberPOST/api/attachments/{attachment}/rescanRetry a failed scanAllowed only when scan_status=error and the quarantined object exists.Org adminDELETE/api/attachments/{attachment}Delete an attachmentDeletes both the private object and attachment record.Editor+
Members
6 endpoints
GET/api/usersList organization membersTenant-scoped member collection.MemberPOST/api/users/inviteAdd a memberJSON: name, email, role. Existing accounts retain their credentials.Org adminPUT/api/users/{user}/roleChange membership roleUpdates the role only in the selected organization.Org adminPATCH/api/users/{user}/accessEnable or disable membershipJSON: enabled. Disabled memberships preserve assignments.Org adminDELETE/api/users/{user}Remove a membershipDetaches current assignments without deleting the global account.Org adminPOST/api/users/{user}/resend-invitationResend an invitationQueues another invitation email.Org admin
Statuses & labels
10 endpoints
GET/api/statusesList note statusesOrdered tenant status collection.MemberPOST/api/statusesCreate a statusJSON: label, tone_key, optional sort_order.Org adminPUT/api/statuses/{status}Update a statusPartial status update.Org adminDELETE/api/statuses/{status}Delete a statusProtected when the status is still in use.Org adminPOST/api/statuses/reorderReorder statusesJSON: ids in the desired order.Org adminGET/api/labelsList note labelsOrdered tenant label collection.MemberPOST/api/labelsCreate a labelJSON: name, color (#RRGGBB), optional sort_order.Org adminPUT/api/labels/{label}Update a labelPartial label update.Org adminDELETE/api/labels/{label}Delete a labelDetaches and deletes the label.Org adminPOST/api/labels/reorderReorder labelsJSON: label_ids in the desired order.Org admin
Requests, activity & notifications
7 endpoints
GET/api/pending-requestsList pending public note requestsReturns unmoderated requests and their scanned images.MemberPOST/api/pending-requests/{pendingNoteRequest}/approveApprove a pending requestCreates a normal note from the public submission.Editor+POST/api/pending-requests/{pendingNoteRequest}/rejectReject a pending requestRejects and removes its quarantined attachments.Editor+GET/api/activity-logsList activity logsPaginated tenant audit trail.MemberGET/api/notificationsList current-user notificationsReturns unread and recent notification records.BearerPOST/api/notifications/read-allMark all notifications readUpdates all unread notifications for the current user.BearerPOST/api/notifications/{id}/readMark one notification readOnly affects a notification owned by the current user.Bearer
Mail & outbound messages
8 endpoints
GET/api/mail-settingsGet mail configurationReturns safe SMTP state and notification preferences; secrets are never returned.Org adminPUT/api/mail-settingsUpdate mail configurationStores SMTP credentials encrypted.Org adminPOST/api/mail-settings/testSend a test emailValidates the pending SMTP settings.Org adminPOST/api/mail-settings/activateActivate organization mailEnables the tested configuration.Org adminPOST/api/mail-settings/deactivateDeactivate organization mailFalls back to platform mail behavior.Org adminGET/api/outbound-messagesList outbound messagesPaginated encrypted outbox and delivery state.Org adminGET/api/outbound-messages/{outboundMailMessage}Get an outbound messageReturns one tenant-scoped message record.Org adminPOST/api/outbound-messages/{outboundMailMessage}/resendResend an outbound messageQueues another delivery attempt.Org admin
Public sharing
5 endpoints
GET/api/public/organizations/{organization}/logoRead public organization logoReturns only the public branding asset.PublicGET/api/public/p/{token}Open a shared projectReturns project branding, global notes, and public-safe timelines.PublicPOST/api/public/p/{token}/request-noteRequest a new noteMultipart or JSON: name, email, title, details, optional image attachments.PublicGET/api/public/update/{token}Open an update requestReturns a safe note/request summary and token state.PublicPOST/api/public/update/{token}Submit a one-time updateMultipart: name, email, message, optional six-digit code and attachments/files.Public