Flask Track API
Open API Documentation
API Guides
Flask Track exposes a JSON REST API for programmatic interaction with:
- Samples
- Batches
- Workflows
- Protocols
- Species
- Ingredients
- Tools
- Plasmids
- Reports
- Scheduling
- Event execution data
The API is designed for:
- Laboratory automation
- External integrations
- Robotics
- ERP/LIMS synchronization
- Reporting pipelines
- Compliance systems
- AI-assisted orchestration
Authentication
Flask Track supports:
- Session-authenticated users
- Organization API keys
API access is scoped to a single organization.
Authentication Headers
All API requests require:
x-organization: <organization_uuid>
x-api-key: <api_key>
Example:
curl https://flasktrack.com/api/1/[species](/species/view) \
-H "x-organization: 11111111-1111-1111-1111-111111111111" \
-H "x-api-key: ft_live_xxxxxxxxx"
Rate Limits
API requests are rate limited:
- 60 requests/second
- Burst size: 120 requests
Rate limiting is applied per authenticated user or API key.
Base URL
https://flasktrack.com/api
Response Format
All endpoints return JSON.
Example:
[
{
"id": "e7b7b939-86f1-4d76-8df7-c7303d0f38db",
"name": "MS Media"
}
]
Users API
List Users
Returns all active organization users.
Endpoint
GET /api/1/users
Example
curl https://flasktrack.com/api/1/users \
-H "x-organization: ORG_ID" \
-H "x-api-key: API_KEY"
Response
[
{
"id": "uuid",
"display_name": "Dr. Smith"
}
]
Species API
List Species
Endpoint
GET /api/1/[species](/species/view)
Query Parameters
| Parameter | Description |
|---|---|
| domain | Filter by sample domain |
Example
curl "https://flasktrack.com/api/1/[species](/species/view)?domain=tissue_culture" \
-H "x-organization: ORG_ID" \
-H "x-api-key: API_KEY"
Response
[
{
"id": "uuid",
"name": "Banana (Musa acuminata)"
}
]
Create Species
Endpoint
POST /api/1/[species](/species/view)
Request Body
{
"domain": "tissue_culture",
"latin_name": "Musa acuminata",
"common_name": "Banana",
"default_agro_plasmid": null
}
Example
curl -X POST https://flasktrack.com/api/1/[species](/species/view) \
-H "Content-Type: application/json" \
-H "x-organization: ORG_ID" \
-H "x-api-key: API_KEY" \
-d '{
"domain": "tissue_culture",
"latin_name": "Musa acuminata",
"common_name": "Banana"
}'
Response
201 Created
Workflow API
List Workflows
Endpoint
GET /api/1/[workflows](/workflows/view)
Query Parameters
| Parameter | Description |
|---|---|
| domain | Filter by workflows domain |
| species | Species UUID |
Example
curl "https://flasktrack.com/api/1/[workflows](/workflows/view)?domain=tissue_culture" \
-H "x-organization: ORG_ID" \
-H "x-api-key: API_KEY"
Response
[
{
"id": "uuid",
"name": "Banana Micropropagation"
}
]
Protocol API
List Protocols
Endpoint
GET /api/1/[protocols](/protocols/view)
Example
curl https://flasktrack.com/api/1/[protocols](/protocols/view) \
-H "x-organization: ORG_ID" \
-H "x-api-key: API_KEY"
Response
[
{
"id": "uuid",
"name": "Sterilization [Protocol](/protocols/view)"
}
]
Ingredient API
List Ingredients
Endpoint
GET /api/1/[ingredients](/ingredients/view)
Example
curl https://flasktrack.com/api/1/[ingredients](/ingredients/view) \
-H "x-organization: ORG_ID" \
-H "x-api-key: API_KEY"
Response
[
{
"id": "uuid",
"name": "Murashige & Skoog Medium"
}
]
Tool API
List Tools
Endpoint
GET /api/1/[tools](/tools/view)
Example
curl https://flasktrack.com/api/1/[tools](/tools/view) \
-H "x-organization: ORG_ID" \
-H "x-api-key: API_KEY"
Response
[
{
"id": "uuid",
"name": "Laminar Flow Hood"
}
]
Plasmid API
List Plasmids
Endpoint
GET /api/1/[plasmids](/plasmids/view)
Example
curl https://flasktrack.com/api/1/[plasmids](/plasmids/view) \
-H "x-organization: ORG_ID" \
-H "x-api-key: API_KEY"
Response
[
{
"id": "uuid",
"name": "pCAMBIA1301",
"unit": "ml"
}
]
SampleAPI
Create Sample
Creates a new laboratory sample and initializes workflows scheduling.
Endpoint
POST /api/1/[samples](/samples/view)
Request Body
{
"name": "Banana TC-001",
"species_id": "uuid",
"domain": "tissue_culture",
"workflow_id": "uuid",
"notes": "Imported from external LIMS",
"scheduled_for": "2026-05-20T09:00",
"timezone": "America/Puerto_Rico"
}
Example
curl -X POST https://flasktrack.com/api/1/[samples](/samples/view) \
-H "Content-Type: application/json" \
-H "x-organization: ORG_ID" \
-H "x-api-key: API_KEY" \
-d '{
"name": "Banana TC-001",
"species_id": "SPECIES_ID",
"domain": "tissue_culture",
"workflow_id": "WORKFLOW_ID",
"notes": "Imported from external LIMS",
"scheduled_for": "2026-05-20T09:00",
"timezone": "America/Puerto_Rico"
}'
Response
201 Created
Get Sample
Endpoint
GET /api/1/[samples](/samples/view)/{sample_id}
Example
curl https://flasktrack.com/api/1/[samples](/samples/view)/SAMPLE_ID \
-H "x-organization: ORG_ID" \
-H "x-api-key: API_KEY"
Response
{
"id": "uuid",
"name": "Banana TC-001",
"species_id": "uuid",
"domain": "tissue_culture",
"workflow_id": "uuid",
"state": "active"
}
Lookup Samples
Bulk lookup helper endpoint.
Endpoint
GET /api/1/[samples](/samples/view)/lookup?ids=uuid1,uuid2
Example
curl "https://flasktrack.com/api/1/[samples](/samples/view)/lookup?ids=UUID1,UUID2" \
-H "x-organization: ORG_ID" \
-H "x-api-key: API_KEY"
Response
{
"uuid1": "[Sample](/samples/view) A",
"uuid2": "[Sample](/samples/view) B"
}
List Sample Events
Returns all recorded sample events including entities and execution metadata.
Endpoint
GET /api/1/[samples](/samples/view)/{sample_id}/events
Example
curl https://flasktrack.com/api/1/[samples](/samples/view)/SAMPLE_ID/events \
-H "x-organization: ORG_ID" \
-H "x-api-key: API_KEY"
Response
[
{
"id": "uuid",
"event_type": "transfer",
"notes": "Transferred to fresh media",
"occurred_at": "2026-05-19T14:00:00Z",
"entities": []
}
]
SampleSchedule
Returns workflows scheduling data for a sample.
Endpoint
GET /api/1/[samples](/samples/view)/{sample_id}/schedule
Example
curl https://flasktrack.com/api/1/[samples](/samples/view)/SAMPLE_ID/schedule \
-H "x-organization: ORG_ID" \
-H "x-api-key: API_KEY"
Batch API
List Batches
Endpoint
GET /api/1/[batches](/batches/view)
Example
curl https://flasktrack.com/api/1/[batches](/batches/view) \
-H "x-organization: ORG_ID" \
-H "x-api-key: API_KEY"
Response
{
"items": [
{
"id": "uuid",
"name": "Banana [Batch](/batches/view) A — Banana (Musa acuminata)"
}
]
}
Create Batch
Endpoint
POST /api/1/[batches](/batches/view)
Request Body
{
"species_id": "uuid",
"workflow_id": "uuid",
"name": "Banana Production [Batch](/batches/view)",
"domain": "tissue_culture",
"notes": "May production run",
"planned_quantity": 500,
"scheduled_for": "2026-05-20T08:00",
"timezone": "America/Puerto_Rico"
}
Example
curl -X POST https://flasktrack.com/api/1/[batches](/batches/view) \
-H "Content-Type: application/json" \
-H "x-organization: ORG_ID" \
-H "x-api-key: API_KEY" \
-d '{
"species_id": "SPECIES_ID",
"workflow_id": "WORKFLOW_ID",
"name": "Banana Production [Batch](/batches/view)",
"domain": "tissue_culture",
"planned_quantity": 500,
"scheduled_for": "2026-05-20T08:00",
"timezone": "America/Puerto_Rico"
}'
Response
201 Created
Batch Schedule
Returns generated workflows schedule data for a batch.
Endpoint
GET /api/1/[batches](/batches/view)/{batch_id}/schedule
Example
curl https://flasktrack.com/api/1/[batches](/batches/view)/BATCH_ID/schedule \
-H "x-organization: ORG_ID" \
-H "x-api-key: API_KEY"
Reports API
List Reports
Returns public organization reports.
Endpoint
GET /api/1/[reports](/reports/overview)
Example
curl https://flasktrack.com/api/1/[reports](/reports/overview) \
-H "x-organization: ORG_ID" \
-H "x-api-key: API_KEY"
Response
[
{
"id": "uuid",
"name": "Monthly Yield [Report](/reports/overview)",
"description": "Production metrics by [workflows](/workflows/view)"
}
]
Domains
Supported SampleDomain values include:
all
tissue_culture
agrobacterium
fungus
Common Event Types
Common SampleAction values include:
initialize
sterilize
subculture
transfer
selection
expand
harvest
complete
fail
archive
Error Responses
Example:
{
"error": "[Sample](/samples/view) not found"
}
Common status codes:
| Code | Meaning |
|---|---|
| 200 | Success |
| 201 | Created |
| 400 | Invalid request |
| 401 | Unauthorized |
| 403 | Forbidden |
| 404 | Not found |
| 429 | Rate limited |
| 500 | Internal error |