Download OpenAPI specification:
An account in Calira (formerly Clustermarket) represents an organisation, department, or lab. We have a hierarchical structure following these rules:
graph TD
org[Organisation]
org-->lab0[Lab]
dep1[Department]
dep2[Department]
org-->dep1
dep1-->lab1[Lab]
dep1-->lab2[Lab]
org-->dep2
dep2-->lab3[Lab]
il[Independent Lab]
All endpoints in the Calira (formerly Clustermarket) API support pagination to efficiently handle large datasets. The API uses a custom pagination system with header-based metadata.
page: The page number to retrieve (1-based indexing, default: 1)per_page: Number of records per page (1-100, default: 100, maximum: 100)The API provides pagination metadata in response headers:
X-Total-Records: Total number of records availableX-Current-Page: Current page numberX-Per-Page: Number of records per page# Get first page (default behavior)
GET /equipment?account=123
# Headers: X-Total-Records: 250, X-Current-Page: 1, X-Per-Page: 100
# Get first page with 50 records
GET /equipment?account=123&per_page=50
# Headers: X-Total-Records: 250, X-Current-Page: 1, X-Per-Page: 50
# Get second page with 50 records
GET /equipment?account=123&per_page=50&page=2
# Headers: X-Total-Records: 250, X-Current-Page: 2, X-Per-Page: 50
# Get third page with 25 records
GET /equipment?account=123&per_page=25&page=3
# Headers: X-Total-Records: 250, X-Current-Page: 3, X-Per-Page: 25
# Example: Get all equipment by iterating through pages
# Page 1: GET /equipment?account=123&per_page=100&page=1
# Page 2: GET /equipment?account=123&per_page=100&page=2
# Page 3: GET /equipment?account=123&per_page=100&page=3
# Continue until X-Current-Page * X-Per-Page >= X-Total-Records
Lists all accounts accessible through the integration. The application scope must include read_accounts.
Pagination: This endpoint supports pagination with a default limit of 100 records. Use page and per_page parameters to navigate through large datasets efficiently. Pagination metadata is provided in response headers (X-Total-Records, X-Current-Page, X-Per-Page).
| page | integer >= 1 Default: 1 Page number (1-based indexing, default: 1) |
| per_page | integer [ 1 .. 100 ] Default: 100 Number of records per page (1-100, default: 100, max: 100) |
[- {
- "id": 0,
- "name": "string",
- "account_type": "lab",
- "organisation": 0,
- "department": 0
}
]Get the full details of a specific account. The application scope must include read_accounts.
| id required | integer Account ID |
{- "id": 0,
- "name": "Cambridge Graphene Center",
- "account_type": "lab",
- "sector": "academia",
- "description": "string",
- "timezone": "Europe/London",
- "department": {
- "name": "string",
- "id": 0
}, - "organisation": {
- "name": "string",
- "id": 0
}, - "labs": [
- {
- "id": 0,
- "name": "string"
}
], - "departments": [
- {
- "id": 0,
- "name": "string"
}
]
}Return lists of bookings accessible to the user, optionally scopable to the providing lab account. The application scope must include read_bookings.
Pagination: This endpoint supports pagination with a default limit of 100 records. Use page and per_page parameters to navigate through large datasets efficiently. Pagination metadata is provided in response headers (X-Total-Records, X-Current-Page, X-Per-Page).
| provider_account | number The parent lab account ID. |
| page | integer >= 1 Default: 1 Page number (1-based indexing, default: 1) |
| per_page | integer [ 1 .. 100 ] Default: 100 Number of records per page (1-100, default: 100, max: 100) |
Example response showing multiple bookings
[- {
- "id": 12345,
- "start_time": "2024-01-15T09:00:00.000Z",
- "end_time": "2024-01-15T11:00:00.000Z",
- "status": "Confirmed",
- "booking_type": "internal",
- "equipment_id": 789,
- "user_id": 456,
- "equipment": {
- "name": "Advanced Microscope"
}, - "last_public_note": null
}, - {
- "id": 12346,
- "start_time": "2024-01-16T14:00:00.000Z",
- "end_time": "2024-01-16T16:30:00.000Z",
- "status": "Pending",
- "booking_type": "external",
- "equipment_id": 790,
- "user_id": 457,
- "equipment": {
- "name": "Spectrometer"
}, - "last_public_note": {
- "message": "External booking for research collaboration"
}
}, - {
- "id": 12347,
- "start_time": "2024-01-17T08:00:00.000Z",
- "end_time": "2024-01-17T10:00:00.000Z",
- "status": "Completed",
- "booking_type": "maintenance",
- "equipment_id": 791,
- "user_id": 458,
- "equipment": {
- "name": "Centrifuge"
}, - "last_public_note": null
}
]Return the details about a particular booking as defined by the database identifier. The application scope must include read_bookings.
| id required | integer Booking ID |
Example response showing all booking information
{- "id": 12345,
- "cost": "150.00",
- "currency": "USD",
- "charging_type": "Per Hour",
- "start_time": "2024-01-15T09:00:00.000Z",
- "end_time": "2024-01-15T11:00:00.000Z",
- "requested_at": "2024-01-10T14:30:00.000Z",
- "booking_type": "internal",
- "status": "Confirmed",
- "duration": 120,
- "add_ons": "Data analysis service included",
- "requester_group": {
- "name": "Research Team Alpha"
}, - "equipment": {
- "id": 789,
- "name": "Advanced Microscope"
}, - "requester_lab": {
- "id": 101,
- "name": "Materials Science Lab"
}, - "requester_organisation": {
- "id": 201,
- "name": "University of Cambridge"
}, - "provider_lab": {
- "id": 102,
- "name": "Equipment Sharing Lab"
}, - "provider_organisation": {
- "id": 202,
- "name": "Cambridge Research Institute"
}, - "creator": {
- "id": 301,
- "name": "Dr. Jane Smith"
}, - "requester": {
- "id": 456,
- "name": "Dr. John Doe",
- "email": "john.doe@university.edu",
- "sector": "academia"
}, - "last_public_note": {
- "message": "Please handle with care"
}
}Lists all equipment under the specified lab. Requires read_equipment scope.
Pagination: This endpoint supports pagination with a default limit of 100 records. Use page and per_page parameters to navigate through large datasets efficiently. Pagination metadata is provided in response headers (X-Total-Records, X-Current-Page, X-Per-Page).
| account | number The target lab account ID |
| exclude_parents | boolean Default: false When true, only child equipment will be returned (no parent equipment) |
| page | integer >= 1 Default: 1 Page number (1-based indexing, default: 1) |
| per_page | integer [ 1 .. 100 ] Default: 100 Number of records per page (1-100, default: 100, max: 100) |
[- {
- "id": 1,
- "name": "William Optics RedCat 71 APO",
- "description": "Apochromatic telescope",
- "room": "Room 101",
- "availability_status": "Available",
- "model": "RedCat 71",
- "manufacturer": "William Optics",
- "sub_category": {
- "id": 1,
- "name": "Audiovisual & IT"
}, - "contact_person": {
- "id": 1,
- "name": "Lisa Millar"
}, - "parent_id": null,
- "parent_name": null
}, - {
- "id": 2,
- "name": "RedCat 71 Eyepiece Set",
- "description": "High-quality eyepiece collection",
- "room": "Room 101",
- "availability_status": "Available",
- "model": "RC71-EP",
- "manufacturer": "William Optics",
- "sub_category": {
- "id": 1,
- "name": "Audiovisual & IT"
}, - "contact_person": {
- "id": 1,
- "name": "Lisa Millar"
}, - "parent_id": 1,
- "parent_name": "William Optics RedCat 71 APO"
}
]Returns details about a particular piece of equipment. Requires the equipment ID, and the application scope must include read_equipment.
| id required | integer Equipment ID |
{- "id": 0,
- "name": "string",
- "room": "string",
- "manufacturer": "string",
- "model": "string",
- "city": "string",
- "country": "string",
- "currency": "string",
- "charging_type": "string",
- "description": "string",
- "category": {
- "name": "string"
}, - "lab": {
- "id": 0,
- "name": "string"
}, - "parent_id": 0,
- "parent_name": "string",
- "manufacturing_year": "string",
- "serial_number": "string"
}Returns bookings about a particular piece of equipment. Requires the equipment ID, and the application scope must include read_equipment.
Pagination: This endpoint supports pagination with a default limit of 100 records. Use page and per_page parameters to navigate through large datasets efficiently. Pagination metadata is provided in response headers (X-Total-Records, X-Current-Page, X-Per-Page).
| id required | integer Unique ID of the equipment |
| page | integer >= 1 Default: 1 Page number (1-based indexing, default: 1) |
| per_page | integer [ 1 .. 100 ] Default: 100 Number of records per page (1-100, default: 100, max: 100) |
[- {
- "id": 1,
- "asset_id": 1,
- "start_time": "2022-03-08T09:00:00.000+00:00",
- "end_time": "2022-03-08T11:00:00.000+00:00",
- "status": "Requested"
}
]Lists all projects under the specified account. Requires read_projects scope.
Pagination: This endpoint supports pagination with a default limit of 100 records. Use page and per_page parameters to navigate through large datasets efficiently. Pagination metadata is provided in response headers (X-Total-Records, X-Current-Page, X-Per-Page).
| account_id required | integer Account ID |
| page | integer >= 1 Default: 1 Page number (1-based indexing, default: 1) |
| per_page | integer [ 1 .. 100 ] Default: 100 Number of records per page (1-100, default: 100, max: 100) |
[- {
- "id": 0,
- "name": "string",
- "created_by": {
- "id": 0,
- "name": "string"
}, - "supervisor": "string",
- "funding_codes": [
- {
- "id": 0,
- "name": "string"
}
]
}
]Get the full details of a specific project. Requires read_projects scope.
| account_id required | integer Account ID |
| id required | integer Project ID |
{- "name": "Project 31",
- "supervisor": "Niklas",
- "additional_information": null,
- "funding_codes": [
- {
- "id": 914,
- "name": "CD60",
- "funder_name": "UKRI - AHRC",
- "funder_type": "research_council",
- "expiry_date": "2026-09-12",
- "allocated_amount": 0.2,
- "spent_amount": 0
}, - {
- "id": 915,
- "name": "CD61",
- "funder_name": "UKRI - AHRC",
- "funder_type": "research_council",
- "expiry_date": "2026-09-12",
- "allocated_amount": 0.2,
- "spent_amount": 0
}
], - "selected_users": [ ]
}Lists all groups under the specified lab. Requires read_accounts scope.
Pagination: This endpoint supports pagination with a default limit of 100 records. Use page and per_page parameters to navigate through large datasets efficiently. Pagination metadata is provided in response headers (X-Total-Records, X-Current-Page, X-Per-Page).
| account | number The target lab account ID |
| page | integer >= 1 Default: 1 Page number (1-based indexing, default: 1) |
| per_page | integer [ 1 .. 100 ] Default: 100 Number of records per page (1-100, default: 100, max: 100) |
[- {
- "id": 0,
- "name": "string"
}
]Get the full details of a specific group. The application scope must include read_accounts.
| id required | integer Group ID |
{- "id": 0,
- "name": "string",
- "equipment": [
- {
- "id": 0,
- "name": "string"
}
]
}