Light v1 - Expenses API

The v1 - Expenses API from Light — 8 operation(s) for v1 - expenses.

OpenAPI Specification

light-v1-expenses-api-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: Light Authorization v1 - Expenses API
  version: 1.0.0
security:
- apiKeyAuth: []
- bearerAuth: []
tags:
- name: v1 - Expenses
paths:
  /v1/expenses/{expenseId}/cancel:
    post:
      tags:
      - v1 - Expenses
      summary: Cancel expense
      description: Cancels an existing expense
      operationId: cancelExpense
      parameters:
      - name: expenseId
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        default:
          description: default response
          content:
            application/json;charset=UTF-8:
              schema:
                $ref: '#/components/schemas/ExternalExpenseV1Model'
  /v1/expenses/{expenseId}/line-items:
    post:
      tags:
      - v1 - Expenses
      summary: Create line item
      description: Creates a new line item
      operationId: createExpenseLineItem
      parameters:
      - name: expenseId
        in: path
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        content:
          application/json;charset=UTF-8:
            schema:
              $ref: '#/components/schemas/CreateExpenseLineItemRequestV1Model'
      responses:
        default:
          description: default response
          content:
            application/json;charset=UTF-8:
              schema:
                $ref: '#/components/schemas/ExternalExpenseLineItemV1Model'
  /v1/expenses/{expenseId}/line-items/{lineItemId}:
    delete:
      tags:
      - v1 - Expenses
      summary: Delete line item
      description: Deletes an existing line item
      operationId: deleteExpenseLineItem
      parameters:
      - name: expenseId
        in: path
        required: true
        schema:
          type: string
          format: uuid
      - name: lineItemId
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        default:
          description: default response
          content:
            application/json;charset=UTF-8: {}
    patch:
      tags:
      - v1 - Expenses
      summary: Update line item
      description: Updates an existing expense line item
      operationId: updateExpenseLineItem
      parameters:
      - name: expenseId
        in: path
        required: true
        schema:
          type: string
          format: uuid
      - name: lineItemId
        in: path
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        content:
          application/json;charset=UTF-8:
            schema:
              $ref: '#/components/schemas/UpdateExpenseLineItemRequestV1Model'
      responses:
        default:
          description: default response
          content:
            application/json;charset=UTF-8:
              schema:
                $ref: '#/components/schemas/ExternalExpenseLineItemV1Model'
  /v1/expenses/upload-url:
    post:
      tags:
      - v1 - Expenses
      summary: Create upload URL
      description: Creates a pre-signed URL for uploading an expense receipt document
      operationId: generateUploadUrl
      requestBody:
        content:
          application/json;charset=UTF-8:
            schema:
              $ref: '#/components/schemas/ExternalExpenseReceiptUploadUrlRequestV1Model'
      responses:
        default:
          description: default response
          content:
            application/json;charset=UTF-8:
              schema:
                $ref: '#/components/schemas/ExternalExpenseReceiptUploadUrlResponseV1Model'
  /v1/expenses/{expenseId}:
    get:
      tags:
      - v1 - Expenses
      summary: Get expense
      description: Returns an expense by ID including all line items
      operationId: getExpense
      parameters:
      - name: expenseId
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        default:
          description: default response
          content:
            application/json;charset=UTF-8:
              schema:
                $ref: '#/components/schemas/ExternalExpenseV1Model'
    patch:
      tags:
      - v1 - Expenses
      summary: Update expense
      description: Updates an existing expense
      operationId: updateExpense
      parameters:
      - name: expenseId
        in: path
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        content:
          application/json;charset=UTF-8:
            schema:
              $ref: '#/components/schemas/ExternalUpdateExpenseRequestV1Model'
      responses:
        default:
          description: default response
          content:
            application/json;charset=UTF-8:
              schema:
                $ref: '#/components/schemas/ExternalExpenseV1Model'
  /v1/expenses/{expenseId}/document:
    get:
      tags:
      - v1 - Expenses
      summary: Get expense document
      description: Returns the attached receipt document as a PDF download
      operationId: getAttachedDocument_1
      parameters:
      - name: expenseId
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        default:
          description: default response
          content:
            application/pdf: {}
  /v1/expenses:
    get:
      tags:
      - v1 - Expenses
      summary: List expenses
      description: Returns a paginated list of expenses
      operationId: listExpenses
      parameters:
      - name: sort
        in: query
        schema:
          type: string
          description: "Sort string in the format `field:direction`. To provide multiple sort fields, separate them with commas.\n\nAvailable directions: `asc`, `desc`. \n\nAvailable fields: `userId`, `status`, `performedDate`, `createdAt`."
          example: amount:desc,createdAt:asc
      - name: filter
        in: query
        schema:
          type: string
          description: "Filter string in the format `field:operator:value`. To provide multiple filters, separate them with commas.\n\nAvailable operators: `eq`, `ne`, `in`, `not_in`, `gt`, `gte`, `lt`, `lte`.\n - For `in` and `not_in` operators, provide multiple values separated by the pipe character (`|`). \n\nAvailable fields: `id`, `userId`, `status`, `performedDate`, `createdAt`, `updatedAt`."
          example: state:in:IN_DRAFT|SCHEDULED|PAID,amount:gte:500,vendorId:ne:null
      - name: limit
        in: query
        description: Maximum number of items to return. Default is 50, maximum is 200.
        schema:
          maximum: 200
          type: integer
          format: int32
      - name: offset
        in: query
        description: Number of items to skip before starting to collect the result set. Deprecated, use 'cursor' instead.
        deprecated: true
        schema:
          type: integer
          format: int64
      - name: cursor
        in: query
        description: 'The cursor position to start returning results from.

          To opt-in into cursor-based pagination, provide `0` for the initial request.

          For subsequent requests, use `nextCursor` and `prevCursor` from the previous response to navigate.

          Cursor values are opaque and should not be constructed manually.'
        schema:
          type: string
      responses:
        default:
          description: default response
          content:
            application/json;charset=UTF-8:
              schema:
                $ref: '#/components/schemas/GetExternalExpensesResponseV1Model'
  /v1/expenses/submit:
    post:
      tags:
      - v1 - Expenses
      summary: Submit reimbursement
      description: Submits all pending expenses from the current user for administrator review and approval
      operationId: submitReimbursement
      responses:
        default:
          description: default response
          content:
            application/json;charset=UTF-8: {}
