Last Updated: August 16, 2025
This document explains how third‑party developers can integrate an external data source with the application. The app lets you specify your own API base URL (e.g., https://x8ki-letl-twmt.n7.xano.io/api:BngaZ0Mv
) so it can pull and push data from your system instead of the default backend. While the examples assume a relational/SQL backend, the same concepts apply to NoSQL as long as responses follow the formats below.
The application works with three core entities:
id
, name
, email
, capacity
(decimal), andwork_days
(array of integers 1–7).id
, title
, optional note
, color
(numeric id), and enum_status_id
.id
, project_id
, resource_id
,date_from
, date_to
, hours_per_day
, optional note
.The client normalises common SQL snake_case fields to camelCase:
API field (SQL style) | Client normalised property | Notes |
---|---|---|
project_id | projectId | Also derived when a nested project object is returned |
resource_id | resourceId | Also derived when a nested resource object is returned |
date_from | dateFrom | Parsed as a local‑midnight Date |
date_to | dateTo | Parsed as a local‑midnight Date |
hours_per_day | hoursPerDay | Converted to a floating‑point number |
work_days | workDays | Integers 1–7 (Mon–Sun) |
Camel‑cased properties are also accepted. If nested objects (project
, resource
) are returned, the client derivesprojectId
and resourceId
automatically.
The client prefixes all requests with the configuredapiBaseUrl
. Endpoints should be relative to your API root and must return JSON with appropriate CORS headers.
Return all resources, projects, and assignments in a single payload:
{
"resources": [
{
"id": 1,
"name": "Alice",
"email": "alice@example.com",
"capacity": 37.5,
"work_days": [1, 2, 3, 4, 5]
}
],
"projects": [
{
"id": 42,
"title": "Migration Project",
"note": "Phase 1 rollout",
"color": 3,
"enum_status_id": 1
}
],
"assignments": [
{
"id": 7,
"project_id": 42,
"resource_id": 1,
"date_from": "2025-09-01",
"date_to": "2025-09-10",
"hours_per_day": 8,
"note": "Overtime"
}
]
}
Property names may be snake_case or camelCase; the client normalises them.
Method | Endpoint | Description |
---|---|---|
GET | /resources | List all resources |
POST | /resources | Create a resource; return the created record with id |
GET | /resources/{id} | Fetch a single resource |
PUT/PATCH | /resources/{id} | Update a resource |
DELETE | /resources/{id} | Delete a resource and its assignments |
Method | Endpoint | Description |
---|---|---|
GET | /projects | List all projects |
POST | /projects | Create a project; return the created record with id |
GET | /projects/{id} | Fetch a single project |
PUT/PATCH | /projects/{id} | Update a project |
DELETE | /projects/{id} | Delete a project (and its assignments) |
Method | Endpoint | Description |
---|---|---|
GET | /assignments | List all assignments |
POST | /assignments | Create an assignment; return the created record with id |
GET | /assignments/{id} | Fetch a single assignment |
PUT/PATCH | /assignments/{id} | Update an assignment |
DELETE | /assignments/{id} | Delete an assignment |
GET /enum_colors
– list of colours with id
and color string (e.g. #E91E63
)GET /enum_status
– list of statuses with id
and a human‑readable titleProtect your API with your own authentication. Because the planner runs in the browser and calls your API directly, configure CORS to allow requests from your domain.
Each workspace stores an apiBaseUrl
. Scope your data per workspace (e.g., via workspace IDs or tenant‑specific base URLs).
YYYY-MM-DD
orYYYY-MM-DDTHH:MM:SSZ
). The client parses them to Dates.hours_per_day
is converted to a float. Prefer dot as decimal separator.work_days
is an array of integers 1–7 (Mon–Sun). If omitted, the client assumes Mon–Fri.GET /loadData
and normalises the response.POST /projects
; on success, the client inserts it into local state.POST /assignments
; on success, the client adds it to the grid immediately.PUT/PATCH/DELETE
the relevant entity and update local cache on success.By exposing the endpoints above and returning JSON in the expected format, you can plug your own database into the planner. The client normalises both SQL‑style and Mongo‑style payloads, so you do not need to mirror internal models; just provide the required fields and consistent date/number formats. Enable CORS and add authentication as appropriate for your environment.