Skip to main content

Connector Phases

Execution phases group a connector's endpoints into ordered, human-readable domains (and sub-groups called stages). They drive the order in which endpoints run during a collection and give analysts a two-level mental model of the connector.

Phases are stored separately from the connector's forensic content, so editing them mutates in place — it does not create a new connector version.

Authorization

  • GET: any authenticated user. Unauthenticated requests receive 401.
  • POST / PUT / PATCH / DELETE: Analyst or admin with an analyst profile. Unauthenticated or unauthorized callers receive 401.

Phase Object

FieldTypeDescription
idstringPhase ID
namestringDisplay name (e.g. "Users & Groups")
positionnumberZero-based order within the connector
stagesarray/objectStage definitions (each stage names a sub-group and its endpoint IDs)
connectorIdstringOwning connector ID

All mutating endpoints return the full, position-ordered phase list after applying the change.


List Phases

GET /api/connectors/{id}/phases

Returns all phases for the connector, ordered by position ascending.

Response

{
"phases": [
{
"id": "phase_001",
"name": "Account & Authentication",
"position": 0,
"stages": [
{ "name": "Authentication", "endpointIds": ["ep_token"] },
{ "name": "Account Discovery", "endpointIds": ["ep_accounts"] }
],
"connectorId": "conn_slack001"
}
]
}

Create Phase

POST /api/connectors/{id}/phases

Appends a new phase at the end (its position is max(position) + 1).

Request Body

FieldTypeRequiredDescription
namestringNoPhase name. Defaults to "New Phase"
stagesarrayNoInitial stages. Defaults to []
{ "name": "Reporting", "stages": [] }

Response

201 Created — returns the full phase list (see above).


Replace All Phases

PUT /api/connectors/{id}/phases

Bulk-replaces every phase for the connector in a single transaction: all existing phases are deleted and the supplied phases are re-inserted in array order (position is assigned by index). Useful for drag-to-reorder UIs.

Request Body

FieldTypeRequiredDescription
phasesarrayNoOrdered list of phases. Defaults to [] (clears all phases)
phases[].namestringYesPhase name
phases[].stagesarrayNoStages for this phase (defaults to [])
{
"phases": [
{ "name": "Account & Authentication", "stages": [ ... ] },
{ "name": "Users & Groups", "stages": [ ... ] }
]
}

Response

Returns the full, re-numbered phase list.


Update a Phase

PATCH /api/connectors/{id}/phases/{phaseId}

Renames a phase and/or updates its stages. Only the fields you send are changed.

Path Parameters

ParameterTypeRequiredDescription
idstringYesConnector ID
phaseIdstringYesPhase ID (must belong to the connector)

Request Body

FieldTypeRequiredDescription
namestringNoNew phase name
stagesarrayNoReplacement stages
{ "name": "Authentication & Tenancy" }

Response

Returns the full phase list.


Delete a Phase

DELETE /api/connectors/{id}/phases/{phaseId}

Deletes the phase and re-numbers the remaining phases so positions stay contiguous (0, 1, 2, …).

Response

Returns the full, re-numbered phase list.


Error Responses

401 Unauthorized

{ "error": { "code": "UNAUTHORIZED", "message": "Authentication required" } }

404 Not Found

The connector does not exist (or the phase does not belong to it):

{ "error": { "code": "NOT_FOUND", "message": "Phase not found" } }

500 Internal Server Error

{ "error": { "code": "INTERNAL_ERROR", "message": "An error occurred" } }