sylo-ignition 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/publish.yml +30 -0
- package/package.json +27 -13
- package/references/README.md +0 -45
- package/references/gateway-rest-api-8.3.md +0 -119
- package/references/quickref/README.md +0 -12
- package/references/quickref/formats-quickref.md +0 -94
- package/references/quickref/gateway-rest-api-8.3.md +0 -119
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Publishes to npm via Trusted Publishing (OIDC — no tokens).
|
|
2
|
+
# npm side: package Settings -> Trusted publishing -> GitHub Actions ->
|
|
3
|
+
# user Yeti-Trix, this repo, workflow filename publish.yml.
|
|
4
|
+
# Release flow: bump package.json version -> commit -> tag vX.Y.Z -> push tag.
|
|
5
|
+
# Provenance attestations are generated automatically (public repo + package).
|
|
6
|
+
name: Publish Package
|
|
7
|
+
|
|
8
|
+
on:
|
|
9
|
+
push:
|
|
10
|
+
tags:
|
|
11
|
+
- 'v*'
|
|
12
|
+
workflow_dispatch:
|
|
13
|
+
|
|
14
|
+
permissions:
|
|
15
|
+
id-token: write
|
|
16
|
+
contents: read
|
|
17
|
+
|
|
18
|
+
jobs:
|
|
19
|
+
publish:
|
|
20
|
+
runs-on: ubuntu-latest
|
|
21
|
+
steps:
|
|
22
|
+
- uses: actions/checkout@v6
|
|
23
|
+
- uses: actions/setup-node@v6
|
|
24
|
+
with:
|
|
25
|
+
node-version: '24'
|
|
26
|
+
registry-url: 'https://registry.npmjs.org'
|
|
27
|
+
package-manager-cache: false
|
|
28
|
+
- run: npm install
|
|
29
|
+
- run: npm run build --if-present
|
|
30
|
+
- run: npm publish
|
package/package.json
CHANGED
|
@@ -1,22 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sylo-ignition",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "Ignition 8.3 gateway + project assistant — file-based resource authoring, REST scan/hot-reload, tag scaffolding, screenshot-verified Perspective UI",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"pi-package"
|
|
8
8
|
],
|
|
9
|
-
"files": [
|
|
10
|
-
"assets",
|
|
11
|
-
"extensions",
|
|
12
|
-
"scripts",
|
|
13
|
-
"skills",
|
|
14
|
-
"references/README.md",
|
|
15
|
-
"references/gateway-rest-api-8.3.md",
|
|
16
|
-
"references/quickref",
|
|
17
|
-
"README.md",
|
|
18
|
-
"LICENSE"
|
|
19
|
-
],
|
|
20
9
|
"pi": {
|
|
21
10
|
"extensions": [
|
|
22
11
|
"./extensions/index.ts"
|
|
@@ -32,5 +21,30 @@
|
|
|
32
21
|
"dependencies": {
|
|
33
22
|
"typebox": "^1.1.24"
|
|
34
23
|
},
|
|
35
|
-
"license": "MIT"
|
|
24
|
+
"license": "MIT",
|
|
25
|
+
"gitHead": "f05700bce9bf8ef8574894f24a8a3fa71da11d61",
|
|
26
|
+
"dist": {
|
|
27
|
+
"integrity": "sha512-TZQaPVwyV8vcMQOV7Oa/GeQGtr+W3vIN3AlG3m3iQvUcIy4u9hDDE0kb4WOZHMJH05KCj/jKGIM9G/ZjumUsHA==",
|
|
28
|
+
"shasum": "f1e03d13b3b95da6b0c0a9fd3595cb8f5fc2ba41",
|
|
29
|
+
"tarball": "https://registry.npmjs.org/sylo-ignition/-/sylo-ignition-0.1.0.tgz",
|
|
30
|
+
"fileCount": 28,
|
|
31
|
+
"unpackedSize": 118677,
|
|
32
|
+
"signatures": [
|
|
33
|
+
{
|
|
34
|
+
"keyid": "SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U",
|
|
35
|
+
"sig": "MEYCIQDRNu/ocosEo1RAAnKzjvIB2xu/S+KLK5vmm0Y6uzlvygIhAMtbI0Vou7mRlwEXfyjcGwWwzrlXdft2KOL4LYOaKxmk"
|
|
36
|
+
}
|
|
37
|
+
]
|
|
38
|
+
},
|
|
39
|
+
"directories": {},
|
|
40
|
+
"maintainers": [
|
|
41
|
+
{
|
|
42
|
+
"name": "yeti-trix",
|
|
43
|
+
"email": "spencer.current@gmail.com"
|
|
44
|
+
}
|
|
45
|
+
],
|
|
46
|
+
"repository": {
|
|
47
|
+
"type": "git",
|
|
48
|
+
"url": "git+https://github.com/Yeti-Trix/sylo-ignition.git"
|
|
49
|
+
}
|
|
36
50
|
}
|
package/references/README.md
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
# Ignition reference docs (offline)
|
|
2
|
-
|
|
3
|
-
Offline Ignition documentation for the **sylo-ignition** package. Fetched
|
|
4
|
-
2026-08-30 with `packages/sylo-ignition/scripts/fetch_docs.py` (requires
|
|
5
|
-
pandoc 3.x; re-run any time to refresh — downloads are cached/resumable in
|
|
6
|
-
`~/igscrape/html/`).
|
|
7
|
-
|
|
8
|
-
> **Provenance.** Content is © Inductive Automation, scraped from their public
|
|
9
|
-
> documentation sites for internal offline use. Every page records its source
|
|
10
|
-
> URL under the title. Do not redistribute.
|
|
11
|
-
|
|
12
|
-
## What's here
|
|
13
|
-
|
|
14
|
-
| Path | Contents | Size |
|
|
15
|
-
|------|----------|------|
|
|
16
|
-
| `user-manual-8.3/` | **Ignition 8.3 User Manual** — 1566 pages as Markdown (tables, code blocks, internal links preserved). Mirrors `docs.inductiveautomation.com/docs/8.3/…` paths. | 28 MB |
|
|
17
|
-
| `sdk-docs/` | **Ignition SDK Programmer's Guide (8.3)** — 63 pages as Markdown. Mirrors `sdk-docs.inductiveautomation.com/docs/8.3/…`. | 0.6 MB |
|
|
18
|
-
| `user-manual-8.1-pdfs/` | **Official 8.1 manual PDF exports** (IA legacy-docs, taken 2024-02-21) — 17 files incl. Platform, Scripting Functions, Expression Functions, Perspective/Vision Components refs. Use with the **pdf-reader** skill (`search_schematic_pdf` etc.). *Git-ignored — re-fetch with `fetch_docs.py`.* | 262 MB |
|
|
19
|
-
|
|
20
|
-
## How to use (agent notes)
|
|
21
|
-
|
|
22
|
-
- **Search:** `grep -rn "<term>" user-manual-8.3 --include="*.md"` — pipe-table
|
|
23
|
-
and grid-table contents are all greppable. Prefer searching here over the web
|
|
24
|
-
for Ignition facts; cite the `> Source:` line when referencing.
|
|
25
|
-
- **Key pages for the package:**
|
|
26
|
-
- `user-manual-8.3/platform/tags/tag-properties.md` — tag JSON property names + on-disk tag file paths
|
|
27
|
-
- `user-manual-8.3/tutorials/version-control-guide.md` — file-based config, `.gitignore`, scan endpoints
|
|
28
|
-
- `user-manual-8.3/platform/gateway/openapi.md` — REST API + API keys
|
|
29
|
-
- `user-manual-8.3/appendix/components/perspective-components/` — Perspective component catalog (per-component props/events)
|
|
30
|
-
- `user-manual-8.3/appendix/scripting-functions/` — Jython `system.*` function reference
|
|
31
|
-
- `user-manual-8.3/new-in-this-version.md` — 8.3.0→8.3.9 changelog deltas
|
|
32
|
-
- `sdk-docs/programming-for-the-gateway/storing-data-using-resource-collections.md` — the config resource model
|
|
33
|
-
- **8.1 questions:** use the PDFs (`user-manual-8.1-pdfs/DOC-81-3-platform.pdf`,
|
|
34
|
-
`DOC-81-4-scripting-functions.pdf`, `DOC-81-6-2-perspective-components.pdf`, …)
|
|
35
|
-
via pdf-reader tools.
|
|
36
|
-
|
|
37
|
-
## Known limitations
|
|
38
|
-
|
|
39
|
-
- 4 pages skipped (no extractable content): the visual `/scopes/*` pages
|
|
40
|
-
(`scopes`, `gateway`, `perspective-session`, `vision-client`). Read them online if needed.
|
|
41
|
-
- Images are **not** mirrored; image links point at the live site.
|
|
42
|
-
- 1 page retains a raw HTML table (grid conversion failed) — content still greppable.
|
|
43
|
-
- Admonitions (note/tip boxes) are flattened into plain paragraphs — look for
|
|
44
|
-
the bold title line ("Note", "Danger", …) that precedes them.
|
|
45
|
-
- The 8.1 PDFs snapshot Feb 2024 — later 8.1.x point releases are not covered.
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
# Ignition 8.3 Gateway REST API — verified route map
|
|
2
|
-
|
|
3
|
-
Verified live 2026-08-30 against a **native Windows Ignition 8.3.9** install
|
|
4
|
-
(Perspective module 3.3.9), gateway at `http://localhost:8088`. Full OpenAPI
|
|
5
|
-
spec: `GET /openapi.json` with the `X-Ignition-API-Token` header (12 MB on a
|
|
6
|
-
full-module install, 588 routes). This file is the curated subset the
|
|
7
|
-
sylo-ignition tools actually use.
|
|
8
|
-
|
|
9
|
-
## Auth (verified recipe)
|
|
10
|
-
|
|
11
|
-
- Create API key: **Platform → Security → API Keys → Create API Key +**
|
|
12
|
-
(Basic Token). Token shown once.
|
|
13
|
-
- Key must have **"Require secure connections" unchecked** for plain-HTTP
|
|
14
|
-
local gateways (checked → 403 over HTTP).
|
|
15
|
-
- Role-derived levels (Roles→Administrator) are **greyed out** for API keys.
|
|
16
|
-
Custom levels are assignable. Working setup (verified):
|
|
17
|
-
1. **Platform → Security → Levels**: add custom level `SyloAPI` under
|
|
18
|
-
`Authenticated`
|
|
19
|
-
2. Assign `SyloAPI` to the API key
|
|
20
|
-
3. **Platform → Security → General Settings → Roles and Permissions**:
|
|
21
|
-
check `SyloAPI` for Gateway Read AND Gateway Write permissions
|
|
22
|
-
- Every request: header `X-Ignition-API-Token: <token>`.
|
|
23
|
-
- Status codes: bad/dead token → 401; insufficient security level → 403
|
|
24
|
-
(route exists); no such route → 404 (`No route match for path: /v1/...`).
|
|
25
|
-
|
|
26
|
-
## Scan / safe-edit protocol
|
|
27
|
-
|
|
28
|
-
| Method | Route | Purpose |
|
|
29
|
-
|--------|-------|---------|
|
|
30
|
-
| GET | `/data/api/v1/scan/projects` | Project scan status (`scanActive`, `lastScanTimestamp`) |
|
|
31
|
-
| POST | `/data/api/v1/scan/projects` | **Trigger project scan** — hot-loads disk edits into gateway + Designer |
|
|
32
|
-
| GET/POST | `/data/api/v1/scan/config` | Same for gateway config (`data/config/**`) |
|
|
33
|
-
| GET | `/data/api/v1/scan-lock/projects` | Scan-lock info |
|
|
34
|
-
| POST | `/data/api/v1/scan-lock/projects` | Acquire project scan lock (mutual exclusion while writing on disk) |
|
|
35
|
-
| GET | `/data/api/v1/sync/items` | Config sync status |
|
|
36
|
-
| POST | `/data/api/v1/sync/reset` | Reset config sync |
|
|
37
|
-
|
|
38
|
-
## Projects API
|
|
39
|
-
|
|
40
|
-
| Method | Route | Purpose |
|
|
41
|
-
|--------|-------|---------|
|
|
42
|
-
| GET | `/data/api/v1/projects/list` | List all projects (with resource counts) |
|
|
43
|
-
| GET | `/data/api/v1/projects/names` | Project names |
|
|
44
|
-
| POST | `/data/api/v1/projects` | Create project |
|
|
45
|
-
| GET | `/data/api/v1/projects/find/{name}` | Project details |
|
|
46
|
-
| PUT | `/data/api/v1/projects/{name}` | Modify project (title/description/enabled/parent) |
|
|
47
|
-
| DELETE | `/data/api/v1/projects/{name}` | Delete project |
|
|
48
|
-
| POST | `/data/api/v1/projects/copy` | Copy project |
|
|
49
|
-
| POST | `/data/api/v1/projects/rename/{name}` | Rename project |
|
|
50
|
-
| GET | `/data/api/v1/projects/export/{name}` | **Export project zip** |
|
|
51
|
-
| POST | `/data/api/v1/projects/import/{name}` | **Import project zip** |
|
|
52
|
-
|
|
53
|
-
## Resources API (gateway config, pattern per type)
|
|
54
|
-
|
|
55
|
-
Pattern per resource type (393 routes total):
|
|
56
|
-
`GET /data/api/v1/resources/list|names|type|find|rename|delete/{moduleId}/{typeId}`,
|
|
57
|
-
`PUT|POST /data/api/v1/resources/{moduleId}/{typeId}` (create/update),
|
|
58
|
-
`GET|PUT|DELETE .../datafile/{moduleId}/{typeId}/{name}/{filename}` (attached files),
|
|
59
|
-
`GET .../singleton/{moduleId}/{typeId}` (singletons).
|
|
60
|
-
|
|
61
|
-
Key types for sylo-ignition:
|
|
62
|
-
|
|
63
|
-
| Module | Type | Use |
|
|
64
|
-
|--------|------|-----|
|
|
65
|
-
| `ignition` | `tag-provider` | Tag provider CRUD |
|
|
66
|
-
| `com.inductiveautomation.opcua` | `device` | OPC UA device connections |
|
|
67
|
-
| `ignition` | `opc-connection` | Legacy OPC connections |
|
|
68
|
-
| `ignition` | `database-connection` | DB connections |
|
|
69
|
-
| `com.inductiveautomation.perspective` | `themes` | **Theme resources** (theme.json + css files via datafile routes) |
|
|
70
|
-
| `com.inductiveautomation.perspective` | `fonts`, `icons` | Fonts / icon sets |
|
|
71
|
-
| `ignition` | `security-levels`, `security-properties`, `security-zone` | Security config |
|
|
72
|
-
| `ignition` | `identity-provider`, `user-source` | Authn config |
|
|
73
|
-
|
|
74
|
-
## Tags
|
|
75
|
-
|
|
76
|
-
| Method | Route | Purpose |
|
|
77
|
-
|--------|-------|---------|
|
|
78
|
-
| GET | `/data/api/v1/tags/export` | **Download tag export (JSON)** — provider/tag paths, recursive |
|
|
79
|
-
| POST | `/data/api/v1/tags/import` | **Import tags (JSON)** — create/override, collision handling |
|
|
80
|
-
| PUT | `/data/api/v1/managed-tag-provider` | Write managed tag provider definitions |
|
|
81
|
-
|
|
82
|
-
No REST route for tag **values** (definitions only). Value read/write goes
|
|
83
|
-
through the gateway's OPC-UA server or scripting, not this API.
|
|
84
|
-
|
|
85
|
-
## Perspective module API
|
|
86
|
-
|
|
87
|
-
| Method | Route | Purpose |
|
|
88
|
-
|--------|-------|---------|
|
|
89
|
-
| GET | `/data/perspective/api/v1/sessions/` | Live sessions |
|
|
90
|
-
| GET | `/data/perspective/api/v1/session/{sessionId}` | Session detail |
|
|
91
|
-
| GET | `/data/perspective/api/v1/session/{sessionId}/pages` | Pages in session |
|
|
92
|
-
| GET | `/data/perspective/api/v1/session/{sessionId}/page/{pageId}/views` | Mounted views |
|
|
93
|
-
| DELETE | `/data/perspective/api/v1/sessions` | Terminate session(s) |
|
|
94
|
-
| POST | `/data/perspective/api/v1/themes/copy-base-themes` | **Copy base themes into project** (start of theme customization) |
|
|
95
|
-
|
|
96
|
-
## Gateway status / diagnostics
|
|
97
|
-
|
|
98
|
-
| Method | Route | Purpose |
|
|
99
|
-
|--------|-------|---------|
|
|
100
|
-
| GET | `/data/api/v1/gateway-info` | Version/edition/platform info |
|
|
101
|
-
| GET | `/data/api/v1/overview` | Gateway overview (modules, system) |
|
|
102
|
-
| GET | `/data/api/v1/overview/problems` | Health problems list |
|
|
103
|
-
| GET | `/data/api/v1/overview/connections` | Connection statuses |
|
|
104
|
-
| GET | `/data/api/v1/logs` | Gateway logs (debug scan failures etc.) |
|
|
105
|
-
| GET | `/data/api/v1/logs/download` | Download logs |
|
|
106
|
-
| GET | `/data/api/v1/backup` | **Gateway backup download** (pre-change safety) |
|
|
107
|
-
| POST | `/data/api/v1/backup` | Restore backup |
|
|
108
|
-
| GET | `/data/api/v1/designers` | Open Designer sessions (conflict detection!) |
|
|
109
|
-
| GET | `/data/api/v1/entity/browse` | Browse config entities |
|
|
110
|
-
| GET/POST/PUT/DELETE | `/data/api/v1/mode*` | Deployment modes |
|
|
111
|
-
| GET | `/data/api/v1/licenses` | License info |
|
|
112
|
-
| GET | `/data/api/v1/trial` | Trial info |
|
|
113
|
-
|
|
114
|
-
## OPC-UA module API (client/server PKI)
|
|
115
|
-
|
|
116
|
-
`/data/opc-ua/api/v1/...` — trust/reject/download/upload certificates for
|
|
117
|
-
client & server PKI, regenerate server certificate. Needed for connecting to
|
|
118
|
-
real PLCs (Logix/Modbus/Siemens etc. are driver configs via resources API:
|
|
119
|
-
`com.inductiveautomation.opcua/device`).
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
# Ignition 8.3 quick reference (bundled with the skill)
|
|
2
|
-
|
|
3
|
-
This small folder is copied to `~/.pi/agent/references/ignition/` so the
|
|
4
|
-
essentials travel with the skill. The **full** corpus (1,566-page User Manual +
|
|
5
|
-
SDK docs as Markdown) stays in the Sylo repo at
|
|
6
|
-
`packages/sylo-ignition/references/` — see `ignition-reference` SKILL.md.
|
|
7
|
-
|
|
8
|
-
- `gateway-rest-api-8.3.md` — verified route map of the 588-route REST API,
|
|
9
|
-
the working API-key security-level recipe, and per-area tables (projects,
|
|
10
|
-
scan, resources, tags, Perspective, diagnostics).
|
|
11
|
-
- `formats-quickref.md` — on-disk layout, view.json, bindings, resource.json,
|
|
12
|
-
Jython 2.7 notes.
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
# Ignition 8.3 formats quickref
|
|
2
|
-
|
|
3
|
-
Verified against a live 8.3.9 install (2026-08-30).
|
|
4
|
-
|
|
5
|
-
## On-disk project layout
|
|
6
|
-
|
|
7
|
-
```
|
|
8
|
-
data/projects/<Name>/
|
|
9
|
-
├── project.json # {"title","description","enabled","inheritable","parent"}
|
|
10
|
-
└── com.inductiveautomation.perspective/
|
|
11
|
-
├── views/<viewPath>/ # resource.json + view.json + thumbnail.png
|
|
12
|
-
├── page-config/config.json/ # page config resource
|
|
13
|
-
├── page-startup/onPageStartup.py/
|
|
14
|
-
└── session-props/props.json/
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
## resource.json (per resource folder — gateway-owned, never hand-edit existing)
|
|
18
|
-
|
|
19
|
-
```json
|
|
20
|
-
{
|
|
21
|
-
"scope": "G",
|
|
22
|
-
"version": 1,
|
|
23
|
-
"restricted": false,
|
|
24
|
-
"overridable": true,
|
|
25
|
-
"files": ["view.json", "thumbnail.png"],
|
|
26
|
-
"attributes": {
|
|
27
|
-
"lastModificationSignature": "<sha256-hex>",
|
|
28
|
-
"lastModification": { "actor": "operator", "timestamp": "2026-08-30T20:54:34Z" }
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
## Perspective view.json skeleton (VERIFIED live on 8.3.9)
|
|
34
|
-
|
|
35
|
-
```json
|
|
36
|
-
{
|
|
37
|
-
"custom": {},
|
|
38
|
-
"params": {},
|
|
39
|
-
"props": {},
|
|
40
|
-
"root": {
|
|
41
|
-
"type": "ia.container.coord",
|
|
42
|
-
"meta": { "name": "root" },
|
|
43
|
-
"children": [
|
|
44
|
-
{
|
|
45
|
-
"type": "ia.display.label",
|
|
46
|
-
"meta": { "name": "titleLabel" },
|
|
47
|
-
"position": { "x": 24, "y": 24, "width": 400, "height": 40 },
|
|
48
|
-
"props": { "text": "Overview", "style": { "fontSize": "24px" } }
|
|
49
|
-
}
|
|
50
|
-
]
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
- `root` is a **top-level key holding the root component** — NOT `props.root.children`.
|
|
56
|
-
Malformed views are silently dropped by the scan.
|
|
57
|
-
- `meta.name` unique per view. Position: absolute px inside coord (verified);
|
|
58
|
-
`mode: "flow"` inside flex containers (verified); `mode: "percent"` unverified —
|
|
59
|
-
labels stacked at 0,0 in live testing.
|
|
60
|
-
- Bindings wrap values: `"text": {"binding": {"type": "property", "config": {"path": "view.params.title"}}}`
|
|
61
|
-
— types: property, tag (`[provider]path/to/tag`), expr (Perspective expression
|
|
62
|
-
language), query; `config.transforms` chain output transforms.
|
|
63
|
-
|
|
64
|
-
## Page-config (required for a view to be reachable)
|
|
65
|
-
|
|
66
|
-
`com.inductiveautomation.perspective/page-config/config.json`:
|
|
67
|
-
|
|
68
|
-
```json
|
|
69
|
-
{
|
|
70
|
-
"pages": { "/": { "viewPath": "Home" } },
|
|
71
|
-
"sharedDocks": { "cornerPriority": "top-bottom" }
|
|
72
|
-
}
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
The URL after the project name is the PAGE path; pages map to view paths here.
|
|
76
|
-
|
|
77
|
-
## project.json
|
|
78
|
-
|
|
79
|
-
```json
|
|
80
|
-
{ "title": "Example Project", "description": "", "enabled": true, "inheritable": false, "parent": "" }
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
## Gateway scripts = Jython 2.7
|
|
84
|
-
|
|
85
|
-
No f-strings / async / pathlib / match. Use `%`/`.format()`. `system.*` functions
|
|
86
|
-
(e.g. `system.tag.readBlocking(["[default]Line1/Speed"])`).
|
|
87
|
-
|
|
88
|
-
## Auth (API key)
|
|
89
|
-
|
|
90
|
-
Header `X-Ignition-API-Token`. Working recipe (8.3.9): API key (Basic Token,
|
|
91
|
-
secure-connections unchecked for plain HTTP) holding a custom security level
|
|
92
|
-
(e.g. `SyloAPI` under `Authenticated`), granted Gateway Read + Write in
|
|
93
|
-
Security > General Settings > Roles and Permissions. 401 = bad token;
|
|
94
|
-
403 = insufficient level; 404 = route doesn't exist.
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
# Ignition 8.3 Gateway REST API — verified route map
|
|
2
|
-
|
|
3
|
-
Verified live 2026-08-30 against a **native Windows Ignition 8.3.9** install
|
|
4
|
-
(Perspective module 3.3.9), gateway at `http://localhost:8088`. Full OpenAPI
|
|
5
|
-
spec: `GET /openapi.json` with the `X-Ignition-API-Token` header (12 MB on a
|
|
6
|
-
full-module install, 588 routes). This file is the curated subset the
|
|
7
|
-
sylo-ignition tools actually use.
|
|
8
|
-
|
|
9
|
-
## Auth (verified recipe)
|
|
10
|
-
|
|
11
|
-
- Create API key: **Platform → Security → API Keys → Create API Key +**
|
|
12
|
-
(Basic Token). Token shown once.
|
|
13
|
-
- Key must have **"Require secure connections" unchecked** for plain-HTTP
|
|
14
|
-
local gateways (checked → 403 over HTTP).
|
|
15
|
-
- Role-derived levels (Roles→Administrator) are **greyed out** for API keys.
|
|
16
|
-
Custom levels are assignable. Working setup (verified):
|
|
17
|
-
1. **Platform → Security → Levels**: add custom level `SyloAPI` under
|
|
18
|
-
`Authenticated`
|
|
19
|
-
2. Assign `SyloAPI` to the API key
|
|
20
|
-
3. **Platform → Security → General Settings → Roles and Permissions**:
|
|
21
|
-
check `SyloAPI` for Gateway Read AND Gateway Write permissions
|
|
22
|
-
- Every request: header `X-Ignition-API-Token: <token>`.
|
|
23
|
-
- Status codes: bad/dead token → 401; insufficient security level → 403
|
|
24
|
-
(route exists); no such route → 404 (`No route match for path: /v1/...`).
|
|
25
|
-
|
|
26
|
-
## Scan / safe-edit protocol
|
|
27
|
-
|
|
28
|
-
| Method | Route | Purpose |
|
|
29
|
-
|--------|-------|---------|
|
|
30
|
-
| GET | `/data/api/v1/scan/projects` | Project scan status (`scanActive`, `lastScanTimestamp`) |
|
|
31
|
-
| POST | `/data/api/v1/scan/projects` | **Trigger project scan** — hot-loads disk edits into gateway + Designer |
|
|
32
|
-
| GET/POST | `/data/api/v1/scan/config` | Same for gateway config (`data/config/**`) |
|
|
33
|
-
| GET | `/data/api/v1/scan-lock/projects` | Scan-lock info |
|
|
34
|
-
| POST | `/data/api/v1/scan-lock/projects` | Acquire project scan lock (mutual exclusion while writing on disk) |
|
|
35
|
-
| GET | `/data/api/v1/sync/items` | Config sync status |
|
|
36
|
-
| POST | `/data/api/v1/sync/reset` | Reset config sync |
|
|
37
|
-
|
|
38
|
-
## Projects API
|
|
39
|
-
|
|
40
|
-
| Method | Route | Purpose |
|
|
41
|
-
|--------|-------|---------|
|
|
42
|
-
| GET | `/data/api/v1/projects/list` | List all projects (with resource counts) |
|
|
43
|
-
| GET | `/data/api/v1/projects/names` | Project names |
|
|
44
|
-
| POST | `/data/api/v1/projects` | Create project |
|
|
45
|
-
| GET | `/data/api/v1/projects/find/{name}` | Project details |
|
|
46
|
-
| PUT | `/data/api/v1/projects/{name}` | Modify project (title/description/enabled/parent) |
|
|
47
|
-
| DELETE | `/data/api/v1/projects/{name}` | Delete project |
|
|
48
|
-
| POST | `/data/api/v1/projects/copy` | Copy project |
|
|
49
|
-
| POST | `/data/api/v1/projects/rename/{name}` | Rename project |
|
|
50
|
-
| GET | `/data/api/v1/projects/export/{name}` | **Export project zip** |
|
|
51
|
-
| POST | `/data/api/v1/projects/import/{name}` | **Import project zip** |
|
|
52
|
-
|
|
53
|
-
## Resources API (gateway config, pattern per type)
|
|
54
|
-
|
|
55
|
-
Pattern per resource type (393 routes total):
|
|
56
|
-
`GET /data/api/v1/resources/list|names|type|find|rename|delete/{moduleId}/{typeId}`,
|
|
57
|
-
`PUT|POST /data/api/v1/resources/{moduleId}/{typeId}` (create/update),
|
|
58
|
-
`GET|PUT|DELETE .../datafile/{moduleId}/{typeId}/{name}/{filename}` (attached files),
|
|
59
|
-
`GET .../singleton/{moduleId}/{typeId}` (singletons).
|
|
60
|
-
|
|
61
|
-
Key types for sylo-ignition:
|
|
62
|
-
|
|
63
|
-
| Module | Type | Use |
|
|
64
|
-
|--------|------|-----|
|
|
65
|
-
| `ignition` | `tag-provider` | Tag provider CRUD |
|
|
66
|
-
| `com.inductiveautomation.opcua` | `device` | OPC UA device connections |
|
|
67
|
-
| `ignition` | `opc-connection` | Legacy OPC connections |
|
|
68
|
-
| `ignition` | `database-connection` | DB connections |
|
|
69
|
-
| `com.inductiveautomation.perspective` | `themes` | **Theme resources** (theme.json + css files via datafile routes) |
|
|
70
|
-
| `com.inductiveautomation.perspective` | `fonts`, `icons` | Fonts / icon sets |
|
|
71
|
-
| `ignition` | `security-levels`, `security-properties`, `security-zone` | Security config |
|
|
72
|
-
| `ignition` | `identity-provider`, `user-source` | Authn config |
|
|
73
|
-
|
|
74
|
-
## Tags
|
|
75
|
-
|
|
76
|
-
| Method | Route | Purpose |
|
|
77
|
-
|--------|-------|---------|
|
|
78
|
-
| GET | `/data/api/v1/tags/export` | **Download tag export (JSON)** — provider/tag paths, recursive |
|
|
79
|
-
| POST | `/data/api/v1/tags/import` | **Import tags (JSON)** — create/override, collision handling |
|
|
80
|
-
| PUT | `/data/api/v1/managed-tag-provider` | Write managed tag provider definitions |
|
|
81
|
-
|
|
82
|
-
No REST route for tag **values** (definitions only). Value read/write goes
|
|
83
|
-
through the gateway's OPC-UA server or scripting, not this API.
|
|
84
|
-
|
|
85
|
-
## Perspective module API
|
|
86
|
-
|
|
87
|
-
| Method | Route | Purpose |
|
|
88
|
-
|--------|-------|---------|
|
|
89
|
-
| GET | `/data/perspective/api/v1/sessions/` | Live sessions |
|
|
90
|
-
| GET | `/data/perspective/api/v1/session/{sessionId}` | Session detail |
|
|
91
|
-
| GET | `/data/perspective/api/v1/session/{sessionId}/pages` | Pages in session |
|
|
92
|
-
| GET | `/data/perspective/api/v1/session/{sessionId}/page/{pageId}/views` | Mounted views |
|
|
93
|
-
| DELETE | `/data/perspective/api/v1/sessions` | Terminate session(s) |
|
|
94
|
-
| POST | `/data/perspective/api/v1/themes/copy-base-themes` | **Copy base themes into project** (start of theme customization) |
|
|
95
|
-
|
|
96
|
-
## Gateway status / diagnostics
|
|
97
|
-
|
|
98
|
-
| Method | Route | Purpose |
|
|
99
|
-
|--------|-------|---------|
|
|
100
|
-
| GET | `/data/api/v1/gateway-info` | Version/edition/platform info |
|
|
101
|
-
| GET | `/data/api/v1/overview` | Gateway overview (modules, system) |
|
|
102
|
-
| GET | `/data/api/v1/overview/problems` | Health problems list |
|
|
103
|
-
| GET | `/data/api/v1/overview/connections` | Connection statuses |
|
|
104
|
-
| GET | `/data/api/v1/logs` | Gateway logs (debug scan failures etc.) |
|
|
105
|
-
| GET | `/data/api/v1/logs/download` | Download logs |
|
|
106
|
-
| GET | `/data/api/v1/backup` | **Gateway backup download** (pre-change safety) |
|
|
107
|
-
| POST | `/data/api/v1/backup` | Restore backup |
|
|
108
|
-
| GET | `/data/api/v1/designers` | Open Designer sessions (conflict detection!) |
|
|
109
|
-
| GET | `/data/api/v1/entity/browse` | Browse config entities |
|
|
110
|
-
| GET/POST/PUT/DELETE | `/data/api/v1/mode*` | Deployment modes |
|
|
111
|
-
| GET | `/data/api/v1/licenses` | License info |
|
|
112
|
-
| GET | `/data/api/v1/trial` | Trial info |
|
|
113
|
-
|
|
114
|
-
## OPC-UA module API (client/server PKI)
|
|
115
|
-
|
|
116
|
-
`/data/opc-ua/api/v1/...` — trust/reject/download/upload certificates for
|
|
117
|
-
client & server PKI, regenerate server certificate. Needed for connecting to
|
|
118
|
-
real PLCs (Logix/Modbus/Siemens etc. are driver configs via resources API:
|
|
119
|
-
`com.inductiveautomation.opcua/device`).
|