API Referencev1

Labs

The Labs API manages the full lifecycle of dental lab work — from order creation through production tracking to quality control sign-off. Dentists create lab orders, labs receive and fulfill them, and quality checks are logged at each stage.

The Lab Order Object

FieldTypeDescription
idstringUnique order ID (lab_*)
order_numberstringHuman-readable order number
patient_idstringPatient ID (pat_*)
dentist_idstringOrdering dentist ID (usr_*)
lab_idstringLab ID (org_*)
product_typeenumcrown, bridge, denture, implant, aligner, night_guard, other
statusenumpending, accepted, in_production, quality_check, shipped, delivered, rejected
teetharrayFDI tooth numbers involved (e.g., [16, 17])
materialstringMaterial specification (e.g., zirconia, PFM)
shadestringShade/mold specification (e.g., A2)
due_datestringISO 8601 date — lab delivery deadline
instructionsstringSpecial instructions from the dentist
created_atstringISO 8601 timestamp (UTC)
GET/labs/orders

List lab orders

Returns a paginated list of lab orders. Filter by status, lab, dentist, or patient.

Parameters

ParameterTypeRequiredDescription
statusstringOptionalFilter by status: pending, accepted, in_production, quality_check, shipped, delivered
lab_idstringOptionalFilter by lab ID
dentist_idstringOptionalFilter by ordering dentist
patient_idstringOptionalFilter by patient
limitintegerOptionalResults per page (1-100). Default: 20
cursorstringOptionalPagination cursor

Example Request

Requestbash
curl -X GET "https://api.odento.app/api/v1/labs/orders?status=in_production&limit=10" \
  -H "X-API-Key-ID: ok_live_abc123def456ghi789jkl012" \
  -H "X-API-Key-Secret: os_abc123def456ghi789jkl012mno345pqr678stu901vwx234yzab567"

Example Response

Response200json
{
  "success": true,
  "data": {
    "items": [
      {
        "id": "lab_9c2d4e7f1a3b6c8d",
        "order_number": "LAB-2025-0156",
        "patient_id": "pat_5f8d3a2b1c9e4a7b",
        "dentist_id": "usr_abc123",
        "lab_id": "org_xyz789",
        "product_type": "crown",
        "status": "in_production",
        "teeth": [16],
        "material": "zirconia",
        "shade": "A2",
        "due_date": "2025-01-28",
        "instructions": "Full contour zirconia crown. Margin on gingiva.",
        "created_at": "2025-01-15T10:00:00Z"
      }
    ],
    "pagination": {
      "has_more": false,
      "next_cursor": null,
      "per_page": 10
    }
  }
}

Try It Out

API Playground
Headers
This is a simulated response — no real API calls are made from the browser.
POST/labs/orders

Create a lab order

Creates a new lab order. The specified lab receives a notification and can accept or reject the order. Digital impressions or physical impressions can be attached via the media API.

Parameters

ParameterTypeRequiredDescription
patient_idstringRequiredPatient ID (pat_*)
lab_idstringRequiredLab ID (org_*)
product_typestringRequiredProduct type: crown, bridge, denture, implant, aligner, night_guard, other
teetharrayRequiredFDI tooth numbers involved
materialstringOptionalMaterial specification
shadestringOptionalShade specification (e.g., A2, B1)
due_datestringRequiredDelivery deadline (YYYY-MM-DD)
instructionsstringOptionalSpecial instructions for the lab
impression_media_idsarrayOptionalMedia IDs of digital impressions

Example Request

Requestbash
curl -X POST https://api.odento.app/api/v1/labs/orders \
  -H "X-API-Key-ID: ok_live_abc123def456ghi789jkl012" \
  -H "X-API-Key-Secret: os_abc123def456ghi789jkl012mno345pqr678stu901vwx234yzab567" \
  -H "Content-Type: application/json" \
  -d '{
    "patient_id": "pat_5f8d3a2b1c9e4a7b",
    "lab_id": "org_xyz789",
    "product_type": "crown",
    "teeth": [16],
    "material": "zirconia",
    "shade": "A2",
    "due_date": "2025-01-28",
    "instructions": "Full contour zirconia crown. Margin on gingiva.",
    "impression_media_ids": ["med_imp_abc123"]
  }'

Example Response

Response201json
{
  "success": true,
  "data": {
    "id": "lab_9c2d4e7f1a3b6c8d",
    "order_number": "LAB-2025-0156",
    "patient_id": "pat_5f8d3a2b1c9e4a7b",
    "dentist_id": "usr_abc123",
    "lab_id": "org_xyz789",
    "product_type": "crown",
    "status": "pending",
    "teeth": [16],
    "material": "zirconia",
    "shade": "A2",
    "due_date": "2025-01-28",
    "instructions": "Full contour zirconia crown. Margin on gingiva.",
    "created_at": "2025-01-15T10:00:00Z"
  }
}
GET/labs/orders/{id}

Retrieve a lab order

Retrieves a single lab order by ID, including production timeline and quality control records.

Parameters

ParameterTypeRequiredDescription
idstringRequiredThe lab order ID (lab_*)

Example Request

Requestbash
curl -X GET https://api.odento.app/api/v1/labs/orders/lab_9c2d4e7f1a3b6c8d \
  -H "X-API-Key-ID: ok_live_abc123def456ghi789jkl012" \
  -H "X-API-Key-Secret: os_abc123def456ghi789jkl012mno345pqr678stu901vwx234yzab567"

