Docs
Open app β†’

Nexus PM documentation

Project-management platform β€” module documentation

API base /api/v1 121 PHPUnit tests Laravel 13 PHP 8.5 Filament 5 Sanctum API spatie permission/activitylog/medialibrary Scout Reverb
Getting Started

Overview

Nexus PM is a modular, multi-tenant, API-first project-management platform. Every business object is scoped to a workspace (the tenant). The Filament admin panel and the Sanctum mobile API share the same domain layer.

Getting Started

API Conventions

All API requests use a Sanctum bearer token and a standard response envelope.

MethodEndpointDescription
GET /ping Public health probe
Phase 1 β€” Foundation

Authentication

Token-based auth for the mobile app plus the Filament session guard for the web panel.

MethodEndpointDescription
POST /auth/register Create user + first workspace, return token
POST /auth/login Issue a token for valid credentials
POST /auth/logout Revoke the current token
GET /auth/me Profile + roles + permissions
Models
User
Phase 1 β€” Foundation

Workspaces & Tenancy

A workspace is the tenant. Isolation is enforced by a global WorkspaceScope that fails closed when there is no active workspace, plus auto-filled workspace_id on create.

MethodEndpointDescription
GET /workspaces List the user's workspaces
POST /workspaces/switch Set the active workspace
Models
WorkspaceWorkspaceMember
Phase 1 β€” Foundation

RBAC β€” Roles & Permissions

spatie-permission with the teams feature keyed on workspace_id, so a user can be an admin in one workspace and a viewer in another. 56 permissions across a single catalog.

Permissions
project.*task.*milestone.*sprint.*member.*invoice.*timesheet.*document.*comment.*report.viewautomation.*
Phase 1 β€” Foundation

Members, Teams & Invitations

Per-workspace membership with an email invitation flow and lightweight Teams (groups of users).

MethodEndpointDescription
GET /members List workspace members + pending invites
POST /members/invite Invite an email with a role
POST /members/{id}/resend Resend an invitation
POST /invitations/{token}/accept Accept an invitation (joins + assigns role)
DELETE /members/{id} Remove a member / revoke invite
Permissions
member.viewAnymember.invitemember.updatemember.remove
Models
WorkspaceMemberTeam
Phase 1 β€” Foundation

Audit Log

Every model change is recorded via spatie-activitylog, stamped with the workspace for tenant-safe querying. Viewable in the panel under Settings β†’ Audit Log.

Phase 2 β€” Core PM

Projects

The container for tasks. Each project has a ticket prefix (e.g. MAL) and atomic, row-locked ticket numbering (MAL-1, MAL-2…).

MethodEndpointDescription
GET /projects List (filters: status, q)
POST /projects Create
GET /projects/{slug} Show
PATCH /projects/{slug} Update
DELETE /projects/{slug} Delete
GET /projects/{slug}/budget Budget snapshot
Permissions
project.viewAnyproject.viewproject.createproject.updateproject.delete
Models
Project
Phase 2 β€” Core PM

Tasks & Subtasks

The central work item: status, priority, type, assignee, estimates, story points, dates, and self-referential subtasks. A quality gate blocks "done" until approved when required.

MethodEndpointDescription
GET /tasks List (rich filters)
POST /tasks Create
GET /tasks/{id} Show (incl. custom fields)
PATCH /tasks/{id} Update / move on board
DELETE /tasks/{id} Delete
GET /tasks/export CSV export
POST /tasks/import CSV import
Permissions
task.viewAnytask.viewtask.createtask.updatetask.deletetask.assigntask.approve
Models
Task
Phase 2 β€” Core PM

Milestones & Sprints

Group tasks toward a target date (milestones) or an agile cadence (sprints, with status planned/active/completed).

MethodEndpointDescription
GET /milestones List (filter: project_id, status)
POST /milestones Create
PATCH /milestones/{id} Update (status β†’ completed stamps completed_at)
DELETE /milestones/{id} Delete
GET /sprints List
POST /sprints Create
PATCH /sprints/{id} Update
DELETE /sprints/{id} Delete
Permissions
milestone.*sprint.*
Models
MilestoneSprint
Phase 2 β€” Core PM

Task Dependencies & Checklists

Predecessor/successor relationships (blocks, blocked_by, relates_to, duplicates, precedes) with cycle detection, plus per-task checklists.

MethodEndpointDescription
GET /tasks/{id}/dependencies List dependencies + dependents
POST /tasks/{id}/dependencies Add a dependency
DELETE /tasks/{id}/dependencies/{depId} Remove
POST /tasks/{id}/checklist Add checklist item
PATCH /checklist-items/{id} Toggle / edit
DELETE /checklist-items/{id} Remove
Models
TaskDependencyChecklistItem
Phase 2 β€” Core PM

Tags & Custom Fields

Labels for tasks, and typed dynamic fields (text, number, select, multiselect, date, checkbox, url, user) scoped to a project or the whole workspace.

MethodEndpointDescription
GET /tags List
POST /tags Create
GET /custom-fields List (workspace + project fields)
POST /custom-fields Define a field
PUT /tasks/{id}/custom-fields Set values on a task
Models
TagCustomFieldCustomFieldValue
Phase 3 β€” Views

Board Β· List Β· Calendar Β· Gantt Β· Roadmap

Five ways to look at the same tasks, all in the Filament panel.

