Skip to content

API Endpoint Reference

Interactive Documentation

Each service ships its own OpenAPI schema at /openapi.json and Swagger / ReDoc UIs at /docs and /redoc. Browse the live schema for your environment — the paths below use the production domain; staging uses *.stg.iflow.intelliseq.com.


Admin Service

Base URL: https://admin.iflow.intelliseq.com/api/v1

Organizations

Method Endpoint Description
GET /orgs List organizations

Projects

Method Endpoint Description
GET /projects List all projects
GET /projects/{id} Get project details
GET /projects/{id}/credentials Get project credentials (for file service)

Users

Method Endpoint Description
GET /users/me/default-context Get user's default project
PUT /users/me/default-context Set user's default project

Compute Service

Base URL: https://compute.iflow.intelliseq.com/api/v1

Pipelines

Method Endpoint Description
GET /pipelines List all pipelines
POST /pipelines Create new pipeline
GET /pipelines/{id} Get pipeline by ID
GET /pipelines/slug/{slug} Get pipeline by slug (latest version)
GET /pipelines/slug/{slug}?version=1.0.0 Get specific version
GET /pipelines/slug/{slug}/versions List all versions

Runs

Method Endpoint Description
GET /runs List runs for project
POST /runs Submit new run
GET /runs/{id} Get run details
GET /runs/{id}/outputs Get run output files
DELETE /runs/{id} Cancel run
GET /runs/by-order/{order_id} List runs for an order

Miner Service

Base URL: https://miner.iflow.intelliseq.com/api/v1

Subjects

Method Endpoint Description
GET /subjects List subjects
POST /subjects Create subject
GET /subjects/{id} Get subject details
PATCH /subjects/{id} Update subject
DELETE /subjects/{id} Delete subject (cascades to samples)

Samples

Method Endpoint Description
GET /samples List samples
POST /samples Create sample
GET /samples/{id} Get sample details
PATCH /samples/{id} Update sample
DELETE /samples/{id} Delete sample
GET /samples/{id}/sampleinfo Generate pipeline-ready JSON

Orders

Method Endpoint Description
GET /orders List orders (filter by status, priority, assignee)
POST /orders Create order
GET /orders/{id} Get order details
PUT /orders/{id} Update order
DELETE /orders/{id} Delete order (only for non-signed orders)
POST /orders/{id}/transition Transition order status (body {"to": "<status>"})
GET /orders/{id}/samplesheet Generate nf-core samplesheet CSV
GET /orders/{id}/samples List samples in order
POST /orders/{id}/samples/{sample_id} Add sample to order (body {"role": "proband"})
DELETE /orders/{id}/samples/{sample_id} Remove sample from order
GET /orders/{id}/labflow Get current labflow state (stage, assignee, available transitions)

Labflows

Method Endpoint Description
GET /labflows List labflow definitions visible to the project
GET /labflows/{id} Get labflow definition including stages and transitions

Variants (read-only)

Method Endpoint Description
GET /variants List variants in the catalogue (filter by region, gene)
GET /variants/{id} Variant detail
GET /samples/{id}/variants Sample-level variants

Files Service

Base URL: https://files.iflow.intelliseq.com/api/v1

Files

Method Endpoint Description
GET /files?project_id=ID&path=/ List files in path
GET /files/download-url?project_id=ID&path=file.txt Get signed download URL
POST /files/upload-url?project_id=ID Get signed upload URL
POST /files/copy?project_id=ID Copy file within bucket
POST /files/move?project_id=ID Move/rename file within bucket
DELETE /files?project_id=ID&path=file.txt Delete file

File Download (Two-Step)

Downloading a file is a two-step process: first get a signed URL, then download from it.

# Step 1: Get signed download URL (valid 15 minutes)
curl -s "https://files.iflow.intelliseq.com/api/v1/files/download-url?project_id=$PROJECT_ID&path=client-resources/report_template.docx" \
  -H "Authorization: Bearer $TOKEN" | jq .