Example Response

Response200json
{
  "success": true,
  "data": {
    "id": "lab_9c2d4e7f1a3b6c8d",
    "order_number": "LAB-2025-0156",
    "patient_id": "pat_5f8d3a2b1c9e4a7b",
    "dentist_id": "usr_abc123",
    "lab_id": "org_xyz789",
    "product_type": "crown",
    "status": "in_production",
    "teeth": [16],
    "material": "zirconia",
    "shade": "A2",
    "due_date": "2025-01-28",
    "instructions": "Full contour zirconia crown. Margin on gingiva.",
    "production": {
      "stages": [
        { "name": "model_preparation", "status": "completed", "completed_at": "2025-01-16T10:00:00Z" },
        { "name": "cad_design", "status": "completed", "completed_at": "2025-01-18T14:00:00Z" },
        { "name": "milling", "status": "in_progress", "started_at": "2025-01-19T09:00:00Z" },
        { "name": "sintering", "status": "pending" },
        { "name": "finishing", "status": "pending" }
      ]
    },
    "quality_checks": [],
    "created_at": "2025-01-15T10:00:00Z"
  }
}
POST/labs/orders/{id}/production

Update production status

Updates the production stage of a lab order. Each stage transition is logged with a timestamp for full traceability. Only lab staff associated with the order can update production status.

Parameters

ParameterTypeRequiredDescription
idstringRequiredThe lab order ID (lab_*)
stagestringRequiredProduction stage: model_preparation, cad_design, milling, sintering, finishing, quality_check
statusstringRequiredStage status: started, completed, failed
notesstringOptionalProduction notes

Example Request

Requestbash
curl -X POST https://api.odento.app/api/v1/labs/orders/lab_9c2d4e7f1a3b6c8d/production \
  -H "X-API-Key-ID: ok_live_abc123def456ghi789jkl012" \
  -H "X-API-Key-Secret: os_abc123def456ghi789jkl012mno345pqr678stu901vwx234yzab567" \
  -H "Content-Type: application/json" \
  -d '{
    "stage": "milling",
    "status": "completed",
    "notes": "Milling completed on 5-axis machine. No anomalies detected."
  }'

Example Response

Response200json
{
  "success": true,
  "data": {
    "id": "lab_9c2d4e7f1a3b6c8d",
    "stage": "milling",
    "status": "completed",
    "completed_at": "2025-01-20T16:30:00Z",
    "notes": "Milling completed on 5-axis machine. No anomalies detected."
  }
}
POST/labs/orders/{id}/quality-check

Record quality control check

Records a quality control (QC) check for a lab order. QC checks can pass or fail. A failed check requires a reason and triggers rework. Multiple QC checks can be recorded per order.

Parameters

ParameterTypeRequiredDescription
idstringRequiredThe lab order ID (lab_*)
resultstringRequiredQC result: pass or fail
check_typestringRequiredType of check: fit, shade_match, occlusion, margin, aesthetics, final_inspection
inspector_idstringRequiredQC inspector user ID (usr_*)
notesstringOptionalQC notes
failure_reasonstringOptionalRequired if result is fail

Example Request

Requestbash
curl -X POST https://api.odento.app/api/v1/labs/orders/lab_9c2d4e7f1a3b6c8d/quality-check \
  -H "X-API-Key-ID: ok_live_abc123def456ghi789jkl012" \
  -H "X-API-Key-Secret: os_abc123def456ghi789jkl012mno345pqr678stu901vwx234yzab567" \
  -H "Content-Type: application/json" \
  -d '{
    "result": "pass",
    "check_type": "final_inspection",
    "inspector_id": "usr_qc456",
    "notes": "Crown meets all specifications. Shade match confirmed against A2 tab."
  }'

Example Response

Response201json
{
  "success": true,
  "data": {
    "id": "qc_abc123def456",
    "order_id": "lab_9c2d4e7f1a3b6c8d",
    "result": "pass",
    "check_type": "final_inspection",
    "inspector_id": "usr_qc456",
    "notes": "Crown meets all specifications. Shade match confirmed against A2 tab.",
    "checked_at": "2025-01-24T11:00:00Z"
  }
}
POST/labs/orders/{id}/ship

Ship a lab order

Marks a lab order as shipped. Requires at least one passing final_inspection QC check. Includes tracking information for the dentist to monitor delivery.

Parameters

ParameterTypeRequiredDescription
idstringRequiredThe lab order ID (lab_*)
carrierstringOptionalShipping carrier (e.g., Blue Dart, DTDC)
tracking_numberstringOptionalTracking number

Example Request

Requestbash
curl -X POST https://api.odento.app/api/v1/labs/orders/lab_9c2d4e7f1a3b6c8d/ship \
  -H "X-API-Key-ID: ok_live_abc123def456ghi789jkl012" \
  -H "X-API-Key-Secret: os_abc123def456ghi789jkl012mno345pqr678stu901vwx234yzab567" \
  -H "Content-Type: application/json" \
  -d '{
    "carrier": "Blue Dart",
    "tracking_number": "BD1234567890"
  }'

Example Response

Response200json
{
  "success": true,
  "data": {
    "id": "lab_9c2d4e7f1a3b6c8d",
    "status": "shipped",
    "shipped_at": "2025-01-25T15:00:00Z",
    "carrier": "Blue Dart",
    "tracking_number": "BD1234567890"
  }
}

Was this page helpful?

Help us improve our documentation