Phase 4 β€” Collaboration

Comments & Mentions

Polymorphic, threaded comments on tasks, projects and documents. Mention users and teams with @[Name](user:ID).

MethodEndpointDescription
GET /tasks/{id}/comments List root comments + replies
POST /tasks/{id}/comments Post a comment / reply
PATCH /comments/{id} Edit
DELETE /comments/{id} Delete
Models
Comment
Phase 4 β€” Collaboration

Notifications

Database + broadcast + email channels. The panel shows a notification bell; the mobile app receives push.

Phase 4 β€” Collaboration

Attachments

File uploads on tasks and comments via spatie-medialibrary (S3-ready).

MethodEndpointDescription
GET /tasks/{id}/attachments List
POST /tasks/{id}/attachments Upload (multipart file, ≀20MB)
POST /comments/{id}/attachments Attach to a comment
DELETE /attachments/{id} Delete
Phase 4 β€” Collaboration

Activity Feed & Documents

A workspace activity stream and a nested documents/wiki (markdown).

MethodEndpointDescription
GET /activity Global feed
GET /tasks/{id}/activity Per-task feed
GET /projects/{slug}/activity Per-project feed (incl. its tasks)
GET /documents List (?tree=1 for nested)
POST /documents Create
POST /documents/{id}/duplicate Duplicate (doc template)
Models
Document
Phase 4 β€” Collaboration

Realtime (Reverb)

Live comment events on workspace-namespaced private channels + a presence channel. Authorize at POST /broadcasting/auth.

Phase 5 β€” Planning & Tracking

Time Tracking & Timesheetspriority gap

Timers and manual time logs that roll into weekly timesheets with a submit β†’ approve/reject workflow.

MethodEndpointDescription
POST /tasks/{id}/timer/start Start a timer
POST /timer/stop Stop the running timer
POST /tasks/{id}/time-entries Log time manually
GET /timesheets List
POST /timesheets/{id}/submit Submit
POST /timesheets/{id}/approve Approve
POST /timesheets/{id}/reject Reject
Models
TimeEntryTimesheet
Phase 5 β€” Planning & Tracking

Recurring Tasks & Reminders

Rule-based recurring task generation (daily/weekly/monthly) and per-task reminders, both dispatched by the scheduler.

MethodEndpointDescription
POST /tasks/{id}/reminders Set a reminder
GET /reminders List (?upcoming=1)
DELETE /reminders/{id} Remove
Models
RecurringTaskRuleReminder
Phase 5 β€” Planning & Tracking

Approval Workflow / Quality Gates

Require sign-off before a task can be marked done. Request β†’ approve/reject with notifications.

MethodEndpointDescription
POST /tasks/{id}/approval/request Request approval
POST /approvals/{id}/approve Approve
POST /approvals/{id}/reject Reject
Models
Approval
Phase 5 β€” Planning & Tracking

Automations / Pipelines

Rule-based "when X, do Y" engine fired on task events, with a re-entrancy guard so a rule's own edits can't loop.

Models
AutomationRule
Phase 6 β€” Insight & Ops

Dashboards & Reports

Dashboard widgets (stats, tasks-by-status chart, my tasks, recent activity) and report endpoints.

MethodEndpointDescription
GET /reports/overview Open/overdue/done counts + by-status
GET /reports/workload Open work per assignee
GET /reports/velocity Committed vs completed points/sprint
GET /sprints/{id}/burndown Sprint burndown series
GET /reports/standup Standup summary
Phase 6 β€” Insight & Ops

Billing / Invoicing & Budgetspriority gap

Client-facing invoices generated from billable time (no double-billing), with tax, status transitions and PDF export β€” plus per-project budget tracking.

MethodEndpointDescription
GET /invoices List
POST /invoices Create (manual, with items)
POST /invoices/generate Generate from time
POST /invoices/{id}/transition sent / paid / void
GET /invoices/{id}/pdf Download PDF
Permissions
invoice.viewAnyinvoice.viewinvoice.createinvoice.updateinvoice.delete
Models
InvoiceInvoiceItem
Phase 6 β€” Insight & Ops

Integrations & Webhooks

Outbound, HMAC-signed webhooks fired on task events, and an inbound git webhook that links commits to tickets.

MethodEndpointDescription
GET /webhook-endpoints List endpoints
POST /webhook-endpoints Create (returns secret once)
POST /integrations/git/{token} Inbound git webhook (public, token-authed)
Models
WebhookEndpoint
Phase 6 β€” Insight & Ops

Templates & Import/Export

Task and project templates that instantiate into a project, plus CSV task import/export.

MethodEndpointDescription
POST /task-templates/{id}/instantiate Create tasks from a template
POST /project-templates/{id}/instantiate Spin up a project from a blueprint
GET /tasks/export CSV export
POST /tasks/import CSV import
Models
TaskTemplateProjectTemplate
Phase 7 β€” Mobile

Mobile Enablement

API hardening, push notifications, offline delta-sync and focused mobile endpoints. The native Flutter/RN app is a separate client (see MOBILE_API.md).

MethodEndpointDescription
POST /devices Register a push token
GET /sync Delta pull (?since=cursor) + tombstones
POST /sync Push offline mutations
GET /my-tasks Today / overdue / upcoming buckets
POST /quick-capture Fast task capture (auto Inbox)
Models
DeviceToken