Hermes 284313f908
Some checks are pending
Bidi Control Character Guard / bidi-control-guard (push) Waiting to run
Circular Dependency Check / Check for new circular dependencies (push) Waiting to run
Citus Migration Smoke / Combined migrations on single-node Citus (push) Waiting to run
E2E Fresh Install Tests / fresh-install-e2e (push) Waiting to run
ext-v2 guardrails / Run ext-v2 guard and ESLint (push) Waiting to run
Integration Tests / Check for relevant changes (push) Waiting to run
Integration Tests / ${{ (github.event_name == 'schedule' || github.event.inputs.suite == 'full') && 'Full integration suite' || 'Tier-1 integration subset' }} (push) Blocked by required conditions
Mobile checks / Mobile lint + typecheck (push) Waiting to run
Mobile checks / Mobile unit tests (push) Waiting to run
Mobile checks / Mobile dependency audit (report) (push) Waiting to run
Mobile checks / Mobile reproducibility checks (push) Waiting to run
Secrets guard (env backups) / Ensure no tracked env backup files (push) Waiting to run
Temporal Readiness / fast-readiness (push) Waiting to run
Temporal Readiness / docker-parity (push) Waiting to run
TypeScript Type Check / Nx affected typecheck (push) Waiting to run
Unit Tests / Skipped-test budget (push) Waiting to run
Unit Tests / Nx affected unit tests (push) Waiting to run
Unit Tests / Server unit coverage (informational) (push) Waiting to run
Validate Tenant Management Schema / Check for relevant changes (push) Waiting to run
Validate Tenant Management Schema / Validate Tenant Management Schema (push) Blocked by required conditions
EE Workflows Build Guard / ee-workflows-build-guard (push) Waiting to run
Initial import of AlgaPSA codebase from PSA server
Excluded: .git, node_modules, secrets/, compose.env, assemblyscript tgz

Source: /opt/alga-psa on psa.joliet.tech
2026-06-22 16:12:17 -05:00

100 lines
2.4 KiB
Markdown

# Mobile API Contract (Ticketing MVP)
Last updated: 2026-02-03
This document describes the REST API surface used by the React Native mobile app (`ee/mobile/`) for the Ticketing MVP.
## Authentication (mobile)
### Web sign-in + mobile OTT
- Browser login: `GET /auth/signin` (SSO providers as configured)
- Mobile handoff: `GET /auth/mobile/handoff?redirect={deepLink}&state={state}`
- Redirects to `redirect` with `ott` + `state` query params
### Mobile token exchange/refresh
- `GET /api/v1/mobile/auth/capabilities`
- `POST /api/v1/mobile/auth/exchange`
- `POST /api/v1/mobile/auth/refresh`
- `POST /api/v1/mobile/auth/revoke`
### API key usage for ticket APIs
Mobile uses a short-lived API key for API v1 routes:
- Header: `x-api-key: {accessToken}`
- Header: `x-tenant-id: {tenantId}` (recommended; required for some validation paths)
## Ticketing APIs
### List tickets
`GET /api/v1/tickets`
Query params (mobile):
- Pagination: `page`, `limit`
- Sorting: `sort`, `order`
- Search: `search`
- Filters:
- `is_open=true|false`
- `is_closed=true|false`
- `assigned_to={userId}`
- `has_assignment=true|false`
- `priority_name={string}`
- `status_name={string}`
- `updated_from={ISO datetime}`
- `updated_to={ISO datetime}`
- Field selection:
- `fields=mobile_list` (recommended for mobile list payload)
### Ticket stats
`GET /api/v1/tickets/stats`
Returns aggregate counts (open/unassigned/overdue).
### Ticket detail
`GET /api/v1/tickets/{ticketId}`
Returns ticket fields and additional joined fields as available.
### Ticket comments
- `GET /api/v1/tickets/{ticketId}/comments`
- Supports pagination in the mobile client (client-side paging today).
- `POST /api/v1/tickets/{ticketId}/comments`
- Body: `{ comment_text: string, is_internal: boolean }`
### Statuses + update
- `GET /api/v1/tickets/statuses`
- `PUT /api/v1/tickets/{ticketId}/status`
- Body: `{ status_id: string }`
### Assignment
`PUT /api/v1/tickets/{ticketId}/assignment`
Body: `{ assigned_to: string | null }`
### Priorities
- `GET /api/v1/tickets/priorities`
- Priority update uses `PUT /api/v1/tickets/{ticketId}` with `{ priority_id }`
### Partial update (attributes)
`PUT /api/v1/tickets/{ticketId}`
Used by mobile for updating `attributes` (e.g. due date, watchers).
### Time entry create
`POST /api/v1/time-entries`
Used by mobile to create a time entry linked to a ticket (`work_item_type=ticket`, `work_item_id={ticketId}`).