components:
  schemas:
    UpdateExpenseLineItemRequestV1Model:
      type: object
      properties:
        originalAmount:
          type: integer
          format: int64
          nullable: true
        billingAmount:
          type: integer
          format: int64
          nullable: true
        accountId:
          type: string
          format: uuid
          nullable: true
        costCenterId:
          type: string
          format: uuid
          nullable: true
        description:
          type: string
          nullable: true
        reimbursementCategoryId:
          type: string
          format: uuid
          nullable: true
    GetExternalExpensesResponseV1Model:
      type: object
      properties:
        billingAmountTotal:
          type: integer
          format: int64
        records:
          type: array
          description: List of records for the current page
          items:
            $ref: '#/components/schemas/ExternalExpenseV1Model'
        hasMore:
          type: boolean
          description: Boolean flag indicating if there are more records available
        total:
          type: integer
          description: Total number of records (only for offset pagination). This field is not guaranteed to be returned and only available for offset pagination, please do not rely on it and migrate to cursor pagination.
          format: int64
          nullable: true
          deprecated: true
        nextCursor:
          type: string
          description: Cursor for fetching the next page (only for cursor pagination)
          nullable: true
        prevCursor:
          type: string
          description: Cursor for fetching the previous page (only for cursor pagination)
          nullable: true
    ExternalUpdateExpenseRequestV1Model:
      type: object
      properties:
        originalCurrency:
          type: string
          nullable: true
          example: USD
        performedDate:
          type: string
          format: date
          nullable: true
    ExternalExpenseReceiptUploadUrlRequestV1Model:
      type: object
      properties:
        filename:
          type: string
        contentType:
          type: string
    ExternalExpenseV1Model:
      type: object
      properties:
        id:
          type: string
          format: uuid
        receiptDocumentKey:
          type: string
        originalCurrency:
          type: string
          example: USD
        billingCurrency:
          type: string
          example: USD
        status:
          type: string
          description: ⚠️ This enum is not exhaustive; new values may be added in the future.
          enum:
          - CREATED
          - IN_DRAFT
          - SUBMITTED_FOR_REVIEW
          - CANCELLED
        userId:
          type: string
          format: uuid
        companyId:
          type: string
          format: uuid
        performedDate:
          type: string
          format: date
        lineItems:
          type: array
          items:
            $ref: '#/components/schemas/ExternalExpenseLineItemV1Model'
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    CreateExpenseLineItemRequestV1Model:
      type: object
      properties:
        originalAmount:
          type: integer
          format: int64
          nullable: true
        billingAmount:
          type: integer
          format: int64
          nullable: true
        accountId:
          type: string
          format: uuid
          nullable: true
        costCenterId:
          type: string
          format: uuid
          nullable: true
        description:
          type: string
          nullable: true
        reimbursementCategoryId:
          type: string
          format: uuid
          nullable: true
    ExternalExpenseLineItemV1Model:
      type: object
      properties:
        id:
          type: string
          format: uuid
        expenseId:
          type: string
          format: uuid
        originalAmount:
          type: integer
          format: int64
        billingAmount:
          type: integer
          format: int64
        accountId:
          type: string
          format: uuid
        costCenterId:
          type: string
          format: uuid
        description:
          type: string
        reimbursementCategoryId:
          type: string
          format: uuid
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    ExternalExpenseReceiptUploadUrlResponseV1Model:
      type: object
      properties:
        uploadUrl:
          type: string
          format: url
        key:
          type: string
        metadata:
          type: object
          additionalProperties:
            type: string
          nullable: true
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      description: Basic authentication header of the form **Basic** **<api_key>**, where **<api_key>** is your api key.
      name: Authorization
      in: header
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT