diff --git a/docs/ivanti-api-reference.md b/docs/ivanti-api-reference.md index c1807b6..29048fb 100644 --- a/docs/ivanti-api-reference.md +++ b/docs/ivanti-api-reference.md @@ -76,24 +76,50 @@ Returns HTTP 200 or 202 (Accepted — async job creation). Response contains a n ### Other Workflow Endpoints (from Swagger) -These are available but not currently used by the dashboard: +These are available but not all are currently used by the dashboard: -| Endpoint | Purpose | -|----------|---------| -| `/workflowBatch/acceptance/request` | Risk acceptance workflow | -| `/workflowBatch/remediation/request` | Remediation workflow | -| `/workflowBatch/severityChange/request` | Severity change workflow | -| `/workflowBatch/{workflowType}/approve` | Approve a workflow (needs `workflowBatchUuid`) | -| `/workflowBatch/{workflowType}/reject` | Reject a workflow | -| `/workflowBatch/{workflowType}/rework` | Send back for rework | -| `/workflowBatch/{workflowType}/update` | Update a workflow | -| `/workflowBatch/{workflowType}/{workflowBatchUuid}/map` | Map findings to workflow | -| `/workflowBatch/{workflowType}/{workflowBatchUuid}/unmap` | Unmap findings | -| `/workflowBatch/{workflowType}/{workflowBatchUuid}/attach` | Attach file to existing workflow | -| `/workflowBatch/{workflowType}/{workflowBatchUuid}/detach` | Detach file | -| `/workflowBatch/model` | Get model/schema | -| `/workflowBatch/filter` | Get available filter fields | -| `/workflowBatch/suggest` | Get suggested values for a filter field | +| Endpoint | Purpose | Status | +|----------|---------|--------| +| `/workflowBatch/acceptance/request` | Risk acceptance workflow | Not used | +| `/workflowBatch/remediation/request` | Remediation workflow | Not used | +| `/workflowBatch/severityChange/request` | Severity change workflow | Not used | +| `/workflowBatch/{workflowType}/approve` | Approve a workflow (needs `workflowBatchUuid`) | Not used | +| `/workflowBatch/{workflowType}/reject` | Reject a workflow | Not used | +| `/workflowBatch/{workflowType}/rework` | Send back for rework | Not used | +| `/workflowBatch/{workflowType}/update` | Update a workflow | Not used | +| `/workflowBatch/{workflowType}/{workflowBatchUuid}/map` | Map findings to workflow | Used (FP editing) | +| `/workflowBatch/{workflowType}/{workflowBatchUuid}/unmap` | Unmap findings | Not used | +| `/workflowBatch/{workflowType}/{workflowBatchUuid}/attach` | Attach file to existing workflow | **Broken — see note** | +| `/workflowBatch/{workflowType}/{workflowBatchUuid}/detach` | Detach file | Not used | +| `/workflowBatch/model` | Get model/schema | Not used | +| `/workflowBatch/filter` | Get available filter fields | Not used | +| `/workflowBatch/suggest` | Get suggested values for a filter field | Not used | + +### Known Limitations + +#### Attach endpoint does not work (tested 2026-04-13) + +The `/workflowBatch/{workflowType}/{workflowBatchUuid}/attach` endpoint is listed in the Swagger spec but returns HTTP 400 (Bad Request) for all tested request formats: + +- `multipart/form-data` with field name `file` (singular) — 400 +- `multipart/form-data` with field name `files` (plural) — 400 +- Tested with `Content-Type: application/octet-stream` and `image/png` — both 400 +- Tested with both `ivantiMultipartPost` and `ivantiFormPost` helpers — both 400 + +The Ivanti response is a generic Spring Boot error with no detail message: +```json +{"timestamp":"...","status":400,"error":"Bad Request","path":"/api/v1/client/1550/workflowBatch/falsePositive/{uuid}/attach"} +``` + +**Workaround:** File attachments can only be uploaded during the initial workflow creation (sent inline with the `/workflowBatch/falsePositive/request` endpoint). To add attachments to an existing workflow, users must upload them directly in the Ivanti platform UI. + +#### Search by numeric batch ID does not work + +The `/workflowBatch/search` endpoint does not support filtering by the numeric `id` returned from the create endpoint. Searching with `{ field: 'id', operator: 'EXACT', value: '33432541' }` returns 0 results. Searching by `name` field works and returns the workflow batch object including the `uuid` field needed for map/attach operations. + +#### UUID not returned by create endpoint + +The `/workflowBatch/falsePositive/request` create endpoint returns only `{ id: , created: }`. The `uuid` needed for map/attach/approve/reject operations must be obtained separately via the search endpoint. ## Environment Variables