Low-code endpoints
| Method & path | Body / notes | Permission | ||||
|---|---|---|---|---|---|---|
| `GET /forms?archived=true | false` | forms as the caller sees them (hidden fields stripped), with nav_section, record_count, can_design | forms.read | |||
GET /forms/:idOrSlug | — | forms.read | ||||
POST /forms | name (5–20), description?, icon?, nav_section?, fields[], settings { title_field?, submit_label?, detail_layout? } | forms.design | ||||
PATCH /forms/:id | any of the above + `status (active | archived)` | forms.design | |||
DELETE /forms/:id | cascades to records, rules, dashboard & home widgets; 409 while referenced by another form's lookup | forms.design | ||||
GET /forms/:id/references | forms whose lookups point at this form | forms.read | ||||
GET /forms/:id/records | search, filters (JSON), sort, page, page_size | forms.read | ||||
GET /forms/:id/records/:recordId | record with title, linked_from, workflow_runs | forms.read | ||||
POST /forms/:id/records · PATCH …/:recordId · DELETE …/:recordId | data { field_id: value } (field RBAC applied; rules fire) | forms.write | ||||
GET /lookups/:target?q=&form_id= | options for `item | customer | vendor | warehouse | form` | forms.read |
GET /links/:target/:id | custom records referencing a core record / another record | forms.read | ||||
GET /workflow-rules?form_id= · GET /workflow-rules/:id | — | workflows.manage | ||||
POST /workflow-rules · PATCH /:id · DELETE /:id | form_id (null for report_button), name, trigger, condition?, actions[], enabled? | workflows.manage | ||||
GET /workflow-rules/:id/runs · POST /workflow-rules/:id/test | run log; test with a sample record | workflows.manage | ||||
GET /workflow-functions · GET /:id · POST · PATCH /:id · DELETE /:id · POST /:id/test | name, params[], steps[], returns? | workflows.manage | ||||
GET /dashboards · GET /dashboards/:id | widgets, filters, nav_section | dashboards.read | ||||
POST /dashboards · PATCH /:id · DELETE /:id | name, description?, nav_section?, widgets[] (≤ 40), filters[] (≤ 10) | dashboards.manage | ||||
GET /analytics/sources | datasets and forms with their columns (permission-filtered) | dashboards.read | ||||
POST /analytics/run | an analytics query → { columns, rows, points?, trend } | dashboards.read | ||||
POST /analytics/drilldown | query + clicked point → raw rows (paginated) | dashboards.read | ||||
GET /reports?module= · GET /reports/:id | saved module reports | dashboards.read | ||||
POST /reports · PATCH /:id · DELETE /:id | module, name, api_name? (derived when omitted; kept on rename), description?, chart, query (module dataset), options, buttons[] (≤ 8) | dashboards.manage | ||||
POST /forms/:id/records/:recordId/buttons/:buttonId/run | runs a record button's "Button on a record" rule on that record → { run, record } | |||||
GET /blueprints · GET /blueprints/:id | blueprints with stages, transitions, is_active, owner | |||||
POST /blueprints · PATCH /:id · DELETE /:id | form_id, name, description?, stages[] (≤ 30), initial_stage, transitions[] (≤ 60), is_active?; 409 limit_reached after 20 per user | |||||
GET /forms/:id/records/:recordId/blueprint | the record's stage, available transitions and journey | |||||
POST /forms/:id/records/:recordId/blueprint/transitions/:transitionId | comment?, data? → moves the record, records the journey, runs the linked rule | |||||
GET /extensions/:module · POST /extensions/:module | the custom-fields form of a built-in section (created on first POST, forms.design) | |||||
GET /extensions/:module/records/:coreId · PUT … | custom field values of one built-in record (data) | |||||
GET /reports/catalog | every report the caller may open (saved + built-in all_<module> / all_form_<slug>) → { id, module, name, api_name, chart, kind, endpoint }[] | dashboards.read | ||||
GET /reports/by-name/:apiName | one report by API name (a built-in one has id: null) | dashboards.read + roles | ||||
GET /reports/by-name/:apiName/rows · GET /reports/:id/rows | limit (≤ 500), offset, sort, dir, filters (JSON) → { report, columns, rows, total, limit, offset } | dashboards.read + the dataset's read permission + roles | ||||
POST /reports/:id/buttons/:buttonId/run | runs the button's workflow with the report rows (≤ 200) | dashboards.read |
Last updated