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

# Soft-delete a work order

> Soft-delete a work order while retaining maintenance history, costs, procedure results, and audit evidence. The work order is removed from normal public reads. Repeated requests for the same work order return 204 without changing its original deletion timestamp.



## OpenAPI

````yaml /openapi.yaml delete /work-orders/{id}
openapi: 3.1.0
info:
  title: Canary API
  version: '1.0'
  description: >
    Build integrations around Canary work orders, requests, equipment,
    inventory, meters,

    custom fields, and scannable identifiers.


    ## Authentication


    All API requests require authentication using an API key. Include your API
    key in the `Authorization` header:


    ```

    Authorization: Bearer sk_live_your_api_key_here

    ```


    ## Rate Limits


    - **Live keys**: 1,000 requests per minute

    - **Test keys**: 100 requests per minute


    Both key prefixes access the same organization data. The prefix selects the
    rate-limit bucket.


    Successful authenticated responses include rate limit headers:

    - `X-RateLimit-Limit`: Maximum requests per window

    - `X-RateLimit-Remaining`: Requests remaining in current window

    - `X-RateLimit-Reset`: Unix timestamp when the window resets


    ## Pagination


    Canary-native list endpoints use ID cursors and the standard `data`/`meta`
    envelope.

    MaintainX-compatible request endpoints use their compatibility response
    wrappers and

    encoded offset cursors. Follow each operation's response schema.


    Native list responses include:

    - `data`: Array of items

    - `meta.pagination.cursor`: Cursor for the next page (if `has_more` is true)

    - `meta.pagination.has_more`: Whether more items exist


    Use the cursor value in your next request: `?cursor=<cursor_value>`
servers:
  - url: https://api.oncanary.com/v1
    description: Production
  - url: http://localhost:3000/api/v1
    description: Local Development
security:
  - bearerAuth: []
tags:
  - name: Meters
    description: Meters track equipment usage and readings
  - name: Meter Readings
    description: Record and retrieve meter readings
  - name: Work Orders
    description: Maintenance work orders
  - name: Work Requests
    description: Requests that can be reviewed and converted into work orders
  - name: Work Request Portals
    description: Public request portal configuration
  - name: Assets
    description: Equipment and machinery
  - name: Locations
    description: Physical places where assets, parts, and meters are assigned
  - name: Parts
    description: Spare parts and inventory records
  - name: Identifiers
    description: Scannable identifiers for assets, locations, and parts
  - name: Custom Fields
    description: Typed custom-field definitions shared by maintenance resources
paths:
  /work-orders/{id}:
    delete:
      tags:
        - Work Orders
      summary: Soft-delete a work order
      description: >-
        Soft-delete a work order while retaining maintenance history, costs,
        procedure results, and audit evidence. The work order is removed from
        normal public reads. Repeated requests for the same work order return
        204 without changing its original deletion timestamp.
      operationId: deleteWorkOrder
      parameters:
        - $ref: '#/components/parameters/id'
      responses:
        '204':
          description: Work order deleted
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
components:
  parameters:
    id:
      name: id
      in: path
      required: true
      description: Resource ID
      schema:
        type: string
  responses:
    Unauthorized:
      description: Unauthorized - Invalid or missing API key
      headers:
        X-Request-ID:
          $ref: '#/components/headers/RequestId'
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
    Forbidden:
      description: >-
        Forbidden - `insufficient_scope` when the API key lacks the scope, or
        `module_disabled` when the organization module is disabled
      headers:
        X-Request-ID:
          $ref: '#/components/headers/RequestId'
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
    NotFound:
      description: Resource not found
      headers:
        X-Request-ID:
          $ref: '#/components/headers/RequestId'
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
    RateLimited:
      description: Rate limit exceeded
      headers:
        X-Request-ID:
          $ref: '#/components/headers/RequestId'
        Retry-After:
          description: Seconds until rate limit resets
          schema:
            type: integer
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
  headers:
    RequestId:
      description: Unique request identifier to include with support requests
      schema:
        type: string
        example: req_01JAY8FVDM6CH4R3X9Q2T7K5NP
  schemas:
    ProblemDetails:
      type: object
      description: RFC 7807 Problem Details
      required:
        - type
        - title
        - status
        - detail
        - request_id
        - code
      example:
        type: https://api.oncanary.com/errors/validation_error
        title: Validation Error
        status: 400
        detail: Request validation failed
        request_id: req_01JAY8FVDM6CH4R3X9Q2T7K5NP
        code: validation_error
      properties:
        type:
          type: string
          format: uri
        title:
          type: string
        status:
          type: integer
        detail:
          type: string
        request_id:
          type: string
        code:
          type: string
        validation_errors:
          type: array
          items:
            type: object
            required:
              - field
              - message
            properties:
              field:
                type: string
              message:
                type: string
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: Organization API key with an `sk_live_` or `sk_test_` prefix

````