# Response:
# {"url": "https://storage.googleapis.com/bucket/...", "expires_in_seconds": 900}

# Step 2: Download file from signed URL (no auth needed)
SIGNED_URL=$(curl -s "https://files.iflow.intelliseq.com/api/v1/files/download-url?project_id=$PROJECT_ID&path=client-resources/report_template.docx" \
  -H "Authorization: Bearer $TOKEN" | jq -r .url)
curl -o report_template.docx "$SIGNED_URL"

File Upload (Two-Step)

Uploading is also two-step: get a signed URL, then PUT the file.

# Step 1: Get signed upload URL
curl -s -X POST "https://files.iflow.intelliseq.com/api/v1/files/upload-url?project_id=$PROJECT_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"path": "samples/S1/uploads/sample.vcf.gz", "content_type": "application/gzip"}' | jq .

# Response:
# {"url": "https://storage.googleapis.com/bucket/...", "expires_in_seconds": 900}

# Step 2: Upload file to signed URL (no auth needed)
curl -X PUT "$SIGNED_URL" \
  -H "Content-Type: application/gzip" \
  --data-binary @sample.vcf.gz

List Files

curl -s "https://files.iflow.intelliseq.com/api/v1/files?project_id=$PROJECT_ID&path=client-resources/" \
  -H "Authorization: Bearer $TOKEN" | jq .

Report Service

Base URL: https://report.iflow.intelliseq.com/api/v1

Reports

Method Endpoint Description
GET /reports List reports (filter by order_id, status, template_type)
POST /reports Create a report for an order
GET /reports/{id} Get report detail
PATCH /reports/{id} Update draft report (summary, notes, template_type)
DELETE /reports/{id} Delete a draft report (not allowed once signed)

Variant associations

Method Endpoint Description
GET /reports/{id}/variants List variants on the report
POST /reports/{id}/variants Add a variant with optional overrides
PATCH /reports/{id}/variants/{variant_id} Update per-report overrides
DELETE /reports/{id}/variants/{variant_id} Remove variant from report

Comments and snapshots

Method Endpoint Description
GET /reports/{id}/comments List comments (filter by type)
POST /reports/{id}/comments Post a comment (body {"comment": "...", "type": "review"})
PATCH /reports/{id}/comments/{comment_id} Edit or resolve
GET /reports/{id}/snapshots List snapshots
POST /reports/{id}/snapshots Create a snapshot

Sign-off (UI-driven)

The sign-off confirmation flow is HTMX-driven and lives at /{report_id}/signoff/* — see Sign-off PDF for the endpoint list. These endpoints are not intended for direct API consumers; the atomic Approve-and-Sign must run through the web UI.


VCF Service

Base URL: https://vcf.iflow.intelliseq.com/api/v1

Method Endpoint Description
GET /orders/{order_id}/variants Paginated variant list for an order
GET /orders/{order_id}/variants/{variant_id} Single variant detail
GET /orders/{order_id}/status Build / ingestion status for the order's VCF cache

Audit Service

Base URL: https://audit.iflow.intelliseq.com/api/v1

Method Endpoint Description
GET /events Query audit events (filter by entity, action, date range)
GET /events/{id} Audit event detail

Common Headers

All API requests require:

Authorization: Bearer <access_token>
Content-Type: application/json

Project-scoped endpoints (miner, compute, files) also require:

X-Project-ID: <project_uuid>

X-Project-ID is the UUID of your project, obtained from GET /api/v1/projects on admin-service. Admin-service endpoints do not require this header. See Authentication for details.

Error Responses

Status Description
400 Bad request - invalid parameters
401 Unauthorized - missing or invalid token
403 Forbidden - insufficient permissions
404 Not found - resource doesn't exist
409 Conflict - resource already exists
500 Server error

Example error response:

{
  "detail": "Pipeline 'hereditary-mock' version '1.0.0' already exists. Use force=True to overwrite."
}