dry_run, then submit. The server validates exactly like a save in the web
app, then scores and persists a new evaluation.
All requests authenticate with an X-Aegister-Token header (see
Authentication and API token).
The organization must hold the v_ciso license. Reading needs the view role; writing
needs the edit role (security_officer, owner, or super_admin).
Paths below are abbreviated as
.../workflows/{wid}/.... The full base is
https://app.aegister.com/api/v1/v-ciso/organizations/{oid}. All responses use the house
envelope { "error": 0|1, "messages": [], "data": {…} } (plus "total" on lists).Before you start
This guide starts from an existing organization that already holds thev_ciso license and
has the framework you want to fill associated and configured. You only need its organization
id ({oid}) and a token with the edit role (security_officer, owner, or super_admin).
1. Discover what to fill
List every task (table and question) in the org, each with itstype, so a script can
locate what to work on. Filter with ?type=table or ?type=questions.
workflow_id + task_id for the per-task calls. The older
GET .../table-tasks (List table tasks) returns only table tasks; /tasks covers both.
2. Table tasks (rows)
Read the spec (the contract)
type, required, a declarative format (for example
{ "kind": "date", "pattern": "YYYY-MM-DD" }), and allowed choices (with both the
value id and localized label). Dependent columns carry depends_on +
choices_by_parent; cross-task columns carry source. Send either the choice label or
its value id; multi-value columns accept an array or a |-joined string.
Validate without writing (dry_run)
errors (wrong choice, bad date/number, a child value not allowed for its parent,
an unknown cross-task value) and re-run until error_count is 0.
Submit
Dropdry_run to persist. The server validates again, submits to the scoring engine, and
records a new evaluation, exactly like a save in the web app.
400 with error: 1 and the data.errors
list; nothing is written.
3. Question tasks (answers)
Question tasks use the same/spec and /import endpoints; the payload key is
answers instead of rows. Read the spec and current answers in one call to prefill,
then submit.
{ "value", "evidence": [<path>], "note": [{ "id", "response" }] }. Upload the file first
(see section 5) and use the returned path:
dry_run to persist; the response carries the new evaluation_id, same as tables.
4. Framework controls
A workflow’s framework (the control set behind the score) has its own spec/answers/submit trio, grouped into steps. Work one step at a time with?step=<stepId>.
id, label, description, type
(radio|select|checkbox|date|number|text|…), choices, required, an evidence flag
(whether files may be attached), step, subframework, category, and weight.
Submit a step’s answers with controls-import: dry_run first, then persist.
dry_run validates then submits via /evaluate (Aegister scores and persists),
returning { "submitted": true, "evaluation_id": … }.
5. Evidence: the two-step upload
Upload evidence separately, not inline. Send the file to its artifact, then reference the returnedpath in the answer.
Step 1, upload the file as base64 JSON to the artifact (a control id or question id):
413); allowed formats are PDF, Word
(.doc/.docx), Excel (.xls/.xlsx), images, and video (anything else returns 400). Uploads
dedupe by SHA-256 (identical content returns the existing version, 200, instead of a new
201), and only the latest 10 versions per artifact are kept.
Step 2, reference the returned path in the evidence array of the answer you submit
(sections 3 and 4).
To list existing evidence across a workflow (every artifact with its latest version and full
history), call GET .../workflows/{wid}/documents (List Documents in the sidebar).
Per-artifact history and downloads use the other Documents endpoints under V-CISO.
