> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lanten.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Get a work order



## OpenAPI

````yaml /openapi.yaml get /work-orders/{workOrderId}
openapi: 3.1.0
info:
  title: Lanten Open API
  version: 1.0.0
  description: >
    The Lanten Open API lets you programmatically manage tenants, units,

    landlords, contractors, and work orders for your property portfolio.


    ## Authentication


    Every request must include a valid API key, created from **Settings →
    Developers**

    inside the Lanten dashboard.


    Pass the key in the as a Bearer token:


    ```

    Authorization: Bearer lk_<your-api-key>

    ```


    ## Rate Limits


    Limits are applied **per API key** using a sliding window:


    | Scope | Limit |

    |---|---|

    | All requests | 200 / minute |

    | Write operations (POST, PUT, DELETE) | 30 / minute |


    Every response includes rate limit headers:


    | Header | Description |

    |---|---|

    | `X-RateLimit-Limit` | Maximum requests allowed in the window |

    | `X-RateLimit-Remaining` | Requests remaining in the current window |

    | `X-RateLimit-Reset` | Unix timestamp (seconds) when the window resets |


    When you exceed the limit the API responds with **429 Too Many Requests**
    and a

    `Retry-After` header indicating how many seconds to wait before retrying.
servers:
  - url: https://app.lanten.co/api/open/v1
    description: Production
security:
  - ApiKeyAuth: []
tags:
  - name: Tenants
    description: Manage tenants
  - name: Units
    description: Manage property units
  - name: Landlords
    description: Manage landlords (property owners)
  - name: Contractors
    description: Manage contractors (tradespeople)
  - name: Work Orders
    description: Manage maintenance work orders (issues)
paths:
  /work-orders/{workOrderId}:
    parameters:
      - name: workOrderId
        in: path
        required: true
        schema:
          type: string
          format: uuid
    get:
      tags:
        - Work Orders
      summary: Get a work order
      operationId: getWorkOrder
      responses:
        '200':
          description: Work order
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/WorkOrder'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          $ref: '#/components/responses/TooManyRequests'
components:
  schemas:
    WorkOrder:
      type: object
      properties:
        id:
          type: string
          format: uuid
        teamId:
          type: string
          format: uuid
        code:
          type: string
          example: WO-101
        title:
          type: string
        description:
          type: string
        status:
          $ref: '#/components/schemas/WorkOrderStatus'
        priority:
          $ref: '#/components/schemas/WorkOrderPriority'
        availability:
          type: string
        selfResolved:
          type: boolean
        resolvedAt:
          type: string
          format: date-time
          nullable: true
        intakeChannel:
          type: string
          enum:
            - email
            - whatsapp
            - web_form
            - dashboard
        tenant:
          type: object
          nullable: true
          properties:
            id:
              type: string
              format: uuid
            firstName:
              type: string
            lastName:
              type: string
            email:
              type: string
              format: email
              nullable: true
        unit:
          type: object
          nullable: true
          properties:
            id:
              type: string
              format: uuid
            fullAddress:
              type: string
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    Error:
      type: object
      properties:
        error:
          type: string
    WorkOrderStatus:
      type: string
      enum:
        - reported
        - in_progress
        - completed
        - cancelled
    WorkOrderPriority:
      type: string
      enum:
        - '0'
        - '1'
        - '2'
        - '3'
      description: |
        Priority level: 0 = Emergency, 1 = High, 2 = Medium (default), 3 = Low
  responses:
    TooManyRequests:
      description: Rate limit exceeded.
      headers:
        Retry-After:
          description: Seconds to wait before retrying.
          schema:
            type: integer
        X-RateLimit-Reset:
          $ref: '#/components/headers/X-RateLimit-Reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  headers:
    X-RateLimit-Reset:
      description: Unix timestamp (seconds) at which the current window resets.
      schema:
        type: integer
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: Authorization

````