Scopes
What each of the 34 scopes allows, and the endpoints it unlocks.
A key carries exactly the scopes you choose when you create it in Settings → Integrations → API Keys. There is no default set, and no scope implies another: write:tasks does not grant read:tasks.
Scopes are fixed when a key is created. To change what an integration can do, create a new key with the scopes it needs, move the integration to it, then revoke the old key.
A key never does more than its owner can in xPlant. Each scope also needs a minimum role from the key's owner and a plan that includes it (both shown below). Above the owner's role, a call answers 403 FORBIDDEN; outside the plan, 402 PAID_PLAN_REQUIRED. GET /me lists the key's effectiveScopes: what it can use right now. See Plans and access.
Scope names follow <read|write>:<resource>. Grant each integration only what it calls.
A request without the scope it needs gets 403 FORBIDDEN, and the message names the missing scope, for example Missing scope: write:tasks. To see what a key holds before you call anything, use GET /me; it needs no scope.
Device tokens (xpd_) don't carry scopes. They can only write readings, heartbeats and events for their own device. See Device tokens.
Common setups
| Integration | Scopes |
|---|---|
| Read-only dashboard | read:workspace, read:plants, read:explants, read:sensor_readings |
| Task sync from your scheduler | read:tasks, write:tasks, write:demand |
| Bench station running SOPs | read:sops, write:sop_runs, read:sop_runs, write:sop_steps, read:labels, write:label_scans |
| Transfer and stage logging | read:plants, read:explants, read:transfers, write:transfers |
| Device provisioning (run once, off the device) | read:devices, write:devices |
| Mirror change history into your warehouse | read:events, read:plants, read:explants |
All scopes
Workspace
| Scope | Allows | Minimum role | Plans | Endpoints |
|---|---|---|---|---|
read:workspace | Read workspace and lab settings | Any member | Teams, Enterprise | GET /workspaces |
Plants
| Scope | Allows | Minimum role | Plans | Endpoints |
|---|---|---|---|---|
read:plants | Read plant records | Any member | Teams, Enterprise | GET /plantsGET /plants/{id} |
write:plants | Create and update plant records | member | Teams, Enterprise | POST /plantsPATCH /plants/{id} |
Explants
| Scope | Allows | Minimum role | Plans | Endpoints |
|---|---|---|---|---|
read:explants | Read explant records | Any member | Teams, Enterprise | GET /explantsGET /explants/{id} |
write:explants | Create and update explant records | member | Teams, Enterprise | POST /explantsPATCH /explants/{id} |
Contaminations
| Scope | Allows | Minimum role | Plans | Endpoints |
|---|---|---|---|---|
read:contaminations | Read contamination logs | Any member | Teams, Enterprise | GET /contaminationsGET /contaminations/{id} |
write:contaminations | Submit contamination observations | member | Teams, Enterprise | POST /contaminations |
Tasks
| Scope | Allows | Minimum role | Plans | Endpoints |
|---|---|---|---|---|
read:tasks | Read scheduled tasks and due work | Any member | Teams, Enterprise | GET /tasksGET /tasks/{id}GET /tasks/demand |
write:tasks | Create, update, complete, and reopen tasks | member | Teams, Enterprise | POST /tasksPATCH /tasks/{id} |
write:demand | Push sales/order demand numbers per genus for task prioritization | manager | Teams, Enterprise | POST /tasks/demand |
Comments
| Scope | Allows | Minimum role | Plans | Endpoints |
|---|---|---|---|---|
read:comments | Read notes and comments on lab records | Any member | Teams, Enterprise | GET /comments |
write:comments | Add notes and comments to lab records | member | Teams, Enterprise | POST /comments |
Media
| Scope | Allows | Minimum role | Plans | Endpoints |
|---|---|---|---|---|
read:assets | Read photos and media attached to lab records | Any member | Teams, Enterprise | GET /assetsGET /assets/{id} |
write:assets | Attach photos and media to lab records | member | Teams, Enterprise | POST /assets |
read:media_recipes | Read media recipe data | Any member | Teams, Enterprise | GET /media-recipesGET /media-recipes/{id} |
write:media_recipes | Create and update media recipes | member | Teams, Enterprise | POST /media-recipesPATCH /media-recipes/{id} |
Transfers
| Scope | Allows | Minimum role | Plans | Endpoints |
|---|---|---|---|---|
read:transfers | Read transfer and stage history for plants and explants | Any member | Teams, Enterprise | GET /stagesGET /transfers |
write:transfers | Record transfers and advance the stage of plants and explants | member | Teams, Enterprise | POST /stagesPOST /transfers |
SOPs
| Scope | Allows | Minimum role | Plans | Endpoints |
|---|---|---|---|---|
read:sops | Read SOP templates and steps | Any member | Teams, Enterprise | GET /sopsGET /sops/{id} |
read:sop_runs | Read SOP execution history: who ran which step, when | Any member | Teams, Enterprise | GET /sop-runs/{id} |
write:sop_runs | Create and advance SOP run sessions | member | Teams, Enterprise | POST /sop-runs |
write:sop_steps | Post confirmations, scans and measurements against a step of an SOP run | member | Teams, Enterprise | POST /sop-runs/{id}/steps/{stepId}/eventsPOST /sop-runs/{id}/steps/{stepId}/measurements |
Labels
| Scope | Allows | Minimum role | Plans | Endpoints |
|---|---|---|---|---|
read:labels | Resolve QR/barcode label codes to entity records | Any member | Teams, Enterprise | GET /labels/resolve |
write:label_scans | Submit label scan events | member | Teams, Enterprise | POST /label-scans |
Devices
| Scope | Allows | Minimum role | Plans | Endpoints |
|---|---|---|---|---|
read:devices | List registered devices and their status | Any member | All paid plans | GET /devicesGET /devices/{deviceId}/tokens |
write:devices | Register devices, send heartbeats, and manage device tokens | member | All paid plans | POST /devicesPOST /devices/{deviceId}/heartbeatPOST /devices/{deviceId}/tokensDELETE /devices/{deviceId}/tokens/{tokenId} |
read:sensor_readings | Query historical sensor readings | Any member | Teams, Enterprise | GET /sensor-readings |
write:sensor_readings | Submit environmental sensor readings (temperature, humidity, etc.) | member | All paid plans | POST /sensor-readings |
write:device_events | Submit device status events | member | All paid plans | POST /device-events |
Equipment
| Scope | Allows | Minimum role | Plans | Endpoints |
|---|---|---|---|---|
read:equipment | Read the lab equipment library and its maintenance history | Any member | Teams, Enterprise | GET /equipmentGET /equipment/{id}GET /equipment/{id}/events |
write:equipment_events | Record that a piece of equipment was used, calibrated, serviced or faulted | member | Teams, Enterprise | POST /equipment/{id}/events |
Commercial
| Scope | Allows | Minimum role | Plans | Endpoints |
|---|---|---|---|---|
read:pricing | Read culture line prices, pricing tiers, and price history | manager | Teams, Enterprise | GET /pricing/culture-linesGET /pricing/events |
read:commerce | Read store order lines and sell-through summaries | manager | Teams, Enterprise | GET /commerce/order-linesGET /commerce/sell-through |
History
| Scope | Allows | Minimum role | Plans | Endpoints |
|---|---|---|---|---|
read:events | Read plant and explant edit history (audit events) | Any member | Teams, Enterprise | GET /events |
No scope needed
GET /me: Get the calling key